I try to write simple analytical function Gomez and Levy with ga in optimization toolbox but it cannot run

%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);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%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);

2 Comments

Error using makeState (line 61)
Your fitness function must return a scalar value.
Error in gacon (line 44)
state = makeState(GenomeLength,SubFitness,Iterate,subtype,options);
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);

Sign in to comment.

 Accepted Answer

y=(4*x1.^2)-2.1*x1.^4+1/3*x1.^6+(x1*x2)-4*x.^2+4*x2.^4;
Notice that you have 4*x.^2 . But x is a vector so that would return a vector.

6 Comments

I did it and change the x to x2 but I still have 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);
I do not get that error.
Note: in the below, setting the PlotFcn to [] is done for the purpose of being able to run the code here in MATLAB Answers, as the plot functions need a call that is not supported for the MATLAB Answers facility. For your own use, comment out the line that removes the plot fcn.
%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
options.PlotFcn = [];
%solution and function value
[x , fval,exitFlag,output,population,scores]= ga(ObjFcn,nvars,[],[],[],[],lb,ub,nonlcon,options);
Single objective optimization: 2 Variable(s) 1 Nonlinear inequality constraint(s) Options: CreationFcn: @gacreationuniform CrossoverFcn: @crossoverscattered SelectionFcn: @selectionstochunif MutationFcn: @mutationadaptfeasible Best Max Stall Generation Func-count f(x) Constraint Generations 1 2500 -1.03163 0 0 2 4950 -1.03163 0 0 3 7400 -1.03163 0 0 4 9850 -1.03163 0 0 5 12300 -1.03163 0 1 Optimization terminated: average change in the fitness value less than options.FunctionTolerance and constraint violation is less than options.ConstraintTolerance.
%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
function [c ,ceq]=constraintgl(x)
%constraints
x1=x(1);
x2=x(2);
c=-sin(4*pi*x1)+2*sin(2*pi*x2)^2-1.5;
ceq=[];
end
I didnot get this point:"For your own use, comment out the line that removes the plot fcn"
what do you mean by this?
if I put [] for plotfcn how can I get the prot for the process of code?
When I remove the line that assigns [] to plot function, and try to show you the results here, then see:
%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);
Single objective optimization: 2 Variable(s) 1 Nonlinear inequality constraint(s) Options: CreationFcn: @gacreationuniform CrossoverFcn: @crossoverscattered SelectionFcn: @selectionstochunif MutationFcn: @mutationadaptfeasible
Error using uicontrol
This functionality is not available on remote platforms.

Error in gadsplot (line 98)
pObj = uicontrol('string','Pause', ...

Error in gacon (line 64)
state = gadsplot(options,state,'init','Genetic Algorithm');

Error in ga (line 418)
[x,fval,exitFlag,output,population,scores] = gacon(FitnessFcn,nvars, ...
%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
function [c ,ceq]=constraintgl(x)
%constraints
x1=x(1);
x2=x(2);
c=-sin(4*pi*x1)+2*sin(2*pi*x2)^2-1.5;
ceq=[];
end
When you run this version of the code on your own desktop, or on MATLAB Online, you will instead get a plot -- but the MATLAB Answers facility that we are using right now does not allow the code to run because the plotfcn tries to create an interactive "Stop" button for the plot and the Answers faciity does not support interactive buttons.
I did this in MATLAB online but the plot are empty.how I can fix this?
The plots are not empty. The optimization is configured for a maximum number of generations and that is the x axis used so that it does not get continually redrawn as more generations are processed. The optimization either succeeded or failed in a small number of generations, on the order of 5 generations.

Sign in to comment.

More Answers (1)

Hi Sogol,
When I try to reproduce the issue at my end I encountered the error as Function definition not supported in this context. Create functions in a code file. If you are facing the same error refer to the below link to eliminate the error.
If not, can you send us the exact error message that you are getting.
Hope this helps!!

1 Comment

hello thank you for reply.these below errors are what I got
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Error using makeState (line 61)
Your fitness function must return a scalar value.
Error in gacon (line 44)
state = makeState(GenomeLength,SubFitness,Iterate,subtype,options);
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);

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!