]> Creatis software - CreaPhase.git/blob - octave_packages/ga-0.10.0/mutationgaussian.m
Add a useful package (from Source forge) for octave
[CreaPhase.git] / octave_packages / ga-0.10.0 / mutationgaussian.m
1 ## Copyright (C) 2008 Luca Favatella <slackydeb@gmail.com>
2 ##
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.
7 ##
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.
12 ##
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/>.
15
16 ## Author: Luca Favatella <slackydeb@gmail.com>
17 ## Version: 1.7.1
18
19 function mutationChildren = \
20       mutationgaussian (parents, options, nvars, FitnessFcn,
21                         state, thisScore,
22                         thisPopulation)
23   [LB(1, 1:nvars) UB(1, 1:nvars)] = \
24       __ga_popinitrange__ (options.PopInitRange, nvars);
25
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
31
32   ## initial standard deviation (i.e. when state.Generation == 0)
33   tmp_std = Scale * (UB - LB); ## vector = scalar * vector
34
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;
38   endfor
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;
43
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);
48 endfunction
49
50
51 ## number of input arguments
52 # TODO
53
54 ## number of output arguments
55 # TODO
56
57 ## type of arguments
58 # TODO
59
60 # TODO