我正在做一个A-星优化,这将避免过多的拐角,并找到一个小转弯的方式,因为谈到机器人,它是更有效的只是向前移动,没有恒定的停止和计算进一步的步骤。
我已经开发了自己的方法,但是缺少了一些东西。这种方法基于对保留在自由行和自由列交叉处的交叉单元格的预计算,但存在一个问题:I通过不考虑包含不可通过单元格的行和列。
为了解决这个问题,我还需要在障碍物之间添加子行。
等等。
也许有更好的注册算法更适合我的需要。
此图显示如何使用最小转弯数构建路径
这是相同的长度,但考虑到没有转弯,则更为理想
algorithm - 最小转弯的A星优化-LMLPHP

最佳答案

在寻找解决方案时,我发现最好的第一次搜索满足了我的需求,它非常接近我的需求,但它给出了错误的动作。

// This pseudocode is adapted from below
// source:
// https://courses.cs.washington.edu/
Best-First-Search(Grah g, Node start)
    1) Create an empty PriorityQueue
       PriorityQueue pq;
    2) Insert "start" in pq.
       pq.insert(start)
    3) Until PriorityQueue is empty
          u = PriorityQueue.DeleteMin
          If u is the goal
             Exit
          Else
             Foreach neighbor v of u
                If v "Unvisited"
                    Mark v "Visited"
                    pq.insert(v)
             Mark v "Examined"
End procedure

我想到的最好的方法是在自由行和列上找到所有交叉点,并从交叉点找到最接近目标的最近的单元格。
所以,我已经完成了从grid类更新邻居属性实现的工作,而没有更新a*算法。

10-08 05:03