www.pudn.com > GA_Toolbar.rar > GADEMO3.M, change:1997-04-07,size:5425b

% This is a reference for writing evaluation, operator, selection and 
% termination functions 
echo off 
done =0; 
while ~done 
  K = menu('Choose a topic','Evaluation','Operators','Selection',... 
    disp(' The evaluation function is the driving force behind the GA.  The'); 
    disp(' evaluation function is called from the GA to determine the'); 
    disp(' fitness of each solution string generated during the search.  An'); 
    disp(' example evaluation function is given below:'); 
    disp(' '); 
    disp(' function [val,x] = gaDemo1Eval(sol,options)'); 
    disp(' x=sol(1);'); 
    disp(' val = x + 10*sin(5*x)+7*cos(4*x);    '); 
    disp(' '); 
    disp(' Note that the evaluation function must take two parameters,'); 
    disp(' sol and options.  Sol is a row vector of n+1 elements where'); 
    disp(' the first n elements are the parameters of interest.  The'); 
    disp(' n+1th element is the value of this solution.  The options'); 
    disp(' matrix is a row matrix of'); 
    disp(' '); 
    disp(' [current generation, options]'); 
    disp(' '); 
    disp(' The eval function must return both the value of the string,'); 
    disp(' val and the string itself, sol.  This is done so that'); 
    disp(' your evaluation can repair or improve the string.'); 
    disp(' '); 
    disp(' An evaluation function is unique to the optimization of the'); 
    disp(' problem at hand, therefore, every time the ga is used for a'); 
    disp(' different problem, an evaluation function must be developed to'); 
    disp(' determine the fitness of the individuals.'); 
    disp(' Operators provide the search mechanism of the GA.  The'); 
    disp(' operators are used to create new solutions based on existing'); 
    disp('solutions in the population.  There are two basic types of'); 
    disp(' operators, crossover and mutation.  Crossover takes two'); 
    disp(' individuals and produces two new individuals while mutation'); 
    disp(' alters one individual to produce a single new solution.  The'); 
    disp(' ga function calls each of the operators to produce new'); 
    disp(' solutions.  The function call for crossovers is as follows:'); 
    disp(' function [c1,c2] =crossover(p1,p2,bounds,Ops)');  
    disp(' p1 is the first parent ([solution_string function_value])'); 
    disp(' p2 is the second parent ([solution_string function_value])'); 
    disp(' bounds is the bounds matrix for the solution space');         
    disp(' ops is a vector of information, i.e. '); 
    disp('[current_generation crossover_ops]'); 
    disp(' while the mutation function call is'); 
    disp(' similar but only takes one parent and returns one child.'); 
    disp(' function [c1] = mutation(p1,bounds,Ops)'); 
    disp(' '); 
    disp(' The crossover operator must take all 4 arguments,'); 
    disp(' the two parents, the bounds of the search space,'); 
    disp(' the information on how much of the evolution has'); 
    disp(' taken place and any other special options required,'); 
    disp(' and similarly mutations must all take the three'); 
    disp(' arguments and return the resulting'); 
    disp(' child. '); 
    disp(' The selection function determines which'); 
    disp(' of the individuals will survive and continue'); 
    disp(' on to the next generation.  The ga function'); 
    disp(' calls the selection function each generation'); 
    disp(' after all the new children have been'); 
    disp(' evaluated to determine their fitness using'); 
    disp(' the user provided evaluation function.'); 
    disp(' '); 
    disp(' The basic function call used in the ga for'); 
    disp(' selection is: '); 
    disp(' '); 
    disp(' function[newPop] = selectFunction(oldPop,options) '); 
    disp(' '); 
    disp(' where newPop is the new population selected, '); 
    disp(' oldPop is the current population, '); 
    disp(' options is a vector for any other optional parameters.'); 
    disp(' '); 
    disp(' Notice that all selection routines must take'); 
    disp(' three parameters, the old population from'); 
    disp(' which to select members from, and any'); 
    disp(' specific options to that particular selection'); 
    disp(' routine.  The function must return the new'); 
    disp(' population.'); 
    disp(' The termination function determines when to'); 
    disp(' stop the simulated evolution and return the'); 
    disp(' resulting population.  The ga function calls'); 
    disp(' the termination function once every'); 
    disp(' generation after the application of all of'); 
    disp(' the operator functions and the evaluation'); 
    disp(' function for the resulting children.  The'); 
    disp(' function call is of the format:'); 
    disp(' '); 
    disp(' done = terminateFunction(options,bestPop,pop)'); 
    disp(' '); 
    disp(' options is a vector of termination options'); 
    disp(' the first of which is always the current generation'); 
    disp(' bestPop is a matrix of the best individuals and the respective'); 
    disp(' generation it was found.  '); 
    disp(' pop is the current population.');