启发式优化算法之1--模拟退火算法,结合实例

本文深入探讨了模拟退火算法的原理与应用,通过解释其关键要素如目标函数、搜索空间及Metropolis准则,阐述了算法如何通过随机搜索逼近最优解。并结合实际题目,分析了算法在组合优化问题中的实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 

我的基础

那么模拟退火 算法的特点是什么呢?

总结

主要问题


我的基础

优化算法的要素如下,

目标函数;约束条件(自变量范围等);判断条件;自变量。

经过学习,以上的专业术语是:状态函数 <包含了计算和状态转移的判断>;搜索空间(状态空间)。

那么模拟退火 算法的特点是什么呢?

答:有一个候选解,采用随机数在一定范围内随机选取。

本文的主要目的就是结合实际题目,理解上述一句话。要理解上述含义,需要了解一个准则——Metropolis准则。

这个准则用来判断状态转移条件和概率。

根据Metropolis准则,粒子在温度T时趋于平衡的概率——也就是说出现能量差为dE的降温的概率为P(dE),表示为:P(dE) = exp( dE/(kT) )]。其中E为温度T时的内能,dE为其改变量为负值,k为Boltzmann常数。因此P与T正相关。

用固体退火模拟组合优化问题,将内能E模拟为目标函数值f,温度T演化成控制参数t,即得到解组合优化问题的模拟退火算法:由初始解i和控制参数初值t开始,对当前解重复“产生新解→计算目标函数差→接受或舍弃”的迭代,并逐步衰减t值,算法终止时的当前解即为所得近似最优解,这是基于蒙特卡罗迭代求解法的一种启发式随机搜索过程。退火过程由冷却进度表(Cooling Schedule)控制,包括控制参数的初值t及其衰减因子Δt、每个t值时的迭代次数L和停止条件S。

总结

1、题目:平衡点问题:https://www.luogu.org/problem/P1337  ——后面用模拟退火思路分析。

输入格式:文件的第一行为一个正整数n(1≤n≤1000),表示重物和洞的数目。接下来的n行,每行是3个整数:Xi.Yi.Wi,分别表示第i个洞的坐标以及第 i个重物的重量。(-10000≤x,y≤10000, 0<w≤1000 )

2、结合参考文献1中代码分析,代码初始值选 t=3000,其实是有问题的?如果输入 都大于3000,是否可以呢?引出如下:

主要问题

问:模拟退火变量是由大变小,那么和具体题目中的随机数变化是什么关系?

答:这是在判断转移条件时使用,3种情况。

case 1,如果目标函数变小了,那么接受变量。

case 2,如果目标函数相等或者变大了,那么就不接受新变量了吗?答案是以一定概率接受新变量。如何确定这个概率呢?就要T,dE以及随机数了。实际上是P(dE)的应用。

case 3,case 2 没能接受,就要对T进行缩小。一般T乘以0.9500到0.9999之间的一个数。

模拟退火的思想就体现在,不断选择新变量,然后重复判断case 1,2,3,这个过程中,T是变小的,P(dE)也是不断变小的。但目标函数是不断接近最优值的。而第2种判断也可能使目标函数达到全局最优,否则就不必要进行case 2判断,而直接进入case 3了!

 

参考文献:

1. https://www.luogu.org/problemnew/solution/P1337 之“模拟退火学习笔记”,——代码可用-Dev C++

2.https://blog.youkuaiyun.com/qq997843911/article/details/83445318 原链接 http://dingby.site/2018/04/07/%E6%9C%80%E4%BC%98%E5%8C%96%E7%AE%97%E6%B3%95%E2%80%94%E2%80%94%E5%B8%B8%E8%A7%81%E4%BC%98%E5%8C%96%E7%AE%97%E6%B3%95%E5%88%86%E7%B1%BB%E5%8F%8A%E6%80%BB%E7%BB%93/

3.https://www.cnblogs.com/ranjiewen/p/6084052.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值