我想用Java中的A *算法解決/實現8拼圖問題。我問是否有人可以幫我解釋我必須遵循的步驟來解決它。我已經在網上讀過A *如何工作,但我不知道如何開始在Java中的實現。用A *算法解決8拼圖
如果你們能幫助我並給我指導,以便我可以用Java自己實現它,我將不勝感激。我真的想要做到能夠理解它,所以我只需要開始準則。
我將使用優先級隊列,並會從一個文本文件,它看起來像例如該讀初始配置:
4 3 6
1 2 5
7 8
指向其它網站的更多解釋/教程歡迎。
我想用Java中的A *算法解決/實現8拼圖問題。我問是否有人可以幫我解釋我必須遵循的步驟來解決它。我已經在網上讀過A *如何工作,但我不知道如何開始在Java中的實現。用A *算法解決8拼圖
如果你們能幫助我並給我指導,以便我可以用Java自己實現它,我將不勝感激。我真的想要做到能夠理解它,所以我只需要開始準則。
我將使用優先級隊列,並會從一個文本文件,它看起來像例如該讀初始配置:
4 3 6
1 2 5
7 8
指向其它網站的更多解釋/教程歡迎。
我會從決定如何表示遊戲板狀態開始,然後執行操作員(例如,移動(空白)平鋪,向下移動(空白)平鋪,...)) 。 通常情況下,您將擁有一個數據結構來表示已打開的列表(即,那些已發現但尚未開發的狀態(即與目標狀態相比較)的 和另一個用於關閉列表的狀態(即發現和探索的那些狀態成爲目標狀態) 您以開始狀態種子開放列表,並且從開放列表中反覆取出「下一個」狀態到 ,將運算符應用到它以生成新的可能狀態 等等。 ..
有一個教程,我很多年前在準備:
http://www.cs.rmit.edu.au/AI-Search/
它雖然遠離關於狀態空間搜索的權威性詞語,但它僅僅是這個概念的新品牌的教育工具。
A *與Djikstra算法很相似,除了它包含啓發式算法。您可能想要閱讀wiki或閱讀有關單源最短路徑算法的一般信息。
很多基本的東西很重要,但很明顯。您需要代表電路板,並創建一個方法來生成可能的下一個狀態。
任何職位的基本分數顯然將成爲實際移動的最小數量。對於A *的工作,您需要一種啓發式方法,可以幫助您選擇可能的下一個狀態的最佳選項。一種啓發式可能是正確位置上的件數。
您將需要選擇一種方式來表示遊戲狀態。 8-puzzle問題的狀態可以用3x3網格,9元素整數數組,9元素字符數組,字符串或只是一個整數表示(436125780可以表示您的示例中的狀態),空白單元格被表示爲0.僅使用一個整數將是最節省空間的,並且支持非常有效的集插入/成員資格檢查(用於實現閉集)。但是,尋找繼承國將會更加困難。使用9元素的字符數組將使查找後繼狀態變得更容易。我建議你使用兩者。使用char數組表示後繼查找和使用閉集的整數表示。
然後,您將需要選擇啓發式功能。對於8難題,可以使用曼哈頓距離,這是一致的啓發式並且保證A *圖搜索算法的最優性。
解決A *問題需要找到一種方法來表示狀態,生成狀態的後繼者並選擇啓發式功能。算法的其餘部分可以視爲黑盒子。
我寫了一篇關於A *搜索算法後,用A *和曼哈頓距離作爲啓發式這裏所提供的N-拼圖問題的Python實現:A* search explanation and N-puzzle python implementation
該鏈接全面解決了這個問題,所以我認爲這就足夠了。現在我已經添加了足夠的詳細信息來回答問題,並保留鏈接僅作爲參考。 – 2013-12-28 18:22:04
您需要登錄的鏈接。 – Uttam 2018-02-27 10:40:31