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

📄 pma3.asv

📁 自己编写的改进人口迁移算法求解函数最优值
💻 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 + -