A *算法-椭圆的支出性质

时间:2019-06-01 22:26:49

标签: algorithm a-star

基于A *的椭圆属性,为什么该算法关闭 一系列扩展椭圆中的所有节点?

1 个答案:

答案 0 :(得分:0)

A *使用函数f(x) = g(x) + h(x)来评估下一个要访问的节点,其中g(x)是从开始到x的实际成本,而h(x)是从x到目标(=启发式)的估计成本。

让我们在欧几里得平面的连续情况下进行研究,我们要从(0, 0)(10, 20)。然后:

g(x) = Length(x)

勘探前沿的形状在很大程度上取决于启发式方法。让我们从完美的启发式开始

h(x) = Length(x - (10, 20))

我们可以在平面上绘制g(x) + h(x)的值,并查看被访问节点的顺序(f较小的点将首先被访问)。这样做,我们应该知道,如果以前没有节点被访问过,则无法访问该节点,因此实际值仅表示顺序。我们会牢记这一点。使用完美的启发式方法,我们得到以下图片:

Perfect Heuristic

起点与目标之间的连接上的所有点都具有相同的f成本,等于起点与目标之间的距离。如果我们检查f,就会看到

f = Length(x - (0, 0)) + Length(x - (10, 20)),

这恰好是椭圆的隐式形式,以开始和目标为焦点。

我说过,形状取决于试探法。如果启发式方法是实际距离的下限,则它是有效的。试试吧

h(x) = 0.5 * Length(x - (10, 20))

Half Heuristic

现在,该算法将在到达目标之前开始探索围绕起点的更多点。特别是,轮廓点内目标点之前的所有点都将被访问。

我们甚至可以进一步设置

h(x) = 0

这是Dijkstra算法的设置,在这里我们无法说出到目标的距离:

Dijkstra

此处,该算法将在起点附近访问磁盘中的节点。

与目标距离的一个常见近似值是曼哈顿距离,因为它的计算成本很低:

h(x, y) = |x - 10| + |y - 20|

此试探法无效,因为它不是实际距离的下限。它给我们:

Manhattan Distance

在这种情况下,接近目标的点的f得分比接近起点的得分低。尽管在此图中它们的值较低,但是由于尚未探究其邻居,因此当然不会首先对其进行访问。这是一个特写:

Manhattan Close-Up

我们可以通过引入一个常数因子来使启发式算法有效:

h(x, y) = 1/sqrt(2) * (|x - 10| + |y - 20|)

这将为我们提供具有适当前部形状的有效启发式方法:

Valid Manhattan Distance