遗传算法及蚂蚁算法作业

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(1)用遗传算法来做:

第一步:确定决策变量及其约束条件

s.t. -5<=x<=5

第二步:建立优化模型

第三步:确定编码方法,用长度为50位的二进制编码串来表示决策

变量x

第四步:确定解码方法

第五步:确定个体评价方法

个体的适应度取为每次迭代的最小值的绝对值加上目标函数值,即

第六步:确定参数

本题种群规模n=30,迭代次数ger=200,交叉概率pc=0.65,变异概率

pm=0.05

代码:

clear all;

close all;

clc;

tic;

n=30;

ger=200;

pc=0.65;

pm=0.05;

% 生成初始种群

v=init_population(n,50);

[N,L]=size(v);

disp(sprintf('Number of generations:%d',ger));

disp(sprintf('Population size:%d',N)); disp(sprintf('Crossover probability:%.3f',pc)); disp(sprintf('Mutation probability:%.3f',pm));

% 待优化问题

xmin=-5;

xmax=5;

ymin=-5;

ymax=5;

f='-(2-exp(-(x.^2+y.^2)))';

[x,y]=meshgrid(xmin:0.1:xmax,ymin:0.1:ymax);

vxp=x;

vyp=y;

vzp=eval(f);

figure(1);

mesh(vxp,vyp,-vzp);

hold on;

grid on;

% 计算适应度,并画出初始种群图形x=decode(v(:,1:25),xmin,xmax);

y=decode(v(:,26:50),ymin,ymax);

fit=eval(f);

plot3(x,y,-fit,'k*');

title('(a)染色体的初始位置');

xlabel('x');

ylabel('y');

zlabel('f(x,y)');

% 迭代前的初始化

vmfit=[];

vx=[];

it=1; % 迭代计数器

% 开始进化

while it<=ger

% Reproduction(Bi-classist Selection) vtemp=roulette(v,fit);

% Crossover

v=crossover(vtemp,pc);

% Mutation

M=rand(N,L)<=pm;

%M(1,:)=zeros(1,L);

v=v-2.*(v.*M)+M;

% Results

x=decode(v(:,1:25),xmin,xmax);

y=decode(v(:,26:50),ymin,ymax);

fit=eval(f);

[sol,indb]=max(fit); % 每次迭代中最优目标函数值

v(1,:)=v(indb,:);

fit_mean=mean(fit); % 每次迭代中目标函数值的平均值

vx=[vx sol];

vmfit=[vmfit fit_mean];

it=it+1;

end

%%%% 最后结果

disp(sprintf('\n')); %空一行

% 显示最优解及最优值

disp(sprintf('Maximum

found[x,f(x)]:[%.4f,%.4f,%.4f]',x(indb),y(indb),-sol));

% 图形显示最优结果

figure(2);

mesh(vxp,vyp,-vzp);

hold on;

grid on;

plot3(x,y,-fit,'r*');

title('染色体的最终位置');

xlabel('x');

ylabel('y');

zlabel('f(x,y)');

% 图形显示最优及平均函数值变化趋势

figure(3);

plot(-vx);

%title('最优,平均函数值变化趋势');

xlabel('Generations');

ylabel('f(x)');

hold on;

plot(-vmfit,'r');

hold off;

runtime=toc

运行结果:Maximum found[x,f(x)]:[0.0033,0.0017,1.0000]

(2)用蚁群算法来做

代码:

% Ant main program

clear all;

close all;

clc;

tic;

Ant=100;

xmin=-5;

xmax=5;

ymin=-5;

ymax=5;

tcl=0.05;

f='-(2-exp(-(x.^2+y.^2)))'; % 待优化的目标函数[x,y]=meshgrid(xmin:tcl:xmax,ymin:tcl:ymax);

vxp=x;

vyp=y;

vzp=eval(f);

figure(1);

mesh(vxp,vyp,-vzp);

hold on;

% 初始化蚂蚁位置

for i=1:Ant

X(i,1)=(xmin+(xmax-xmin)*rand(1));

X(i,2)=(ymin+(ymax-ymin)*rand(1));

% T0----信息素,函数值越大,信息素浓度越大T0(i)=exp(-(X(i,1).^2+X(i,2).^2))-2;

end

plot3(X(:,1),X(:,2),-T0,'k*');

相关文档
最新文档