X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Fga-0.10.0%2Fmutationgaussian.m;fp=octave_packages%2Fga-0.10.0%2Fmutationgaussian.m;h=015d341fd537c0f03fd9dc4944b551ecef3df6f5;hp=0000000000000000000000000000000000000000;hb=f5f7a74bd8a4900f0b797da6783be80e11a68d86;hpb=1705066eceaaea976f010f669ce8e972f3734b05 diff --git a/octave_packages/ga-0.10.0/mutationgaussian.m b/octave_packages/ga-0.10.0/mutationgaussian.m new file mode 100644 index 0000000..015d341 --- /dev/null +++ b/octave_packages/ga-0.10.0/mutationgaussian.m @@ -0,0 +1,60 @@ +## Copyright (C) 2008 Luca Favatella +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2 of the License, or +## (at your option) any later version. +## +## 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, see . + +## Author: Luca Favatella +## Version: 1.7.1 + +function mutationChildren = \ + mutationgaussian (parents, options, nvars, FitnessFcn, + state, thisScore, + thisPopulation) + [LB(1, 1:nvars) UB(1, 1:nvars)] = \ + __ga_popinitrange__ (options.PopInitRange, nvars); + + ## start mutationgaussian logic + Scale = options.MutationFcn{1, 2}; + #assert (size (Scale), [1 1]); ## DEBUG + Shrink = options.MutationFcn{1, 3}; + #assert (size (Shrink), [1 1]); ## DEBUG + + ## initial standard deviation (i.e. when state.Generation == 0) + tmp_std = Scale * (UB - LB); ## vector = scalar * vector + + ## recursively compute current standard deviation + for k = 1:state.Generation + tmp_std(1, 1:nvars) = (1 - Shrink * (k / options.Generations)) * tmp_std; + endfor + current_std(1, 1:nvars) = tmp_std; + nc_parents = columns (parents); + expanded_current_std(1:nc_parents, 1:nvars) = \ + ones (nc_parents, 1) * current_std; + + ## finally add random numbers + mutationChildren(1:nc_parents, 1:nvars) = \ + thisPopulation(parents(1, 1:nc_parents), 1:nvars) + \ + expanded_current_std .* randn (nc_parents, nvars); +endfunction + + +## number of input arguments +# TODO + +## number of output arguments +# TODO + +## type of arguments +# TODO + +# TODO