53 #if !defined(LIBEVOCOSM_FSM_H) 54 #define LIBEVOCOSM_FSM_H 65 #include "evocommon.h" 67 #include "machine_tools.h" 86 template <
typename InputT,
typename OutputT>
113 state_machine(
size_t a_size,
const std::vector<t_input> & a_inputs,
const std::vector<t_output> & a_outputs);
164 void mutate(
double a_rate,
const std::vector<t_input> & a_inputs,
const std::vector<t_output> & a_outputs, mutation_selector & a_selector = g_default_selector);
186 t_state_table get_table()
const;
193 size_t get_init_state()
const;
200 size_t get_current_state()
const;
220 t_input_map create_input_map(
const std::vector<t_input> & a_inputs,
const std::vector<t_output> & a_outputs);
224 template <
typename InputT,
typename OutputT>
228 template <
typename InputT,
typename OutputT>
236 if ((a_size < 2) || (a_inputs.size() < 1) || (a_outputs.size() < 1))
237 throw std::runtime_error(
"invalid state_machine creation parameters");
239 for (
size_t n = 0; n <
m_size; ++n)
242 m_state_table.push_back(create_input_map(a_inputs,a_outputs));
251 template <
typename InputT,
typename OutputT>
265 for (
size_t n = 0; n <
m_size; ++n)
285 template <
typename InputT,
typename OutputT>
296 template <
typename InputT,
typename OutputT>
303 template <
typename InputT,
typename OutputT>
306 if (
this != &a_source)
318 template <
typename InputT,
typename OutputT>
320 const std::vector<t_input> & a_inputs,
321 const std::vector<t_output> & a_outputs,
322 mutation_selector & a_selector)
327 switch (a_selector.get_index())
329 case MUTATE_OUTPUT_SYMBOL:
335 m_state_table[state][a_inputs[input]].first = a_outputs[output];
338 case MUTATE_TRANSITION:
347 case MUTATE_REPLACE_STATE:
353 case MUTATE_SWAP_STATES:
361 while (state2 == state1);
368 case MUTATE_INIT_STATE:
382 template <
typename InputT,
typename OutputT>
396 template <
typename InputT,
typename OutputT>
403 template <
typename InputT,
typename OutputT>
410 template <
typename InputT,
typename OutputT>
417 template <
typename InputT,
typename OutputT>
424 template <
typename InputT,
typename OutputT>
428 size_t max_output = a_outputs.size();
434 for (
typename std::vector<t_input>::const_iterator input = a_inputs.begin(); input != a_inputs.end(); ++input)
441 input_map[*input] = std::make_pair(out_symbol,new_state);
std::map< t_input, t_transition > t_input_map
Mapping inputs to outputs and state transitions.
Definition: state_machine.h:100
size_t m_size
Number of states.
Definition: state_machine.h:207
size_t get_current_state() const
Get current state.
Definition: state_machine.h:418
OutputT t_output
Exported output type.
Definition: state_machine.h:94
A toolkit and framework for implementing evolutionary algorithms.
Definition: analyzer.h:60
virtual ~state_machine()
Virtual destructor.
Definition: state_machine.h:297
t_state_table m_state_table
State table (the machine definition)
Definition: state_machine.h:204
t_output transition(const state_machine< InputT, OutputT >::t_input &a_input)
Cause state transition.
Definition: state_machine.h:383
static mutation_selector g_default_selector
A static, default mutation selector.
Definition: state_machine.h:216
size_t m_current_state
Current state.
Definition: state_machine.h:213
size_t m_init_state
Initial state.
Definition: state_machine.h:210
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
InputT t_input
Exported input type.
Definition: state_machine.h:91
std::vector< t_input_map > t_state_table
State table (the machine)
Definition: state_machine.h:103
void mutate(double a_rate, const std::vector< t_input > &a_inputs, const std::vector< t_output > &a_outputs, mutation_selector &a_selector=g_default_selector)
Mutation.
Definition: state_machine.h:319
std::pair< t_output, size_t > t_transition
Type of a transition.
Definition: state_machine.h:97
t_state_table get_table() const
Get a copy of the internal table.
Definition: state_machine.h:404
static prng g_random
A shared random number generator.
Definition: evocommon.h:127
Elements shared by all classes in Evocosm.
Definition: evocommon.h:117
state_machine & operator=(const state_machine< InputT, OutputT > &a_source)
Definition: state_machine.h:304
void reset()
Reset to start-up state.
Definition: state_machine.h:397
size_t get_init_state() const
Get initial state.
Definition: state_machine.h:411
state_machine(size_t a_size, const std::vector< t_input > &a_inputs, const std::vector< t_output > &a_outputs)
Creation constructor.
Definition: state_machine.h:229
A finite state machine.
Definition: state_machine.h:87
double get_real()
get the next value in the range [0,1)
Definition: evocommon.h:106