展会信息港展会大全

请教编程高手有对模拟退火算法熟悉的么?哪里有相关代码或资料下
来源:互联网   发布日期:2011-09-06 13:36:01   浏览:6590次  

导读:请教编程高手有对模拟退火算法熟悉的么?哪里有相关代码或资料下载?谢谢 退火 算法 模拟退火 编程 模拟 网络上有很多类似算法的地方,你搜索一下,应该可以找到...

问题:

┊ ┊


ycfeifei82524
[新手]

请教编程高手有对模拟退火算法熟悉的么?哪里有相关代码或资料下载?谢谢 0分

标签:
回答:2   浏览:1146   提问时间:2005-11-01 14:59

0条评论...

最佳答案 此答案由提问者自己选择,并不代表爱问知识人的观点


二十四桥
[学妹]

网络上有很多类似算法的地方,
你搜索一下,应该可以找到很多的。
下面是我找到的一个,
希望对你有所帮助。


% 使用模拟退火算法(SAA)解决0-1背包问题


clear;
w=[6 5 3 2 1 1]; %物品重量
c=[61 59 31 21 15 5]; %物品价值

M=10; % 背包总容量

x=[0 0 0 0 0 0]; % 初始解
[mm,n]=size(x);
f=0;
m=0;
L=10*n; % Mapkob 链长
for i=1:n
f=f+c(i)*x(i);
m=m+w(i)*x(i);
end

t0=200; % 控制参数t的初值
t=t0;
tf=0.9; %
s0=0;
s1=1;
tic % 程序运行的初始,此处是为了计算程序运行的时间和程序结尾的toc对应


while s0~=s1 % 产生新解


flag=0;
for k=1:L
i=round(rand*(n-1))+1;
if x(i)==0
if m+w(i)<=M
x(i)=1;f=f+c(i);flag=1;
else
j=round(rand*(n-1))+1;
while x(j)==0
j=round(rand*(n-1))+1;
end
df=c(i)-c(j);dm=w(i)-w(j);
if m+dm<=M % 接受准则
if (df>0)|(exp(df/t)>rand)
x(i)=1;x(j)=0;f=f+df;m=m+dm;flag=1;
end
end
end
else
j=round(rand*(n-1))+1;
while x(j)==1
j=round(rand*(n-1))+1;
end
df=c(j)-c(i);dm=w(j)-w(i);
if m+dm<=M
if (df>0)|(exp(df/t)>rand)
x(i)=0;x(j)=1;f=f+df;m=m+dm;flag=1;
end
end
end
end
t=t*tf; %衰减函数
if flag==0
s0=s0+1;
else
s0=0;
end
f_max=f;
end

f_max
toc %程序运行的结尾,得出运行的时间

来自:http://www.madio.net/Article/Class3/Class13/200508/1002.html#

回答:2005-11-02 15:29

提问者对答案的评价:

1条评论...


其它回答 共1条回答


三月的水
[大师]

赞助本站

AiLab云推荐
展开

热门栏目HotCates

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