Algorithm n维空间中的爬山:寻找邻居

Algorithm n维空间中的爬山:寻找邻居,algorithm,hill-climbing,Algorithm,Hill Climbing,在一维爬山中,我尝试两个相邻点——当前点左侧的一个小三角形和右侧的一个三角形,然后保留目标函数值较高的一个。如何将其扩展到n维空间?如何定义n维空间的邻居?我是否必须尝试2^n个邻居(应用于每个维度的delta)?您不需要比较每对邻居,您需要计算一组邻居,例如,在半径为delta的圆(更高维度的球体/超球体)上,然后取值最高的一个“向上爬”。在任何情况下,您都将离散当前解决方案的邻域,并计算每个邻域的得分函数。当您能够区分功能时,基于梯度上升/下降的算法可能会解决您的问题: 1) 计算坡度(最陡

在一维爬山中,我尝试两个相邻点——当前点左侧的一个小三角形和右侧的一个三角形,然后保留目标函数值较高的一个。如何将其扩展到n维空间?如何定义n维空间的邻居?我是否必须尝试2^n个邻居(应用于每个维度的delta)?

您不需要比较每对邻居,您需要计算一组邻居,例如,在半径为delta的圆(更高维度的球体/超球体)上,然后取值最高的一个“向上爬”。在任何情况下,您都将离散当前解决方案的邻域,并计算每个邻域的得分函数。当您能够区分功能时,基于梯度上升/下降的算法可能会解决您的问题: 1) 计算坡度(最陡上升方向) 2) 向渐变方向迈出一小步 3) 如果解决方案没有更改,请停止


这些算法的一个常见问题是,通常只能找到局部最大值/最小值。你可以在这里找到梯度下降/上升算法的一个很好的概述:

多维搜索算法的一个例子是(1989)中描述的Torczon单纯形法,它只需要O(n)个邻域而不需要O(2^n)个邻域。我选择这个方法而不是更广为人知的内尔德-米德方法,因为托尔逊单纯形方法有收敛性证明(在某些合理条件下收敛到局部最优)。

如果你使用的是IEEE-754浮点数,那么明显的答案是类似
(2^52*(log_2(delta)+1023))^(n-1)+1
如果
delta>=2^(-1022)
(或多或少取决于您的搜索空间…),因为这是唯一可以确保不再存在距离为
delta
的相邻解决方案的方法

即使假设你取而代之的是在给定的delta距离内的所有点的随机固定大小样本,比如说delta=.1,你仍然会遇到这样的问题:如果与局部最优值的距离为.0001,那么仅在一个维度上发现改进的概率将小于
.0001/.1/2=0.05%
,因此你需要当你越来越接近局部最优值(你不知道它的值…)时,随机抽取越来越多的样本


显然,爬山不是用于无限空间的实数空间或理论图空间,而是使用全局搜索算法。

检验。这不能解释多维空间中应考虑的邻居。例如,在n个基数方向上只有2n个邻居,或者2 ^ n n。问题中建议的{delta,+delta}^n超立方体的八个邻域,或者{delta,0,+delta}的3^n-1个邻域^n?在处理实数时,我们有无穷多个邻居可供选择。在1D的情况下,给定一个delta,我们只有两个邻居。在2D中,我们已经得到了一个圆,该圆上有无穷多个邻居。当然,我们只能选择方向(2^2=4)。也许可以离散化邻居(在二维网格中,在三维网格中,体素网格可能是一种解决方案)。更新链接: