Ejemplo n.º 1
0
    def test_execution_no_transitions(self):
        sm = StateMachineNetwork([State(1)], [])
        sm.states[1].set_biases([1, 2])
        sm.states[1].set_weights([[1, 2], [3, 4]])

        next_state, output = sm.activate(1, [5, 10])
        self.assertEqual(next_state, 1)
        self.assertEqual(output, [26, 57])
Ejemplo n.º 2
0
    def test_execution_true_transition(self):
        sm = StateMachineNetwork([State(1), State(2)], [Transition(1, 2)])
        sm.states[1].set_biases([1, 2])
        sm.states[1].set_weights([[1, 2], [3, 4]])
        sm.transitions[1][0].add_condition(Condition(0, operator.eq, 5))

        next_state, output = sm.activate(1, [5, 10])
        self.assertEqual(next_state, 2)
        self.assertEqual(output, [26, 57])
Ejemplo n.º 3
0
    def test_execution_multiple_transitions_all_false(self):
        sm = StateMachineNetwork(
            [State(1), State(2), State(3)],
            [Transition(1, 2), Transition(1, 2)])
        sm.states[1].set_biases([1, 2])
        sm.states[1].set_weights([[1, 2], [3, 4]])
        sm.transitions[1][0].add_condition(Condition(0, operator.eq, 4))
        sm.transitions[1][1].add_condition(Condition(1, operator.gt, 10))

        next_state, output = sm.activate(1, [5, 10])
        self.assertEqual(1, next_state)
        self.assertEqual(output, [26, 57])
Ejemplo n.º 4
0
 def test_transition_multiple(self):
     sm = StateMachineNetwork(
         [State(1), State(2)],
         [Transition(1, 2), Transition(2, 1)])
     self.assertEqual(len(sm.transitions), 2)
     self.assertEqual(len(sm.transitions[1]), 1)
     self.assertEqual(len(sm.transitions[2]), 1)
Ejemplo n.º 5
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)
Ejemplo n.º 6
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)
Ejemplo n.º 7
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]))
Ejemplo n.º 8
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.
Ejemplo n.º 9
0
 def test_init(self):
     sm = StateMachineNetwork([], [])
     self.assertEqual(len(sm.transitions), 0)
     self.assertEqual(len(sm.states), 0)
Ejemplo n.º 10
0
 def test_transition_multiple_begin_state(self):
     sm = StateMachineNetwork(
         [State(1), State(2), State(3)],
         [Transition(1, 2), Transition(1, 3)])
     self.assertEqual(len(sm.transitions), 3)
     self.assertEqual(len(sm.transitions[1]), 2)
Ejemplo n.º 11
0
    def test_add_state_twice(self):
        with self.assertRaises(ValueError) as context:
            StateMachineNetwork([State(1), State(1)], [])

        self.assertTrue('State included twice' in str(context.exception))
Ejemplo n.º 12
0
 def test_add_state(self):
     sm = StateMachineNetwork([State(1)], [])
     self.assertEqual(len(sm.states), 1)
     self.assertEqual(sm.states[1].id, 1)
Ejemplo n.º 13
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)
Ejemplo n.º 14
0
 def test_invalid_state(self):
     sm = StateMachineNetwork([State(1)], [])
     self.assertRaises(KeyError, sm.activate, 3, [5, 10])
Ejemplo n.º 15
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)
Ejemplo n.º 16
0
 def reset(self, genome, config):
     self.net = StateMachineNetwork.create(genome, config.genome_config)
     self.current_state = 0