最小转弯的 A 星优化

A-star optimization with minimum turns

我正在研究 A-star 优化,这将避免拐角的过度弯曲并找到最小转弯的方法,因为谈论机器人它更有效地向前移动而无需不断停止并计算进一步的步骤。

我开发了自己的方法,但缺少一些东西。这种方法是基于预计算停留在自由行和列交叉处的交叉单元格,但是有一个问题:我从考虑包含不可通过单元格的行和列中剔除。

为了解决这个问题,我还需要在障碍物之间加入子线。 等等。

也许有更好的注册算法更符合我的需要。

这张图片显示了如何使用最少的转弯构建路径

这是相同的长度,但考虑到没有转弯更优化

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

// 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

我想出的最佳方法是找到自由行和列上的所有十字,并找到从十字到新发现的距离目标最近的邻居最近的单元格。

所以,我已经完成了从网格 class 更新 Neighbor 属性 实现,但没有更新 A* 算法。