___________________________________________________________________
-------------------------------------------------------------------
     Name: GAucsd  Date: 920707  Version: 1.4  Patchlevel: 0
-------------------------------------------------------------------
<<<<<<<<<<<<<<<<<<                             >>>>>>>>>>>>>>>>>>>>
<<<<<<<<<<<<<<<<<< DO NOT EDIT ABOVE THIS LINE >>>>>>>>>>>>>>>>>>>>


Congratulations - it looks as if you have successfully unpacked the
source files for GAucsd 1.4 into this directory.  Instructions  for
the installation and use of the system are in the ``User's Guide to
GAucsd 1.4'' in the file GAucsd.doc.  A PostScript version  can  be
obtained  -- along with other related material -- via anonymous ftp
from cs.ucsd.edu (132.239.51.3), directory pub/GAucsd.

GAucsd has been developed in a Unix environment, but should be easy
to port to any platform that has a C compiler, and the make and awk
utilities.  A Unix 'sh' compatible command shell is helpful but not
necessary -- see the User's Guide for details.

NOTE: The installation procedure has changed significantly from the
previous version.  Even if you are familiar with GAucsd, you should
take a quick look at the installation section in the User's Guide.

Share and enjoy!

- Nici Schraudolph.                        San Diego, 7th July 1992


Changes since 1.2:
=================

Many thanks to those who spotted problems -- they are noted below
next to "their" bug.

1) Bug Fixes
------------

- random generator does not get stuck in a loop anymore; a patch
  for this was distributed back in '91  (Peter J.B. Hancock)

- five missing values in second row of 'a' array in f5.c are now
  supplied  (Bruce Rosen)

- avg and var arrays in report.c are now dynamically allocated
  to prevent overflow  (Richard E. Gillilan)

- the wrapper and Ctoi() can now handle very long genes, including
  those longer than the machine's integer size  (John C. Schultz)

- a missing external declaration for _eval() has been supplied in
  best.c  (Sabih Gerez)

- simultaneous use of the subdirectory and remote execution features
  in non-shared file space works now; min and cpt file names are still
  not treated quite right though


2) Portability
--------------

Special thanks to Daniele Montanari for sharing his experiences in
porting GAucsd to DOS, and thus facilitating many improvements.

- all filenames are now DOS-friendly; e.g. "init.foo" --> "foo.ini"

- the use of popen() and pclose() in setup.c has been eliminated

- problems with GNU's gawk and "picky" C compilers have been resolved

- the two makefiles have been merged to simplify customization; the
  merged file now uses macros to achieve high portability

- to reduce the frequent name clashes between GAucsd utilities and other
  software, "ex" and "go" have mutated into "gx" and "ga" while "setup"
  has metamorphosed to "inset"

- more support for heterogenous environments: library and utilities
  are now compiled into machine-specific subdirectories

- the cryptic and Unix-specific "make dir" installation step has been
  replaced with the "GAUCSD" environment variable  (Dave Demers)


3) Other Changes
----------------

- structured source tree with src, usr, bin & etc subdirectories

- the default population size suggested by "inset" is now a little
  more reasonable (the usual disclaimers still apply though!)

- by popular request, crossover rate is now entered in "inset" on
  a per-individual basis again, with a dynamically computed default

- the obsolete "clean" shell script has been thrown out

- define.h now uses <limits.h> to get machine constants (Norman Barth)

- global.h and extern.h have been collapsed into a single file to
  improve code consistency


Changes since 1.1:
=================

1) Incompatibilities
--------------------

- the "ckpt" file format has changed;

- the Unpack() function used by low-level evaluation functions no longer
  has a "length" parameter;

- due to a new feature (see 4) below) low-level evaluation functions may
  be called with a negative "length" parameter.  The minimum action re-
  quired to maintain compatibility is to insert "if (length < 0) return;"
  at the start of your old "eval()" or "_eval()" functions.

Note that the 1.2ucsd "wrapper" takes these changes into account; your old
high-level evaluation functions can therefore be used without modification.

2) Bug Fixes
------------

- the non-portable bzero() function is no longer used;
- a bug causing the very first bit to always mutate has been fixed;
- problems with fully converged populations have been dealt with;
- sigma scaling no longer causes a small inadvertent generation gap;
- flawed genotype comparisons in cross.c and elitist.c have been fixed;
- bugs in the schema performance calculations have been corrected;
- restarts don't cause extraneous lines in the "out" file anymore;
- "go" no longer removes old out files (this has mangled restarts).

