在此程式碼中,效能緩慢是由於 astar 函數中昂貴的啟發式計算造成的。若要增強效能,請考慮以下事項:
如分析所示,堆疊取樣等分析工具可快速辨識效能瓶頸。透過檢查堆疊跟踪,您可以查明消耗過多時間的語句。
啟發式函數,啟發式,不必要地循環整個形成數組,導致顯著的開銷。更有效率的做法是在遍歷陣列的同時維護 fCamel 和 bCamel 的運作和。
def heuristic(formation): fCamels, bCamels = 0, 0 for i in formation: if i == fCamel: fCamels += 1 elif i == bCamel: bCamels += fCamels * bCamels # Update to fCamel * bCamel differences else: pass return bCamels
astar 函數內,openlist 是優先權佇列根據節點的 f 值對節點進行排序。 openlist.put 呼叫會產生不必要的開銷,因為 f 值已經計算並儲存在節點物件中。
更有效的方法是重寫節點類別的 __lt__ 運算子以直接比較 f 值。這消除了 openlist.put 中對 f 參數的需要。
def __lt__(self, other): return self.f < other.f
此外,確保依照 A* 演算法的要求,依照 f 值的升序維護開啟清單。 Queue 模組中的預設實作不保證這種行為。
以上是如何透過改進啟發式功能和優先權佇列管理來優化A*演算法效能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!