示例#1
0
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)
示例#2
0
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()