3) Refinements
--------------

- floats are printed out with more precision in various places;
- there's more validity checking when reading "in" & "ckpt" files;
- the experiment counter now starts at one, not zero ("ckpt" file);

- there is no more "length" argument to Unpack() since this function
  produces garbage unless "length" is invariant;

- the min file may now contain duplicate genotypes if they cause differing
  entries due to DPE, anti-aliassing ('A') or stochastic evaluation ('a');

- the source for the "random()" number generator has been included in the
  distribution, eliminating the need to compile with "#ifdef genrand" on
  non-BSD systems;

- since an immediate abort of the simulation may leave the data files in a
  corrupt state, a third level of urgency - quit after current generation -
  has been added to the signal handler.  INT (^C) signals are now caught as
  well as TERM (kill) signals.

4) New Feature
--------------

The "min" files now also contain "phenotypes" (ie. the decoded parameters
to the fitness function) along with the encoded genome; this greatly aids
the interpretation of the file.  To make use of this feature, low-level
"eval()" or "_eval()" functions must return a string describing the most
recently evaluated phenotype when called with a negative "length" para-
meter.  This can be achieved by making the variables holding the phenotype
static - see file "f1-ga.c" for an example.  For high-level evaluation
functions the "wrapper" provides phenotype descriptions automatically.



Changes since 1.0:
=================

1) Bug Fixes
------------
- "go" can now handle remote execution when "l" flag is not set;
- fussy shells no longer complain about missing )'s in "go";
- the non-portable cbrt() library function is no longer used;
- a bug in the fitness scaling algorithm has been fixed.

2) New Features
---------------
- subdirectory structure for data files;
- re-editing of "in" files;
- application-specific parameters;
- sigma scaling;
- stochastic decoding for continuous search spaces ('A');
- super-uniform population initialization ('u');
- Dynamic Parameter Encoding (DPE).


Changes from GENESIS 4.5 to GAucsd 1.0:
======================================

1) Bug Fixes
------------
John Grefenstette's published 4.5 bug fixes:
- changed random seeds from int to unsigned int;
- corrected cross.c, line 81 to use i instead of temp;
- correct crossover if crossing points are within same byte.

Problems with machine-dependent data formats:
- get char and int sizes from <values.h>;
- modified use of bitmasks to allow for differing char sizes;
- corrected built-in Rand() to allow for differing int sizes;
- changed a number of variables from int to long.

Other sundry bugs:
- cross.c starts diff after Xing segment at xbyte2 + 1;
- prevented computation of log(0.0) in calculation of Mu_next;
- "go" without suffix reports to file "report", not "report.";
- "clean" stays quiet when it can't find optional files;
- made user input fields in setup.c longer (30 characters);
- repaired signal bell to ring when experiment terminates.

2) Code Improvements (Consistency & Efficiency)
-----------------------------------------------
- collapsed IN_FORMAT and OUT_FORMAT to single constant;
- introduced symbolic constant for checkpoint file format;
- genes are no longer unpacked for mutation;
- use random() generator, saving its entire state in dumps;
- diff outside Xing segment is computed more efficiently in cross.c;
- modified Makefile to better reflect dependencies.

3) Improved User Interface
--------------------------
- eval file name is default file suffix;
- "clean" exits on "" (instead of "q");
- maintain and start several named simulation queues for "ex";
- user notification upon completion of queue execution;
- better diagnostics from "report" in case of irregularities;
- crossover rates greater than 1.0 possible;
- setting "Max Gens w/o Eval" to 0 disables this feature;
- zero report interval reports on initial and final generations only;
- "G=..." line in go, ex and UserMakefile generated automatically;
- eval function may use packed gene directly for added speed;
- kill signals are caught for orderly termination.

4) Major Departures from 4.5
----------------------------
- MUTATION macro always flips one bit by default;
- dynamically computed default values in "setup";
- C_rate is entered on a per-bit basis;
- new termination criteria (Bias and Conv thresholds);
- wrapper for eval functions automates genotype decoding;
- ex/go can distribute simulations to remote machines.
