| Changes in version 0.7.2 |
| ------------------------ |
| |
| * Fix for StatusBar timer being reset at each epoch in island evolution |
| (ISSUE#19). |
| |
| * Added RandomMigration as an alternative strategy for island evolution. |
| |
| |
| Changes in version 0.7.1 |
| ------------------------ |
| |
| * Added EvolutionStrategyEngine to provide both (mu+lambda) and (mu,lambda) |
| evolution strategies. |
| |
| * Use final version of Google Collections 1.0. |
| |
| * Tweaked concurrency settings in IslandEvolution (no need for more than one |
| thread per island). |
| |
| * Fixed look-and-feel issues in example applets (make sure all components are |
| created after the look-and-feel is set. |
| |
| * Reverted 0.7.0 change to generation numbering in AbstractEvolutionEngine. |
| Numbering is correct if the initial population is considered to be the first |
| generation. |
| |
| |
| Changes in version 0.7.0 |
| ------------------------ |
| |
| * Refactored internals to make it easier for the framework to provide different |
| evolutionary algorithm variants. Different types of evolutionary algorithm |
| are supported by different sub-classes of AbstractEvolutionEngine, with |
| different implementations of the nextEvolutionStep method. The main |
| EvolutionEngine implementation is now called GenerationalEvolutionEngine. |
| |
| * Concurrency control is no longer supported through inheritance. Removed |
| ConcurrentEvolutionEngine and SequentialEvolutionEngine and added the |
| setSingleThreaded method to AbstractEvolutionEngine. |
| |
| * Added first-class support for steady-state evolution in the form of the new |
| SteadyStateEvolutionEngine. |
| |
| * Added SigmaScaling selection strategy. |
| |
| * Added ListInversion evolutionary operator. Randomly reverses subsections of |
| lists. |
| |
| * Added variable probability constructor to ListOrderCrossover. |
| |
| * Introduced support for island model evolution. |
| |
| * Added islands view to the evolution monitor so that the state of individual |
| island populations can be tracked. |
| |
| * Fixed generation numbering in AbstractEvolutionEngine. It was supposed to be |
| zero-based but was starting at 1, which would cause the GenerationCount |
| termination condition to trigger prematurely. |
| |
| * Ugraded to Uncommons Maths 1.2.1 to take advantage of optimisations. |
| |
| * Optimised the implementation of BitStringCrossover to take advantage of |
| faster bit swapping operation in Uncommons Maths 1.2.1. |
| |
| * Converted BitStringMutation to use a more efficient approach. The |
| probability parameter is now for controlling whether an individual candidate |
| gets mutated, not each separate bit as was the case previously (existing |
| programs should now use higher probabilities accordingly). How many bits get |
| flipped is now controlled via a secondary parameter. |
| |
| * Upgraded to Google Collections 1.0 RC5. |
| |
| * Introduced Swing renderer for example GP trees. |
| |
| |
| Changes in version 0.6.2 |
| ------------------------ |
| |
| * Fix for thread leak in ConcurrentEvolutionEngine (ISSUE#16). Added a |
| finalizer to shutdown the thread pool in FitnessEvaluationWorker so that the |
| active threads do not inhibit garbage collection. |
| |
| * Made the FitnessEvaluationWorker in ConcurrentEvolutionEngine static so that |
| it can be shared by all instances avoiding the unnecessary creation of new |
| thread pools (ISSUE#16). |
| |
| * Made fitness evaluation threads daemons again (as in 0.6.0). Only standalone |
| (i.e. Terracotta) FitnessEvaluationWorkers now use non-daemon threads. This |
| fixes the problem of the JVM not exiting when the program is finished |
| (ISSUE#17). |
| |
| * Better thread naming for fitness evaluation worker threads. |
| |
| |
| Changes in version 0.6.1 |
| ------------------------ |
| |
| * Added getSatisfiedTerminationConditions() method to the EvolutionEngine |
| interface. This makes it easier to determine which TerminationCondition |
| caused the evolution to stop (ISSUE#13). |
| |
| * Improvements to the genetic programming example application. |
| |
| * Made StatusBar component public so that it can be used independently of the |
| Evolution Monitor. |
| |
| * Converted applet-based examples so that they can also run as applications in |
| JFrames. |
| |
| * Introduced Launcher class so that examples can be run easily from the command |
| line. |
| |
| * Changed the Mona Lisa example to accept the URL of an alternate image when |
| run from the command line. |
| |
| * Moved NullFitnessEvaluator from interactive package to framework package and |
| made it package scope. This class is an implementation detail and should not |
| be exposed by the API. |
| |
| * Refactored the ConcurrentEvolutionEngine by moving the code that actually |
| executes FitnessEvaluationTasks into a new class (FitnessEvaluationWorker). |
| This modified design makes it easy to distribute the fitness evaluations |
| using Terracotta (http://www.terracotta.org). |
| |
| * Documented the restriction that fitness scores are not allowed to be |
| negative. Made sure that the framework throws an appropriate, informative |
| exception if a negative fitness is encountered (ISSUE#15). |
| |
| * Documented potential pitfall with using EvolutionObservers to update Swing |
| GUIs (ISSUE#14). |
| |
| |
| Changes in version 0.6.0 |
| ------------------------ |
| |
| * Added the option to view only the most recent 200 generations on the |
| population fitness graph of the evolution monitor. |
| |
| * Fixed a bug that prevented the population fitness view from being reset |
| between runs. |
| |
| * Added more information to the evolution monitor status bar. |
| |
| * Added a boolean parameter to the evolution monitor showInFrame method so that |
| you can specify whether closing the frame should terminate the program. |
| |
| * Enhancements to the Mona Lisa example application (it's now an applet). |
| |
| * Added methods to the EvolutionEngine interface to allow the entire population |
| to be returned from an evolutionary algorithm rather than just the fittest |
| candidate. |
| |
| * Introduced CachingFitnessEvaluator, a decorator for standard fitness |
| functions that caches the results of its calculations. If the evaluator is |
| invoked twice for the same candidate, the cached value is returned by the |
| second invocation thus avoiding the expense of recalculating the fitness |
| score. This is a useful optimisation in scenarios where some canidates |
| survive from generation to generation unmodified (elitism is one example of |
| this). |
| |
| * Introduced dependency on Google Collections (to support the |
| CachingFitnessEvaluator). |
| |
| * Fixed ProbabilityParameterControl so that it allows the slider to move all |
| the way to the maximum permitted value (ISSUE#10). |
| |
| * Moved classes from Uncommons Utils module into the main framework module and |
| removed the util module. |
| |
| * Added SelectionStrategyControl to the Swing module. This control enables the |
| user to change the selection strategy even while the evolution is running. |
| |
| * Upgraded to Uncommons Maths 1.2, which has its own Probability type, so we |
| now use that and the Probability class in the framework package has been |
| removed. |
| |
| * Removed call to System.out.println in ConcurrentEvolutionEngine (ISSUE#12). |
| |
| * Included source code in the release distribution in the form of source JARs |
| for the framework and swing modules (source code for the examples module is |
| already included) (ISSUE#11). |
| |
| * Modified cross-over implementation constructors to accept a number generator |
| for the probability parameter. This allows variable probabilities to be |
| used. |
| |
| |
| Changes in version 0.5.1 |
| ------------------------ |
| |
| * Simplified generics for EvolutionaryOperators. It's now slightly less |
| flexible but the most common scenarios are less cumbersome since there are |
| no 'super' wildcards to deal with when constructing pipelines and no need to |
| deal with sub-types when implementing your own operators. |
| |
| * Added generic type parameters to ListCrossover, ListOrderCrossover and |
| ListOrderMutation to be compatible with the above change. |
| |
| * Added evolutionary art example appliction inspired by Roger Alsing's |
| evolution of the Mona Lisa, see |
| http://rogeralsing.com/2008/12/07/genetic-programming-evolution-of-mona-lisa/ |
| |
| * Added Replacement evolutionary operator that randomly replaces candidates |
| with independent, newly-generated random candidates. Useful for introducing |
| new genetic material into stagnating populations. |
| |
| * Improved ListCrossover operator so that it can work with parents of variable |
| lengths. |
| |
| * Added higher-order evolutionary operator, ListOperator that converts an |
| operator of a given type into a operator that works with lists of that type. |
| |
| * Enhancements to the Evolution Monitor component. |
| |
| |
| Changes in version 0.5.0 |
| ------------------------ |
| |
| * Added wildcard to generic parameter of Console select method. |
| |
| * Added check to ensure that there is always at least one termination condition |
| specified. |
| |
| * Improved reflection in RendererAdapter and InteractiveSelection. Previously |
| they tried to access classes that may not have been visible to them. |
| |
| * Introduced tree-based genetic programming example application. |
| |
| * Added Probability class. This immutatble value type encapsulates a |
| probability value between zero and one. The class enforces the 0..1 bounds |
| and provides convenient methods for working with probabilities. Using the |
| Probability type is an improvement over the previous approach of using double |
| values since there is now no need to duplicate bounds-checking and other |
| logic throughout the code. |
| |
| * Introduced new Swing component (ProbabilityParameterControl) for manipulating |
| Probability parameters from a GUI. |
| |
| * Javadoc improvements. |
| |
| * Relaxed generic constraints on EvolutionObservers (generic type can now be |
| less specific than the EvolutionEngine type). Added wildcard to |
| populationUpdate method of EvolutionObserver to support this. |
| |
| * Renamed StandaloneEvolutionEngine to ConcurrentEvolutionEngine. |
| |
| * Introduced SequentialEvolutionEngine, which performs all work synchronously |
| on the request thread, making it suitable for use in restricted/managed |
| environments that do not permit direct control over threading. |
| |
| * Use only integer labels for the generations axis on the Evolution Monitor's |
| fitness view. |
| |
| |
| Changes in version 0.4.3 |
| ------------------------ |
| |
| * Introduced Utilities module. |
| |
| * Extracted Uncommons Maths module into separate project |
| (see https://uncommons-maths.dev.java.net). |
| |
| * Added new constructor to BitString to simplify the creation of random bit |
| strings. |
| |
| * Improved algorithm for countSetBits() in BitString. New version is |
| significantly faster (10-15 times faster). |
| |
| * Moved BitString class from Framework module into Uncommons Maths. |
| |
| * Added new termination condition to detect when the evolution has stagnated |
| (i.e. the fitness has not improved for a certain number of generations). |
| |
| * Moved the the Swing-specific classes from the framework module into what was |
| the Uncommons GUI module, which is now the Watchmaker Swing module. |
| |
| * Introduced experimental Evolution Monitor Swing component. |
| |
| |
| Changes in version 0.4.2 |
| ------------------------ |
| |
| * Added a second parameter to the FitnessEvaluator interface to enable fitness |
| calculations to take into account an individual's environment (the remainder |
| of the population) when assigning a score. |
| |
| * Minor tweak to improve the distribution of fitness evaluations between |
| threads on multi-processor machines. |
| |
| * Fix for ISSUE#3 (bad Throwable handling in InteractiveSelection and |
| RendererAdapter) |
| |
| * Made AbstractEvolutionEngine interruptible. |
| |
| * Added new constructor to StandaloneEvolutionEngine to allow users to provide |
| a custom ThreadFactory. |
| |
| * Fix for ISSUE#4 (unreliable final result with non-natural fitness function). |
| |
| |
| Changes in version 0.4.1 |
| ------------------------ |
| |
| * Added new constructors to NumberGenerator implementations to enable the |
| parameters to be dynamic. |
| |
| * Several more unit tests for significantly improved coverage. Fixed 2 minor |
| bugs detected by these new tests. |
| |
| * Added some GUI control components to assist in building Swing GUIs for |
| evolutionary programs. |
| |
| * Moved the SwingConsole class into the new Swing components package |
| (org.uncommons.watchmaker.swing) so that the core framework does not contain |
| any dependencies on a particular presentation layer. |
| |
| * Added evolutionary Sudoku solver example application. |
| |
| * Included source code for the examples in the release archives. |
| |
| |
| Changes in version 0.4.0 |
| ------------------------ |
| |
| * Introduced framework support for interactive evolutionary algorithms. |
| |
| * New example application based on Richard Dawkins' biomorph experiment. |
| Demonstrates the new interactive features of the framework. |
| |
| * Added new, extremely fast RNG - a Java port of Tony Pasqualoni's cellular |
| automaton RNG (http://home.southernct.edu/~pasqualonia1/ca/report.html). |
| |
| * Added ordered cross-over evolutionary operator for lists. |
| |
| * Updated Travelling Salesman applet to optionally use cross-over as well as |
| mutation. |
| |
| * Introduced TerminationCondition interface and useful default implementations. |
| Changed evolve methods in EvolutionEngine to take one or more conditions |
| instead of explicitly specifying parameters such as number of generations, |
| target fitness and timeout. |
| |
| |
| Changes in version 0.3.0 |
| ------------------------ |
| |
| * Removed java.util.BitSet operators and candidate factory. BitSets are |
| somewhat lacking as a generic bit string for genetic algorithms. |
| |
| * Introduced a new general-purpose BitString type with an associated candidate |
| factory plus mutation and cross-over operators. |
| |
| * Added probabilities to cross-over implementations so that parents may |
| sometimes pass through the operator unaltered. A similar effect could have |
| been achieved previously by combining the cross-over operator with a |
| SplitEvolution operator that processed some of the individuals with an |
| IdentityOperator, but this is more straightforward. |
| |
| * Modified cross-over operators so that the cross-over index is always |
| non-zero. This means all cross-overs are meaningful. With a zero index, |
| each parent is split before the first position, making the cross-over |
| effectively a no-op. This change was required in order to honour the new |
| cross-over probability, and is also sensible in its own right. |
| |
| * Removed varargs constructor from EvolutionPipeline since it was impossible |
| to invoke without generating a compiler warning about generic array |
| creation. |
| |
| * Fixed very slightly skewed probability in StringMutation. |
| |
| * Fixed bug in RouletteWheelSelection. |
| |
| * Improved Travelling Salesman applet to allow different selection strategies |
| to be applied. |
| |
| * More unit test cases and improved API documentation. |
| |
| |
| Changes in version 0.2.2 |
| ------------------------ |
| |
| * Renamed classes for generating random values from various probability |
| distributions. Now called "generators" rather than "sequences" in order to |
| avoid confusion with mathematical sequences. |
| |
| * Changed terminology for different fitness scoring schemes to be consistent |
| with the literature (what was called 'normalised fitness' is now called |
| 'natural fitness'). |
| |
| * Refactored fitness-proportionate selection strategies. |
| |
| * Fixed tournament selection bug. |
| |
| * Moved the compound evolutionary operators (SplitEvolution and |
| EvolutionPipeline) introduced in the previous release into the operators |
| package. |
| |
| * Introduced an IdentityOperator for use with SplitEvolution to enable some |
| candidates to be preserved unchanged (this is different from elitism |
| because it does not depend on fitness). |
| |
| |
| Changes in version 0.2.1 |
| ------------------------ |
| |
| * Reworked evolutionary operators to allow more flexibility. Specifically, |
| evolution can now be split into separate streams, which enables common |
| genetic programming techniques to be used. |
| |
| * Simplified the use of generics within the API. |
| |
| * Fixed bug with pre-seeding populations. |
| |
| |
| Changes in version 0.2 |
| ---------------------- |
| |
| * Added support for concurrent fitness evaluations to take advantage of |
| multi-core and multi-processor machines. |
| |
| * Modified the way elitism is configured (the number of candidates to preserve |
| is now specifed as an argument to the evolve method of the EvolutionEngine). |
| |
| * Converted the Travelling Salesman example program into an applet that allows |
| parameters to be tweaked and performance to be compared to a brute force |
| implementation. |
| |
| * Fixed RNG seeding to work in an untrusted applet environment (previously |
| SecurityExceptions were thrown when attempting to access resources for |
| seeding). |