a very simple user interface ("Artificial Life") released for mobile and desktop
Python partially supported in scripts (developmental feature)
no more default.sim
file loaded at startup; for each experiment definition, its parameter values are reset to defaults when the experiment definition is set
all genotypes in the official *.gen files now come from FEC and have warnings fixed
FEC has a 3D preview of genotypes
basic functionality of Creature Editor
moved Foraminifera genotypes from other.gen to foraminifera.gen
fixed OpenGL shadows on some less capable graphics cards
fixed OpenGL lighting (would occasionally change location when removing creatures)
energy transfers are visualized as lines or moving particles
movement, frictional drag and pressure against ground are visualized as "dust"
Creature objects can now be partially serialized (information like Creature's location and basic properties can be saved and restored, see CreatureSnapshot
)
fixed displaying the 3D orientation of muscles
detection of duplicate property definitions (expdefs, neurons, shows, styles)
Simulator.usercode
can be imported/loaded from .sim and .expt files
a number of additional "info" fields introduced in Genotype for consistency with FEC
separated f0 and f0s genetic formats (for ball-and-stick models and for solid shape models)
introduced dedicated muscles and receptors for solid shape models
introduced the new fn genetic encoding for general numerical optimization
introduced the new fS genetic encoding for solid 3D shapes
added three new/reimplemented encodings: fH (which is updated f2), fB (which is updated f3) and fL (which is updated f8)
when building a Model, "checkpoints" (stages of development) can be indicated and visualized, and this is implemented for f1, f4, f9, fF, fH, fB, fL, fS
fixed asymmetry in proportional crossover in f1 (the order of parents (first,second) was relevant)
when adding a neuron during f1 mutation, if this neuron provides output, it gets connected to a random existing neuron that wants input
an insertion and a deletion of each type in f1 have now qual probability no matter how many possible insertions and deletions there are in a mutated genotype
calculating angles and rotations in f1 and f4 is now more precise
unified handling of "modifier genes" in f1 and f4
added support for new API for neuron types and their properties in f4
calculating geometric properties of a Model (volume, surface area, sizes and orientation) now supports genotypes that produce ball-and-stick Models
added another, improved way of calculating the similarity measure; details here
added the choice of the similarity method to use (new: flexible criteria order, optimal matching vs. classic: vertex degree order, greedy matching)
introduced a new useful script: find best genotype on average
Simulator.usercode
can now override any expdef function, not just events
introduced 4 configurable VM timeouts (stopping or just warning, due to exceeded time or the number of VM operations) - Simulator.vm...
introduced Simulator.stop_on
: a running simulation will be stopped when a message is emitted with at least the selected level of severity
the order of collisions between pairs of Creatures is now by default randomized in each simulation step, which may prevent unfair biases in some experiments
ODE simulation 0.11 updated to 0.14 which includes this fix that caused occasional crashes of the T receptor in Windows apps
introduced ODE linear (present earlier but implemented in a different way) and angular (new) damping
ODE simulation uses double precision in Linux, just like it always used in Windows
Parts do not have "mass" property anymore (use "density" to adjust mass)
user scripts can now have separate main() and main_args() functions, with only main() (no arguments variant) visible in GUI as a button
underwater placement improved (for negative "Initial elevation" parameter values)
updated settings swim.sim
and speed.sim
, and renamed to evol-speed-water.sim
and evol-speed-land.sim
standard-eval.expdef
more flexible: evaluation plans support evaluating many genotypes with many simulator settings and many performance criteria; outputs results in JSON format
fixed accessing neuron properties when private properties were not defined as the last ones
fixed heighfield intersection calculation used by the touch (T) receptor
strict parsing of genotype format prefix
genetic format IDs can be longer than one character
more strict parsing of property definitions and, in general, objects loaded from files
in CLI (and server), an input line ended with a backslash can be continued in the next line
fixed double citation problem in CLI (and server)
many other fixes and improvements
improved FPS control - reacts instantly to changes
improved performance of Genotype and Creature lists
Model (in the Body and Brain window) is no longer recreated/reassigned (and so neural probes are no longer lost) when other Genotypes/Creatures are deleted/die
added a new option in menu: "Import selected..." for importing selected data from files saved by Framsticks
separately displays numbers of unread messages, errors, warnings
fixed strange behavior of manipulator when using ODE simulation and grabbing a creature under water
fixed incorrect genotype-phenotype mapping in genotype edit window for multi-line genotypes (like f0)
fixed genealogical trees not following parameters set by user and always using defaults
introduced a new const
keyword for defining constants
introduced the conditional operator (a?b:c)
accessing a non-global variable that was declared outside of a function causes a compilation error
accessing nonexistent dictionary keys is now an ERROR
protected against duplicate function definitions
Genotype.data
and Creature.data
are general-use dictionaries; user1/2/3
fields become deprecated
dictionaries can be accessed using the ->
syntax: object->name
equals object["name"]
equals object.get("name")
FunctionReference
now documented and available (earlier called JumpTarget
)
added Vector.clone()
and Dictionary.clone()
added Dictionary.hasKey()
added Math.tan()
added String.toJSON()
and String.trim()
TrackingCam.cam_world
makes camera behavior consistent in all Framsticks apps
changing values of TrackingCam
fields: cam_dir
or cam_h
triggers camera update
removed three "energy balance" fields (energy_p
, energy_m
, energy_b
) from the Creature object. The energy
field is now modified directly
new Creature.transferEnergyTo()
function
new Creature.num
field with behavior analogous to Genotype.num
new GenMan.toLaTeX()
function to print genotypes in the LaTeX format, preserving colors and styles
some objects and fields renamed, including Fields→NeuroProperties, ExpParams→ExpProperties, ShowParams→ShowProperties, VisParams→VisProperties, and prop:→property:
fields center_xyz,pos_xyz,size_xyz
and moveAbs()
are now deprecated and replaced by Creature.bboxLow/High/Center/Size/centerOfGravity
and moveBboxLow()/moveBboxCenter()
new scripts/standard_exploadsave.inc
script file contains useful, general functions to save and restore simulator state
fixed incorrect stack allocation in some cases of &&, ||, and for(x in null)
&& and || operators always return one of the input expressions (previously the result was in some cases simplified to 0 or 1)
Vector and Dictionary iteration is possible: for(x in vect)
, for(x in dict)
, for(x in dict.keys)
improved classdoc formatting and layout
internal string implementation more efficient in multi-threaded computation
fixed parsing of some very specific f0 genotypes
added an experiment definition that simulates Foraminifera reproduction
invalid user scripts are not added to UserScripts
prints (more) warnings when unexpected contents is encountered while loading files
5 new fields are saved in *.gen files for each genotype: number of parts/joints/neurons/connections and is_valid
many other fixes and improvements
fixed crashes when opening the "Spy" window or the "Body & Brain" window for a Creature
properties of genotypes displayed on the gene pool lists are now properly updated
no more huge delays when removing creatures from large populations
fixed rare crashes on exit
a few functions and fields have been renamed; old versions issue a "deprecated" warning message
improvements and new features in reproduction.expdef, imagesaver.show, and others
numparts, numjoints, numneurons, numconnections in Genotype are now integer, not floating point
characters with codes higher than 127 are no longer ignored
on Linux and OS X, uses colors in output (can be disabled)
on Windows, properly displays UTF8-encoded characters
fixed the ??
command in the command-line interface
command-line interface can be used to generate POV-Ray frames for 3D rendering; see cliutils.ini
morphological similarity measure is now able to determine a geometric component
fixed very rare non-deterministic crashes when closing the "Edit Genotype" window
slightly changed info/warning/error message formatting
fixed povray-export, image-export and scene-export directory settings
many other fixes and improvements
improved information about location of errors ("stack" with function calls and line numbers in files)
unified and improved comparison operators (no more "first type wins")
parentheses in typeof()
are now mandatory
added built-in conversion functions: int()
, float()
, string()
typeof()
returns plain names of core types instead of numeric constants
introduced short-circuit evaluation of &&
and ||
fixed switch/case
fall through. Previously, each case
not ending with break
jumped to default:
when present
case
labels do not have to be constant
new math operator semantics: extended mixed int/float
to float
, forbidden number+notnumber
support for multi-threading; a few experiments have multi-threaded versions
32-bit Mersenne twister used as a random number generator
files with genotypes, settings, scripts, 3D objects, etc., are now in the data
subdirectory
genetic f0 support for Part shapes other than a ball: cuboids, cylinders and ellipsoids; examples added to theater in the genotype viewer (-g) mode
fixed enforcing states of channeled neuron outputs
when a genetic operation fails, more details are provided in the Geno's info field about reasons of failure
invalid genotypes resulting from f1 crossing over have a chance to be corrected
correction procedure for f1 genotypes properly handles whitespaces in the list of neuron inputs, and can correct more invalid cases: ,, and ,]
Added geometric properties of a Model (volume, surface area, sizes and orientation)
updated open source, including genetic converters and operators: the 3D turtle f9 encoding and a new Foraminifera fF encoding
The name of the Sf
(Smell food) neuron changed to S1
(Smell population #1) and introduced neuron S0
(Smell population #0). See smell_0.neuro
and smell_1.neuro
sources are now 32-bit and 64-bit compatible; linux and macos binaries are 64-bit
ParamInterface::load() warns on unknown fields while loading files
hundreds of other fixes and improvements
in wireframe display mode, Parts and Joints are shown as simple meshes, not just points and lines
the GUI no longer shows the total number of simulation steps. Instead, it shows "checkpoint data" for each thread, which, in case of the "standard" experiment, is the number of creature evaluations. Checkpoints may be defined in a different way in other experiment definitions, and may publish other kinds of data
hover mouse over the status line in the top right corner to see a summary of status fields for each simulator (thread)
updated toolbar icons and status labels
GUI and Theater are now high-DPI aware
"Body & brain" windows display "genotype"/"creature" text in their captions to reduce confusion on what they show
fixed file extension associations (.gen, .sim, .expt)
in the genotype edit window, the genotype is shown in bigger font when it is short
fixed displaying crossing over operations in the phylogenetic analysis window
added support for Unicode international characters
updated exporting world and creatures to POV-Ray
new functions make old-style functions that used static gene pool/population/genotype/creature indexes obsolete
new syntax for loops: for(
elem in
container)
enumerates all elements of Vectors, GenePools, Populations, and other relevant objects
var
can be used inside the first for
expression: for(var i=0;i<10;i++) ...
the three expressions inside the for
loop are now optional and can be empty like in C/C++/Java: for(var i=1;(++i)<10;) ...
multiline strings can be embedded in source code using three quotation marks or three apostrohpes
serialization of Vector, Dictionary, and a few other classes
support for multi-threading (multiple Simulator
objects can be created); see prime-mt.expdef
for an example
Vector
has a sort()
function with an optional custom comparator
added Math.randomize()
added String.diff()
better handling of floating point division by zero and overflow
scripts calling undefined functions or field names will now compile without errors, but will fail at runtime
global variables can no longer be accessed outside of their own script module. Use functions or other global objects (ExpParams, ExpState) if you need to pass data between modules; see scripts/dance.show
for examples
improved runtime error messages to provide more detailed error location
"if" statements: testing for a condition using a likely misplaced "=" (instead of "==") triggers a warning
new, simpler syntax for changing Vector and Dictionary elements: object[index]=value;
which is equivalent to object.set(index,value);
new Dictionary initializer expression: {"key":value, "key2":value2, ...}
Vector objects can be spliced using +
and +=
operators, as in [1,2,3]+["end"]
Vectors and strings can be multiplicated using *
and *=
operators, as in [1,2]*5
or "abc"*2
String.format()
function accepts multiple values, %
operator works as a shortcut to String.format()
fixed Math.time
returning wrong time offset in Windows
the colmask
field changed into two fields: selfmask
and othermask
Simulator.expdef
can be changed at runtime by setting a field or net-loading an experiment file, so starting the CLI/server with initial experiment definition ("ex expdefname") is no longer required
console window has an animated caption that provides information about the simulation
fixed a bug that disallowed changing a visual style in the genotype viewer mode (see -help option)
muscles encoded in a "new" way in f1 genotypes now behave as in "old" f1 (this concerns their default "power" and "range" properties)
warnings are displayed when properties are assigned values out of allowed range
minor improvement in the "add neuron" mutation in f1 (only affects the "N" neuron)
added options to control determinism in ODE simulation
a number of other improvements
the "Mutate" button in the Genotype window works again
continuous rotate works in the OpenGL body view (just like in the wireframe view)
fixed an extremely rare problem with the "FPS" choice listbox
floating point notation with positive exponent now handles the "+" sign (you can write 1e5 or 1e+5)
fixed break
and continue
that would not work in nested loops in some situations
fixed Genotype.mutate()
that did not work (regression caused by this change)
fixed a bug in the Genotype-to-Model relationship
the behavior of String.split
and String.split2
is now consistent with the documentation
three neurons with specific short names (*, |, @) can be accessed as neuadd_Constant
, neuadd_Bend_muscle
, and neuadd_Rotation_muscle
constants in scripts have much higher precision when used in calculations
files can be saved in subdirectories of the scripts_output
directory
goto
no longer supported; it was dangerous in some cases
added deepVectorCopy.script
in the scripts_sample
directory - an example code of vector "deep copy"
fixed parsing "\\"
extensions, fixes and improvements in the networking protocol
fixed order of neural inputs in the f1 genetic encoding
fixed a rare hang-up in the "Inverse-proportionally to fitness" deletion method
mutated connection weights are unlimited (previously the range was -10..10) [source]
another approach to allowed ranges of mutated values (was: absorb, now: reflect) [source]
added new script: neuro_inspection.script, useful for analyses of selected neural states and NN dynamics in a creature
added new script: regular_shapes.script, generates sample shapes: truss, sponge, tower, grids and meshes
the Delay and Threshold neurons now accept any number of inputs
fixed extremely rare 'invalid write access' exception when a neural probe window was closed
in NN diagrams, non-default values of neural properties are displayed in tooltips
improved layout of NN diagrams
higher resolution panoramas in OpenGL views
Pulse
neuron (impulse generator that supports randomness) added in the scripts_sample
subdirectory
most neurons have dedicated symbols now (added symbols for Delay
, Threshold
and others)
new option to add Gaussian random noise to neural outputs
in settings files, GenotypeGroup and CreaturesGroup are now changed to GenePool and Population
'boids.expdef' and the corresponding theater show now feature obstacle avoidance
a number of other improvements
Signals view settings are now accessible from the context menu in the World window
fixed exporting to POV-Ray: it would crash when the "robot arm" was in use
when seeding population, names of genetic encodings are displayed
the FPS set in the "Artificial world" window is adjusted more accurately
no longer displays unnecessary warning when a neuron is selected
in *.script files (a.k.a. macros), function main() should be used as an entry point. Free (outside of functions) code should be avoided to ensure compatibility with Framclipse
new UserScripts class allows to call any of the *.script macros
new classes: CreatureSettings
and NeuronsSimEnabled
it is now possible to iterate all Dictionary
keys and/or values. This feature was previously documented but not implemented
three new ways of accessing NeuroClass: NeuroClassLibrary.getClass(name), Neuro.classObject, NeuroDef.classObject
onKill() event names changed to onDied()
checking the genotype for errors in Geno and Genotype objects is now more consistent
occasionally, memory addresses of some variables were incorrectly displayed as 00000000 (it was rare and harmless)
improved detection of some types of errors in scripts
standard_loadsave.inc
now much more versatile, can handle any number of gene pools and populations
users can now easily create custom icons for script neurons
added another simulation engine - ODE - for accurate mechanical simulation
physical simulation can be disabled/enabled on a per-object basis (Population.bodysim
and Creature.bodysim
)
simple single-Part agents are now easier to handle using enhanced script Creature object: moveLocal and rotateLocal (manage agent movement in its local coordinates), and drive and localDrive (enforce constant speed bypassing physical simulation). Creature.orient, Creature.localToWorld, Creature.worldToLocal are available for more sophisticated uses
touch receptor (T) can now act as a proximity sensor in the Block world environment (previously it only handled the flat world). The detection range is adjustable. The change only affects the proximity aspect, touch detection works regardless of the environment. Custom sensors similar to T can be created using the enhanced WorldMap.intersect function (now it also returns the intersection distance)
self-collisions (within a creature body) can occur when using the ODE simulation engine. If enabled, creatures with self-colliding genotypes are not born, and others will have their sticks collide during lifespan
substantial extensions in the 'standard.expdef' - new options include multiple evaluation, logs with average and best fitness, stagnation detection with automatic stopping and saving best genotypes
added 'boids.expdef', a classic simulation of 3D flocking behavior
added 'learn_food.expdef', an experiment definition that illustrates lifetime knowledge sharing and its influence on finding resources and exploration/exploitation of the environment
added 'framsbots.expdef'
added brainSimplifier.script (a macro that removes all neurons that do not influence effectors in brains)
added new genotypes (models3d.gen
file) converted from existing 3D objects
added 'Extended mutation info' parameter in Genetics: allows to store information about used mutation method (method ID or name) for each mutated genotype
fixed standard placement: creatures were shifted
new OpenGL style, spooksticks
new OpenGL style, standard-stress: shows stress on joints in MechaStick
in the 'standard' OpenGL style, creature names can be displayed near creatures ("Show names" option)
in the 'whitevoid' OpenGL style, options added to hide neurons, to adjust stick width and to show a plane of body symmetry
added Body disturbance and Initial movement parameters that can add random noise to creatures built (see Simulation parameters. Creature: Imperfection)
added Minimal joint length and Maximal joint length parameters (see Simulation parameters. Creature: Body constraints)
advanced mechanical simulation parameters added at World: ODE Parameters
in ODE, sticks can be boxes, not only cylinders
added countermeasures against "never steady" creatures: "Kill if no stabilization after" option and adjustable distance threshold in population settings
validation of f0
genetic encoding can fix too long joints
fixed genetic f0
-->f0
conversion (last line of the source genotype was lost)
fixed revroulette method (influences Delete genotypes:Inverse-proportionally to fitness). Results were bogus in some situations and the program could hang up
adjustable neural network simulation speed (number of NN simulation steps per one mechanical simulation step)
separate "sampling period" setting for the stabilization phase
items found in the class browser search are now sorted alphabetically
high resolution timers used in all applications
lots of other improvements and fixes
the manipulator in the wireframe view is drawn as a well-known "robot hand" again
better visualization of food items ("balls") and single-Part creatures (/*0*/p:
) that were previously invisible
you can save all vector images (NN schema view, body view) as a vector SVG file
in the "Simulation Parameters" window, settings for similarity and neurons are moved to a new "Creature" group
fixed centering of all windows so that Windows task bar location and size is considered
fixed size of the tiny "up/down" controls in all parameter windows (could be too large if a specific font size was selected in Windows)
errors in f0
genotypes are no longer reported multiple times
handles any number of groups (gene pools, populations) properly
supports deleting any group (earlier: only the last group)
fixed crash when using manipulator and exporting frames to POV-Ray
new POV-Ray graphics style: 'ghost'
improved the 'autumn' POV-Ray graphics style
improved the 'wookie' POV-Ray graphics style
updated and added sample files to the distribution povray\ subdirectory
fixed POV-Ray export: joints (sticks) of specific orientation would disappear for some creatures
Signal
object facilitates inter-creature communication. Can be used in NN control (see the fireflies.show and custom neurons: light.neuro and seelight.neuro) and in more sophisticated scripting (boids.expdef)
new classes for simplified 3D manipulation: XYZ
(3D vector) and Orient
(3D orientation matrix), see boids.expdef for a sample code
reference operator (&
) enables passing variables "by reference". See Ref
object for a sample code
onMouseClick/Move/Unclick
handlers in the .show and .expdef scripts. See playwithfood.show for a sample code and explanation.
fixed a bug in small constant numbers - e.g. Simulator.print(0.000003)
would output 3
new: estimation of bilateral symmetry of Models and Creatures - see the Symmetry
class and calcSymmetry.script
in the scripts
subdirectory)
new class: Shapes
, to define objects appearance in the "wireframe" view (see also springSticks.script
in the scripts
subdirectory)
new sample script that prints coordinates of Parts for all creatures (see the printCoords.script
in the scripts
subdirectory)
fixed bug in Neuro.neuroproperties for custom neurons (the most recently created instance of the neuron object could only be accessed)
added Simulator.eval(src) function which evaluates in runtime simple FramScript source code
added toString fields in Vector and Dictionary. You will see contents of these arrays when converting them to string
added Neuro.def, Neuro.joint, Neuro.part, MechJoint.part1, MechJoint.part2 fields (references to NeuroDef, MechJoint, MechPart)
added MechPart.vz
added Creature.index
added LiveLibrary.findCreatureAt(point,vector)
added GenMan.getSimplest(format), returns the simplest Geno for a given genetic encoding
added Simulator.beep(), Simulator.sleep(millis), Simulator.sound(Hz,millis)
new, more comprehensible collision masks (see Population.selfmask
and Population.othermask
)
collision masks can be changed during simulation
new on[GroupName]CrCollision event (called only once per creatures pair) - can be used instead of the old event (called for each pair of colliding sticks) to improve performance
added "neurons:" field in .expdef script files. This field specifies neurons to be loaded together with the experiment definition. This feature can be used for developing neurons relying on a specific experiment definition. The default value for the "neurons:" field (assumed when the field is not specified in expdef) is "std,*.neuro", which loads all standard neurons and all custom neurons from *.neuro files (as did all previous versions of Framsticks).
default values defined in expdef's properties (prop:...
) and state variables (state:...
) are no longer ignored
estimating (dis)similarity of Models moved from the GenMan
class to the new Similarity
class
added new formats for time (%t and %T) in class String. String.format("%t",Math.time)
returns current time formatted like "Sun Apr 29 19:22:02 2007", while "%T" gives "2007-04-29 19:22:02"
added functions: Math.atan2(y,x)
, Math.pow(a,b)
, Math.min(x,y)
, Math.max(x,y)
and Math.sign(value)
LiveLibrary, GenotypeLibrary, CreaturesGroup, GenotypeGroup have been renamed to Populations, GenePools, Population, and GenePool. Many other functions have also been renamed for consistency. See the 'rename.sh' script in the scripts_sample subdirectory if you need detailed information.
new menu and window system - no longer based on a context menu
'Demo mode' - switch between shows at predefined intervals (usage: theater "ShowManager.switchmode=2;", see switchmode, switchtime, switchshows
in the ShowManager
class)
Framsticks Viewer is now included in the Framsticks Theater (see the -g
switch). There is no separate "viewer" application
double right mouse click and shift+right mouse click can be used to access additional user actions
new, automatic control of simulation speed
added 'boids.show', a classic simulation of 3D flocking behavior
added 'fireflies.show', a simple example of inter-creature communication using custom neurons
added 'learn_food.show', a show that illustrates lifetime knowledge sharing and its influence on finding resources and exploration/exploitation of the environment
added 'framsbots.show'
added beat (sound) to the 'dance.show'
Framsticks Server is no longer a separate application. The CLI (Command-line Interface) can act as a server, see the -n
option
added hierarchical and combined queries with the "+" sign, like
get /simulator({expdef,running},/populations/groups/+/creatures/+({name,energy},/(parts{x,y,z},joints{p1,p2})))
introduced version 4 of the server protocol and a new "request_id" command
no longer breaks large data chunks on Windows
other improvements and fixes
New server, CMS-based site and forum
New movie: autumn style and rigid body simulation
gravity can be adjusted (World parameters)
new option to prevent building a creature if its genotype is not entirely correct (Error reporting/Fail on warnings)
in all experiment definitions, new option to control initial orientation of newborn creatures
three new OpenGL styles (football, space and laboratory)
fixed an old problem with 3D objects disappearing occasionally in the OpenGL view
fixed (for compatibility) the neuroanalysis.expdef
fixed rare problem in neuroanalysis.expdef: square_root(small_negative_number)
fixed behavior of experiment definitions loaded one after another
added the "mazes" experiment definition to evaluate (and evolve) creatures moving between two specified points in a maze
added the "evolution demo" experiment definition that visually shows the mechanisms of evolution (selection, mutation, crossing over, fitness, optimization)
added the "text writer" experiment definition (as well as the fonts.gen file) to display moving texts built of letter-like creatures
defined default values for the most important simulator parameters
the simulator is now reset to its default state before changing or reloading experiment definitions and before loading experiments. A parameter in the Files section can be used to restore the old behavior. The simulator can also be reset to default on demand (from the GUI or script)
OpenGL standard.style sets brightness of creatures according to their energy level
OpenGL matrix.style assigns random colors to food pieces (depicted as computers)
fixed occasional "Invalid FP operation" bug when displaying creature models in OpenGL
fixed 'f0' mutation bug for "change part position" operation (it returned only -1..1 absolute coordinates)
fixed 'f0' rare mutation bug which caused an invalid memory access when the Joint was deleted from the Part-Joint-Part genotype
fixed 'f0' rare bug which might cause an invalid memory access when removing a neural connection
fixed 'f1' mutation parameters (probabilities for neural weights and neural properties were mixed)
neurons can now provide 2D drawings to illustrate how they work. This new 2D probe accompanies the standard signal-versus-time probe
forced (from genotype) initialization of neural state 's' for N and Nu neurons is now immediate (previously, the state has been initialized only after the neuron started working)
fixed bug in the Delay neuron (scripts/delay.neuro file)
fixed bugs in the experimental VEye neuron, and enhanced its capabilities
added an experimental visual-motor cortex ("VMotor") neuron for VEye
new, general-purpose "i" property in neural connection (available in f0)
mutation in 'f0' can respect the "delete inhibit" and "modify inhibit" tags in neural connections
command-line simulator fixed so that it stops when the experiment is finished (as in neuroanalysis.expdef and standard-eval.expdef)
performance sampling period is now strictly obeyed (previously, sampling periods could be shorter when the performance calculation was suspended and re-enabled during simulation)
random heightfield map now uses the whole available area (previously, it was clipped)
sample elevation maps added: heightfield_Europe.sim, heightfield_NAmerica.sim, heightfield_Moon.sim
new genotypes available in the *.gen files
this file (history) is now an XML file
type definition syntax for properties slightly changed: "type[subtype] min max default ~enum~..." instead of "type min max [subtype] ~enum~..."
internal windows (used by probes and charts) can no longer get lost outside of the visible area when the parent window shrinks
other improvements and fixes
nested functions are reported as errors
variable scope for declarations inside if/else/for/while is properly limited, which helps in detecting bugs like this: if (1) var x; x=3;
(undefined variable 'x')
Simulator.load
now resets the simulator state to default
Simulator.import
does not switch the experiment definition unless the new flag (64) is used
Simulator.save
and Simulator.export
can be used in any context in the script, but are restricted to the "scripts_output" directory
Simulator.import
's "flag" argument is now optional
Creature and Genotype event functions are no longer required to preserve values of LiveLibrary.creature and GenotypeLibrary.genotype; they are maintained automatically
fixed bug in object.[expression]=expression;
fixed usage of (object_expression)
instead of (object_expression!=null)
- which also fixes the Sf neuron
fixed bug in expression.member+=...
, expression.member*=...
etc.
added Neuro.neuroproperties
which provides access to custom neuron fields in Creatures
scripting neurons have their default public fields set according to their extended "prop: type" value
new Model.numconnections
field (analogous to Genotype.nncon
)
neuron connection information and weights can be retrieved from NeuroDef
objects (i.e. from the Model
), see NeuroDef.getInput...
methods
MechPart
orientation available for scripting
String.split
returns null for the null argument
scientific notation (1e23
) is now supported in scripts and string-to-number conversions
hexadecimal notation (0x...
) is recognized during string->integer conversion, as in x=1+"0xA"
Creature.rotate(rx,ry,rz)
function added
Creature.buildproblems
field added
"style" object renamed to "VisualStyle"
new *_model_update
functions for *.style files
new field, VisualModel.color
, can be used to paint the whole model
new fields: VisualModel.style
, VisualModel.args
, VisualModel.getArg
can be used in *.style scripts
new field, VertexBuilder.twosided
, to create two-sided polygons easier than with Material.disable(GL.CULL_FACE)
new functions in the Math object
new "creaturescircle.script" macro, which arranges living creatures in a circle, and puts the tallest in the middle
fixed problems with @include
used in visual style subdirectories
fix: in script-defined neuron files, public and private fields can be declared in any order
added an option to reduce the number of genotypes by identifying the best subset of representatives
the Body & Brain animations are no longer stopped when the simulation is running but stopped by some modal window
fixed occasional "Division by 0" bug when displaying hints for neurons in big neural networks
Each "Export current scene" for POV-Ray regenerates the world.inc file
added the 'povray' subdirectory with sample *.pov files and various rendering styles (standard, robot, planet, matrix, etc.)
new POV-Ray rendering styles: autumn (chestnuts and matches) and wookie (from Star Wars)
a message is displayed when trying to probe a non-living neuron (genotype-based instead of creature-based)
the 'scripts_output' subdirectory is automatically created during installation
added new "evolution demonstration" and "text writer" shows
the simulator state is reset to default before a new show is loaded
the new DynaChart2D
class is available (for X/Y charts). See the reproduction.show for an example
all show definitions have been adjusted to use the new and safe Simulator.import
instead of Simulator.load
the "Quit" menu item is automatically added if a show doesn't supply its own "quit" property
added the official Framsticks tutorial
added summary of all experiment definitions and their settings
enhanced FramScript classes documentation
FramScript syntax highlighting configurations available for some editors
FramScript beautifier available
muscles obey forced (neuroprobe) stimulation
OpenGL height field ground is now rendered properly (was shifted by one unit)
in 'standard.expdef', superfluous creatures/food items are removed following the population capacity value that has been set
added 'standard-eval.expdef', an experiment definition which accurately evaluates all loaded genotypes one by one
charts can be drawn in the 'reproduction.expdef' (added Simulator.checkpoint() call)
mutation in f0 can respect the new "delete inhibit" and "modify inhibit" tags which can be set individually for each Part, Joint and Neuro
crossing over in f0 preserves bodies when parent bodies are identical
camera rotation using mouse click fixed (would sometimes ignore mouse control)
"NN random initialization" parameter now really influences the initialization
added an experimental vector eye ("VEye") receptor
world size limit increased to 1000 units
other improvements and fixes
operators ++, --, +=, -=, *=, etc. work in all cases: with variables, object members and globals
more detailed runtime error reporting (null objects, field/function mistakes)
Vector.clear() and Dictionary.clear() bugs fixed
Dictionary.find(), Vector.find(), Vector.avg() and Vector.stdev() added
division by zero errors are handled by the Framsticks Virtual Machine now
renamed "cam" to "TrackingCam" (only affects the *.show files)
Simulator.autosave() name changed to Simulator.checkpoint() - used for performance sampling for charts, and for autosave
matrix.style rewritten using FramScript (FVM assembler was earlier used)
fixed a bug when using manipulator intensively, which would sometimes cause an exception
teleportation is blocked while using manipulator on a creature
fixed a problem of retaining old show settings when a new show is selected
fixed a problem of disappearing "Visual style" submenu
more OpenGL visual styles
manipulator can be used to grab creatures
added the "dance", "race" and "touch of life" shows
"presentation" show instead of "walking" and "swimming" shows
"F" key can be used to display/hide the current frames per second rate
show improvements
attributes and functions are sorted alphabetically
'creation placement' option added in "standard.expdef" (possible values are 'Random' and 'Central')
"standard-tricks.expdef" file added as an example of advanced fitness customizations and forced creature movement
"standard-log.expdef": similarity reports and gene pool dump added
"standard-maze.expdef" file added as a sample of simple maze experiment
all *.gen files with genotypes are based on the Framsticks Experimentation Center checkout
connection weight for muscles is now effective, which may affect compatibility of some genotypes
muscle input signal is now reduced to the [-1,+1] interval (affects only rare input neurons with weight>1.0)
Genotype's "Copies" changed to "Instances" (better name)
statistics averages take into account the number of genotype instances now
OpenGL 3D large worlds are no longer clipped
OpenGL ground plane is rendered lower so that creatures are more visible
in OpenGL styles with dedicated subdirectories, the style file name must be "this.style"
improved generic mutation procedure for integer and floating point properties
fixed a bug in mutation of integer neuron properties (which caused "Invalid FP operation" message)
f0 mutation will not add parallel neuron connections now
f1 proportional crossover redesigned: preserves the number of parent neurons in children
f4 mutation probabilities are now more clear and user-friendly
new, general-purpose "i" property in Part, Joint and Neuro objects (available in f0 and scripting)
"M"-type map allows for more flexible world heights definition
bug fixed (genetic operations referring to the scripting neurons)
Vstyle can be changed after the creature is built (but before it is displayed)
#include "filename" can be used in any framsticks format files (gen, sim, expt, expdef, etc.)
genotype user1/2/3 fields are no longer skipped when reading files
NN layout function improved
Class Browser provides more detailed information about functions and object fields
beautified all FramScript source files
other improvements and fixes
@include "filename" available
new operators: % (modulo), << (shift left), >> (shift right)
do...while loop available
fixed the "return inside switch" bug
(object_expression) can be used instead of (object_expression!=null)
ClassName.* notation introduced for static object references
added function references ("call" and "function" operators)
pointers to functions available
access to Simulator.time added
neuron definitions can be reloaded
files can appear immediately, without closing the File object (File.createDirect/appendDirect/flush)
numerous extensions of classes (Creature, Geno, Model, File, String, and many others)
File.createDirect(...) allows to save directly to a file within the "scripts_output" subdirectory
advanced random generators available in the Math object
Dictionary object fixed
functions can have multiple names ("function a,b,c()")
UserEvents are now in FramScript - no VM assembler (see scripts/standard_events.inc)
senseCreaturesProperty can be used for Vectors (eg. "user1[7]")
Genotype 'user' field values handled properly when operating on Genotype
new "onUpdate" events (analogous to onKill and onBorn events)
better protection against some programming errors
improved program behavior when it is invoked from another directory
performances of individuals are now refreshed for all populations
performances of individuals can be sorted
the number of genotype instances is now reported in the caption of the gene pools window
when resizing columns, all groups (gene pools/populations) are affected now
added the "Console" window for entering FramScript commands directly
keyboard shortcuts can now be used to show/hide windows
simulator statistics charts added
simulation speed can be limited by the frames-per-second setting in the World window
added "Save" button for "memory files" generated by Framsticks in runtime
performance charts can be cleared
selecting individual Parts is now supported in Body&Brain windows, and mapping to corresponding genes is handled
more command-line arguments, including many visual style options
first official release!
numerous updates
introduced argument names and types for procedure calls
numerous updates
new "blocks-style" movie
the Messages window is cleared every 500 messages
fixed exporting of the World window OpenGL images
when any of the world scene exports is enabled, "[exporting]" appears in the title bar
improved f0 crossing over for f0 genotypes with relative ("delta") joints
f0 crossing over now tries to repair offspring with exceeded maximal joint length
beautified all genotypes in .gen files
added "Validate" GUI command for genotypes (forces genotype validation; should not be generally needed)
mouse wheel and middle-button drag control zoom in FramsView
Ctrl-C and Ctrl-Break are handled in scripts (onBreak) and command-line ("simulate until interrupt")
fixed the \" problem in the FramScript compiler
improved handling of global variables in FramScript
added unary minus operator in FramScript
added String.format function in FramScript (works like sprintf())
fixed bug in Math.time under MS Windows (was going in reverse direction)
fixed "save file" ("sa") bug in command-line
new version of Framsticks Experimentation Center (FEC) site available
Framsticks_Manual.pdf available, containing the most important HTML reference pages
new movie available on the web site (fuzzy control)
web site and documentation updates
many other improvements
fixed displaying "user fields" in genotypes
ChMux (channel multiplexer) neuron fix
ChMux_Test source added as an example ("chmux.neuro" file)
neural network drawing can be configured in Body windows (none/neurons only/full)
"standard-log.expdef" file added as an example (logs all genetic operations)
fixed different green OpenGL textures for different stick assimilation levels
added toHTMLshort action in GenMan (returns a shortened genotype as colored HTML)
added more detailed descriptions for neurons
other improvements and fixes
fixed syntax problem with unknown ID while rendering some *.pov files
fixed invalid memory access when enabling POV-Ray export
fixed "matrix" OpenGL style
added FramScript documentation (contexts, classes, ...)
"arena" and "matrix" OpenGL style source files translated from FVM assembler to FramScript
improved refreshing gene pool data in some cases
other improvements and fixes
improved handling of minimum/maximum/default values for properties
neuron state computation protected against huge values (>10^10)
fixed problems with GUI list sorting (which might have caused program instability)
new, better algorithm for estimating similarity; old method also improved
improved "Compare/Cluster" window
added option to save dissimilarity matrix in a text file
fixed bug in generational.expdef (regarding default fitness formula)
added reproduction.expdef, a simple spontaneous evolution demo experiment
shadows under apples in OpenGL view are properly cast
added toHTML action in GenMan, which prints a HTML-colored genotype
optimized f4 genetic operations
added quiet mode (-Q) in command-line
added switch statement (switch/case/default keywords) in FramScript
added vectors (arrays) and [] operator in FramScript
rewritten 3dobj\*.style files from FVM assembler to FramScript
added "Smell food" neuron (Sf) and "Noisy" neuron (Nn) - defined in scripts\*.neuro files
"Water detector" and "Energy level" neurons are no longer experimental
added "cliutils.ini" file for command-line frams. It provides samples of frams batch usage
other improvements and bug fixes (fitness/similarity, "Threshold" neuron)
neural network drawing can be configured in World windows (none/neurons only/full)
updated similarity measure
improved stability in water of sticks with high volume
Part's volume (vol) property replaced by density (dn)
fixed "Invalid FP operation" for Sinus and Water neurons
updated 'standard.expdef' (caused program hang-up when removing worst genotypes)
optimized drawing of UPGMA clustering
line comments in command-line interface can now be written //like this
fixed autosave bug
fixed problem with exceeding gene pool capacity in some situations
standard experiment definition: added "creation height" parameter
standard experiment definition: added "food's genotype" parameter
optimized normalization of performance values
energy income and energy balance values support ingesting energy balls
added two methods: Math.seed and Math.time
better discrimination between sources in FVM assembler and FramScript
number of parameters is checked in FVM calls
fixed problem with refreshing Groups window when groups are removed
Performance Charts: only reasonable properties can be selected and visualised
command line interface: improved command-line parameters
other improvements
POV-Ray export feature added
OpenGL image export feature added
high-level programming language (FramScript) translator for FVM (Framsticks Virtual Machine)
class browser to browse available FVM classes, functions, variables, etc.
new experiment definitions: generational.expdef and neuroanalysis.expdef
added "Aging time" parameter responsible for increasing idle metabolism
energy balance considers assimilation, muscle static work, and muscle dynamic work
change in standard.expdef: 'idle metabolism' parameter concerns single step (no longer 100 steps)
'data' subdirectory renamed to 'scripts'; 'data\*' no longer used
genetic operators (mutation, crossover) for f0 genotype format
minor change in f0 genotype format: names of some properties must be explicitly specified
improvements and changes in f1 format
support for any (new) neurons in f1, as well as their properties
old-style f1 genotypes still recognized
rewritten f1 genetic operators: better properties, better validation and checking
f0 and f1 mutation uses the same procedures and has the same characteristics now
improvements in syntax highlighting of f0 and f1 genotypes
improvements in reporting and showing error position in genotypes
f4 developmental encoding converter to f0 updated to follow new GDK standards (no more neuroitems, etc.)
no more old GDK standard (neuroitems) in all Framsticks code
GenMan behavior improved (checking, validating, mutating, crossing over) to follow new Geno_fx standards
multiple genetic operators allowed for single genetic format (one of them must be active)
better information about genetic operations count: valid, validated, invalid, failed
generation counter added for each genotype
support for multichannel neuron outputs
many new neuron types added
turning on/off simulation of particular neurons
turning on/off mutation add of particular neurons (concerns f0 and f1 formats)
removed display of normalized criteria and similarity values for genotypes
improved performance when dealing with large gene pools: normalization and similarity computed on demand
fix: neural probe did not appear instantly under some conditions
water level is visible in world view
"Build problems", if present, can be reviewed in Body&Brain windows' context menus
better interface for multiple gene pools and populations
drag and drop possible between gene pools and between populations
added "Unsort" action in gene pools, and nicer sort column icons
creatures' icons in populations lists depict their actual look (no longer size only)
user actions are disabled when they are impossible to perform
added "Mutate" action in genotype edit window
"Flatten" option to improve exported scene files
added error reporting level setting (details, summary, ignore)
support for files generated by Framsticks on-the-fly (like neurons report)
textures can be disabled now (simplifies OpenGL rendering)
smooth shading can be disabled now (simplifies OpenGL rendering)
other improvements and fixes, not visible but important
rewritten and re-organized source. Only major changes mentioned below:
added scripting assembler language and Framsticks Virtual Machine (FVM)
experiment definitions and system behavior are now script-controlled!
Most of v1.xx behaviors are now defined by a script file (standard experiment definition)
OpenGL visualization is script-controlled!
support for genotype grouping (in gene pools) and simulated objects grouping (in populations)
f0 format announced; physical simulation engine uses f0 now
GDK released which allows users/developers to cooperate with Framsticks genetics engine
added phylogenetic analysis feature
added similarity estimation/UPGMA clustering tree feature
added trace of all genetic operations
added genetics statistics
added initial population seed
added better control over all genetic format operators
a few improvements in f1 genetic operators
f1 only incompatibility: minor change (fix) in interpretation of 'L' modifier
S (smell) receptor neural weight is no longer ignored
improved and extended f4 developmental genetic format
removed limitation of genotype length to 10000 characters
fixed bug in sigma-truncation and linear scaling
'waiting4stabilization' period is now separated from performance measurement period
measurement periods are now independent for each living individual
"experiment state" support added: *.expt files contain state (snapshot) of experiment process
all functions use 32-bit random number generator now
simulation steps counter is now 64-bit
fixed exception caused by very small performance values
removed exception when running Framsticks.exe with no registry write rights
added drag & drop of genotypes to individuals list and artificial world window
added copy vector graphics (metafile) to clipboard for all applicable windows
fixed interface bug "Division by zero" when setting update rate to "Ever"
new engine for management of structural graphical objects employed
visualization colors/look and user control are now platform-independent
all simple views can be rotated - added 3D projection support
optimized OpenGL texturing
added structure view in OpenGL
in NN view, connections' colors correspond to output signals, and inputs' colors correspond to weighted signals
improved NN view, more options available
improved camera
support for multiple body&brain windows, as well as multiple world ("spy") windows
support for many script events (world windows: shift + right mouse button)
much improved body and brain windows; mutual connections between body and brain are visualized (selection)
genotype window shows genes responsible for selected phenes (fragments of body and brain)
much faster syntax highlighting (coloring genes)
added 'hint' messages (little helpful infos) for many displayed objects
sketch animation oscillates when the simulation is paused due to some reason
layout now adjusts to work area size (observes taskbar location)
added drag&drop of *.gen, *.sim, and *.expt files to the main window
list windows are smarter
improved generic parameters window
added support for color selection and actions (buttons)
colors for simple views can be adjusted
added "unseen messages" count
much nicer OpenGL visualization
scene export in a range of file formats
overall aesthetic improvements
updated program documentation in English and Polish
added program documentation in French