- 1、本文档共29页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
最优化原理及应用
“最优化原理及应用”
2008200388 姚远
1.用C语言,或者Matlab, 或者Fortran等编写一个完整的Simulated Annealing算法和Genetic 算法的优化程序。
解: 本题采用Matlab语言编写一个完整的SA算法优化程序。在该程序中选用的代价函数为:,初始的C0=1000,每一个阶段的Lk选为20,接受概率设为0.6,迭代的终止条件为e0.00001(e=)。初始值的选取范围为,每次迭代的扰动=6。C=C0/k。
的趋势如下图所示:
经过SA算法得出的结果为:x1=5.6682 f(x)=-3.8854。
程序如下:
%退火算法
clear all
clc
C0=1000;
x0=20*rand(1,1)-10; %取初始值
k=0;
Lk=20;
F=sin((x0-1.5)^2)+(x0-6)^2-3; %代价函数
delta_x=6; %扰动
e=1;
epsilon=0.6; %接受概率
i=1;
while (e0.00001)
k=k+1;
C=C0/k;
for(i=1:Lk)
w=2*rand(1,1)-1;
x1=x0+w*delta_x; %产生一个x1
F1=x1^4-x1^3-15*x1^2+1;
delta_f=F1-F;
e=abs(delta_f);
if (F1F)
x0=x1;
F=F1;
X(i)=x1;
i=i+1;
else
prob=exp(-delta_f/C);
if (probepsilon)
x0=x1;
F=F1;
X(i)=i+1;
end
end
end
end
x0
F
下面为采用遗传算法的优化程序。该程序中的代价函数与上面的SA算法所用的一致。设定变量的二进制码链长度为10,基因库中的二进制码链个数为10。自变量的取值区间为,设定遗传算法的迭代次数为500。在每次迭代保留基因的选择中分别采用了均值法和轮盘赌的方法,在保留、交换和异化的过程中每次都将最好的基因保留在基因库的最后一行,即精英操作。
经过GA算法得出的结果为:x1=5.6696 f(x)=-3.8851。
从图中我们可以看出SA和GA算法均找到了该代价函数的最小值点。在运行的过程中GA的速度要明显快于SA。
程序如下:
%遗传算法
% F=sin((x-1.5)^2)+(x-6)^2-3; 最优化问题的代价函数
% Q=1000-( sin((x-1.5)^2)+(x-6)^2-3); 遗传算法中定义的fitness
clc
clear all
num=10;
length=10;
total=2^(length)-1;
min=-5; %取值区间的长度
max=5;
G=100;
genome=round(rand(num,length)); %定义自变量的随机二进制编码,长度为length
for (k=1:G)
X=zeros(1,num); %二进制转化为???进制
for(i=1:num)
for(j=length:-1:1)
X(i)=X(i)+genome(i,j)*2^(length-j);
end
X(i)=X(i)/total*(max-min)+min;
end
for(i=1:num) %计算各变量的fitness
Q(i)=1000-(sin((X(i)-1.5)^2)+(X(i)-6)^2-3);
end
[order,location]=sort(Q);
bestgene=location(num); %最好的基因位置
BEST(k,:)=genome(bestgene,:); %最好的基因
% %保留
% q=sum(Q);
% vector=(Q/q)*num;
% vector=floor(vector); %将品质因数大于均值
文档评论(0)