From 027385d0ff9f1223cb98410a29937e38d82de397 Mon Sep 17 00:00:00 2001 From: Gökçen Eraslan Date: Thu, 7 Jan 2016 18:32:14 +0100 Subject: bindings: Add another python test file to demonstrate selfplay. --- bindings/python/test.py | 80 ---------------------------------- bindings/python/test1_position.py | 80 ++++++++++++++++++++++++++++++++++ bindings/python/test2_selfplay.py | 91 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 171 insertions(+), 80 deletions(-) delete mode 100644 bindings/python/test.py create mode 100644 bindings/python/test1_position.py create mode 100644 bindings/python/test2_selfplay.py (limited to 'bindings') diff --git a/bindings/python/test.py b/bindings/python/test.py deleted file mode 100644 index 3a95808..0000000 --- a/bindings/python/test.py +++ /dev/null @@ -1,80 +0,0 @@ -# coding: utf-8 - -import quackle - -def startUp(lexicon='twl06', - alphabet='english', - datadir='../../data'): - - # Set up the data manager - dm = quackle.DataManager() - dm.setComputerPlayers(quackle.ComputerPlayerCollection.fullCollection()) - dm.setBackupLexicon(lexicon) - dm.setAppDataDirectory(datadir) - - # Set up the alphabet - abc = quackle.AlphabetParameters.findAlphabetFile(alphabet) - abc2 = quackle.Util.stdStringToQString(abc) #convert to qstring - fa = quackle.FlexibleAlphabetParameters() - fa.thisown = False - - assert fa.load(abc2) - dm.setAlphabetParameters(fa) - - # Set up the board - board = quackle.BoardParameters() - board.thisown = False - dm.setBoardParameters(board) - - # Find the lexicon - dawg = quackle.LexiconParameters.findDictionaryFile(lexicon + '.dawg') - gaddag = quackle.LexiconParameters.findDictionaryFile(lexicon + '.gaddag') - dm.lexiconParameters().loadDawg(dawg) - dm.lexiconParameters().loadGaddag(gaddag) - - dm.strategyParameters().initialize(lexicon) - return dm - - -def getComputerPlayer(dm, name='Speedy Player'): - player, found = dm.computerPlayers().playerForName(name) - assert found - player = player.computerPlayer() - return player - - -dm = startUp() - -# Create a computer player -player1 = getComputerPlayer(dm) -print player1.name() - -# Create the Game file (.gcg) reader -gamereader = quackle.GCGIO() -gamePath = quackle.Util.stdStringToQString('../../test/positions/short_game_with_bad_moves.gcg') -game = gamereader.read(gamePath, quackle.Logania.MaintainBoardPreparation) - -# Get the current position -position = game.currentPosition() - -player1.setPosition(position) - -racks = quackle.ProbableRackList() -unseenbag = position.unseenBag() -if unseenbag.size() <= dm.parameters().rackSize() + 3: - enum = quackle.Enumerator(unseenbag) - enum.enumerate(racks) - for rack in racks: - print rack - -movesToShow = 10 - -print "Board state: \n%s" % position.board().toString() -print "Move made: %s" % position.moveMade().toString() -print "Current player: %s" % position.currentPlayer().storeInformationToString() -print "Turn number: %i" % position.turnNumber() - -movelist = player1.moves(10) - -# Show 10 moves suggested by computer player -for move in movelist: print move.toString() diff --git a/bindings/python/test1_position.py b/bindings/python/test1_position.py new file mode 100644 index 0000000..3a95808 --- /dev/null +++ b/bindings/python/test1_position.py @@ -0,0 +1,80 @@ +# coding: utf-8 + +import quackle + +def startUp(lexicon='twl06', + alphabet='english', + datadir='../../data'): + + # Set up the data manager + dm = quackle.DataManager() + dm.setComputerPlayers(quackle.ComputerPlayerCollection.fullCollection()) + dm.setBackupLexicon(lexicon) + dm.setAppDataDirectory(datadir) + + # Set up the alphabet + abc = quackle.AlphabetParameters.findAlphabetFile(alphabet) + abc2 = quackle.Util.stdStringToQString(abc) #convert to qstring + fa = quackle.FlexibleAlphabetParameters() + fa.thisown = False + + assert fa.load(abc2) + dm.setAlphabetParameters(fa) + + # Set up the board + board = quackle.BoardParameters() + board.thisown = False + dm.setBoardParameters(board) + + # Find the lexicon + dawg = quackle.LexiconParameters.findDictionaryFile(lexicon + '.dawg') + gaddag = quackle.LexiconParameters.findDictionaryFile(lexicon + '.gaddag') + dm.lexiconParameters().loadDawg(dawg) + dm.lexiconParameters().loadGaddag(gaddag) + + dm.strategyParameters().initialize(lexicon) + return dm + + +def getComputerPlayer(dm, name='Speedy Player'): + player, found = dm.computerPlayers().playerForName(name) + assert found + player = player.computerPlayer() + return player + + +dm = startUp() + +# Create a computer player +player1 = getComputerPlayer(dm) +print player1.name() + +# Create the Game file (.gcg) reader +gamereader = quackle.GCGIO() +gamePath = quackle.Util.stdStringToQString('../../test/positions/short_game_with_bad_moves.gcg') +game = gamereader.read(gamePath, quackle.Logania.MaintainBoardPreparation) + +# Get the current position +position = game.currentPosition() + +player1.setPosition(position) + +racks = quackle.ProbableRackList() +unseenbag = position.unseenBag() +if unseenbag.size() <= dm.parameters().rackSize() + 3: + enum = quackle.Enumerator(unseenbag) + enum.enumerate(racks) + for rack in racks: + print rack + +movesToShow = 10 + +print "Board state: \n%s" % position.board().toString() +print "Move made: %s" % position.moveMade().toString() +print "Current player: %s" % position.currentPlayer().storeInformationToString() +print "Turn number: %i" % position.turnNumber() + +movelist = player1.moves(10) + +# Show 10 moves suggested by computer player +for move in movelist: print move.toString() diff --git a/bindings/python/test2_selfplay.py b/bindings/python/test2_selfplay.py new file mode 100644 index 0000000..4463c28 --- /dev/null +++ b/bindings/python/test2_selfplay.py @@ -0,0 +1,91 @@ +# coding: utf-8 + +import time + +import quackle + +def startUp(lexicon='twl06', + alphabet='english', + datadir='../../data'): + + # Set up the data manager + dm = quackle.DataManager() + dm.setComputerPlayers(quackle.ComputerPlayerCollection.fullCollection()) + dm.setBackupLexicon(lexicon) + dm.setAppDataDirectory(datadir) + + # Set up the alphabet + abc = quackle.AlphabetParameters.findAlphabetFile(alphabet) + abc2 = quackle.Util.stdStringToQString(abc) #convert to qstring + fa = quackle.FlexibleAlphabetParameters() + fa.thisown = False + + assert fa.load(abc2) + dm.setAlphabetParameters(fa) + + # Set up the board + board = quackle.BoardParameters() + board.thisown = False + dm.setBoardParameters(board) + + # Find the lexicon + dawg = quackle.LexiconParameters.findDictionaryFile(lexicon + '.dawg') + gaddag = quackle.LexiconParameters.findDictionaryFile(lexicon + '.gaddag') + dm.lexiconParameters().loadDawg(dawg) + dm.lexiconParameters().loadGaddag(gaddag) + + dm.strategyParameters().initialize(lexicon) + return dm + + + return player + + +def getComputerPlayer(dm, name='Speedy Player'): + player, found = dm.computerPlayers().playerForName(name) + assert found + player = player.computerPlayer() + player.thisown = False + return player + + +dm = startUp() + +p1 = getComputerPlayer(dm) +p2 = getComputerPlayer(dm) + +# Create computer players +player1 = quackle.Player('Compy1', quackle.Player.ComputerPlayerType, 0) +player1.setComputerPlayer(p1) +print player1.name() + +player2 = quackle.Player('Compy2', quackle.Player.ComputerPlayerType, 1) +player2.setComputerPlayer(p2) +print player2.name() + +dm.seedRandomNumbers(42) + +game = quackle.Game() +players = quackle.PlayerList() + +players.append(player1) +players.append(player2) + +game.setPlayers(players) +game.associateKnownComputerPlayers() +game.addPosition() + +for i in range(50): + if game.currentPosition().gameOver(): + print "GAME OVER" + break + + player = game.currentPosition().currentPlayer() + player.thisown =False + move = game.haveComputerPlay() + #print "Player: " + player.name() + print "Rack : " + player.rack().toString() + print 'Move: ' + move.toString() + print 'Board: \n' + game.currentPosition().board().toString() + + time.sleep(1) -- cgit v1.2.3