展会信息港展会大全

[原创]模拟退火算法程序
来源:互联网   发布日期:2011-09-07 13:21:32   浏览:5483次  

导读: 从现在开始,我会陆续公开我在做数学建模时的一些程序,希望对大家有所帮助。这些程序都是我原创的,希望对大家有所帮助!特别提醒:虽然我在这里提供了程序,但是还是希望要使用的人根据我的注释研究一下,这样才能提高自己的水平! 首先给出主程序: 引用 ...

从现在开始,我会陆续公开我在做数学建模时的一些程序,希望对大家有所帮助。这些程序都是我原创的,希望对大家有所帮助!特别提醒:虽然我在这里提供了程序,但是还是希望要使用的人根据我的注释研究一下,这样才能提高自己的水平!

首先给出主程序:

引用

%sa.m

%模拟退火算法

r=[1];%初始解

Tm=1000;%最高温度

T=Tm;%初始温度

Tn=0.0001;%最低温度

E=[];%能量

dE=[];%能量差

k=0;%迭代次数

l=length(r);

L0=10;L1=0.0001;%随机扰动范围随温度变化,最大和最小范围

best=r;zx=mbFunction(r);

while T>=Tn

k=k+1;

h=0;

while h==0

hh=0;

while hh==0

r1=r+randomDisturb(l,Tm,T,Tn,L0,L1);

if isMatch(r1)

hh=1;

end

end%扰动产生一个新可行解

E=mbFunction(r1);

dE=E-mbFunction(r);

if dE<=0

r=r1;

h=1;

else

p=exp(-dE/T);

if p>=rand(1)

r=r1;

h=1;

end

end

if mod(k,10)==0

T=0.9*T;

end

if E

zx=E;best=r;

end

end

end

best

mbFunction(best)

clear E;clear T;clear Tn;clear dE;clear h;clear hh;clear k;clear l;clear p;clear r1;

a=1:5000;

b=zeros(1,100);

a=[sin(0.4*a) b sin(0.4*a) b sin(0.8*a) b sin(0.8*a) b sin(1.2*a) b sin(1.2*a) b sin(0.8*a)];

sound(a)

上面对一些变量进行了说明。注意最后“clear E;clear T;clear Tn;clear dE;clear h;clear hh;clear k;clear l;clear p;clear r1;”这一行之后是一段声音,提醒你结果出来了~

然后给出判断可行域的程序:

引用

%isMatch.m

%判断向量是否在可行域

function f=isMatch(r)

f=1;%目标函数(这里取二次函数为例子)可行域为实数集,因此不必进行判断。

return;

这个程序很简单,再用的时候,需要修改一下,当r在可行域内时,返回1,否则返回0。

然后给出目标函数:

引用

%mbFunction.m

%目标函数

function f=mbFunction(w)

f=w*w;

return;

这个时目标函数f=f(w),w为自变量(向量)

最后给出产生随机扰动的程序:

引用

%randomDisturb.m

%生成随机扰动

%n为向量维数

%m为最大扰动

function f=randomDisturb(n,Tm,T,Tn,L0,L1)

m=((L1-L0)/(Tn-Tm))*T+L0-Tm*((L1-L0)/(Tn-Tm));

a=(rand(1,n)*2-1)*m;

f=a;return;

这里要注意了!为了防止程序最后在可行域的边缘附近取不到可行域内的点,我让随机扰动的范围随着温度的降低而减小。这实际上是一个线性递减的函数,有兴趣的可以吧上面第2行变换一下就知道了。

使用的时候,一般只要改一下目标函数、可行域、初始解的维数就可以了。

博客把前面的缩进什么的都给删掉了,这里给出一个程序的压缩包:

[原创]模拟退火算法程序

点击下载 模拟退火算法.rar

[最后修改由 指月居士, 于 2009-04-18 13:27:17]

标签:

评论Feed: http://www.zyzen.cn/feed.asp?q=comment&id=92

引用链接:


赞助本站

AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港