Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdAndrea Groen Laatst gewijzigd meer dan 10 jaar geleden
1
Java Game Toolkit Jeroen Donkers
2
Doelstelling Class Game –Chess –Kalah –FourRow –Loa Class Player –Minimax –AlphaBeta –MTD(f) –OM Search –PrOM Search
3
Doelstelling Het ontwerpen en testen van zoekalgoritmen Stricte scheiding van spelafhankelijke en spelonafhankelijke aspecten van zoekalgoritmen Snelheid is geen doelstelling
4
Game (1) Interface Game –Zet-generator –Zet-executie (levert een positie op) doMove / undoMove –Evaluator –Opening positie –(History-Heuristic tabel) Class AbstractGame
5
Game (2) Per spel definieer: –Zet-representatie (1 short per zet) –Zet-generator (Move-enumerator) –Position (bord-representatie) Inner class Startpositie –Evaluator Inner class Meerdere evaluatoren mogelijk –Legale zetten
6
Game (3) Interface Position –isEnded: terminale positie? –getHashvalue: levert een double op –clonePosition: deep copy Interface Evaluator –Short Evaluate(Node n, int depth) Class Node: knoop in zoekboom
7
Game (4) Zetgenerator produceert een instantie van de interface MoveEnumerator –Short getMove() – eerste zet –Short nextMove() – volgende zet –Player.NOMOVE == geen zet meer Gebruik bijvoorbeeld: –Class MoveSet (gebaseerd op Vector)
8
Class Node Representeert een knoop in de zoekboom –getType(): MIN, MAX, NAT, UNKNOWN –getPosition(): spelpositie in die knoop –isTerminal(): terminale knoop? –flipType(): MAX->MIN, MIN->MAX –nextTurn(): is het type van de knoop verdanderd?
9
Player De abstracte class Player heeft veel voorzieningen: –Log-voorziening –Timer –Teller voor het aantal evaluaties –Pointer naar spel: getGame() Per speler verschilt de routine: –SearchResult NextMove(Position pos);
10
Transpositietabel Interface TTable – int putEntry(long hashvalue, short move, short score, byte flag, byte ply) Class SimpleTT - spelonafhankelijk –Geef het aantal bits voor de grootte van de key en de tabel, de rest van de hashcode wordt voor collision-detectie gebruikt. –Geheugengebruik: 6 short (12 bytes) per entry –Vervangingsschema: “replace”
11
Koppelen Om een spel te spelen heb je nodig: –FourRow k = new FourRow(); –AlphaBetaPlayer p = new AlphaBetaPlayer(k,depth); Dan de opening: –Position m = k.getStartPosition(); Vervolgens het spelen zelf: –SearchResult r = p.nextMove(m); –m = k.setMove(m,r.move);
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.