Created by Scott Robert Ladd at Coyote Gulch Productions.
A simple finite state machine with integer-indexed states. More...
#include <simple_machine.h>
The class defines an abstract finite state machine that uses unsigned integer input and output types. This is much faster than the generic fsm class because the transition table can be represented as a simple two-dimensional array.
InputSize | Number of input states |
OutputSize | Number of output states |
libevocosm::simple_machine< InSize, OutSize >::simple_machine | ( | size_t | a_size | ) |
Creates a new finite state machine with a given number of states.
a_size | - Initial number of states in this machine |
References libevocosm::simple_machine< InSize, OutSize >::m_current_state, libevocosm::simple_machine< InSize, OutSize >::m_init_state, libevocosm::simple_machine< InSize, OutSize >::tranout_t::m_new_state, libevocosm::simple_machine< InSize, OutSize >::tranout_t::m_output, libevocosm::simple_machine< InSize, OutSize >::m_size, libevocosm::simple_machine< InSize, OutSize >::m_state_table, and libevocosm::globals::rand_index().
libevocosm::simple_machine< InSize, OutSize >::simple_machine | ( | const simple_machine< InSize, OutSize > & | a_parent1, |
const simple_machine< InSize, OutSize > & | a_parent2 | ||
) |
Creates a new simple_machine by combining the states of two parent machines.
a_parent1 | - The first parent organism |
a_parent2 | - The second parent organism |
References libevocosm::globals::g_random, libevocosm::prng::get_real(), libevocosm::simple_machine< InSize, OutSize >::m_current_state, libevocosm::simple_machine< InSize, OutSize >::m_init_state, libevocosm::simple_machine< InSize, OutSize >::tranout_t::m_new_state, libevocosm::simple_machine< InSize, OutSize >::tranout_t::m_output, libevocosm::simple_machine< InSize, OutSize >::m_size, libevocosm::simple_machine< InSize, OutSize >::m_state_table, and libevocosm::globals::rand_index().
libevocosm::simple_machine< InSize, OutSize >::simple_machine | ( | const simple_machine< InSize, OutSize > & | a_source | ) |
Creates a new simple_machine identical to an existing one.
a_source | - Object to be copied |
libevocosm::simple_machine< InSize, OutSize >::~simple_machine | ( | ) | [virtual] |
Does nothing in the base class; exists to allow destruction of derived class objects through base class pointers.
size_t libevocosm::simple_machine< InSize, OutSize >::current_state | ( | ) | const [inline] |
Returns the current (active) state.
const simple_machine< InSize, OutSize >::tranout_t & libevocosm::simple_machine< InSize, OutSize >::get_transition | ( | size_t | a_state, |
size_t | a_input | ||
) | const [inline] |
Get a transition from the internal state table.
a_state | - Target state |
a_input | - State information to return |
size_t libevocosm::simple_machine< InSize, OutSize >::init_state | ( | ) | const [inline] |
Returns the initial (start up) state.
void libevocosm::simple_machine< InSize, OutSize >::mutate | ( | double | a_rate | ) |
Mutates a finite state machine object. The four mutations supported are:
a_rate | - Chance that any given state will mutate |
References libevocosm::simple_machine< InSize, OutSize >::tranout_t::m_new_state.
size_t libevocosm::simple_machine< InSize, OutSize >::num_input_states | ( | ) | const [inline] |
Returns the number of input states
size_t libevocosm::simple_machine< InSize, OutSize >::num_output_states | ( | ) | const [inline] |
Returns the number of output states
simple_machine< InSize, OutSize > & libevocosm::simple_machine< InSize, OutSize >::operator= | ( | const simple_machine< InSize, OutSize > & | a_source | ) |
Copies the state of an existing simple_machine.
a_source | - Object to be copied |
References libevocosm::simple_machine< InSize, OutSize >::m_current_state, libevocosm::simple_machine< InSize, OutSize >::m_init_state, and libevocosm::simple_machine< InSize, OutSize >::m_size.
void libevocosm::simple_machine< InSize, OutSize >::reset | ( | ) | [inline] |
Prepares the FSM to start running from its initial state.
void libevocosm::simple_machine< InSize, OutSize >::set_mutation_weight | ( | mutation_id | a_type, |
double | a_weight | ||
) | [inline, static] |
Sets the weight value associated with a specific mutation; this changes the relative chance of this mutation happening.
a_type | - ID of the weight to be changed |
a_weight | - New weight to be assigned |
size_t libevocosm::simple_machine< InSize, OutSize >::size | ( | ) | const [inline] |
Returns the size of a simple_machine.
size_t libevocosm::simple_machine< InSize, OutSize >::transition | ( | size_t | a_input | ) | [inline] |
Based on an input symbol, this function changes the state of an simple_machine and returns an output symbol.
a_input | - An input value |
© 1996-2005 Scott Robert Ladd. All rights reserved.
HTML documentation generated by Dimitri van Heesch's excellent Doxygen tool.