⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 reproduc.c

📁 Genetic Programing of music
💻 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 *   */#include <lilgp.h>typedef struct{     char *sname;     sel_context *sc;} reproduce_data;/* operator_reproduce_init() * * called to parse reproduction options and initialize one record of a * breedphase table. */int operator_reproduce_init ( char *options, breedphase *bp ){     int errors = 0;     reproduce_data *rd;     int i, j;     char **argv;     rd = (reproduce_data *)MALLOC ( sizeof ( reproduce_data ) );     /* fill in the breedphase record. */     bp->operator = OPERATOR_REPRODUCE;     bp->data = (void *)rd;     bp->operator_free = operator_reproduce_free;     bp->operator_start = operator_reproduce_start;     bp->operator_end = operator_reproduce_end;     bp->operator_operate = operator_reproduce;     rd->sname = NULL;     j = parse_o_rama ( options, &argv );     for ( i = 0; i < j; ++i )     {	  /* parse "select" option. */          if ( strcmp ( "select", argv[i] ) == 0 )          {               if ( !exists_select_method ( argv[++i] ) )               {                    ++errors;                    error ( E_ERROR, "reproduction: \"%s\" is not a known selection method.",                           argv[i] );               }               FREE ( rd->sname );               rd->sname = (char *)MALLOC ( (strlen(argv[i])+1) * sizeof ( char ) );               strcpy ( rd->sname, argv[i] );          }          else          {               ++errors;               error ( E_ERROR, "reproduction: unknown option \"%s\".",                      argv[i] );          }     }     free_o_rama ( j, &argv );          if ( rd->sname == NULL )     {          ++errors;          error ( E_ERROR, "reproduction: no selection method specified." );     }#ifdef DEBUG     if ( !errors )     {          printf ( "reproduction options:\n" );          printf ( "   selection: %s\n", rd->sname==NULL?"NULL":rd->sname );     }#endif          return errors;}         /* operator_reproduce_free() * * frees the reproduction-specific data of a breedphase record. */void operator_reproduce_free ( void *data ){     reproduce_data * rd;     rd = (reproduce_data *)data;     FREE ( rd->sname );     FREE ( rd );}/* operator_reproduce_start() * * gets the selection context for this phase.  */void operator_reproduce_start ( population *oldpop, void *data ){     reproduce_data * rd;     select_context_func_ptr select_con;     rd = (reproduce_data *)data;          select_con = get_select_context ( rd->sname );     rd->sc = select_con ( SELECT_INIT, NULL, oldpop, rd->sname );}/* operator_reproduce_end() * * frees the selection context for this phase. */void operator_reproduce_end ( void *data ){     reproduce_data * rd;     rd = (reproduce_data *)data;     rd->sc->context_method ( SELECT_CLEAN, rd->sc, NULL, NULL );}/* operator_reproduce() * * does the reproduction operation. */void operator_reproduce ( population *oldpop, population *newpop,                        void *data ){     int j;     reproduce_data * rd;     rd = (reproduce_data *)data;     /* select an individual... */     j = rd->sc->select_method ( rd->sc );     /* ...and reproduce it into the new population. */     duplicate_individual ( (newpop->ind)+newpop->next, (oldpop->ind)+j );     newpop->ind[newpop->next].flags = FLAG_NONE;     ++newpop->next;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -