模拟退火(SA)总结:算法流程,实例,思路

本文是偏应用的简要总结。 

关于模拟退火的基础知识和具体代码,网上有很多,不重复写了。本文没有代码,而是展示一个实例中的代码运行产生的中间结果,用于辅助理解算法流程。

本文分为四个部分:
第一部分,算法简要流程
第二部分,简单实例,按照第一部分的流程整理的代码运行时的迭代过程
第三部分,关于算法的全局搜索和局部搜索的理解
第四部分,算法思路整理

1. 简要流程

Step 1. 产生一个初始解,作为当前解
开始进入迭代,迭代环节为Step 2 ~ Step 3
Step 2. 创建随机增量,添加到当前解上,产生一个新解
Step 3. 如果新解的目标函数值优于当前解的目标函数值,当前解更新为新解
否则,以概率接受当前解更新为新解
当满足迭代终止条件时,跳出迭代环节,执行Step 4
Step 4. 输出搜索到的最优解

2. 流程应用实例——求一元函数最小值

例子:求函数最小值

函数为y = (x-π)^2 + 20cos(x), x∈[-5,5] 

最小值:取x=π时,目标函数最小值为-20

自定义:
等差降温
算法里的每种操作都可以自由设计,而且设计方式非常多

代码运行迭代过程:(按第一部分的流程整理标注)

Step 1. 初始化时
当前解:0.3029  对应目标函数值:27.1473
此时最优解:0.3029  对应目标函数值:27.1473

第一轮迭代:
温度值:100
Step 2. 创建的新解:-0.7255  新解的目标函数值:29.9173
Step 3. 新解的目标函数值劣于当前解的目标函数值,计算出新解的接受概率:0.9726
此时,接受新解为当前解了
当前解:-0.7255  对应目标函数值:29.9173
此时最优解:0.3029  对应目标函数值:27.1473 

第二轮迭代:
温度值:99
Step 2. 创建的新解:1.3722  新解的目标函数值:7.0760
Step 3. 新解的目标函数值优于当前解的目标函数值,接受新解为当前解
当前解:1.3722  对应目标函数值:7.0760
此时最优解:1.3722  对应目标函数值:7.0760

第三轮迭代:
温度值:98
Step 2. 创建的新解:-0.2304  新解的目标函数值:30.8419
Step 3. 新解的目标函数值劣于当前解的目标函数值,计算出新解的接受概率:0.7846
此时,接受新解为当前解了
当前解:-0.2304  对应目标函数值:30.8419
此时最优解:1.3722  对应目标函数值:7.0760

迭代以此类推

3. 全局搜索 VS 局部搜索
全局搜索:理论上通过不断的随机变化得到的解也能覆盖全部的解空间
局部搜索:偏向于局部搜索,不断的把当前的一个解通过随机增量变化为新的解

4. 核心思路
搜索到比当前解好的解,一定接受,搜索到比当前解差的解,以一定的概率接受

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值