aboutsummaryrefslogtreecommitdiffstats
path: root/python/agent_MCTS.py
diff options
context:
space:
mode:
authorMatt Strapp <strap012@umn.edu>2021-04-26 14:44:57 -0500
committerMatt Strapp <strap012@umn.edu>2021-04-26 15:03:24 -0500
commit8774432f5b7e87fc9647c97022d38673f66a8b2f (patch)
tree6b93db7fc54391d79a60d3ac9ed2662e1a2b5b3c /python/agent_MCTS.py
parentRebase newer branch (diff)
downloadcsci4511w-8774432f5b7e87fc9647c97022d38673f66a8b2f.tar
csci4511w-8774432f5b7e87fc9647c97022d38673f66a8b2f.tar.gz
csci4511w-8774432f5b7e87fc9647c97022d38673f66a8b2f.tar.bz2
csci4511w-8774432f5b7e87fc9647c97022d38673f66a8b2f.tar.lz
csci4511w-8774432f5b7e87fc9647c97022d38673f66a8b2f.tar.xz
csci4511w-8774432f5b7e87fc9647c97022d38673f66a8b2f.tar.zst
csci4511w-8774432f5b7e87fc9647c97022d38673f66a8b2f.zip
Add debug configs,
Diffstat (limited to 'python/agent_MCTS.py')
-rw-r--r--python/agent_MCTS.py57
1 files changed, 57 insertions, 0 deletions
diff --git a/python/agent_MCTS.py b/python/agent_MCTS.py
new file mode 100644
index 0000000..b0072cf
--- /dev/null
+++ b/python/agent_MCTS.py
@@ -0,0 +1,57 @@
+import dotsandboxes.dotsandboxesagent as dba
+
+import sys
+import argparse
+import logging
+from GameState import GameState, DotsAndBoxesState
+from MCTS import MCTSNode, MCTSGameController
+import alphaBeta
+
+
+logger = logging.getLogger(__name__)
+games = {}
+agentclass = dba
+
+
+class Agent(dba.DotsAndBoxesAgent):
+ def __init__(self, player, nb_rows, nb_cols, timelimit):
+ super(Agent, self).__init__(player, nb_rows, nb_cols, timelimit)
+ self.GameStateClass = DotsAndBoxesState
+ self.game_state = self.GameStateClass(nb_rows, nb_cols, player)
+ self.controller = MCTSGameController()
+
+ def register_action(self, row, column, orientation, player):
+ super(Agent, self).register_action(row, column, orientation, player)
+ # adjust agent specific board representation
+ move = (row, column, orientation)
+ self.game_state.play_move(move)
+
+ def next_action(self):
+ r, c, o = self.controller.get_next_move(self.game_state, time_allowed=self.timelimit)
+ return r, c, o
+
+ def end_game(self):
+ super(Agent, self).end_game()
+
+
+# Adapted from provided code
+def main(argv=None):
+ global agentclass
+ parser = argparse.ArgumentParser(description='Start agent to play Dots and Boxes')
+ parser.add_argument('--verbose', '-v', action='count', default=0, help='Verbose output')
+ parser.add_argument('--quiet', '-q', action='count', default=0, help='Quiet output')
+ parser.add_argument('port', metavar='PORT', type=int, help='Port to use for server')
+ args = parser.parse_args(argv)
+ print(args)
+
+ logger.setLevel(max(logging.INFO - 10 * (args.verbose - args.quiet), logging.DEBUG))
+ logger.addHandler(logging.StreamHandler(sys.stdout))
+
+ agentclass = Agent
+ dba.agentclass = Agent
+ dba.start_server(args.port)
+
+
+if __name__ == "__main__":
+ sys.exit(main())
+