Created by Scott Robert Ladd at Coyote Gulch Productions.
#include <fsm.h>
While this class provides great flexibility in FSM design (given that inputs and outputs can be almost any type of object), the class suffers from performance problems, especially when used in a genetic algorithm, where many, many objects are copied and created. In general, I've switched to using the simple_fsm class, mapping integer inputs and outputs to object tables where required.
InputT | Input type | |
OutputT | Output type |
libevocosm::fsm< InputT, OutputT >::fsm | ( | size_t | a_size, | |
const std::vector< t_input > & | a_inputs, | |||
const std::vector< t_output > & | a_outputs | |||
) | [inline] |
Creates a new finite state machine with a given number of states, and input set and an output set.
a_size | - Initial number of states in this machine | |
a_inputs | - A list of input values | |
a_outputs | - A list of output values |
References libevocosm::globals::g_random, libevocosm::fsm< InputT, OutputT >::m_current_state, libevocosm::fsm< InputT, OutputT >::m_init_state, libevocosm::fsm< InputT, OutputT >::m_size, and libevocosm::fsm< InputT, OutputT >::m_state_table.
libevocosm::fsm< InputT, OutputT >::fsm | ( | const fsm< InputT, OutputT > & | a_parent1, | |
const fsm< InputT, OutputT > & | a_parent2 | |||
) | [inline] |
Creates a new fsm by combining the states of two parent machines. Each state in the child has an equal likelihood of being a copy of the corresponding state in either a_parent1 or a_parent2. If one parent has more states than the other, the child will also have copies of the "extra" states taken from the longer parent.
References libevocosm::globals::g_random, libevocosm::fsm< InputT, OutputT >::m_current_state, libevocosm::fsm< InputT, OutputT >::m_init_state, libevocosm::fsm< InputT, OutputT >::m_size, and libevocosm::fsm< InputT, OutputT >::m_state_table.
libevocosm::fsm< InputT, OutputT >::fsm | ( | const fsm< InputT, OutputT > & | a_source | ) | [inline] |
Creates a new fsm identical to an existing one.
a_source | - Object to be copied |
libevocosm::fsm< InputT, OutputT >::~fsm | ( | ) | [inline, virtual] |
Does nothing in the base class; exists to allow destruction of derived class objects through base class (fsm) pointers.
size_t libevocosm::fsm< InputT, OutputT >::get_current_state | ( | ) | const [inline] |
Returns the current (active) state.
References libevocosm::fsm< InputT, OutputT >::m_current_state.
size_t libevocosm::fsm< InputT, OutputT >::get_init_state | ( | ) | const [inline] |
Returns the initial (start up) state.
References libevocosm::fsm< InputT, OutputT >::m_init_state.
fsm< InputT, OutputT >::t_state_table libevocosm::fsm< InputT, OutputT >::get_table | ( | ) | const [inline] |
Returns a copy of the state transition table. Useful for reporting the "program" stored in an fsm.
References libevocosm::fsm< InputT, OutputT >::m_state_table.
void libevocosm::fsm< InputT, OutputT >::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 | |||
) | [inline] |
Mutates a finite state machine object. The four mutations supported are:
a_rate | - Chance that any given state will mutate | |
a_inputs | - A list of valid input states | |
a_outputs | - A list of valid output states | |
a_selector | - A mutation selector |
References libevocosm::globals::g_random, libevocosm::fsm_tools::mutation_selector::get_index(), libevocosm::fsm< InputT, OutputT >::m_current_state, libevocosm::fsm< InputT, OutputT >::m_init_state, libevocosm::fsm< InputT, OutputT >::m_size, libevocosm::fsm< InputT, OutputT >::m_state_table, libevocosm::fsm_tools::MUTATE_INIT_STATE, libevocosm::fsm_tools::MUTATE_OUTPUT_SYMBOL, libevocosm::fsm_tools::MUTATE_REPLACE_STATE, libevocosm::fsm_tools::MUTATE_SWAP_STATES, and libevocosm::fsm_tools::MUTATE_TRANSITION.
fsm< InputT, OutputT > & libevocosm::fsm< InputT, OutputT >::operator= | ( | const fsm< InputT, OutputT > & | a_source | ) | [inline] |
Sets an existing fsm to duplicate another.
a_source | - Object to be copied |
References libevocosm::fsm< InputT, OutputT >::m_current_state, libevocosm::fsm< InputT, OutputT >::m_init_state, libevocosm::fsm< InputT, OutputT >::m_size, and libevocosm::fsm< InputT, OutputT >::m_state_table.
void libevocosm::fsm< InputT, OutputT >::reset | ( | ) | [inline] |
Prepares the FSM to start running from its initial state.
References libevocosm::fsm< InputT, OutputT >::m_current_state, and libevocosm::fsm< InputT, OutputT >::m_init_state.
fsm< InputT, OutputT >::t_output libevocosm::fsm< InputT, OutputT >::transition | ( | const fsm< InputT, OutputT >::t_input & | a_input | ) | [inline] |
Based on an input symbol, this function changes the state of an fsm and returns an output symbol.
a_input | - An input symbol |
References libevocosm::fsm< InputT, OutputT >::m_current_state, and libevocosm::fsm< InputT, OutputT >::m_state_table.
© 1996-2005 Scott Robert Ladd. All rights reserved.
HTML documentation generated by Dimitri van Heesch's excellent Doxygen tool.