diff options
Diffstat (limited to '')
| -rw-r--r-- | python/MCTS.py | 9 | ||||
| -rw-r--r-- | python/agent.py | 55 | ||||
| -rw-r--r-- | python/dotsandboxes/dotsandboxesagent.py | 5 | ||||
| -rw-r--r-- | python/dotsandboxes/static/dotsandboxes.html | 12 | ||||
| -rwxr-xr-x | python/start.sh | 7 | 
5 files changed, 88 insertions, 0 deletions
diff --git a/python/MCTS.py b/python/MCTS.py index 6c71ba9..ec6e6c1 100644 --- a/python/MCTS.py +++ b/python/MCTS.py @@ -1,6 +1,10 @@  import math  from copy import deepcopy +<<<<<<< HEAD  from time import perf_counter +======= +from time import clock +>>>>>>> f6e623d... change base???  from random import choice  from GameState import GameState @@ -135,8 +139,13 @@ class MCTSGameController(GameController):          self.root_node = MCTSNode(state)          iterations = 0 +<<<<<<< HEAD          start_time = perf_counter()          while perf_counter() < start_time + time_allowed: +======= +        start_time = clock() +        while clock() < start_time + time_allowed: +>>>>>>> f6e623d... change base???              node = self.select()              if node.pending_moves != set(): diff --git a/python/agent.py b/python/agent.py new file mode 100644 index 0000000..49bc1cc --- /dev/null +++ b/python/agent.py @@ -0,0 +1,55 @@ +import dotsandboxes.dotsandboxesagent as dba + +import sys +import argparse +import logging +from GameState import GameState, DotsAndBoxesState +from MCTS import MCTSNode, MCTSGameController + + +logger = logging.getLogger(__name__) +games = {} +agentclass = None + + +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) + +    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()) + diff --git a/python/dotsandboxes/dotsandboxesagent.py b/python/dotsandboxes/dotsandboxesagent.py index 9fe6cb8..e7407bf 100644 --- a/python/dotsandboxes/dotsandboxesagent.py +++ b/python/dotsandboxes/dotsandboxesagent.py @@ -15,6 +15,11 @@ import asyncio  import websockets  import json  from collections import defaultdict +<<<<<<< HEAD +======= +import random + +>>>>>>> f6e623d... change base???  logger = logging.getLogger(__name__)  games = {} diff --git a/python/dotsandboxes/static/dotsandboxes.html b/python/dotsandboxes/static/dotsandboxes.html index 4e97508..d250c76 100644 --- a/python/dotsandboxes/static/dotsandboxes.html +++ b/python/dotsandboxes/static/dotsandboxes.html @@ -2,6 +2,12 @@  <html>  <html lang="en">  <meta charset="utf-8"> +<<<<<<< HEAD +======= +<meta name="author" content="Wannes Meert"> +<meta name="description" content="Dots-and-Boxes game. Part of the Machine Learning: Project course at KU Leuven (Hendrik Blockeel, Wannes Meert)."> +<meta name="keywords" content="artificial intelligence,AI,machine learning,dots and boxes,KU Leuven"> +>>>>>>> f6e623d... change base???  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">  <title>Dots and Boxes</title>  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> @@ -42,6 +48,12 @@  				</div>  			</div>  		</div> +<<<<<<< HEAD +======= +		<div class="footer"> +		<small>© <a href="https://dtai.cs.kuleuven.be">DTAI Research Group</a>, KU Leuven — <a href="https://github.com/wannesm/dotsandboxes">Source</a></small> +		</div> +>>>>>>> f6e623d... change base???  	</div>  	<script src="https://d3js.org/d3.v4.min.js"></script>  	<script src="dotsandboxes.js"></script> diff --git a/python/start.sh b/python/start.sh index 455944d..26a4b70 100755 --- a/python/start.sh +++ b/python/start.sh @@ -1,3 +1,4 @@ +<<<<<<< HEAD  #/bin/bash  (cd dotsandboxes; python3 dotsandboxesserver.py 8080) &  python3 agent.py 10001 & @@ -5,6 +6,12 @@ python3 agent.py 10002 &  echo "Press enter to close all programs"  read TRASH; +======= +(cd dotsandboxes; python3 dotsandboxesserver.py 8080) & +python3 agent.py 10001 & +python3 agent.py 10002 & +read -p "Press enter to close all programs." +>>>>>>> f6e623d... change base???  trap "exit" INT TERM  trap "kill 0" EXIT  | 
