53 #if !defined(LIBEVOCOSM_SIMPLE_FSM_H) 54 #define LIBEVOCOSM_SIMPLE_FSM_H 63 #include "evocommon.h" 64 #include "machine_tools.h" 77 template <
size_t InSize,
size_t OutSize>
141 void mutate(
double a_rate);
150 static void set_mutation_weight(
mutation_id a_type,
double a_weight);
159 size_t transition(
size_t a_input);
181 const tranout_t & get_transition(
size_t a_state,
size_t a_input)
const;
188 size_t num_input_states()
const;
195 size_t num_output_states()
const;
202 size_t init_state()
const;
209 size_t current_state()
const;
236 template <
size_t InSize,
size_t OutSize>
240 template <
size_t InSize,
size_t OutSize>
243 for (
size_t s = 0; s < m_size; ++s)
244 delete [] m_state_table[s];
246 delete [] m_state_table;
250 template <
size_t InSize,
size_t OutSize>
254 m_state_table =
new tranout_t * [m_size];
256 for (
size_t s = 0; s < m_size; ++s)
259 m_state_table[s] =
new tranout_t [InSize];
262 for (
size_t i = 0; i < InSize; ++i)
265 m_state_table[s][i].m_output = a_source.
m_state_table[s][i].m_output;
271 template <
size_t InSize,
size_t OutSize>
273 : m_state_table(NULL),
280 throw std::runtime_error(
"invalid simple_machine creation parameters");
285 for (
size_t s = 0; s <
m_size; ++s)
291 for (
size_t i = 0; i < InSize; ++i)
304 template <
size_t InSize,
size_t OutSize>
312 deep_copy(a_parent1);
321 for (
size_t n = x; n <
m_size; ++n)
324 for (
size_t i = 0; i < InSize; ++i)
342 template <
size_t InSize,
size_t OutSize>
354 template <
size_t InSize,
size_t OutSize>
361 template <
size_t InSize,
size_t OutSize>
379 template <
size_t InSize,
size_t OutSize>
386 template <
size_t InSize,
size_t OutSize>
391 for (
size_t n = 0; n <
m_size; ++n)
442 for (
size_t i = 0; i < InSize; ++i)
458 while (state2 == state1);
460 for (
size_t i = 0; i < InSize; ++i)
493 template <
size_t InSize,
size_t OutSize>
507 template <
size_t InSize,
size_t OutSize>
514 template <
size_t InSize,
size_t OutSize>
521 template <
size_t InSize,
size_t OutSize>
528 template <
size_t InSize,
size_t OutSize>
535 template <
size_t InSize,
size_t OutSize>
542 template <
size_t InSize,
size_t OutSize>
549 template <
size_t InSize,
size_t OutSize>
size_t current_state() const
Get current state.
Definition: simple_machine.h:550
simple_machine & operator=(const simple_machine< InSize, OutSize > &a_source)
Definition: simple_machine.h:362
Wraps a roulette wheel for selecting mutations.
Definition: machine_tools.h:95
A toolkit and framework for implementing evolutionary algorithms.
Definition: analyzer.h:60
const tranout_t & get_transition(size_t a_state, size_t a_input) const
Get a transition from the internal state table.
Definition: simple_machine.h:522
virtual ~simple_machine()
Virtual destructor.
Definition: simple_machine.h:355
Mutate that initial state.
Definition: machine_tools.h:75
size_t num_input_states() const
Get number of input states.
Definition: simple_machine.h:529
Swap two states.
Definition: machine_tools.h:74
static void set_mutation_weight(mutation_id a_type, double a_weight)
Set a mutation weight.
Definition: simple_machine.h:380
void set_weight(mutation_id a_type, double &a_new_weight)
Change a given weight.
Definition: machine_tools.h:148
size_t m_new_state
The state to be transitioned to.
Definition: simple_machine.h:85
size_t m_output
The output value.
Definition: simple_machine.h:88
Mutate a state transition.
Definition: machine_tools.h:72
size_t get_index() const
Get a mutation index.
Definition: machine_tools.h:159
Defines a transition and output state pair.
Definition: simple_machine.h:82
mutation_id
Types of mutation supported.
Definition: machine_tools.h:69
void reset()
Reset to start-up state.
Definition: simple_machine.h:508
size_t init_state() const
Get initial state.
Definition: simple_machine.h:543
static size_t rand_index(size_t n)
Static function to allow use of g_random function pointer in random_shuffle.
Definition: evocommon.h:121
simple_machine(size_t a_size)
Creation constructor.
Definition: simple_machine.h:272
static mutation_selector g_selector
Global mutation selector.
Definition: simple_machine.h:232
A set of common tools for finite state machines.
Definition: machine_tools.h:65
static prng g_random
A shared random number generator.
Definition: evocommon.h:127
size_t size() const
Get size.
Definition: simple_machine.h:515
void mutate(double a_rate)
Mutation.
Definition: simple_machine.h:387
Replace a new state with a randomly-generated one.
Definition: machine_tools.h:73
size_t transition(size_t a_input)
Cause state transition.
Definition: simple_machine.h:494
Elements shared by all classes in Evocosm.
Definition: evocommon.h:117
size_t num_output_states() const
Get number of output states.
Definition: simple_machine.h:536
A simple finite state machine with integer-indexed states.
Definition: simple_machine.h:78
Mutate an output symbol.
Definition: machine_tools.h:71
size_t m_current_state
Current state.
Definition: simple_machine.h:226
size_t m_size
Number of states.
Definition: simple_machine.h:229
tranout_t ** m_state_table
State table (the machine definition)
Definition: simple_machine.h:220
size_t m_init_state
Initial state.
Definition: simple_machine.h:223
double get_real()
get the next value in the range [0,1)
Definition: evocommon.h:106