backgammon/main.py

85 lines
2.8 KiB
Python

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 eval_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)