Clear Filters
Clear Filters

Error when I try to run genetic algorithm on peaks function.

3 views (last 30 days)
Below is my code for applying genetic algorithm to peaks function. my intent is to see what points are added in each iteration.
peaks
problem.solver = 'ga';
problem.fitnessfcn = @(x)peaks(x(1),x(2));
problem.nvars = 2;
problem.lb = [-3 -3];
problem.ub = [3 3];
problem.options = optimoptions('ga', ...
'OutputFcn', @peaksPlotIterates, ...
'Display', 'iter', ...
'PopInitRange', [-3 -3;3 3]);
x = ga(problem);
I tried to replicate what I saw in a youtube video (https://www.youtube.com/watch?v=1i8muvzZkPw) published by MAtlab. However, I get the following error in the console:
Peaks_GA
z = 3*(1-x).^2.*exp(-(x.^2) - (y+1).^2) ...
- 10*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2) ...
- 1/3*exp(-(x+1).^2 - y.^2)
Single objective optimization:
2 Variables
Options:
CreationFcn: @gacreationuniform
CrossoverFcn: @crossoverscattered
SelectionFcn: @selectionstochunif
MutationFcn: @mutationadaptfeasible
Unrecognized property 'iteration' for class 'optim.options.GaOptions'.
Error in peaksPlotIterates (line 24)
optimValues.iteration = -1;
Error in gaoutput (line 56)
[state,optnew,changed] = feval(functions{i},options.OutputPlotFcnOptions,state,flag,args{i}{:});
Error in galincon (line 55)
[state,options] = gaoutput(FitnessFcn,options,state,currentState);
Error in ga (line 420)
[x,fval,exitFlag,output,population,scores] = galincon(FitnessFcn,nvars, ...
Error in Peaks_GA (line 13)
x = ga(problem);

Answers (1)

Abhinav Aravindan
Abhinav Aravindan on 23 Apr 2024
I see that you are attempting to apply the genetic algorithm to the peaks function and monitor the progress of points added in each iteration. I assume that you are using the “peakPlotIterates” function mentioned in the following link:
Based on the error message you've encountered, it seems there is an issue with the peaksPlotIterates function trying to modify the optimValues structure, by adding an iteration field.
There are a few points to note here:
  • The video mentioned in the question utilizes MATLAB R2015a for the example and in turn uses the “gaoptimset” function which returns the genetic algorithm options as a “struct”.
  • In the given implementation above in MATLAB R2024a, you have used the “optimoptions” with “ga” as the solver, which is the alternative provided in the documentation for “gaoptimset. It is to be noted that for “ga” solver, “optimoptions” returns an object with set of options for “ga”.
In the peakPlotIterates” function, a new field named “iterations” is added to the Genetic Algorithm options objectoptimValues causing this error while using “optimoptions”. A possible workaround to resolve this error is to modify “peakPlotIterates” function by creating a new local variable “iteration and replace all optimValues.iteration” with “iteration” to avoid modifying “optimValues.
Hope this helps resolve the issue !
Please refer to the below documentation for your reference.
  3 Comments
Abhinav Aravindan
Abhinav Aravindan on 25 Apr 2024
The use of "gaoptimset" is no longer recommended, you can utilize "optimoptions" as written in your code. The current generation number can be obtained from "varargin{2}" as follows:
currentGen = varargin{2}.Generation
The number of generations computed can be found from the fourth output argument of "ga"
[x, fval, exitflag, out] = ga(problem);
disp(out.generations)

Sign in to comment.

Products


Release

R2024a

Community Treasure Hunt

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

Start Hunting!