def train(): record = 0 agent = Agent() game = Game(True) counter: int = 0 game.set_game_time(1) while True: state_old = game.get_state() move = agent.get_action(state_old) if move == [1, 0, 0]: final_move = TriDirections.STRAIGHT elif move == [0, 1, 0]: final_move = TriDirections.RIGHT else: final_move = TriDirections.LEFT game.set_direction(final_move) reward, done, score = game.game_logic() if reward == 0: counter += 1 else: counter = 0 state_new = game.get_state() if counter > 100: done = True reward = -10 if counter > 100: game.set_game_time(5) agent.train_short_memory(state_old, move, reward, state_new, done) agent.remember(state_old, move, reward, state_new, done) if done: counter = 0 game.reset() agent.n_games += 1 agent.train_long_memory() if score > record: record = score agent.model.save() print('Game', agent.n_games, 'Score', score, 'Record:', record)
from main import Game, select_action import sys states = {} with open(sys.argv[1], "r") as f: line = f.readline() while line: data = line[:-1].split("#") states[eval(data[0])] = eval(data[1]) line = f.readline() game = Game() while 1: state = game.get_state() if not state in states.keys(): states[state] = {} for i in game.get_actions(): states[state][i] = 0.0 action = max(states[state], key=states[state].get) # print(states[state]) game.do_action(action, 1) next_state = game.get_state() if game.is_end() != -1: game.print() print(f"game end {game.is_end()}") break actions = game.get_actions()