Package com.rubecula.darwin.startup

Startup (overall description of Darwin 2 framework)


Class Summary
Darwin Class to start up a Darwin application (not an applet).
Darwin.DarwinClassLoader Darwin's own class loader.

Package com.rubecula.darwin.startup Description

Startup (overall description of Darwin 2 framework)


Copyright Notice

Darwin Framework Project.
Copyright (C) 2003, 2007, 2009 Rubecula Software.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

CVS Version: $Revision: 1.3 $

Back to Top

Here's an update of the (original) registration text for this project:

This project provides a set of framework classes for the development of Evolutionary Computation applications in Java. Such applications, which might be classed as genetic algorithms, genetic programming, etc., enable problems, typically complex and non-analytical, to be solved by successively evaluating a population of possible solutions and breeding from the better-fitting solutions to generate a new population. The code is platform-independent. It is our intention to make this project a resource which can be used and or contributed to by anyone working in the field. As such it is designed to be extremely general in its class structure, with a well-defined separation between method (framework) code and application code.

Back to Top

Darwin 2 Features

The Darwin famework has undergone a major overhaul during 2009 and is now referred to as Darwin 2. The major changes include:

As described below, the framework is infinitely flexible but you are probably interested to know what's implemented "out of the box":

Darwin Philosophy

Here are some of the tenets of the philosophy behind the design and development of Darwin and Darwin 2:

Back to Top

Programming Conventions


Setter Methods
Take care when putting a setter method (that sets a bean property) into an interface. The bean setters (reflection, dependency injection, etc.) do not need the interface and the interface may encourage other beans to set that property indirectly. This can cause hard-to-diagnose problems when a property is set by dependency injection and then at some later time set by the action of another bean.

Back to Top

Class Structure

The following is an introduction to the major classes and interfaces of the Darwin package. Use it as a starting point and/or as an adjunct to the javadoc. [NOTE: This section is far from complete - see the javadoc!] However, if there are discrepancies, then the javadoc must of course be considered definitive.  Most of the classes described are found in the com.rubecula.darwin package.  Some utilities, of a more general nature, are found in com.rubecula.util.

Following are descriptions of the Darwin framework interfaces each having a simple concept name: Concept.

Following are descriptions of the Darwin classes.

Back to Top

Important Notes:

The package is bundled with the Jakarta Commons Logging facility, without which it will not compile. You don't need your own logger to work with JCL but a log4j configuration file is provided and, if log4j is in your classpath, it will run as expected.
However, by default, all logging is turned off (logging is directed to the NoOpLog implementation). In order to turn it on, open up (currently in the util package but needs to be moved) and comment out the return new NoOpLog(); line and uncomment the LogFactory.getLog... line.

TODO THIS IS OUTDATED. You will find a working example applet: the PepperedMoth example, in the examples package. This applet has an optional feature provided which allows you to vary the formula expressions (in the options window of the applet). Normally, you will leave this feature off (and filter out the compilation of the Evaluator_JEP class which you won't need). In order to turn this feature "on" you must do the following:

  1. Procure an (open-source) license to JEP;
  2. Re-enable compilation of Evaluator_JEP;
  3. In the config/ file, set the expressionsEnabled property value to true.

A note on the use of constructors

In general, we do not invoke constructors directly in the application code. Any object which is a singleton is normally constructed as a bean and defined thus in the configuration XML file. Furthermore, classes of which there is a small finite number of instances known at configuration time will also be constructed as beans. Such classes must have public constructors in order that the bean container can instantiate them. An object of which there may be an unlimited number of instances, dynamically constructed at runtime, will normally be constructed by a factory class. Such classes will normally have a package-scope constructor and if the objects implement an interface called Concept or extend a superclass called Concept, there will be a factory class in the same package whose name is ConceptFactory.


Back to Top

Last Updated: 2009-10-05 By: Robin Hillyard

Copyright © 2010 Rubecula Software, LLC. All Rights Reserved.