📄 main.m
字号:
% Genetic Algorithm
NVAR=3; %Number of variables
X_range = [0, 2; 0, 3; 2, 4];
Tolerance = 0.00000001;
NIND=200; %Number of individuals
MAXGEN=100; %Maximum number of generations
PRECI=25; %Precision of variables
GGAP=0.9; %Generation gap
%Build field descriptor
FieldD=[rep([PRECI],[1,NVAR]);X_range';rep([1;0;1;1],[1,NVAR])];
%FieldD=[rep([PRECI],[1,NVAR]);rep([-10;10],[1,NVAR]);rep([1;0;1;1],[1,NVAR])];
Chrom=crtbp(NIND, NVAR*PRECI); %creat the init population
gen=0;
trace=zeros(MAXGEN, 2); %init trace
x=bs2rv(Chrom, FieldD); %the init pop: Binary string to real vector
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ObjV=Func(x); %computer the init objective value
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
X = [];
Y_1 = rand();
while gen<MAXGEN
FitnV=ranking(ObjV); %Assign fitness values
SelCh=select('sus',Chrom,FitnV,GGAP); %selectiom
SelCh=recombin('xovsp',SelCh,0.7); %crrossover: reconmbination
SelCh=mut(SelCh,0.2); %mutation
x=bs2rv(SelCh,FieldD); %the children: Binary string to real vector
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ObjVSel=Func(x);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[Chrom ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); %reinsert
gen=gen+1;
[Y, I]=min(ObjV);
% Y,bs2rv(Chrom(I,:),FieldD) %out the best objective value and coresponding variables
X = [X;bs2rv(Chrom(I,:),FieldD)];
trace(gen,1)=min(ObjV); %the trace
trace(gen,2)=sum(ObjV)/length(ObjV);
% if(abs(Y_1-Y)< Tolerance)
% fprintf('Iteration teminates: reach the tolerance at Iteration %d!\n', gen);
% break;
% else
% Y_1 = Y;
% end
end
Y
X_star = bs2rv(Chrom(I,:),FieldD)
sum(X_star(1:2))
sum(X_star(2:3))
% The convergence of the objective function
figure(1);clf;set(gca, 'fontsize', 20);
plot(trace(:,1), 'r-', 'linewidth', 2);hold on;xlim([0,MAXGEN]);
%plot(trace(:,2),'b-', 'linewidth', 2);legend('Best Value','Mean Value');
xlabel('Interation No');
% The convergence of the variables
figure(2);clf;
for i = 1:NVAR
subplot(NVAR,1,i);
plot(X(:,i), 'r-', 'linewidth', 2);
ylabel(strcat('X', num2str(i)'),'fontsize', 20);set(gca, 'fontsize', 20);xlim([0,MAXGEN]);
end
xlabel('Interation No','fontsize', 20);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -