How can I store the value at each iteration of a genetic algorithm?

조회 수: 41 (최근 30일)
Sylvain Cornelus
Sylvain Cornelus 2019년 4월 2일
댓글: djamel 2022년 12월 23일
I have a simple function and two constraints for my genetic algorithm code
ObjFcn = @myFitness;
nvars = 2; %number of variables
LB = [0 0]; %lower bound
UB = [1 13]; %upper bound
ConsFcn = @myConstraints;
[x,fval] = ga(ObjFcn,nvars,[],[],[],[],LB,UB,ConsFcn,opts);
function y = myFitness(x)
y = 100*(x(1)^2-x(2))^2 + (1-x(1))^2;
end
function [c,c_eq] = myConstraints(x)
c = [x(1)*x(2) + x(1) - x(2) + 1.5; 10 - x(1)*x(2)];
c_eq = [];
end
I would like to store the values of x at each function evaluation, as well as keep track of the generation. I've found a similar question here but I don't really understand what the solution meant as it wasn't very clear. I believe I need to tell my fitness function to store values of the GA function so when the GA function reads the fitness function the input parameters at that iteration are saved... but I would like help on how the syntax would work for such a thing. Any help is appreciated!
I've also looked at the GA options and was unable to find help with my specific issue.

채택된 답변

Stephan
Stephan 2019년 4월 2일
Hi,
you coultd try this way:
[x,fval,vals] = solve_problem
function [x,fval,vals] = solve_problem
ObjFcn = @myFitness;
nvars = 2; %number of variables
LB = [0 0]; %lower bound
UB = [1 13]; %upper bound
ConsFcn = @myConstraints;
iter = 1;
vals = [];
[x,fval] = ga(ObjFcn,nvars,[],[],[],[],LB,UB,ConsFcn);
function y = myFitness(x)
y = 100*(x(1)^2-x(2))^2 + (1-x(1))^2;
vals(iter,1:2) = x;
iter = iter+1;
end
function [c,c_eq] = myConstraints(x)
c = [x(1)*x(2) + x(1) - x(2) + 1.5; 10 - x(1)*x(2)];
c_eq = [];
end
end
After running this you can plot how x(1) and x(2) change over the iterations:
yyaxis left
plot(vals(:,1))
yyaxis right
plot(vals(:,2))
x-vals.PNG
Best regards
Stephan
  댓글 수: 1
Sylvain Cornelus
Sylvain Cornelus 2019년 4월 2일
Thank you Stephan! Exactly what I was looking for. I'll read up on the ga function to figure out how to store the generation.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

UNAL
UNAL 2019년 9월 13일
You can also extract the data directly from the graph that is obtained by configuring the options:
options = optimoptions('ga','PlotFcn', @gaplotbestf);
After obtaining the graph you can extract ist data:
fig = gcf;
dataObjs = findobj(fig,'-property','YData');
y1 = dataObjs(1).YData;
x1 = dataObjs(1).XData;
figure(7)
plot(x1,y1,'*r')
  댓글 수: 1
djamel
djamel 2022년 12월 23일
Many thanks for your feedback , i was seraching on this solutions for long time .
It was very useful for me .
Many thanks .

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Genetic Algorithm에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by