是否可以修改A *以返回最短路径且转弯次数?
一个复杂因素:节点不能仅仅根据它们的位置来区分,因为它们的父节点与确定未来转弯有关,因此它们也必须有与它们相关的方向。
但我遇到的主要问题是如何将轮数转换为部分路径成本(g)。如果我将g乘以(t)的转数,就会发生奇怪的事情:在接近末端的N转弯的较长路径优先于较短的路径,在开始附近有N圈。
我正在考虑的另一个不太理想的解决方案是:在计算最短路径后,我可以运行第二个A *迭代(使用不同的路径成本公式),这个时间限制在最短路径的x / y范围内,并以最小的转弯返回路径。还有其他想法吗?
答案 0 :(得分:4)
搜索的当前“状态”实际上由两个部分表示:您所在的节点以及您所面对的方向。你想要的是将每个状态分成不同的节点。
因此,对于初始图中的每个节点,将其拆分为E个单独的节点,其中E是传入边的数量。这些新节点中的每一个都代表旧节点,但面向不同的方向。这些新节点的传出边缘将与旧的传出边缘相同,但具有不同的权重。如果旧的重量是w
,那么......
w
w + ε
,其中ε
的数字明显小于最小重量。然后进行正常的A *搜索。由于没有任何权重减少,您的启发式仍然是admissible,因此您仍然可以使用相同的启发式。
答案 1 :(得分:0)
如果你真的想最小化转弯次数(而不是在转弯和路径长度之间找到一个很好的权衡),那么为什么不通过为一条无障碍直线连接的每对节点添加一条边来转换你的问题空间;这些是你可以在没有转弯的情况下旅行的对。每个节点有O(n)个这样的边,所以新的图就边缘而言是O(n 3 )。这就使得A *解决方案在时间上与O(n 3 )一样多。
曼哈顿距离对A *来说可能是一个很好的启发式。
答案 2 :(得分:0)
是否可以修改A *以返回匝数最少的最短路径?
很可能是不可能的。原因是它是权重约束最短路径问题的一个示例。因此,它是NP完全的,无法有效解决。
您可以找到讨论解决此问题的论文,例如http://web.stanford.edu/~shushman/math15_report.pdf