import argparse import sys def print_train_outcome(outcome, init_ep = 0): format_vars = { 'init_ep': init_ep, 'count': len(train_outcome), 'sum': sum(train_outcome), 'mean': sum(train_outcome) / len(train_outcome)} print("train;{init_ep};{count};{sum};{mean}".format(**format_vars)) def print_eval_outcomes(outcomes, init_ep = 0): for outcome in outcomes: scores = outcome[1] format_vars = { 'init_ep': init_ep, 'method': outcome[0], 'count': len(scores), 'sum': sum(scores), 'mean': sum(scores) / len(scores) } print("eval;{method};{init_ep};{count};{sum};{mean}".format(**format_vars)) parser = argparse.ArgumentParser(description="Backgammon games") parser.add_argument('--episodes', action='store', dest='episode_count', type=int, default=1000, help='number of episodes to train') parser.add_argument('--model-path', action='store', dest='model_path', default='./model', help='path to Tensorflow model') parser.add_argument('--eval-methods', action='store', default=['random'], nargs='*', help='specifies evaluation methods') parser.add_argument('--eval', action='store_true', help='whether to evaluate the neural network with a random choice bot') parser.add_argument('--train', action='store_true', help='whether to train the neural network') parser.add_argument('--play', action='store_true', help='whether to play with the neural network') args = parser.parse_args() config = { 'model_path': args.model_path, 'episode_count': args.episode_count, 'eval_methods': args.eval_methods, 'train': args.train, 'play': args.play, 'eval': args.eval } #print("-"*30) #print(type(args.eval_methods)) #print(args.eval_methods) #print("-"*30) import game g = game.Game(config = config) g.set_up_bots() episode_count = args.episode_count if args.train: eps = 0 while True: train_outcome = g.train_model(episodes = episode_count, init_ep = eps) print_train_outcome(train_outcome, init_ep = eps) if args.eval: eval_outcomes = g.eval(init_ep = eps) print_eval_outcomes(eval_outcomes, init_ep = eps) eps += episode_count sys.stdout.flush() elif args.eval: outcomes = g.eval() print_eval_outcomes(outcomes, init_ep = 0) #elif args.play: # g.play(episodes = episode_count) #outcomes = g.play(2000) #print(outcomes) #print(sum(outcomes)) #count = g.play() # highest = max(highest,count) # except KeyboardInterrupt: # break #print("\nHighest amount of turns is:",highest)