___________________________________________________________________ ------------------------------------------------------------------- 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 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 ; - 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.