Jason Stredwick


Current Residence:
Bothell, WA 98011

CV / Resume
Masters Work
   Source Code (tar.gz)
   Extraction Tools
Misc. Ideas


WhirlingDervish is a system that evolves 3D morphological entities and their ability to move across the ground. The entities are composed of point-masses connect by springs. Movement for an entity is based solely on the initial positions and an oscillation function within each spring. The oscillation function relies on the imparting of force on point-masses relative to the rest length of a spring. The oscillation provides dynamics by cycling the rest length through a range, which is evolved. These entities have no controller or any type of sensing, the physical body is all there is to an entity.


Viewer key controls:
a    pan-left
d    pan-right
s    move forward
x    move backward
z    yaw left
c    yaw right
f    pitch up
v    pitch down
o    view is parallel to xz-plane
p    view is down the z axis
g    toggles grid

Viewer menu description:
Open    loads a new entity file
Save    save the current entity to file
Quit    exit program
Reset   reset the initial state of the entity
Freeze  pause the entity
Edit    Examine/change the genome of an entity
        Close - exits the editor, deleting any unaltered instructions
        Alter - changes the current entity's genome and then performs a reset
Clear   causes the genome of an entity to become empty(no instructions)
About   does nothing

Quick comments about the viewer: -Only shows one entity at a time
-Empty genomes also have no body
-The default/starting genome, when the program is started, is empty
-All entity files created by hand using an outside editor such as notepad, must include three special lines. They are CREATURE_START, CREATURE_DATA, and CREATURE_END. To see how to construct one on your own, see Demo1.cre which is included in WDViewer.zip. If you use the editor in the viewer, one does not need to worry about this, the system takes care of it for you.


The evolver is the evolutionary program capable of evolving 3D entities that can move around in a three dimensional environment. The evolutionary component of the system follows a traditional evolutionary algorithm design of create a population -> test the population -> create a new population for a specified number of generations. This program is also a text based application, no gui or graphics. It relies on four configuration files to set the system parameters to use during a run. The following describes each configuration file.

instruction_set.cfg - This file contains a list of all the possible instructions usable in a genome. One can comment out (with a #) an instruction and that instruction will not be used by the system. One can see Appendix A of my thesis for more details on the purpose of each instruction.

run_settings.cfg - This file contains the settings that control population size and how many generations to evolve.

RANDOM_SEED is a number used to seed the random number generator. A -1 means to use the system time as the seed.

START_STATE can be one of three options, 0 = start a new run, 1 = start by loading the last generation from a specified file but use RANDOM_SEED, 2 = start by loading the last generation from a specified file but use the state of the random number generator of that final the population.

STORE_FILE is the name of the file to which the output from the run will be written. The output is always by generation containing the state of the random number generator and all of the genomes in the population at that generation.

LOAD_FILE is the name of the file to load the final generation as the starting generation depending on the setting of START_STATE.

ALGORITHM specifies which fitness function to use, this information is not given here but can be found in environment.cpp. Currently there are 15 functions starting at 0. 0 is the standard default function.

ec_settings.cfg - Configuration file for the evolutionary settings

GENOMIC_RATE and NON_GENOMIC_RATE are the mutation rates of the system. This system does not use crossover. GENOMIC_RATE is a mutation rate proportional to the length of the genome, which the other is fixed for every site in the genome and across all entities regardless of genome length.

POINT / DELETION / INSERT_RANDOM / INSERT_DUPLICATION are the four types of mutations that can occur, when a mutation actually occurs. These values must sum up to 1.0 and represent the chance for that type of mutation to occur during mutation. POINT changes a single instruction to another random instruction, or a single parameter to a random parameter (brief, see thesis). DELETION means that the instruction is removed from the genome. INSERT_RANDOM means that a random instruction is inserted into the genome, while INSERT_DUPLICATION means that an instruction is inserted into the genome that is an exact copy of an instruction already in the genome.

CHANCE_OF_DATA is the chance during a POINT mutation that the parameter will switch to vector of three numbers if the parameter is a state variable.

physics_settings.cfg - This file contains all of the setting that describe the environment, some of the values are currently unused. Most of the settings are straight forward and correspond to information from physics. All the values here are constants and unchangeable during a run. Also, due to the current design of the system, most of the parameters are fixed for each point-mass or spring.

INNATE_LENGTH - The default rest length of a spring

MAX_PERCENT_FLUCTATION - This value is fixed and represents the maximum percentage of the rest length that can change due to fluctuation.

FLUCTUATION_DELTA / _START / _RATE - These settings are the default values for newly created offspring. RATE is how much the rest length changes each time step. START represents were in the fluctuation range does the spring start. DELTA is a percentage of the MAX_PERCENT_FLUCTUATION that represents the true fluctuation range for a given spring. All of these settings play a role in the oscillation of the rest length of a spring, which follows the regularity of a sine wave. These three values are evolvable.