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. More... | |
fuzzy_machine (size_t a_size) | |
Creation constructor. More... | |
fuzzy_machine (const fuzzy_machine< InSize, OutSize > &a_parent1, const fuzzy_machine< InSize, OutSize > &a_parent2) | |
Construct via bisexual crossover. More... | |
fuzzy_machine (const fuzzy_machine< InSize, OutSize > &a_source) | |
Copy constructor. More... | |
virtual | ~fuzzy_machine () |
Virtual destructor. More... | |
fuzzy_machine & | operator= (const fuzzy_machine< InSize, OutSize > &a_source) |
void | mutate (double a_rate) |
Mutation. More... | |
size_t | transition (size_t a_input) |
Cause state transition. More... | |
void | reset () |
Reset to start-up state. More... | |
size_t | size () const |
Get size. More... | |
const tranout_t & | get_transition (size_t a_state, size_t a_input) const |
Get a transition from the internal state table. More... | |
size_t | num_input_states () const |
Get number of input states. More... | |
size_t | num_output_states () const |
Get number of output states. More... | |
size_t | init_state () const |
Get initial state. More... | |
size_t | current_state () const |
Get current state. More... | |
tranout_t *** | state_table () |
Get current transition table. More... | |
Static Public Member Functions | |
static void | set_mutation_weight (mutation_id a_type, double a_weight) |
Set a mutation weight. More... | |
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. | |
![]() | |
static prng | g_random |
A shared random number generator. | |
static std::string | g_version |
Version number. | |
Additional Inherited Members | |
![]() | |
enum | mutation_id { MUTATE_OUTPUT_SYMBOL, MUTATE_TRANSITION, MUTATE_REPLACE_STATE, MUTATE_SWAP_STATES, MUTATE_INIT_STATE } |
Types of mutation supported. More... | |
![]() | |
static size_t | rand_index (size_t n) |
Static function to allow use of g_random function pointer in random_shuffle. | |
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. | |
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.