1 ## Copyright (C) 2008 Luca Favatella <slackydeb@gmail.com>
3 ## This program is free software; you can redistribute it and/or modify
4 ## it under the terms of the GNU General Public License as published by
5 ## the Free Software Foundation; either version 2 of the License, or
6 ## (at your option) any later version.
8 ## This program is distributed in the hope that it will be useful,
9 ## but WITHOUT ANY WARRANTY; without even the implied warranty of
10 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 ## GNU General Public License for more details.
13 ## You should have received a copy of the GNU General Public License
14 ## along with this program; If not, see <http://www.gnu.org/licenses/>.
16 ## Author: Luca Favatella <slackydeb@gmail.com>
19 function mutationChildren = \
20 mutationgaussian (parents, options, nvars, FitnessFcn,
23 [LB(1, 1:nvars) UB(1, 1:nvars)] = \
24 __ga_popinitrange__ (options.PopInitRange, nvars);
26 ## start mutationgaussian logic
27 Scale = options.MutationFcn{1, 2};
28 #assert (size (Scale), [1 1]); ## DEBUG
29 Shrink = options.MutationFcn{1, 3};
30 #assert (size (Shrink), [1 1]); ## DEBUG
32 ## initial standard deviation (i.e. when state.Generation == 0)
33 tmp_std = Scale * (UB - LB); ## vector = scalar * vector
35 ## recursively compute current standard deviation
36 for k = 1:state.Generation
37 tmp_std(1, 1:nvars) = (1 - Shrink * (k / options.Generations)) * tmp_std;
39 current_std(1, 1:nvars) = tmp_std;
40 nc_parents = columns (parents);
41 expanded_current_std(1:nc_parents, 1:nvars) = \
42 ones (nc_parents, 1) * current_std;
44 ## finally add random numbers
45 mutationChildren(1:nc_parents, 1:nvars) = \
46 thisPopulation(parents(1, 1:nc_parents), 1:nvars) + \
47 expanded_current_std .* randn (nc_parents, nvars);
51 ## number of input arguments
54 ## number of output arguments