The Options Menu

There are currently twelve options in the Options Menu.  Each of these will be discussed below.

Collisions - In the "real" world, boxes cannot pass through one another.  In the virtual world, anything is possible.  To prevent boxes from passing through one another requires collision detection, a rather difficult task.  By default, this software does not attempt collision detection (the None setting).  However, two kinds of collision detection have been implemented: Fast and Slow.  Neither of these methods are satisfactory, and it is recommended that they not be used.

None - The default conditions, no collision detection.  Parts of creatures can pass freely through one another.

Fast - The fast collision detection method only detects collisions between spheres embedded in the center of the boxes.  The diameter of the spheres is equal to the shortest side of the box.  For cubes, this provides very good collision detection.  For boxes whose sides have very unequal lengths, it provided very poor collision detection.

Slow - The slow collision detection method attempts to do a very rigorous collision detection reflecting the actual shapes of the boxes.  In this method, boxes joined by joints are permitted to inter-penetrate, to allow free movement of the joints.  However, non-jointed pairs of boxes are not permitted to interpenetrate.  Turning on this option tends to cause creatures to explode.

Show Joints - When this option is turned on, small red spheres are placed at the point where two boxes are joined in a joint.  This was done during the development stage to help verify the proper placement of the joints.  The joints can be most easily viewed with wireframe rendering (use the F2 key).  This tool is useful for getting a more clear understanding of the morphology of the creatures.

Follow Creature - When this option is turned on, the camera will follow the creature if it moves.  If this option is turned off, the camera will not follow the creature.  When the camera does not follow the creature, you can still use some of the hot keys to keep moving creatures in view (i.e.: the four arrow keys, and the keys "u", "n", "h", "l", "i", and "o").

Morphology – The morphology of creatures is normally based on a directed graph which is generated at random.  However, during the development of the software, before the random graph morphology was implemented, a simpler linear morphology was implemented (called Snakes).  The Snake code has not been preserved, and the Snakes are no longer available.  The Random and Linear morphology options operate as a radio-button, only one can be selected at any time.  Selecting the Snake morphology will cause an error.

Random – If the Random morphology option is selected, creature morphology is based on randomly generated directed graphs.  Random creatures include randomly generated nervous systems.

Linear – If the "Linear" morphology option is selected, creature morphology is restricted to linear chains of boxes, and include at most two (randomly chosen) articulating joints, which oscillate according to one of seven patterns, depending on which combination of the three joint angles (yaw, pitch, roll) are varying.  These "Snakes" do not include nervous systems.  The Snakes are no longer available.

Indirect Recursion – This option defaults to off, because it is still under development and is not yet producing good results.  I recommend that you leave it off.  That said, let me explain the function of this option.

If a box connects to itself, it forms a direct recursion, and an infinite loop that will consume the limit of boxes allowed (Segment Limit) in forming a chain of boxes of the same kind.  It is easy to identify direct recursion, and once identified, the number of boxes in the chain can be limited.  There is a genetic trait that determines the limit on recursion.  In addition, a variety of gradients are applied along recursive chains, allowing successive boxes to change gradually in size, shape, color, joint angles, etc.

If box A connects to box B, and box B connects to box A, that forms an indirect recursion, and another infinite loop (indirect recursion can involve more than two boxes).  It is more difficult to recognize indirect recursion, but the code has been implemented, and is turned on by checking "Indirect Recursion" in the options menu.  Once "Indirect Recursion" has been checked, indirect recursions will also be limited by the genetically determined value, and gradients will be applied along the recursive chain.  This has the tendency to make forms more bushy, less snake-like.  However, when gradients are applied to these indirect recursive chains, they have a high probability of exploding.  It will take some time to identify which values of which gradients tend to cause explosions so that this explosive behavior can be reduced.  In the mean time, I recommend that you keep this option turned off.

Mutation Parameters:

A complex set of dialog windows has been created to display and permit control of a large number of parameter that affect the random generation of genomes, and the mutation of genomes.  We will explain each dialog and its controls.

Adjust Mutation Parameters

The main mutation parameter dialog permits the user to control the relative numbers of mutations affecting the brain and the body, and the total number of mutations in each reproduction.  In addition, it permits the user to save custom mutation profiles to files on disk, and to retrieve previously store mutation profiles, or to restore the default mutation profile.  It also provides entry into additional mutation parameter dialogs that provide more detailed controls.

