OSDN Git Service

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

index c456996..d654129 100644 (file)
@@ -13,7 +13,7 @@
 
 认真地说,爬山算法的优势在于当正解的写法你并不了解(常见于毒瘤计算几何和毒瘤数学题),或者本身状态维度很多,无法容易地写分治(例 2 就可以用二分完成合法正解)时,可以通过非常暴力的计算得到最优解。
 
-但是对于多数需要求解的函数,爬山算法很容易进入一个局部最优解,如下图(最优解为 $\color{green}{\Uparrow}$ ,而爬山算法可能找到的最优解为 $\color{red}{\Downarrow}$ )。
+但是对于多数需要求解的函数,爬山算法很容易进入一个局部最优解,如下图(最优解为 $\color{green}{\Uparrow}$ ,而爬山算法可能找到的最优解为 $\color{red}{\Downarrow}$ )。
 
 ![](./images/hill-climbing.png)
 
 
 ## 具体实现
 
-爬山算法一般会引入类似模拟退火的温度解决。类比地说,爬山算法就是一只兔子喝醉了在山上跳,它每次都会朝着它以为更高的地方(这往往只是个不准确的趋势)跳,显然它有可能一把跳到山顶,也可能跳过头翻到对面去了,不过没有关系,兔子翻过去之后还会跳回来。显然这个过程很没有用,兔子永远都找不到出路,所以在这个过程中兔子冷静下来并每次跳的时候更加谨慎,少跳一点,以到达合适的最优点。
+爬山算法一般会引入温度参数(类似模拟退火)。类比地说,爬山算法就像是一只兔子喝醉了在山上跳,它每次都会朝着它所认为的更高的地方(这往往只是个不准确的趋势)跳,显然它有可能一次跳到山顶,也可能跳过头翻到对面去。不过没关系,兔子翻过去之后还会跳回来。显然这个过程很没有用,兔子永远都找不到出路,所以在这个过程中兔子冷静下来并在每次跳的时候更加谨慎,少跳一点,以到达合适的最优点。
 
-兔子清醒的过程就是降温过程,在爬山的时候会不断减小之
+兔子逐渐变得清醒的过程就是降温过程,即温度参数在爬山的时候会不断减小
 
 关于降温:降温参数是略小于 $1$ 的常数,一般在 $[0.985, 0.999]$ 中选取。
 
-### 例 1 球形空间产生器
+### 例 1 [「JSOI2008」球形空间产生器](https://www.luogu.org/problem/P4035)
 
-这里以一道(其实正解是高斯消元)适合爬山的好题[「JSOI2008」球形空间产生器](https://www.luogu.org/problem/P4035)为例。
-
-题意:给出 $n$ 维空间中的 $n$ 个点,已知他们在同一个 $n$ 维球面上,求出球心。 $n \leq 10$ ,坐标绝对值不超过 $10000$ 。
+题意:给出 $n$ 维空间中的 $n$ 个点,已知它们在同一个 $n$ 维球面上,求出球心。 $n \leq 10$ ,坐标绝对值不超过 $10000$ 。
 
 很明显的单峰函数,可以使用爬山解决。本题算法流程:
 
-1.  å\88\9då§\8bå\8c\96ç\90\83å¿\83为å\90\84个维度平å\9d\87å\80¼ï¼\8cå\87\8få°\91æ\9e\9a举é\87\8f
+1.  å\88\9då§\8bå\8c\96ç\90\83å¿\83为å\90\84个ç»\99å®\9aç\82¹ç\9a\84é\87\8då¿\83ï¼\88å\8d³å\85¶å\90\84ç»´å\9d\90æ \87å\9d\87为æ\89\80æ\9c\89ç»\99å®\9aç\82¹å¯¹åº\94维度å\9d\90æ \87ç\9a\84å¹³å\9d\87å\80¼ï¼\89ï¼\8c以å\87\8få°\91æ\9e\9a举é\87\8fã\80\82
 2.  对于当前的球心,求出每个已知点到这个球心欧氏距离的平均值。
 3.  遍历所有已知点。记录一个改变值 cans(分开每一维度记录)对于每一个点的欧氏距离,如果大于平均值,就把改变值加上差值,否则减去。实际上并不用判断这个大小问题,只要不考虑绝对值,直接用坐标计算即可。这个过程可以形象地转化成一个新的球心,在空间里推来推去,碰到太远的点就往点的方向拉一点,碰到太近的点就往点的反方向推一点。
 4.  将我们记录的 cans 乘上温度,更新球心,回到步骤 2
-5.  在温度非常小的时候结束。
+5.  在温度小于某个给定阈值的时候结束。
 
 因此,我们在更新球心的时候,不能直接加上改变值,而是要加上改变值与温度的乘积。
 
@@ -92,9 +90,9 @@
 
 * * *
 
-### 例 2 吊打 XXX
+### 例 2 [「BZOJ 3680」吊打 XXX](https://www.lydsy.com/JudgeOnline/problem.php?id=3680)
 
-此处代码以[「BZOJ 3680」吊打 XXX](https://www.lydsy.com/JudgeOnline/problem.php?id=3680)(求 $n$ 个点的带权类费马点)为例
+题意:求 $n$ 个点的带权类费马点
 
 框架类似,用了点物理知识。