模拟退火算法

举报
凉城予梦 发表于 2022/10/13 12:23:59 2022/10/13
【摘要】 模拟退火算法蒙特卡罗模拟算法(解决简单问题)问题如下:1.求一个给定函数的最值问题(函数在[-3,3]内的最大值)蒙特卡罗模拟算法思想:暴力搜索(随机取多个点代入试值,取最值)缺点在于时间复杂度高,时间复杂度越高,求解花费时间越长(例如30个变量)时间复杂度:简单理解就是一个算法或是一个程序在运行时,所消耗的时间(或者代码被执行的总次数)可以参考博客:https://cloud.tencen...

模拟退火算法

蒙特卡罗模拟算法(解决简单问题)

问题如下:

1.求一个给定函数的最值问题(函数在[-3,3]内的最大值)

蒙特卡罗模拟算法思想:暴力搜索(随机取多个点代入试值,取最值)

缺点在于时间复杂度高,时间复杂度越高,求解花费时间越长(例如30个变量)

时间复杂度:简单理解就是一个算法或是一个程序在运行时,所消耗的时间(或者代码被执行的总次数)

可以参考博客:https://cloud.tencent.com/developer/news/841465

2.TSP(旅行商问题)

其时间复杂度为n的阶乘

3.书店买书问题

4.背包问题


需要解决的问题:某个目标函数的最值(最大值给目标函数添加负号即转换为求最小值问题)

蒙特卡罗模拟与穷举法都是暴力取点代入法,而穷举法是按照一定规则穷举整个空间

刚属于盲目搜索(随机取点代入试验),所以我们需要用启发式算法

盲目搜索:按照预定的策略实行搜索,搜索过程中获取中间信息不能用来改进策略

启发式算法:利用中间得到的信息改进搜索策略称为启发式算法,有助于找到问题的最优解,有助于加速求解过程并找到较优解。(例如蚁群算法可以用在路径规划中)


爬山法的缺点是容易找到局部最优值(初始值选择的不确定造成的)

容易陷入局部最优解的原因是搜索到局部最优解就停止了,其是一种眼光狭隘的贪心算法其也属于启发式算法

模拟退火会以一定概率接受一个比当前解差的值,有几率跳出局部最优解,跳出全局最优解

模拟退火在新解与旧解的比较中不是完全拒绝旧的解,而是以一定的概率接受

若,则接受新解,若,我们以一定概率接受

接下来,我们对于开始讨论:

定义一个接受概率p,其位于[0,1]之间,p=0,为不接受的爬山法,p=1,为随机取点的蒙特卡洛算法

为新值与旧值的距离,所以我们构造函数使得

p,距离越大愿意接受新值的概率越小

要求前期接受新值概率要大(全局),后期概率要小(局部)

对前期式子进行一个变形,加入时间相关的系数:

是正比于t变化的

模拟退火算法的流程(例如求解最大值):

看计算出来的概率是否落入随机生成的置信区间内,落入则取其值,否则重新生成一个新解(重复第二步)

对于第二种情况:原先的解A也要保留到一个矩阵里, 怕错过

模拟退火的核心问题:在A的附近如何随机生成一个新解B(可以加入约束条件的地方

还有一种加入约束条件的方式:对目标函数进行增加或者减小一项变为罚函数,使其值内生到约束条件范围之内


在A的附近如何随机生成一个新解:

Matlab优化工具箱模拟退火给出的找到新解的算法:

为新解,随着T的变化(下降),新解的左右邻域在不断缩小


退火的温度很重要,加热到一定温度保持足够时间,以适宜温度冷却,关系到产品的质量

对于的定义:与温度有关,所以

所定义的初始温度不是固定的,后续初始温度的设定会详细说



对图的解释:图为随温度变化的图,温度越高,更容易接受新解,从右向左看,随着温度的减小,接受新解的概率也在减小(收敛),到达局部搜索。

说明:

中的t可以看成迭代的次数(循环)

为保证搜索过彻底,同一温度下,我们需要进行多次搜索(例如重复上述流程次),再降低温度,再来进行新的一轮搜索(外循环)

停止搜索的准则:1.达到指定迭代次数,例如迭代200次

2.达到指定温度,例如温度小于0.000001

3.我们找到的最优解连续M次迭代都没有变化


对于TSP旅行商问题:

产生新解的方法:

与求函数极值问题不同的是寻找最优解的部分不一样

Matlab有调用模拟退火的内置函数,其只能求解给定函数的极值问题,不能求解TSP等其他问题

对于书店买书问题:


产生新解的方法是:

对于背包问题:

概率准则改为:


注意刚开始的取值对于背包不能超重(所以初始值都设置为0)

 注:本文引用清风建模学习课程资料,如有详细了解,可以关注清风建模课程与公众号


【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。