The Morphology and Behavior fields determine the relative probability for mutations to affect the body and the brain (respectively).  The default values are 1 and 1, indicating that there is an equal probability for mutations to affect the body and brain.  If the Morphology value is left as 1, but the Behavior value is changed to 7, then one eighth of mutations will affect the body, while seven eighths will affect the brain.  The NumMutations field determines the actual number of mutations that will be applied to each new genome produced.  The NumMutations field is not relevant to genomes produced at random, but only applies in the case where a parent genome has been selected, and is being reproduced with mutations.

The Adjust Mutation Parameters dialog, as well as other dialogs that will be introduced below, permit the user to change numerous mutation parameters.  The Restore Defaults button will reset all mutation parameters to their default values.

After the use has changed mutation parameters, it is possible to save the complete set of mutation parameters to a file (which the user will name), by using the Mutation Parameter Files – Save button.  Later, this set of mutation parameters can be quickly implemented by reading the saved parameters from disk, using the Mutation Parameter Files – Read button.

The Adjust Morphology Parameters button will open the Morphology Mutation Parameters dialog (shown below):

 

 

The Morphology Mutation Parameters dialog allows access to all mutation parameters that affect the body.  This dialog also provides a view of the genetic organization of the Creature.  Each parameter will be discussed below.

The Morphology field affects the same parameter that was available through the field of the same name in the Adjust Mutation Parameters dialog.  The Morphology field affects the relative probability for mutations to affect the body and the brain.

The definition of the genome begins with the number of segments.  The first field (2) specifies the relative mutation probability of this gene.  This mutation probability is relative to the other genes (or gene groups) that are at the same level of indentation in the dialog (CsegmetnLimit, RootSegmentG, CindirectRecursion, ActuatorStiffness, SBox, NumConnections, GradientR, and Connection).  The second and third fields (2, 16) specify the minimum and maximum number of segments.  Mutation generates a uniform random number from the minimum to the maximum.  The user is free to adjust any of the three parameters that affect mutation of the NumGenoSegments gene.

 

This gene places a hard limit on the number of segments that are permitted in the phenotypic body (not the genotype).  The edit box (16) specifies the relative probability of mutation of this gene, not the value of the gene.  Mutation of this gene causes a proportional change in the value, in the range from half the current value to twice the current value (but limited to no more than 67 segments).

This gene specifies which of the NumGenoSegments segments specified in the genome will be the root segment from which connections are traced when the phenotype is developed from the genotype.  The edit box (1) specifies the relative probability of mutation of this gene.  Mutations simply choose one of the NumGenoSegments segments at random.

This gene is currently inactivated as it relates to gradients along indirect recursions, which cause an unacceptable likelihood of explosion.

The actuators that manipulate yaw, pitch, and roll of joints act as torsional springs, which have a stiffness and a damping, that are specified by this gene.  The first edit field (16) specifies the relative probability of mutating this gene.  The second and third fields indicate the minimum and maximum values for this gene.

The SBox edit field specifies the relative probability of mutation of any of the genes in the group of genes that specify the size, dimensions, and color of the box that makes up a segment.  Mutation probabilities are nested.  The probability of mutating the box genes is grouped with the genes at the same level of indentation (the are listed above under NumGenoSegments).  If the SBox group is selected for mutation, then the three genes or gene groups at the next level of indentation (Size, Sides, Color) are selected for mutation with the relative probabilities indicated by the first edit field associated with each one.  If at this level, Sides is selected (for example), then one of the three side genes (Depth, Width, Height) must be selected, with the relative mutation probabilities indicated in the first edit field by each one.

Parameters such as SBox, Sides, and Color specify groups of genes, while others specify specific genes (Size, Depth, Width, Height, Red, Green, Blue).  Parameters that specify groups of genes will always provide a control over the probability of mutating that gene group, relative to other genes or groups at the same level of indentation.  Parameters that refer to specific genes always include a field to specify the relative probability of mutation, and then usually have two additional fields to specify the minimum and maximum values of the gene, between which mutation generates values at random.

Each box (after the root box), will be connected to one parent box.  In addition, each box can optionally be connected to child boxes.  The NumConnections gene specifies the number of daughter boxes that a specific box can connect to.  The first field (4) specifies the relative probability of mutation of this gene, and the second and third fields specify the minimum and maximum number of connections (0 to 3).

