模拟退火与爬山法

news/2024/10/12 23:19:13

通过向 chatGPT-4o-mini 提问,我注意到所有爬山法可以解决的问题模拟退火都可以解决,所以爬山法死了我不想学爬山法。

具体的,对于一个多峰函数求解最值的题目都可以用模拟退火来做。

如果现在在较优解 \(x\),发现了一个新的解 \(x'\),如果 \(x'\)\(x\) 优那么 \(x\gets x'\) 否则有一定概率接受 \(x'\),这就是模拟退火的核心思想。

考虑 \(x'\) 没有 \(x\) 优秀的概率是怎么计算的:

\(\Delta x=x-x'\),那么我们就有 \(e^{\frac{\Delta x}{T}}\) 的概率更新 \(x\),其中 \(T\) 是当前的温度。在进行了一次操作之后就进行降温操作,即 \(T\gets T\times 0.999\)

下面的内容很重要!!!!!!

我们令新算出的结果为 \(f\),原本的答案为 \(lst\)

对于求解最小值的问题,取 \(\Delta=f-lst\),那么:

  • 如果 \(\Delta<0\),那么就直接接受。
  • 否则如果 exp(-del/t)>Rand(),那么接受。

对于求解最小值的问题,一样取 \(\Delta=f-lst\),那么:

  • 如果 \(\Delta>0\),那么就直接接受。
  • 否则如果 exp(del/t)>Rand(),那么接受。

需要注意的是 exp(x)\(=e^x\),其中 \(x\) 就是自然函数,其图像如下:

发现对于 \(x>0\) 的情况 epx(x) 始终大于 \(1\),这个概率就是没有意义的,所以 \(\Delta\) 的值一定是负数才有意义。

所以上面的公式在 epx 中是取 del 还是 -del 就十分好理解了,所以这并不需要死记硬背。

形象的,放一张从 OI-Wiki 偷的图:

JSOI2004 平衡点 / 吊打XXX

练手题,但是题目太困难了,考虑给一个形式化题意:

找到一个 \((x,y)\) 使 \(\sum\limits_{i=1}^n dis((X_i,Y_i),(x,y))\times Weight_i\) 最小,输出 \(x,y\)(可以是小数),其中 \(1\le n\le 1000\)

就是模板,按照上面的思路写就行了。

AHOI2014/JSOI2014 保龄球

考虑每一次随机交换 \(x,y\) 的位置,跑模拟退火就行了。

JSOI2016 炸弹攻击

直接随机放炸弹的位置,因为函数长得奇丑无比所以要求扰动的范围较大,生成的时候需要使用:

double xx=(rand()*2-RAND_MAX)*t+x;

而不是:

double xx=(2.0*rand()/RAND_MAX-1)*t+x;

HAOI2006 均分数据

考虑先随机分组,然后模拟退火随机改变一个元素的分组就行了。

JSOI2008 球形空间产生器

设一个变量 \(r\),表示这个高维球体的半径,由公式 \(r=\sqrt{\sum_{i=1}^n(a_i-b_i)^2}\) 可得 \(\sum_{i=1}^n(a_i-b_i)^2= r^2\),其中 \(a_i\) 是高维球面上某一个点的坐标,\(b_i\) 是球心的坐标。

化简得:

\[\sum_{i=1}^n({a_i}^2-2a_ib_i+{b_i}^2)=r^2 \]

移项得:

\[\sum_{i=1}^n(-2a_ib_i)+\sum_{i=1}^n{b_i}^2-r^2=\sum_{i=1}^n({-a_i}^2) \]

其中 \(\sum_{i=1}^n{b_i}^2-r^2\) 与球面上的点无关,因此我们可以将其看做一个系数为 \(1\) 的变量,右边是常量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/70858.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

类与对象的创建

1.类的定义 类是抽象的,它是对某一事物整体进行描述,不能具体代表一个事物。 比如:学生、老师、动物、植物 2.对象的定义 对象是具体的,是抽象概念的具体实例。 比如:学生小明、老师张三 3.类的创建 1.类由两部分组成,第一个是属性,即字段(int name;)另一个是方法。 …

域名系统DNS服务

1 名字解析介绍和DNS 1.根域: 全球根服务器节点只有13个,10个在美国,1个荷兰,1个瑞典,1个日本 2.一级域名:Top Level Domain: tld 三类:组织域、国家域(.cn, .ca, .hk, .tw)、反向域 com, edu, mil, gov, net, org, int,arpa 3.二级域名:wang.org 4.三级域名:study.wang…

Python用CNN - LSTM、ARIMA、Prophet股票价格预测的研究与分析|附数据代码

全文链接: https://tecdat.cn/?p=37860 原文出处:拓端数据部落公众号 分析师:Sabrina Huang 股票市场的波动起伏一直备受投资者关注,准确预测股票价格对于投资者制定合理的投资策略至关重要。股票价格数据具有时间序列特性,近年来,随着机器学习和深度学习技术的发展,各…

方法的回顾

1.静态方法与非静态方法静态方法即在方法前面有static,更加方便调用非静态方法书写的方法前面没有static修饰符,需要使用new进行实例化才可进行调用 未使用new实例化:使用new实例化后:2.静态方法与非静态方法之间的调用 方法可以调用方法,静态方法是与类一同生成的,所以我…

第109天:免杀对抗-PowerShell混淆分离加载特征修改EXE生成填充替换

知识点 知识点: 1、Powershell-对变量数据做文章 2、Powershell-对Shellcode做文章 3、Powershell-对执行代码特征做文章 章节点: 编译代码面-ShellCode-混淆 编译代码面-编辑执行器-编写 编译代码面-分离加载器-编写 程序文件面-特征码定位-修改 程序文件面-加壳花指令-资源…

第110天:免杀对抗-GOC#反VT沙盒逆向调试参数加载资源分离混淆加密

知识点 #知识点: 1、C#-混淆&分离&反调试 2、GO-混淆&分离&反调试 3、成品程序-包含反调试VT #章节点: 编译代码面-ShellCode-混淆 编译代码面-编辑执行器-编写 编译代码面-分离加载器-编写 程序文件面-特征码定位-修改 程序文件面-加壳花指令-资源 代码加载…