OSDN Git Service

Update hill-climbing.md
authorTrisolaris HD <36555123+TrisolarisHD@users.noreply.github.com>
Sat, 27 Jul 2019 10:03:18 +0000 (18:03 +0800)
committerGitHub <noreply@github.com>
Sat, 27 Jul 2019 10:03:18 +0000 (18:03 +0800)
docs/misc/hill-climbing.md

index cb469db..5a4eeeb 100644 (file)
@@ -4,7 +4,7 @@
 
 直白地讲,就是当目前无法直接到达最优解,但是可以判断两个解哪个更优的时候,根据一些反馈信息生成一个新的可能解。
 
-因此,爬山算法每次在当前找到的最优方案 $x$ 附近寻找一个新方案)。如果这个新的解 $x'$ 更优,那么转移到 $x'$ 否则不变。
+因此,爬山算法每次在当前找到的最优方案 $x$ 附近寻找一个新方案。如果这个新的解 $x'$ 更优,那么转移到 $x'$,否则不变。
 
 这种算法对于单峰函数显然可行。
 
 
 兔子清醒的过程就是降温过程,在爬山的时候会不断减小之。
 
-关于降温:一般而言降温参数设定在 0.985-0.999,是略小于 1 的常数
+关于降温:降温参数是略小于 $1$ 的常数,一般在 $[0.985, 0.999]$ 中选取
 
-# 例 1 球形空间产生器
+### 例 1 球形空间产生器
 
-这里以一道(其实正解是高斯消元)的适合爬山的好题[LuoguP4035\[JSOI2008\]球形空间产生器](https://www.luogu.org/problem/P4035)为例
+这里以一道(其实正解是高斯消元)适合爬山的好题[「JSOI2008」球形空间产生器](https://www.luogu.org/problem/P4035)为例。
 
-题意:给出 N 维空间中的 N 个点,已知他们在一个 N 维球上,求出球心。n&lt;=10, 坐标绝对值不超过 10000.
+题意:给出 $n$ 维空间中的 $n$ 个点,已知他们在同一个 $n$ 维球面上,求出球心。$n \leq 10$ ,坐标绝对值不超过 $10000$ 。
 
-很明显的单峰函数,可以使用爬山结局。本题算法流程:
+很明显的单峰函数,可以使用爬山解决。本题算法流程:
 
-1、初始化球心为各个维度平均值,减少枚举量
+1. 初始化球心为各个维度平均值,减少枚举量
+2. 对于当前的球心,求出每个已知点到这个球心欧氏距离的平均值。
+3. 遍历所有已知点。记录一个改变值 cans(分开每一维度记录)对于每一个点的欧氏距离,如果大于平均值,就把改变值加上差值,否则减去。实际上并不用判断这个大小问题,只要不考虑绝对值,直接用坐标计算即可。这个过程可以形象地转化成一个新的球心,在空间里推来推去,碰到太远的点就往点的方向拉一点,碰到太近的点就往点的反方向推一点。
+4. 将我们记录的 cans 乘上温度,更新球心,回到步骤 2
+5. 在温度非常小的时候结束。
 
-2、对于当前的球心,求出每个已知点到这个球心欧氏距离的平均值。
-
-3、遍历所有已知点。记录一个改变值 cans(分开每一维度记录)对于每一个点的欧氏距离,如果大于平均值,就把改变值加上差值,否则减去。实际上并不用判断这个大小问题,只要不考虑绝对值,直接用坐标计算即可。这个过程可以形象地转化成一个新的球心,在空间里推来推去,碰到太远的点就往点的方向拉一点,碰到太近的点就往点的反方向推一点。
-
-4、将我们记录的 cans 乘上温度,更新球心,回到步骤 2
-
-5、在温度非常小的时候结束。
-
-因此,我们在更新球心的时候,不能直接加上改变值,而是要乘上温度。
+因此,我们在更新球心的时候,不能直接加上改变值,而是要加上改变值与温度的乘积。
 
 并不是每一道爬山题都可以具体地用温度解决,这只是一个例子。
 
@@ -96,7 +92,7 @@
 
 * * *
 
-# 例 2 吊打 XXX
+### 例 2 吊打 XXX
 
 此处代码以[「BZOJ 3680」吊打 XXX](https://www.lydsy.com/JudgeOnline/problem.php?id=3680)(求 $n$ 个点的带权类费马点)为例。