matlab人口迁移模型,人口迁移优化算法MATLAB源码

人口迁移算法是进化计算领域新出现的一种优化算法,它通过模拟人类社会人口迁移的社会现象,来构造启发式规则,提出的一种新型智能优化算法,GreenSim团队实现了该算法,并加入了一点小改进。本源码由GreenSim团队原创,转载请注明,有意购买源码或代写相关程序,请与GreenSim团队联系(主页http://blog.sina.com.cn/greensim)

%% 人口迁移算法

% 此程序实现人口迁移算法,用于求解无约束连续函数最小化问题

% 对于最大化问题,请先将其加负号转化为最小化问题

%  GreenSim算法仿真团队原创作品,转载请注明

%  更多原创源码资源,请访问GreenSim团队主页(http://blog.sina.com.cn/greensim)

%% 第一步:参数设置

clear

%迭代次数K

K=30;

%人口规模N

N=5;

%人口移动中的参数L

L=5;

%初始区域半径δ

Delta0=0.3;

%人口压力警戒参数α

Alpha0=0.01;

%区域收缩系数ρ

Rho=0.9;

%是否使用梯度下降法进行局部搜索的控制参数

IfLocalSearch=0;

%决策变量的个数

M=5;

%决策变量的下界

lb=0*ones(M,1);

%决策变量的上界

ub=pi*ones(M,1);

%  GreenSim算法仿真团队原创作品,转载请注明

%  更多原创源码资源,请访问GreenSim团队主页(http://blog.sina.com.cn/greensim)

%% 第二步:初始化

R0=Delta0;%初始球半径

X0=zeros(M,N);%初始球心,存储初始人口群,M×N的矩阵

for i=1:M

x=unifrnd(lb(i),ub(i),1,N);

X0(i,:)=x;

end

ALLX=cell(K,1);%细胞结构,每一个元素是M×N矩阵,记录每一代人口迁移后各区域的个体

ALLY=zeros(K,N);%K×N矩阵,记录每一代人口迁移后各区域个体的评价函数值

BESTX=cell(K,1);%细胞结构,每一个元素是M×1向量,记录每一代的最优个体

BESTY=zeros(K,1);%K×1矩阵,记录每一代的最优个体的评价函数值

k=1;%迭代计数器

X=X0;%当前操作对象初始化

R=R0;%当前区域半径初始化

%  GreenSim算法仿真团队原创作品,转载请注明

%  更多原创源码资源,请访问GreenSim团队主页(http://blog.sina.com.cn/greensim)

%% 第三步:最外层的循环,由迭代总次数控制

while k<=K

%%  第四步:演化步(人口流动和人口迁移)

%    第四步直观上看就是:球心在移动,半径在缩小,直到某个门限为止

Y=zeros(1,N);

while R>Alpha0%未超过人口压力警戒

for n=1:N

Xn=X(:,n);

NewXn=zeros(M,L);

NewFitXn=zeros(1,L);

for i=1:L

aa=(max([(Xn-R)';lb']))';

bb=(min([(Xn+R)';ub']))';

NewXni=GaussMutation(Xn,aa,bb);%调用高斯变异子函数

NewXn(:,i)=NewXni;

FitNewXni=FIT(NewXni);%调用计算适应值子函数

NewFitXn(i)=FitNewXni;

end

TempNewXn=[NewXn,Xn];

FitXn=FIT(Xn);

TempNewFitXn=[NewFitXn,FitXn];

%找出最佳位置

minF=min(TempNewFitXn);

pos=find(TempNewFitXn==minF);

Xn=TempNewXn(:,pos(1));

X(:,n)=Xn;

Y(n)=minF;

end

R=Rho*R;

end

%  GreenSim算法仿真团队原创作品,转载请注明

%  更多原创源码资源,请访问GreenSim团队主页(http://blog.sina.com.cn/greensim)

%% 第五步:梯度法局部搜索

if IfLocalSearch==1%是否使用局部搜索

for n=1:N

Xn=X(:,n);

Yn=Y(n);

x0=Xn;

ff=optimset;

ff.TolX=1e-10;

ff.TolFun=1e-20;

ff.Display='off';

[x,y]=fminunc('FIT',x0,ff);

if ((sum((x>lb)&(x=M)&&(y<=Yn)

Xn=x;

Yn=y;

end

X(:,n)=Xn;

Y(n)=Yn;

end

end

%% 第六步:找出最佳个体并记录

minY=min(Y);

pos=find(Y==minY);

minX=X(:,pos(1));

ALLX{k,1}=X;

ALLY(k,:)=Y;

BESTX{k,1}=minX;

BESTY(k)=minY;

%% 第七步:在剩余空间随机撒点

newX=zeros(M,N);

newX(:,1)=minX;

for n=2:N

for m=1:M

xmn=unifrnd(lb(m),ub(m));

newX(m,n)=xmn;

end

end

%% 第八步:状态更新

X=newX;

R=R0;

disp(k);

k=k+1;

%%

end

[本帖最后由 edifiers2008 于 2008-11-12 20:00 编辑]

016附图1.jpg

(114.42 KB, 下载次数: 14)

2008-11-12 19:54 上传

442a53943febe9465fc072b4fbe10813.gif

b2a5a3e0dcc7d508e00275fe42fce1b5.gif

matlab人口迁移模型,人口迁移优化算法MATLAB源码_第1张图片

016附图2.jpg

(81.47 KB, 下载次数: 10)

2008-11-12 19:54 上传

442a53943febe9465fc072b4fbe10813.gif

b2a5a3e0dcc7d508e00275fe42fce1b5.gif

matlab人口迁移模型,人口迁移优化算法MATLAB源码_第2张图片

你可能感兴趣的:(matlab人口迁移模型)