经典算法-模拟退火算法的python实现

经典算法-模拟退火算法的python实现

模拟退火算法基本思想

模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却。加温时,固体内部粒子随温度升高变为无序状,内能增大,而缓慢冷却时粒子又逐渐趋有序。从理论上讲,如果冷却过程足够缓慢,那么冷却中任一温度时固体都能达到热平衡,而冷却到低温时将达到这一低温下的内能最小状态。


LLM大模型相关文章:

大模型查询工具助手之股票免费查询接口

GPT实战系列-LangChain + ChatGLM3构建天气查询助手

GPT实战系列-大模型为我所用之借用ChatGLM3构建查询助手

GPT实战系列-简单聊聊LangChain

GPT实战系列-Baichuan2本地化部署实战方案

GPT实战系列-大话LLM大模型训练

GPT实战系列-ChatGLM3本地部署CUDA11+1080Ti+显卡24G实战方案


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

因为物理系统总是趋向于能量最低,而分子热运动则趋向于破坏这种低能量的状态,故而只需着重取贡献比较大的状态即可达到比较好的效果, 因而1953年Metropolis提出了这样一个重要性采样的方法, 即设从当前状态i生成新状态j。若新状态的内能小于状态i的内能(即Ej<Ei),则接受新状态j作为新的当前状态; 否则,以概率 e x p [ − ( E j − E i ) K T ] exp[\frac{-(E_j-E_i)}{KT}] exp[KT(EjEi)]接受状态j, 其中K为Boltzmann常数, 这就是通常所说的Metropolis准则。

初始化算法参数

    self.interval = interval                                    # 给定状态空间 - 即待求解空间
    self.T_max = T_max                                          # 初始退火温度 - 温度上限
    self.T_min = T_min                                          # 截止退火温度 - 温度下限
    self.iterMax = iterMax                                      # 定温内部迭代次数
    self.rate = rate                                            # 退火降温速度

算法基本步骤

①令 T = T 0 T=T_0 T=T0,即开始退火的初始温度,随机生成一个初始解工,并计算相应的目标函数值 E ( x 0 ) E(x_0) E(x0)

②令T等于冷却进度表中的下一个值 T i T_i Ti

③根据当前 x i x_i xi,进行扰动(扰动方式可以参考后面的实例),产生一个新解 x j x_j xj、计算应的目标函数值 E ( x j ) E(x_j) E(xj),得到$ △E=E(x_j)一E(x_i)$。

④若△E<0,则新解 x j x_j xj 被接受,作为新的当前解;若 △ E > 0 △E>0 E>0<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alex_StarSky

你的鼓励是创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值