模拟退火算法解决函数优化问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
智能信息处理实验报告
14电科一班
XX
XXXX
模拟退火算法解决函数优化问题
实验二
一、实验目的
1. 掌握模拟退火算法的基本原理和步骤。
2. 复习VB 、VC 的基本概念、基本语法和编程方法,并熟练使用VB 或VC 编写遗传算法程序。
二、实验设备
微机
三、实验原理
模拟退火算法是基于Monte Carlo 迭代求解策略的一种随机寻优算法,其出发点是基于物理退火过程与组合优化之间的相似性,模拟退火算法由某一较高初温开始,利用具有概率突跳特性的Metropolis 抽样策略在解空间中进行随机搜索,伴随温度的不断下降重复抽样过程,最终得到问题的全局最优解。
标准模拟退火算法的一般步骤可描述如下: (1) 令m =0,给定初温t m ,随机产生初始状态s m ; (2) Repeat ; s old =s m ; (2.1) Repeat ;
(2.1.1) 产生新状态:s new =Generate(s old );
(2.1.2) 若min{1, exp[(C (s old )-C (s new ))/t m ]}≥random[0, 1],则s old =s new ; (2.1.3) Until 抽样稳定准则满足;
(2.2) 退温:t m +1=update(t m ),s m +1=s old ,m =m +1; (3) Until 算法终止准则满足; (4) 输出算法搜索结果:s m 。
四、实验内容及步骤
1. 上机编写程序,解决以下函数优化问题:()221min 10i i i f x x =⎛⎫=≤ ⎪
⎝⎭
∑X
2. 调试程序。
3. 根据实验结果,写实验报告。
图2.1 标准模拟退火算法流程图
六、结果分析
1.实验程序。
% 清工作空间workspace,清屏幕显示
clear; clc;
tic; % 启动计时器
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
% 参数赋值
oldlucheng=0;
newlucheng=0;
start_tk= 100000000; % 模拟退火初温
stop_tk = 1; % 当温度小于stop_tk,退出模拟退火
npt=0.95;% 退温系数
metropolis = 200; % metropolis抽样次数
iterative_thre =20; % 若连续iterative_thre次解无改进,则退出模拟退火算法%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
% 初始化变量
oldz=[41 94;37 84;53 67;25 62;7 64;2 99;68 58;71 44;54 62;83 69;64 60;18 54;22 60;83 46;91 38;25 38;24 42;58 69;71 71;74 78;87 76;18 40;13 40;82 7;62 32;58 35;45 21;41 26;44 35;4 50]; % 初始化解
tk=start_tk; % 模拟退火温度控制量
no_advance_time =0; % 模拟退火算法,退温次数控制量
for i=1:29
oldlucheng=oldlucheng+sqrt((oldz(i+1,1)-oldz(i,1))^2+(oldz(i+1,2)-oldz(i,2))^2);
end
bestz=oldz;
bestlucheng=oldlucheng;
while no_advance_time last_bestz=bestz; last_bestlucheng=bestlucheng; t2=0; oldz=bestz; oldlucheng=bestlucheng; while t2 t2=t2+1; a=randi(29,1); b=randi(29,1); c=flipud(oldz(min(a,b)+1:max(a,b)+1,:)); %交换a+1, b+1行间的下的x,y值 oldz(min(a,b)+1:max(a,b)+1,:)=c; newz=oldz; for i=1:29 newlucheng=newlucheng+sqrt((newz(i+1,1)-newz(i,1))^2+(newz(i+1,2)-newz(i,2))^2); end deltafx=exp((-oldlucheng+newlucheng)/tk); if min(1,deltafx)>=rand(1) oldlucheng=newlucheng; oldz=newz; end if newlucheng bestz=newz; bestlucheng=newlucheng; end end no_advance_time = no_advance_time+1; % 退火次数控制量加1 if last_bestlucheng ~=bestlucheng % 判断全局最优解是否改变 no_advance_time = 0; % 清退火次数控制量 end tk=tk*npt; % 降温 end time =toc; % 计时结束 %disp(['z最优解为: ' num2str(bestz)]); disp(['最短路程为: ' num2str(bestlucheng)]); disp(['程序运行时间: ' num2str(time) 's']); 2.利用实验数据,分析并解答以下问题, a)模拟退火算法中初温对求解结果的影响。 初温越大,获得高质量解的几率越大 b)模拟退火算法中初始状态对求解结果的影响。 模拟退火算法与初始值无关,算法求得的解与初始解状态S(是算法迭代的起点)无关 c)Metropolis抽样准则在模拟退火算法中的作用。