use ga optimization but got error for ga process
2 views (last 30 days)
Show older comments
sogol bandekian
on 10 May 2022
Answered: Walter Roberson
on 23 May 2022
%fitness function Gomez and Levy
function y=fitnessfunctiongl(x)
x1=x(1);
x2=x(2);
y=(4*x1.^2)-2.1*x1.^4+1/3*x1.^6+(x1*x2)-4*x2.^2+4*x2.^4;
end
%constraints
function [c ,ceq]=constraintgl(x)
x1=x(1);
x2=x(2);
c=-sin(4*pi*x1)+2*sin(2*pi*x2)^2-1.5;
ceq=[];
end
%main script to pass function and constraints to ga for optimization
ObjFcn=@fitnessfunctiongl;
nvars=2;
lb=[-1, -1];
ub=[0.75, 1];
nonlcon=@constraintgl;
options = optimoptions('ga','ConstraintTolerance',1e-6,'Display','iter','PlotFcn',{@gaplotrange,@gaplotbestf,@gaplotselection,@gaplotmaxconstr}); %plotting the process of finding the solution
%solution and function value
[x , fval,exitFlag,output,population,scores]= ga(ObjFcn,nvars,[],[],[],[],lb,ub,nonlcon,options);
----------------------------------but I got these errors------------------------------
Error in gadsplot (line 141)
[state,optimvalues] = callOnePlotFcn(fname,plotNames{i},state,options.OutputPlotFcnOptions,optimvalues,'init',args{i}{:});
Error in gacon (line 55)
state = gadsplot(options,state,'init','Genetic Algorithm');
Error in ga (line 406)
[x,fval,exitFlag,output,population,scores] = gacon(FitnessFcn,nvars, ...
Error in maingl (line 11)
[x , fval,exitFlag,output,population,scores]= ga(ObjFcn,nvars,[],[],[],[],lb,ub,nonlcon,options);
0 Comments
Accepted Answer
Walter Roberson
on 23 May 2022
syms x [1 2]
x1=x(1);
x2=x(2);
y=(4*x1.^2)-2.1*x1.^4+1/3*x1.^6+(x1*x2)-4*x2.^2+4*x2.^4;
c=-sin(4*pi*x1)+2*sin(2*pi*x2)^2-1.5;
sol1 = solve(c, x1)
eqn2 = subs(y, x1, sol1)
sol2a = vpasolve(eqn2(1), x2)
sol2b = vpasolve(eqn2(2), x2)
back1a = vpa(subs(eqn2(1), x2, sol2a))
back1b = vpa(subs(eqn2(2), x2, sol2b))
ya = vpa(subs(y, {x1, x2}, {back1a, sol2a}))
yb = vpa(subs(y, {x1, x2}, {back1b, sol2b}))
Beyond this, you need to test at least one c value less than that equality, such as c=-sin(4*pi*x1)+2*sin(2*pi*x2)^2-1.6; in case the minima is not right at the constraint bound.
0 Comments
More Answers (1)
Matt J
on 10 May 2022
Edited: Matt J
on 10 May 2022
Perhaps you meant to have,
y=(4*x1.^2)-2.1*x1.^4+1/3*x1.^6+(x1*x2)-4*x1.^2+4*x2.^4;
or
y=(4*x1.^2)-2.1*x1.^4+1/3*x1.^6+(x1*x2)-4*x2.^2+4*x2.^4;
6 Comments
Alan Weiss
on 23 May 2022
You have nonlinear constraints. Therefore, the algorithm has few iterations, and plot functions are called just once per iteration. For an explanation of what nonlinear constraints do to the ga algorithm, see Nonlinear Constraint Solver Algorithms. For an example showing this behavior, see Constrained Minimization Using the Genetic Algorithm.
Alan Weiss
MATLAB mathematical toolbox documentation
See Also
Categories
Find more on Genetic Algorithm in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!