如果我有一個可以在四個方向上移動的2D環境,但除了這些方向之外,我還可以沿着一個方向衝向一個方向,直到我撞到牆上,我將如何計算可接受的啓發式爲了這?無論是移動還是短跑,每個人的G成本都是1,所以衝刺和步行的權重是平等的。我應該甚至使用A *嗎?如果在某些情況下,多次衝刺會使您到達目的地的速度比移動速度快,即使在衝刺之後您離目的地更遠的地方,什麼樣的尋路能夠計算最佳路徑?A *尋找快速技工
1
A
回答
0
啓發式:啓發式可接受,如果它永遠不會高估達到目標的成本。既然你使用了四個基本方向,那麼一個可接受的啓發式就是從開始到目的地之間的曼哈頓距離(L1-Norm),稱之爲dist
。然後將dist
除以單個破折號中的圖塊數量。你不會高估使用這種啓發式方法。
計算最佳路徑:您可以使用A-Star來計算最佳路徑,前提是您使用可接受的啓發式。關鍵是你的node.getNeighbors()
方法返回與當前節點相鄰的鄰居,即返回(N),(S)outh,(E)ast和(W)est,以及那些可以從一個破折號開始的鄰居當前節點(即dashDist
-N/S/E/W)。該方法可能是這個樣子:
public List<Node> getNeighbors(){
List<Node> neighbors = new LinkedList<Node>();
neighbors.addAll(this.getAdjacentNeighbors());
neighbors.addAll(this.getDashableNeighbors());
return neighbors;
}
private List<Node> getAdjacentNeighbors(){
//implement code to get the adjacent neighbors
}
private List<Node> getDashableNeighbors(){
//implement code to get the neighbors 1-dash away
}
另一個考慮:我認爲破折號發生在一條直線上......在這種情況下,我建議尋找到JumpPointSearch algorithm。它利用世界上的對稱性來減少開放集合中的節點數量。
相關問題
- 1. 尋找快速無損壓縮技術
- 2. 尋找加速比爲A *搜索
- 3. 尋找快速提示關於遞歸
- 4. 尋找素數的快速算法?
- 5. 我在尋找快速響應的Web繪圖工具
- 6. 超快速刮屏技巧?
- 7. 尋求工具,技巧,快速學習新應用程序的技巧(從編碼的角度)
- 8. 尋找DependencyProperty.Register快捷
- 9. 快速查找
- 10. 快速查找
- 11. A *尋找一個2D Sidescroller
- 12. A *尋找多個網格
- 13. A *在Lua尋找路徑
- 14. 我正在尋找一個快速的方式在模板
- 15. 尋找陣列模式的技巧
- 16. 正確尋找RPAREN(以啓用快速解析)
- 17. ImageMagick:尋找一種模糊圖像的快速方法
- 18. 尋找快樂數字
- 19. 尋找更快速的方式來執行字符串搜索
- 20. 我如何加快我的A *尋路?
- 21. 快速構建Drupal模塊的技巧?
- 22. iOS快速加載圖片的技巧
- 23. 快速任意角度尋路
- 24. 快速查找Java
- 25. 快速shell找到
- 26. Erlang noob尋求快速代碼審查
- 27. 使用GPS尋找速度
- 28. 在C++ Array尋找短值快速SIMD版本
- 29. 尋找德爾福4專業/快速報告
- 30. 尋找方式快速讀取和搜索文件在c#
是的,你可以使用A *,只要把它們作爲鄰居加入到開放集合 – BeyelerStudios
Andrew,你能解釋A *是如何工作的?我不知道算法的名字。 –
@LajosArpad [A *或A-Star](https://en.wikipedia.org/wiki/A*_search_algorithm)是一種常見的(也許是最常見的?)通用尋路算法。 –