2013-02-03 19 views
1

對於小型2D遊戲中的尋路,我現在使用A *算法,基於簡單的歐式距離啓發式。我的遊戲世界表現爲一個細胞網格,無論是否由障礙物佔據。必須使用A *計算路徑的字符可以向任何方向移動(如果未被阻止),不僅是N/E/S/W。如何添加更多參數到A *啓發式而不僅僅是距離?

好吧,以便基本上正常工作。現在我需要向A *啓發式函數添加另一個參數,這是一個與每個網格單元格相關的成本值。這個成本值越高,我們的角色越應該儘量避免該單元格。

但是,我不能將啓發式功能更改爲單獨使用此網格單元的成本值,因爲單元與A *目標位置的距離仍然很重要。角色應儘量避免任何高成本的細胞,但同時它也不能離目標位置太遠。因此,我需要在小區距離和成本價值之間進行「折衷」。

理想情況下,我想找到一個解決方案,讓我輕鬆調整/優化單元格的距離與其成本值之間的這種關係,以便我可以微調啓發式。

任何想法如何實現這一目標?

+0

看起來像你應該能夠增加成本的距離。如果你需要更多的權重,你可以計算成本,或乘以一個常數因子。你也可能想考慮乘以距離的成本。這假定成本是> 1.0。 – Nuclearman

+0

@MC:謝謝,你的評論幫了我很多。沒想到它可以這麼簡單:) – Matthias

回答

1

當您使用任何最短路徑算法(A *或Dijkstrs)時,每個節點需要一個成本值。
所以你必須認爲自己一個公式如何結合距離(你的細胞)與障礙成本。
您可以創建一個cost()函數,該函數採用長度成本加上障礙物成本。

0

您需要使用權重(值介於0和1之間),可以說w是間接權重,1-w是成本權重,所以您的新啓發式將如下所示: H = w * distance +(1- W)*費用

現在你需要根據你的域名優化W - 精力充沛。

相關問題