This parameter affects the probability of mutations to the Recursion gene group, which sits at the bottom of the genetic hierarchy.  This parameter was added at this highest level of indentation to increase the probability of mutation in this interesting but deeply nested gene group.

The Connection gene group is a large and complex group of genes that affect properties of the connections between boxes.  A connection between two boxes must specify which (child) box to connect to, and furthermore, the location of the joint on both the parent and the child box, and the resting angle between the two boxes.  In addition, if a genotypic box connects to itself, thereby generating a recursive chain in the phenotype, then the connection must specify the properties of the recursion, such as the limit and any gradients.  The relative probability of any of the genes of the Connection group being selected for mutation is determined by this parameter.  If this gene group is selected for mutation, then the selection of a specific gene for mutation must descend to the next level(s) of indentation, as shown in the Connection group below:

The specific portions of the Connection gene group are reviewed below:

 

The location of a joint on a box includes a specification of one of the six faces of the box, as well as the x and y coordinates of the specific point on the face where the joint attaches.  The ParentPosition group specifies these three parameters for the location of the connection on the parent box.

 

Because boxes may connect to more than one child box, this parameter specifies which of the child boxes the connection applies to.

The ChildPosition group specifies the face and x and y coordinates on the face of the position of attachment of the joint to the child box.

There is a single resting joint angle between the two boxes.  The Yaw, Pitch and Roll of the joint are specified in the ChildOrientation gene group.

A connection can specify that the size of the child box is scaled by some factor.  This parameter sets the range of the factor and its probability of mutation.

Bilateral symmetry can be implemented through a reflection operator.  This is currently implemented imperfectly through this parameter.

This parameter is not implemented yet, but permits that attachment of a unique segment at the end of a recursive chain.

 

 

The Recursion group includes specific genes that control the limit on recursion, RecurseLimit, and the number of gradients applied along the recursion, RecurseNumGradients.  Because there may be more than one gradient applied along a recursion, there will actually exist a variable length list of genes controlling the specific gradients involved.  The Gradient group, includes two parameters, GradientCharacter and GradientValue, which determine the relative probabilities of mutating the specific kind of gradient being used, or only the quantitative value of the gradient. 

The AdjustParameters button will open a dialog that displays the eighteen classes of gradients, and the mutation probabilities and minimum and maximum values associated with each.

 

Behavioral Mutation Parameters

The Behavioral Mutation Parameters dialog provides access to all the parameters that affect mutations of the “brain”, the circuit that controls movements and color changes of the creatures.

 

 

The Behavior field controls the probability of mutating the brain, relative to the body.  It is the same parameter that can also be set in the Adjust Mutation Parameters dialog.

 

 

Each creature contains one “local net” in each box of the body, and one “global net” which is independent of the boxes in the body.  The 1:NumUsedGenSeg check box affects the probability of mutating the global net relative to the local nets.  If the box is checked, then the relative probabilities are based on the relative numbers of the two kinds of nets, such that all nets have an equal probability of being affected by mutations.  This is the default.  However, if the box is unchecked:

The user can directly determine the relative probabilities of mutations affecting the global or local nets.

 

The RandomNet field does not control a gene, or gene group, but rather the probability of a certain kind of genetic operation: completely randomizing a neural net.

 

Just as the first step in the genetic specification of the body is to determine the number of boxes, the first step in the genetic specification of a neural net is the specification of the number of neurons.  The NumNeurons field controls the probability of mutating the number of neurons in a net, and the range of random values that mutations can generate.

 

When determing the number of neurons in a global net, the range of values is set relative to the range of values specified in NumNeurons.  The global net is allowed to have a wider range of values than the local nets.  The first field of the GlobalMultiplier parameter determines the minimum number of neurons allowed in a global net, as a factor of the minimum allowed in a local net.  The default is 0.5, indicating that a global net could be as small as half the size of the smallest local net.  The second field shows the maximum number of neurons allowed in a global net, as a factor of the maximum number allowed in a local net.  The default is 8, indicating that a global net could have as many as eight times as many neurons as the largest number allowed in a local net.

 

The Neuron field controls the probability of mutations affecting the Neuron gene group:

 

 

I will explain each of the components of this group of controls.

 

The individual neurons have been divided into three classes based on how many inputs they receive from other neurons.  These groups are referred to as the OpClass.  The three groups are Leaf, which takes no inputs from any other neuron, UnOp which takes one input from another neuron, and BinOp which takes inputs from two other neurons.  The OpClass field determines the probability of mutations affecting the OpClass, relative to the other parameters at the same level of indentation (OpCode, Constant, Synapse).

 

