⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.m

📁 我改写的多变量带约束的遗传算法Matlab源程序!
💻 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 + -