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

📄 pma.m

📁 自己编写的改进人口迁移算法求解函数最优值
💻 M
字号:
%用人口迁移算法求函数的最大值%求目标函数的值format longN=3;%人口规模l=10;%人口流动次数k=0.01;%收缩系数h=1e-8;%人口压力参数m=10;%迭代次数a1=3;%搜索空间b1=6;%搜索空间a2=3;%搜索空间b2=5;%搜索空间center1=[];center2=[];zy=[];%记录最优值zyd=[];%记录最优点zydd=[];%记录最优点d=[];%计算目标函数值kk=0;X1=[];X2=[];tt=0;%步骤1开始while(kk<m)X1=(rand(1,N)*(b1-a1))+a1;%随机产生搜索空间的N个点X2=(rand(1,N)*(b2-a2))+a2;%随机产生搜索空间的N个点c1=(b1-a1)/(2*N);%区域的邻域c2=(b2-a2)/(2*N);%区域的邻域%步骤1结束%步骤2开始for i=1:1:Ncenter1(i)=X1(i);center2(i)=X2(i);d(i)=maxf(X1(i),X2(i));%计算各点的函数值end%步骤2结束%步骤3开始[w,i]=min(d); %记录最优函数值和最优点zy(numel(zy)+1)=w;%记录最优函数值和最优点zyd(numel(zyd)+1)=X1(i);%记录最优函数值和最优点zydd(numel(zydd)+1)=X2(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);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;end%步骤4结束%步骤5开始d(i)=maxf(X1(i),X2(i));%步骤5结束end%步骤6开始[w,i]=min(d); %记录最优函数值和最优点zy(numel(zy)+1)=w;%记录最优函数值和最优点zyd(numel(zyd)+1)=X1(i);%记录最优函数值和最优点zydd(numel(zydd)+1)=X2(i);%步骤6结束%步骤7开始tt=tt+1;if(tt>=l)    break    endend%步骤7结束%步骤8开始[w,i]=min(zy);%读取最优值和最优点yyd=zyd(i);yydd=zydd(i);a11=yyd-c1;%优惠区域a21=yydd-c2;if(a11>=b1)    a11=b1-c1;endif(a11<a1)    a11=a1;endif(a21>=b2)    a21=b2-c2;endif(a21<a2)    a21=a2;endb11=yyd+c1;%优惠区域b21=yydd+c2;if(b11>b1)    b11=b1;endif(b11<=a11)    b11=a11+c1;endif(b21>b2)    b21=b2;endif(b21<=a21)    b21=a21+c2;endX1=(rand(1,N)*(b11-a11))+a11;%随机产生新搜索空间的N个点,替换原来的点X2=(rand(1,N)*(b21-a21))+a21;%随机产生新搜索空间的N个点,替换原来的点%步骤8结束%步骤9开始for i=1:1:Ncenter1(i)=X1(i);%第i个区域的中心center2(i)=X2(i);%第i个区域的中心d(i)=maxf(X1(i),X2(i)); %计算各点的函数值end%步骤9结束%步骤10开始[w,i]=min(d); %记录最优函数值和最优点zy(numel(zy)+1)=w; %记录最优函数值和最优点zyd(numel(zyd)+1)=X1(i);%记录最优函数值和最优点zydd(numel(zydd)+1)=X2(i);%步骤10结束%步骤11开始while(1)c1=(1-k)*c1;%收缩优惠区域c2=(1-k)*c2;%收缩优惠区域%步骤11结束%步骤12开始a12=zyd(numel(zyd))-c1;a22=zydd(numel(zydd))-c2;if(a12>=b1)    a12=b1-c1;endif(a12<a1)    a12=a1;endif(a22>=b2)    a22=b2-c2;endif(a22<a2)    a22=a2;endb12=zyd(numel(zyd))+c1;%优惠区域b22=zydd(numel(zydd))+c2;%优惠区域if(b12>b1)    b12=b1;endif(b12<=a12)    b12=a12+c1;endif(b22>b2)    b22=b2;endif(b22<=a22)    b22=a22+c2;endX1=(rand(1,N)*(b12-a12))+a12;%随机产生新搜索空间的N个点,替换原来的点X2=(rand(1,N)*(b22-a22))+a22;%随机产生新搜索空间的N个点,替换原来的点%步骤12结束%步骤13开始for i=1:1:Ncenter1(i)=X1(i);center2(i)=X2(i);d(i)=maxf(X1(i),X2(i)); %计算各点的函数值end%步骤13结束%步骤14开始[w,i]=min(d); %记录最优函数值和最优点zy(numel(zy)+1)=w ;  %记录最优函数值和最优点zyd(numel(zyd)+1)=X1(i);%记录最优函数值和最优点zydd(numel(zydd)+1)=X2(i);%步骤14结束%步骤15开始if(~(max(c1,c2)>h))    breakendendkk=kk+1;end%步骤15结束%步骤16开始%步骤16结束[w,i]=min(d);zuiyouzhi=wzuiyoudian1=X1(i)zuiyoudian2=X2(i)    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -