_______________________________________________________________________________

  The Watchmaker Framework for Evolutionary Computation - Version 0.7.1
   (http://watchmaker.uncommons.org)
  Copyright 2006-2010 Daniel W. Dyer (http://www.dandyer.co.uk)
_______________________________________________________________________________


1). Getting Started
-------------------

Please refer to the included LICENCE.txt and NOTICE.txt files for terms of use.

  User Manual:    http://watchmaker.uncommons.org/manual/index.html
  API Reference:  http://watchmaker.uncommons.org/api/index.html

Source code for several example programs is included in the distribution.

The examples can be run with the following command:

    java -jar watchmaker-examples-0.7.1.jar

This will list the names of available example applications.  Then just run the
command again with one of those names as an argument.


2). Library Dependencies
------------------------

The following bundled JAR files are required by all programs that use the
Watchmaker Framework:

  watchmaker-framework-0.7.1.jar        (Apache Licence 2.0)
  uncommons-maths-1.2.1.jar             (Apache Licence 2.0)
  google-collect-1.0.jar                (Apache Licence 2.0)

These additional JAR files are required to use the Watchmaker Framework Swing
components:

  watchmaker-swing-0.7.1.jar            (Apache Licence 2.0)
  jfreechart-1.0.13.jar                 (GNU LGPL 2.1)
  jcommon-1.0.16.jar                    (GNU LGPL 2.1)

Example applications are included in the watchmaker-examples-0.7.1.jar file.
This file is not required by other applications that use the Watchmaker
Framework.
