Created by Scott Robert Ladd at Coyote Gulch Productions.
A finite state machine. More...
#include <fuzzy_machine.h>
Classes | |
| struct | tranout_t |
| Defines a transition and output state pair. More... | |
Public Member Functions | |
| fuzzy_machine (size_t a_size, double a_output_base, double a_output_range, double a_state_base, double a_state_range) | |
| Creation constructor. | |
| fuzzy_machine (size_t a_size) | |
| Creation constructor. | |
| fuzzy_machine (const fuzzy_machine< InSize, OutSize > &a_parent1, const fuzzy_machine< InSize, OutSize > &a_parent2) | |
| Construct via bisexual crossover. | |
| fuzzy_machine (const fuzzy_machine< InSize, OutSize > &a_source) | |
| Copy constructor. | |
| virtual | ~fuzzy_machine () |
| Virtual destructor. | |
| fuzzy_machine & | operator= (const fuzzy_machine< InSize, OutSize > &a_source) |
| void | mutate (double a_rate) |
| Mutation. | |
| size_t | transition (size_t a_input) |
| Cause state transition. | |
| void | reset () |
| Reset to start-up state. | |
| size_t | size () const |
| Get size. | |
| const tranout_t & | get_transition (size_t a_state, size_t a_input) const |
| Get a transition from the internal state table. | |
| size_t | num_input_states () const |
| Get number of input states. | |
| size_t | num_output_states () const |
| Get number of output states. | |
| size_t | init_state () const |
| Get initial state. | |
| size_t | current_state () const |
| Get current state. | |
| tranout_t *** | state_table () |
| Get current transition table. | |
Static Public Member Functions | |
| static void | set_mutation_weight (mutation_id a_type, double a_weight) |
| Set a mutation weight. | |
Protected Attributes | |
| tranout_t *** | m_state_table |
| State table (the machine definition) | |
| size_t | m_size |
| Number of states. | |
| size_t | m_init_state |
| Initial state. | |
| size_t | m_current_state |
| Current state. | |
| double | m_output_base |
| base value for output weights | |
| double | m_output_range |
| range for output weights | |
| double | m_state_base |
| base value for state weights | |
| double | m_state_range |
| range for state weights | |
Static Protected Attributes | |
| static mutation_selector | g_selector |
| Global mutation selector. | |
Additional Inherited Members | |
Static Protected Member Functions inherited from libevocosm::globals | |
| static void | set_seed (uint32_t a_seed) |
| Set the seed for the random number generator. | |
| static uint32_t | get_seed () |
| Set the seed for the random number generator. | |
| static std::string | version () |
| Get version number. | |
| static size_t | rand_index (size_t n) |
| Static function to allow use of g_random function pointer in random_shuffle. | |
The class defines an abstract fuzzy state machine that uses integer input and output types.
A fuzzy state machine differs from a finite state machine in the selection of state transitions and outputs. In a finite state machine, each input maps to specific output and state transitions for a given current state. The fuzzy state machine contains probability maps for outputs and inputs; for any given state an input, there is a probability that any valid output could be returned, for example.
| InSize | Number of input states |
| OutSize | Number of output states |
| libevocosm::fuzzy_machine< InSize, OutSize >::fuzzy_machine | ( | size_t | a_size, |
| double | a_output_base, | ||
| double | a_output_range, | ||
| double | a_state_base, | ||
| double | a_state_range | ||
| ) |
Creates a new finite state machine with a given number of states. The four weight values define the range of weights assigned to outputs and state transitions; the actual roulette tables are randomized in the range (base,base+range).
| a_size | - Initial number of states in this machine |
| a_output_base | - Minimum (base) value for an output roulette wheel weight |
| a_output_range | - Range for an output roulette wheel weight |
| a_state_base | - Minimum (base) value for a new roulette wheel weight |
| a_state_range | - Range for a new state roulette wheel weight |
References libevocosm::globals::g_random, libevocosm::prng::get_real(), libevocosm::fuzzy_machine< InSize, OutSize >::m_current_state, libevocosm::fuzzy_machine< InSize, OutSize >::m_init_state, libevocosm::fuzzy_machine< InSize, OutSize >::m_size, libevocosm::fuzzy_machine< InSize, OutSize >::m_state_table, and libevocosm::globals::rand_index().
| libevocosm::fuzzy_machine< InSize, OutSize >::fuzzy_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::fuzzy_machine< InSize, OutSize >::m_current_state, libevocosm::fuzzy_machine< InSize, OutSize >::m_init_state, libevocosm::fuzzy_machine< InSize, OutSize >::m_size, libevocosm::fuzzy_machine< InSize, OutSize >::m_state_table, and libevocosm::globals::rand_index().
| libevocosm::fuzzy_machine< InSize, OutSize >::fuzzy_machine | ( | const fuzzy_machine< InSize, OutSize > & | a_parent1, |
| const fuzzy_machine< InSize, OutSize > & | a_parent2 | ||
| ) |
Creates a new fuzzy_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::fuzzy_machine< InSize, OutSize >::m_current_state, libevocosm::fuzzy_machine< InSize, OutSize >::m_init_state, libevocosm::fuzzy_machine< InSize, OutSize >::m_size, libevocosm::fuzzy_machine< InSize, OutSize >::m_state_table, and libevocosm::globals::rand_index().
| libevocosm::fuzzy_machine< InSize, OutSize >::fuzzy_machine | ( | const fuzzy_machine< InSize, OutSize > & | a_source | ) |
Creates a new fuzzy_machine identical to an existing one.
| a_source | - Object to be copied |
|
virtual |
Does nothing in the base class; exists to allow destruction of derived class objects through base class (fuzzy_machine) pointers.
|
inline |
Returns the current (active) state.
|
inline |
Get a transition from the internal state table.
| a_state | - Target state |
| a_input | - State information to return |
|
inline |
Returns the initial (start up) state.
| void libevocosm::fuzzy_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 |
|
inline |
Returns the number of input states
|
inline |
Returns the number of output states
| fuzzy_machine< InSize, OutSize > & libevocosm::fuzzy_machine< InSize, OutSize >::operator= | ( | const fuzzy_machine< InSize, OutSize > & | a_source | ) |
Sets an existing fuzzy_machine to duplicate another.
| a_source | - Object to be copied |
References libevocosm::fuzzy_machine< InSize, OutSize >::m_current_state, libevocosm::fuzzy_machine< InSize, OutSize >::m_init_state, libevocosm::fuzzy_machine< InSize, OutSize >::m_output_base, libevocosm::fuzzy_machine< InSize, OutSize >::m_output_range, libevocosm::fuzzy_machine< InSize, OutSize >::m_size, libevocosm::fuzzy_machine< InSize, OutSize >::m_state_base, and libevocosm::fuzzy_machine< InSize, OutSize >::m_state_range.
|
inline |
Prepares the FSM to start running from its initial state.
|
inlinestatic |
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 |
|
inline |
Returns the size of a fuzzy_machine.
|
inline |
Returns the state transition table pointer.
This is a very dangerous function, as it gives unrestricted access to the transition table that defines a machine. Given the complexity of fuzzy state machines, I implemented this function for debugging purposes; it is not intended as a tool for directly altering the transition table. /return Pointer to the transition table for the target machine
|
inline |
Based on an input symbol, this function changes the state of an fuzzy_machine and returns an output symbol.
| a_input | - An input symbol |
© 1996-2005 Scott Robert Ladd. All rights reserved.
HTML documentation generated by Dimitri van Heesch's excellent Doxygen tool.