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)
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)
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]))
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.
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)
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)
def reset(self, genome, config): self.net = StateMachineNetwork.create(genome, config.genome_config) self.current_state = 0