📄 pma3.asv
字号:
%用人口迁移算法求函数的最大值%求目标函数的值format longN=3;%人口规模l=100;%人口流动次数k=0.001;%收缩系数h=1e-8;%人口压力参数m=50;%迭代次数a1=0;%搜索空间b1=2;%搜索空间a2=0;%搜索空间b2=2;%搜索空间a3=0;%搜索空间b3=2;%搜索空间center1=[];center2=[];center3=[];zy=[];%记录最优值zyd1=[];%记录最优点zyd2=[];%记录最优点zyd3=[];%记录最优点d=[];%计算目标函数值kk=0;X1=[];X2=[];X3=[];tt=0;%步骤1开始while(kk<m)X1=(rand(1,N)*(b1-a1))+a1;%随机产生搜索空间的N个点X2=(rand(1,N)*(b2-a2))+a2;%随机产生搜索空间的N个点X3=(rand(1,N)*(b3-a3))+a3;%随机产生搜索空间的N个点c1=(b1-a1)/(2*N);%区域的邻域c2=(b2-a2)/(2*N);%区域的邻域c3=(b3-a3)/(2*N);%区域的邻域%步骤1结束%步骤2开始for i=1:1:Ncenter1(i)=X1(i);center2(i)=X2(i);center3(i)=X3(i);d(i)=maxf3(X1(i),X2(i),X3(i));%计算各点的函数值end%步骤2结束%步骤3开始[w,i]=min(d); %记录最优函数值和最优点zy(numel(zy)+1)=w;%记录最优函数值和最优点zyd1(numel(zyd1)+1)=X1(i);%记录最优函数值和最优点zyd2(numel(zyd2)+1)=X2(i);zyd3(numel(zyd3)+1)=X3(i);%步骤3结束while(1)for i=1:1:N%步骤4开始X1(i)=2*c1*rand+(center1(i)-c1);X2(i)=2*c2*rand+(center2(i)-c2);X3(i)=2*c3*rand+(center3(i)-c3);if(X1(i)>b1) X1(i)=b1;endif(X1(i)<a1) X1(i)=a1;endif(X2(i)>b2) X2(i)=b2;endif(X2(i)<a2) X2(i)=a2;endif(X3(i)>b3) X3(i)=b3;endif(X3(i)<a3) X3(i)=a3;end%步骤4结束%步骤5开始d(i)=maxf3(X1(i),X2(i),X3(i));%步骤5结束end%步骤6开始[w,i]=min(d); %记录最优函数值和最优点zy(numel(zy)+1)=w;%记录最优函数值和最优点zyd1(numel(zyd1)+1)=X1(i);%记录最优函数值和最优点zyd2(numel(zyd2)+1)=X2(i);zyd3(numel(zyd3)+1)=X3(i);%步骤6结束%步骤7开始tt=tt+1;if(tt>=l) break endend%步骤7结束%步骤8开始[w,i]=min(zy);%读取最优值和最优点yyd1=zyd1(i);yyd2=zyd2(i);yyd3=zyd3(i);a11=yyd1-c1;%优惠区域a21=yyd2-c2;a31=yyd3-c3;if(a11>=b1) a11=b1-c1;endif(a11<a1) a11=a1;endif(a21>=b2) a21=b2-c2;endif(a21<a2) a21=a2;endif(a31>=b3) a31=b3-c3;endif(a31<a3) a31=a3;endb11=yyd1+c1;%优惠区域b21=yyd2+c2;b31=yyd3+c3;if(b11>b1) b11=b1;endif(b11<=a11) b11=a11+c1;endif(b21>b2) b21=b2;endif(b21<=a21) b21=a21+c2;endif(b31>b3) b31=b3;endif(b31<=a31) b31=a31+c3;endX1=(rand(1,N)*(b11-a11))+a11;%随机产生新搜索空间的N个点,替换原来的点X2=(rand(1,N)*(b21-a21))+a21;%随机产生新搜索空间的N个点,替换原来的点X3=(rand(1,N)*(b31-a31))+a31;%随机产生新搜索空间的N个点,替换原来的点%步骤8结束%步骤9开始for i=1:1:Ncenter1(i)=X1(i);%第i个区域的中心center2(i)=X2(i);%第i个区域的中心center3(i)=X3(i);%第i个区域的中心d(i)=maxf3(X1(i),X2(i),X3(i)); %计算各点的函数值end%步骤9结束%步骤10开始[w,i]=min(d); %记录最优函数值和最优点zy(numel(zy)+1)=w; %记录最优函数值和最优点zyd1(numel(zyd1)+1)=X1(i);%记录最优函数值和最优点zyd2(numel(zyd2)+1)=X2(i);zyd3(numel(zyd3)+1)=X3(i);%步骤10结束%步骤11开始while(1)c1=(1-k)*c1;%收缩优惠区域c2=(1-k)*c2;%收缩优惠区域c3=(1-k)*c3;%收缩优惠区域%步骤11结束%步骤12开始a12=zyd1(numel(zyd1))-c1;a22=zyd2(numel(zyd2))-c2;a32=zyd3(numel(zyd3))-c3;if(a12>=b1) a12=b1-c1;endif(a12<a1) a12=a1;endif(a22>=b2) a22=b2-c2;endif(a22<a2) a22=a2;endif(a32>=b3) a32=b3-c3;endif(a32<a3) a32=a3;endb12=zyd1(numel(zyd1))+c1;%优惠区域b22=zyd2(numel(zyd2))+c2;%优惠区域b32=zyd3(numel(zyd3))+c3;%优惠区域if(b12>b1) b12=b1;endif(b12<=a12) b12=a12+c1;endif(b22>b2) b22=b2;endif(b22<=a22) b22=a22+c2;endif(b32>b3) b32=b3;endif(b32<=a32) b32=a32+c3;endX1=(rand(1,N)*(b12-a12))+a12;%随机产生新搜索空间的N个点,替换原来的点X2=(rand(1,N)*(b22-a22))+a22;%随机产生新搜索空间的N个点,替换原来的点X3=(rand(1,N)*(b32-a32))+a32;%随机产生新搜索空间的N个点,替换原来的点%步骤12结束%步骤13开始for i=1:1:Ncenter1(i)=X1(i);center2(i)=X2(i);center3(i)=X3(i);d(i)=maxf3(X1(i),X2(i),X3(i)); %计算各点的函数值end%步骤13结束%步骤14开始[w,i]=min(d); %记录最优函数值和最优点zy(numel(zy)+1)=w %记录最优函数值和最优点zyd1(numel(zyd1)+1)=X1(i)%记录最优函数值和最优点zyd2(numel(zyd2)+1)=X2(i)zyd3(numel(zyd3)+1)=X3(i)%步骤14结束%步骤15开始if(~(max(max(c1,c2),c3)>h)) breakendendkk=kk+1;end%步骤15结束%步骤16开始%步骤16结束[w,i]=min(d);zuiyouzhi=wzuiyoudian1=X1(i)zuiyoudian2=X2(i)zuiyoudian3=X3(i)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -