Пример #1
0
def learn_cartpole(config_path):
    env = gym.make('CartPole-v0')
    env._max_episode_steps = max_evaluation_steps

    # Load configuration.
    config = Config(StateMachineGenome, DefaultReproduction,
                         DefaultSpeciesSet, DefaultStagnation,
                         config_path)

    # Create the population, which is the top-level object for a NEAT run.
    p = Population(config)

    # Add a stdout reporter to show progress in the terminal.
    p.add_reporter(StdOutReporter(True))
    stats = StatisticsReporter()
    p.add_reporter(stats)

    # Run for up for the given number of generations
    f = lambda genomes, config: eval_genomes(genomes, config, env=env)
    winner = p.run(f, num_generations)

    input("Press Enter to continue...")

    net = StateMachineNetwork.create(winner, config)
    eval_network(net, env, True)
Пример #2
0
    def test_one_state(self):
        genome = StateMachineGenome(1)
        config = init_config()
        genome.configure_new(config)
        smn = StateMachineNetwork.create(genome, config)

        self.assertEqual(len(smn.states), 1)
        self.assertEqual(len(smn.transitions), 1)
Пример #3
0
    def test_create_transition(self):
        genome = StateMachineGenome(1)
        config = init_config()
        genome.configure_new(config)
        genome.mutate_add_state(config)
        genome.mutate_add_transition(config)
        smn = StateMachineNetwork.create(genome, config)

        self.assertEqual(len(smn.states), 2)
        self.assertEqual(len(smn.transitions), 2)
        self.assertEqual(2, len(smn.transitions[1]) + len(smn.transitions[0]))
Пример #4
0
if __name__ == '__main__':

    # First load the genome
    genome = pickle.load(open(genome_path, "rb"))

    local_dir = os.path.dirname(__file__)
    config_path = os.path.join(local_dir, config_name)
    config = Config(StateMachineGenome, DefaultReproduction, DefaultSpeciesSet,
                    DefaultStagnation, config_path)

    # Create the environment
    env = gym.make(env_name)

    # Run the genome
    net = StateMachineNetwork.create(genome, config.genome_config)
    observation = env.reset()
    fitnesses = []

    states = [0 for _ in range(len(observation))]
    for i in range(num_steps):
        output = [
            net.activate(states[i], observation[i])
            for i in range(len(observation))
        ]
        states = [state for state, _ in output]
        actions = [action for _, action in output]
        observation, _, _, _ = env.step(actions)
        fitnesses.append(env.get_fitness())

    # Show plot of fitness over time.
Пример #5
0
    def test_empty_sm_creation(self):
        genome = StateMachineGenome(1)
        smn = StateMachineNetwork.create(genome, init_config())

        self.assertEqual(len(smn.states), 0)
        self.assertEqual(len(smn.transitions), 0)
Пример #6
0
def eval_genomes(genomes, config, env):
    for genome_id, genome in genomes:
        genome.fitness = 0
        net = StateMachineNetwork.create(genome, config)
        genome.fitness = eval_network(net, env)
Пример #7
0
 def reset(self, genome, config):
     self.net = StateMachineNetwork.create(genome, config.genome_config)
     self.current_state = 0