If mutation will affect the OpClass group, then one of the three groups must be chosen.  The Leaf, UnOp, and BinOp fields present the relative probabilities of mutations affecting these three groups.  The default values of these three probabilities have been set to the number of different types of neurons that have been defined in each group, with the result that all types of neurons have an equal probability of being generated by a mutation of the OpClass.  It should be understood that the three probabilities, Leaf, UnOp, and BinOp, have no affect on what neuron is chosen for mutation, but rather affect what OpClass will result from a mutation of the OpClass of whatever neuron is chosen.  Each of the three OpClass groups has an associated button: Adjust Leaf Parameters, Adjust UnOp Parameters, and Adjust BinOp Parameters.  These three buttons open additional dialogs that specify the relative probabilities for mutation to generate the different kinds of neurons in each OpClass.

 

 

 

The Leaf Mutation Parameters dialog lists the twenty-five kinds of Leaf neurons.  These include the twenty-two kinds of sensors, as well as neurons that output random values, constant values, and oscillating values.  The value in the edit field by each kind of neuron indicates the relative probability of that kind of neuron being generated by a mutation.

 

 

The UnOp Mutation Parameters dialog lists the thirty-four kinds of UnOp neurons.  Each of these neurons takes one input, performs some operation on the input (such as taking the log or the absolute value), then outputs the result.  The value in the edit field by each kind of neuron indicates the relative probability of that kind of neuron being generated by a mutation.

 

The BinOp Mutation Parameters dialog lists the twenty-seven kinds of BinOp neurons.  Each of these neurons takes two inputs, performs some operation on the inputs (such as adding or multiplying the two values), then outputs the result.  The value in the edit field by each kind of neuron indicates the relative probability of that kind of neuron being generated by a mutation.

 

The OpCode field specifies the probability of mutations affecting the OpCode, relative to other parameters at the same level of indentation.  When OpCode is mutated, the OpClass does not change, but the OpCode changes to one of the other neuron types in the same OpClass.  The Leaf Mutation Parameters, UnOp Mutation Parameters, and BinOp Mutation Parameters dialogs list the many different neuron classes (OpCodes) for each of the three OpClass groups (25, 34, and 27 respectively).

 

Each neuron has a floating point Constant associated with it.  At present, this constant is only used to provide the initial result value that a neuron outputs before it processed its first inputs.  The first Constant field determines the relative probability of mutating this gene, and the next two fields determine the minimum and maximum values of the constant.

 

The Synapse group contains all the parameters that control mutations that affect the connections between neurons.  Each neuron specifies where its inputs come from.  Neurons do not specify where their outputs go to.  In order to specify the source of an input, we must determine which neural net, and which neuron within the neural net.  Each box in the body contains a neural net, and there is one “global” net not associated with any box.  In practice, inputs to neurons can come from one of four pools: the same net, the global net, the net in the parent box, and the net in one of the child boxes.

Neurons can connect only to neurons in their same box, or neurons in boxes to which their box makes a connection (joint) with.  The exception to this rule is that the global neurons can make connections to any neuron anywhere.

The NeuronIndex field determines the relative probability of mutating which neuron in the source net is used as input.  When the NeuronIndex is mutated, all neurons in the source net have an equal probability of being chosen for connection.

In the case that the net that provides the source of a connection is in a child box, there may be a need to specify which child box, because there can be more than one child box.  The ChildSegmentIndex field determines the probability of mutating which child box is used for connection.  When this parameter is mutated, all child boxes have an equal probability of being selected for the connection.  If there are one or zero child boxes this gene has no effect.

The ConnectToPool field determines the probability that mutation will switch a connection between the four source pools: Global, Child, Parent, and Self.  When mutation affects the source pool, the relative probability that each of the four will be selected for the connection is determined by the field next to each of the four.

 

 

Body Shape

 

The 1999 version rendered all body parts as rectangular boxes.  The 2000 version introduces the possibility to render the rectangular Boxes as Ellipsoids of the same dimensions.  In many cases the Ellipsoid rendering gives a more organic and beautiful appearance.  However, the Ellipsoid renders more slowly, so Box is the default setting.  The choice of Body Shape does not affect the fluid dynamics or any aspect of the physics of the system, it is only a difference in the rendering.

Back to Contents Page