Fix function evaluations in ga

6 ビュー (過去 30 日間)
sandeep singh chauhan
sandeep singh chauhan 2016 年 1 月 26 日
コメント済み: UbuntuXenial 2019 年 3 月 28 日
I want to fix my number of maximum function evaluation as stopping criteria in ga. How can i do it?
  2 件のコメント
sandeep singh chauhan
sandeep singh chauhan 2016 年 1 月 26 日
No, I want to use genetic algorithm that will stop with maximum function evaluations

サインインしてコメントする。

回答 (2 件)

Brendan Hamm
Brendan Hamm 2016 年 1 月 26 日
This is controlled in the Generations property of the Genetic Algorithm options. Obtain the default options:
>> options = gaoptimset(@ga)
options =
PopulationType: 'doubleVector'
PopInitRange: []
PopulationSize: '50 when numberOfVariables <= 5, else 200'
EliteCount: '0.05*PopulationSize'
CrossoverFraction: 0.8000
ParetoFraction: []
MigrationDirection: 'forward'
MigrationInterval: 20
MigrationFraction: 0.2000
Generations: '100*numberOfVariables'
TimeLimit: Inf
FitnessLimit: -Inf
StallGenLimit: 50
StallTest: 'averageChange'
StallTimeLimit: Inf
TolFun: 1.0000e-06
TolCon: 1.0000e-03
InitialPopulation: []
InitialScores: []
NonlinConAlgorithm: 'auglag'
InitialPenalty: 10
PenaltyFactor: 100
PlotInterval: 1
CreationFcn: @gacreationuniform
FitnessScalingFcn: @fitscalingrank
SelectionFcn: @selectionstochunif
CrossoverFcn: @crossoverscattered
MutationFcn: {@mutationgaussian [1] [1]}
DistanceMeasureFcn: []
HybridFcn: []
Display: 'final'
PlotFcns: []
OutputFcns: []
Vectorized: 'off'
UseParallel: 0
Now you can change the Generations and pass this in to the options input of your call to ga
>> options.Generations = '200*numberOfVariables';
>> ga(...,options); % Fill in the ... with your function, constraints, etc.
  3 件のコメント
UbuntuXenial
UbuntuXenial 2019 年 3 月 28 日
Can you please explain how to determine the dependence? I want to run GA/MOGA only up to certain MaxFunctionEvaluations but this isn't a valid optimoption for these algorithms.

サインインしてコメントする。


Matt J
Matt J 2016 年 1 月 26 日
編集済み: Matt J 2016 年 1 月 26 日
The following nested function strategy might be a way to cheat. Basically, it keeps a running count, funEvals, of the number of calls to the fitness function. When funEvals exceeds a specified MaxFunEvals, the FitnessFcn output is forced to -Inf, which I think must trigger the FitnessLimit stopping criterion.
function runEverything(MaxFunEvals)
funEvals=0;
bestFitness=inf;
[x,fval,exitflag,output,population,scores] = ga(@FitnessFcn,...);
fval=bestFitness;
function val = FitnessFcn(x)
...
bestFitness=min(bestFitness,val);
funEvals=funEvals+1; %increment counter
if funEvals>=MaxFunEvals
val=-inf;
end
end
end

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by