385 lines
13 KiB
C
385 lines
13 KiB
C
/* lil-gp Genetic Programming System, version 1.0, 11 July 1995
|
|
* Copyright (C) 1995 Michigan State University
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of version 2 of the GNU General Public License as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This program 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 General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
*
|
|
* Douglas Zongker (zongker@isl.cps.msu.edu)
|
|
* Dr. Bill Punch (punch@isl.cps.msu.edu)
|
|
*
|
|
* Computer Science Department
|
|
* A-714 Wells Hall
|
|
* Michigan State University
|
|
* East Lansing, Michigan 48824
|
|
* USA
|
|
*
|
|
*/
|
|
|
|
#ifndef _PROTOS_H
|
|
#define _PROTOS_H
|
|
|
|
#include <types.h>
|
|
#include "defines.h"
|
|
#include "event.h"
|
|
#include "app.h"
|
|
|
|
extern randomgen globrand;
|
|
extern genspace gensp[GENSPACE_COUNT];
|
|
extern function_set *fset;
|
|
extern int fset_count;
|
|
extern treeinfo *tree_map;
|
|
extern int tree_count;
|
|
extern int ind_nodelimit;
|
|
|
|
|
|
/*** exch.c ***/
|
|
|
|
void exchange_subpopulations ( multipop *mpop );
|
|
void initialize_topology ( multipop *mpop );
|
|
void free_topology ( multipop *mpop );
|
|
void rebuild_exchange_topology ( multipop *mpop );
|
|
|
|
|
|
/*** change.c ***/
|
|
|
|
population *change_population ( population *pop, breedphase * );
|
|
void show_population ( population *p );
|
|
breedphase * initialize_one_breeding ( char *prefix );
|
|
void initialize_breeding ( multipop * );
|
|
void free_one_breeding ( breedphase * );
|
|
void free_breeding ( multipop * );
|
|
void rebuild_breeding ( multipop * );
|
|
char *get_breed_parameter ( char *prefix, char *format, ... );
|
|
|
|
|
|
/*** ckpoint.c ***/
|
|
|
|
void read_checkpoint ( char *filename, int *gen, multipop **mpop );
|
|
void write_checkpoint ( int gen, multipop *mpop, char *filename );
|
|
population *read_population ( ephem_const **eind, FILE *f );
|
|
void read_individual ( individual *ind, ephem_const **eind, FILE *f,
|
|
char *buffer );
|
|
void write_individual ( individual *ind, ephem_index *eind, FILE *f );
|
|
void read_tree_recurse ( int space, ephem_const **eind, FILE *fil, int tree,
|
|
char *string );
|
|
function * get_function_by_name ( int tree, char *string, ephem_const **ep,
|
|
ephem_const **eind );
|
|
void write_population ( population *pop, ephem_index *eind, FILE *f );
|
|
void write_tree_recurse ( lnode **l, ephem_index *eind, FILE *fil );
|
|
void write_hex_block ( void *, int, FILE * );
|
|
void read_hex_block ( void *, int, FILE * );
|
|
|
|
|
|
/*** ephem.c ***/
|
|
|
|
void initialize_ephem_const ( void );
|
|
void free_ephem_const ( void );
|
|
void enlarge_ephem_space ( void );
|
|
void ephem_const_gc ( void );
|
|
ephem_const *new_ephemeral_const ( function *f );
|
|
int ephem_index_comp ( const void *a, const void *b );
|
|
ephem_index *write_ephem_list ( FILE *f );
|
|
int lookup_ephem ( ephem_index *ind, ephem_const *e );
|
|
ephem_const **read_ephem_list ( FILE *f );
|
|
void get_ephem_stats ( int *used, int *free, int *blocks, int *alloc );
|
|
|
|
|
|
/*** eval.c ***/
|
|
|
|
void set_current_individual ( individual * );
|
|
DATATYPE evaluate_tree ( lnode *, int );
|
|
DATATYPE evaluate_tree_recurse ( lnode **, int );
|
|
|
|
|
|
/*** fsetupdate.c ***/
|
|
|
|
void fset_update ( function_set *app_fset );
|
|
|
|
|
|
/*** gp.c ***/
|
|
|
|
void run_gp ( multipop *mpop, int startgen,
|
|
event *t_eval, event *t_breed, int startfromcheckpoint );
|
|
int generation_information ( int gen, multipop *mpop, int stt_interval,
|
|
int bestn );
|
|
void evaluate_pop ( population *pop );
|
|
int accumulate_pop_stats ( popstats *total, popstats *n );
|
|
void calculate_pop_stats ( popstats *s, population *pop, int gen, int subpop );
|
|
void saved_individual_gc ( void );
|
|
saved_ind ** write_saved_individuals ( ephem_index *eind, FILE *f );
|
|
void write_stats_checkpoint ( multipop *mpop, ephem_index *eind, FILE *f );
|
|
saved_ind ** read_saved_individuals ( ephem_const **eind, FILE *f );
|
|
void read_stats_checkpoint ( multipop *mpop, ephem_const **eind, FILE *f );
|
|
globaldata *get_globaldata( void );
|
|
#if defined(POSIX_MT) || defined(SOLARIS_MT)
|
|
void initialize_threading( void );
|
|
void *evaluate_pop_chunk( void * );
|
|
#endif
|
|
|
|
|
|
/*** main.c ***/
|
|
|
|
int function_sets_init ( function_set *, int, user_treeinfo*, int );
|
|
int function_compare ( const void *a, const void *b );
|
|
void free_function_sets ( void );
|
|
void read_tree_limits ( void );
|
|
void initialize_random ( void );
|
|
void pre_parameter_defaults ( void );
|
|
void post_parameter_defaults ( void );
|
|
int process_commandline ( int argc, char **argv, int *gen, multipop ** );
|
|
void output_system_stats ( event *t_total, event *t_eval, event *t_breed );
|
|
void initial_message ( void );
|
|
|
|
|
|
/*** memory.c ***/
|
|
|
|
#ifdef TRACK_MEMORY
|
|
#define MALLOC track_malloc
|
|
#define FREE track_free
|
|
#define REALLOC track_realloc
|
|
#else
|
|
#define MALLOC malloc
|
|
#define FREE free
|
|
#define REALLOC realloc
|
|
#endif
|
|
void *track_malloc ( unsigned long );
|
|
void track_free ( void * );
|
|
void *track_realloc ( void *, int );
|
|
void get_memory_stats ( int *total, int *free, int *max,
|
|
int *mallocc, int *reallocc, int *freec );
|
|
|
|
|
|
/*** output.c ***/
|
|
|
|
int create_output_stream ( int id, char *ext, int reset, char *mode,
|
|
int autoflush );
|
|
void initialize_output_streams ( void );
|
|
void open_output_streams ( void );
|
|
void oputs ( int streamid, int detail, const char *string );
|
|
void oprintf ( int streamid, int detail, const char *format, ... );
|
|
FILE *output_filehandle ( int streamid );
|
|
void output_stream_close ( int streamid );
|
|
void output_stream_open ( int streamid );
|
|
void output_stream_flush ( int streamid );
|
|
void close_output_streams ( void );
|
|
void error ( int severity, char *format, ... );
|
|
void set_detail_level ( int );
|
|
int test_detail_level ( int );
|
|
void flush_output_streams ( void );
|
|
|
|
|
|
/*** params.c ***/
|
|
|
|
void initialize_parameters ( void );
|
|
void free_parameters ( void );
|
|
void add_parameter ( char *name, char *value, int copyflags );
|
|
int delete_parameter ( char *name );
|
|
char *get_parameter ( const char *name );
|
|
void print_parameters ( void );
|
|
void write_parameter_database ( FILE *f );
|
|
void read_parameter_database ( FILE *f );
|
|
void read_parameter_file ( char * );
|
|
int delete_comment ( char * );
|
|
int check_continuation ( char * );
|
|
int parse_one_parameter ( char *buffer );
|
|
int trim_string ( char *string );
|
|
int translate_binary ( char *string );
|
|
void binary_parameter ( char *name, int value );
|
|
void define_directive ( char *string );
|
|
void undefine_directive ( char *string );
|
|
int test_directive ( char *string );
|
|
|
|
|
|
/*** populate.c ***/
|
|
|
|
void generate_random_population ( population *p, int *mindepth,
|
|
int *maxdepth, int *method, FILE **datum );
|
|
population *allocate_population ( int size );
|
|
void free_population ( population *p );
|
|
void free_multi_population ( multipop *mp );
|
|
population *initial_population ( int *, int *, int *, FILE ** );
|
|
multipop *initial_multi_population ( void );
|
|
|
|
|
|
/*** postscript.c ***/
|
|
|
|
int postscript_recurse ( lnode **, FILE *, int, int, int );
|
|
void make_postscript_tree ( lnode *, char *, int );
|
|
|
|
|
|
/*** random.c ***/
|
|
|
|
void random_seed ( randomgen *, int );
|
|
void random_destroy ( randomgen * );
|
|
int random_int ( randomgen *, int );
|
|
double random_double ( randomgen * );
|
|
void *random_get_state ( randomgen *, int * );
|
|
void random_set_state ( randomgen *, void * );
|
|
|
|
|
|
/*** select.c ***/
|
|
|
|
int exists_select_method ( char *string );
|
|
select_context_func_ptr get_select_context ( char *string );
|
|
void free_o_rama ( int, char *** );
|
|
int parse_o_rama ( char *string, char *** argv );
|
|
int rev_ind_compare ( const void *a, const void *b );
|
|
int select_interval ( sel_context *sc );
|
|
|
|
|
|
/*** fitness.c ***/
|
|
|
|
sel_context *select_afit_context ( int op, sel_context *sc,
|
|
population *p, char *string );
|
|
int select_afit ( sel_context *sc );
|
|
sel_context *select_inverse_afit_context ( int op, sel_context *sc,
|
|
population *p, char *string );
|
|
int select_inverse_afit ( sel_context *sc );
|
|
sel_context *select_afit_overselect_context ( int op, sel_context *sc,
|
|
population *p, char *string );
|
|
int select_afit_overselect ( sel_context *sc );
|
|
|
|
|
|
/*** tournament.c ***/
|
|
|
|
sel_context *select_tournament_context ( int op, sel_context *sc,
|
|
population *p, char *string );
|
|
int select_tournament ( sel_context *sc );
|
|
|
|
|
|
/*** bestworst.c ***/
|
|
|
|
int select_bestworst ( sel_context *sc );
|
|
sel_context *select_best_context ( int op, sel_context *sc,
|
|
population *p, char *string );
|
|
int select_best_compare ( const void *a, const void *b );
|
|
sel_context *select_worst_context ( int op, sel_context *sc,
|
|
population *p, char *string );
|
|
int select_worst_compare ( const void *a, const void *b );
|
|
sel_context *select_random_context ( int op, sel_context *sc,
|
|
population *p, char *string );
|
|
int select_random ( sel_context *sc );
|
|
|
|
|
|
/*** tree.c ***/
|
|
|
|
int tree_nodes ( lnode *tree );
|
|
int tree_nodes_recurse ( lnode ** );
|
|
int tree_nodes_internal ( lnode * );
|
|
int tree_nodes_internal_recurse ( lnode ** );
|
|
int tree_nodes_external ( lnode * );
|
|
int tree_nodes_external_recurse ( lnode ** );
|
|
int generate_random_full_tree ( int space, int depth, function_set *, int return_type );
|
|
int generate_random_grow_tree ( int space, int depth, function_set *, int return_type );
|
|
int tree_depth ( lnode * );
|
|
int tree_depth_recurse ( lnode ** );
|
|
int tree_depth_to_subtree ( lnode *, lnode * );
|
|
int tree_depth_to_subtree_recurse ( lnode **, lnode *, int );
|
|
void print_tree ( lnode *, FILE * );
|
|
void print_tree_recurse ( lnode **, FILE * );
|
|
void print_tree_array ( lnode * );
|
|
void print_tree_array_recurse ( lnode **, int * );
|
|
lnode *get_subtree ( lnode *, int );
|
|
lnode *get_subtree_recurse ( lnode **, int * );
|
|
lnode *get_subtree_internal ( lnode *, int );
|
|
lnode *get_subtree_internal_recurse ( lnode **, int * );
|
|
lnode *get_subtree_external ( lnode *, int );
|
|
lnode *get_subtree_external_recurse ( lnode **, int * );
|
|
void copy_tree ( tree *to, tree *from );
|
|
void free_tree ( tree * );
|
|
int tree_size ( lnode * );
|
|
int tree_size_recurse ( lnode ** );
|
|
void copy_tree_replace_many ( int space, lnode *parent, lnode **replace,
|
|
lnode **with, int count, int *repcount );
|
|
void copy_tree_replace_many_recurse ( int space, lnode **lp, lnode **lr,
|
|
lnode **lw, int count, int *repcount );
|
|
void skip_over_subtree ( lnode ** );
|
|
void reference_ephem_constants ( lnode *, int );
|
|
void reference_ephem_constants_recurse ( lnode **, int );
|
|
|
|
|
|
/*** pretty.c ***/
|
|
|
|
void gen_indents ( lnode **l, int **is, int start, int sameline );
|
|
void pretty_print_tree_recurse ( lnode **l, int **is, FILE *fil );
|
|
void pretty_print_tree_recurse_equ ( lnode **l, int **is, FILE *fil );
|
|
void pretty_print_tree ( lnode *data, FILE *fil );
|
|
void pretty_print_tree_equ ( lnode *data, FILE *fil );
|
|
|
|
|
|
/*** genspace.c ***/
|
|
|
|
void initialize_genspace ( void );
|
|
void free_genspace ( void );
|
|
lnode * gensp_next ( int space );
|
|
int gensp_next_int ( int space );
|
|
void gensp_dup_tree ( int space, tree *t );
|
|
void gensp_reset ( int space );
|
|
void gensp_print ( int space, int i, int j, FILE *out );
|
|
|
|
|
|
/*** individ.c ***/
|
|
|
|
void print_individual ( individual *ind, FILE *f );
|
|
void pretty_print_individual ( individual *ind, FILE *f );
|
|
void pretty_print_individual_equ ( individual *ind, FILE *f );
|
|
int individual_size ( individual *ind );
|
|
int individual_depth ( individual *ind );
|
|
void duplicate_individual ( individual *to, individual *from );
|
|
|
|
|
|
/*** crossover.c ***/
|
|
|
|
int operator_crossover_init ( char *options, breedphase *bp );
|
|
void operator_crossover_free ( void * );
|
|
void operator_crossover_start ( population *oldpop, void *data );
|
|
void operator_crossover_end ( void *data );
|
|
void operator_crossover ( population *oldpop, population *newpop, void *data );
|
|
|
|
|
|
/*** reproduce.c ***/
|
|
|
|
int operator_reproduce_init ( char *options, breedphase *bp );
|
|
void operator_reproduce_free ( void * );
|
|
void operator_reproduce_start ( population *oldpop, void *data );
|
|
void operator_reproduce_end ( void *data );
|
|
void operator_reproduce ( population *oldpop, population *newpop, void *data );
|
|
|
|
|
|
/*** mutate.c ***/
|
|
|
|
int operator_mutate_init ( char *options, breedphase *bp );
|
|
void operator_mutate_free ( void * );
|
|
void operator_mutate_start ( population *oldpop, void *data );
|
|
void operator_mutate_end ( void *data );
|
|
void operator_mutate ( population *oldpop, population *newpop, void *data );
|
|
|
|
|
|
/*** boltzman.c ***/
|
|
|
|
sel_context *select_boltzman_context (int op,
|
|
sel_context *sc,
|
|
population *p,
|
|
char *string );
|
|
|
|
|
|
/*** sigma.c ***/
|
|
|
|
sel_context *select_sigma_context (int op,
|
|
sel_context *sc,
|
|
population *p,
|
|
char *string );
|
|
|
|
|
|
#endif
|