簡體   English   中英

是時候使用A *算法解決8格滑動難題了

[英]Time for A* algorithm to solve a 8 tile sliding puzzle

我只是想知道是否有人可以為我目前正在為uni處理的代碼提供幫助。 我正在編碼這是一個滑動拼圖游戲,並且已經實現了具有曼哈頓距離啟發式算法的A *算法。 目前,它解決難題的時間范圍從幾秒鍾到幾秒鍾,對於某些配置,則可能長達12秒左右。 我想知道的是,這個時間范圍是否符合我的預期?

之前我從未真正做過任何AI,而且我必須即時學習這些知識,因此我們將不勝感激。

我想知道的是,這個時間范圍是否應該達到我的預期?

僅從您提供的信息中很難找出答案。 如果您可以描述如何實現A *,或者您對應用程序進行了概要分析並需要在速度較慢的特定區域獲得幫助,這將有所幫助。

需要注意的一件事可能會加快平均解決時間: 任何n-tile拼圖的起始位置的一半永遠不會導致解決方案,因此您可以立即快速排除某些配置。 例如,您不能解決如下所示的8塊拼圖:

1 2 3 
4 5 6
8 7 .

要知道為什么,請注意,因為空白必須在其開始處回退,所以“上” /“下”動作的總數必須相等,“左” /“右”動作的總數也必須相等。 這意味着移動的總數必須是偶數。

但是這里的7/8換位是從起始拼圖開始的一個步驟,而不會更改空白位置! 因此,這個難題無法解決。 (但是,如果我們進行了兩次換位,那么它將再次可以解決。)

就像您應該知道,您無法期望任何一般時間。 它每次都取決於代碼本身,尤其取決於實現的難忘程度以及代碼是否可以利用處理器功能的優勢。

為了進行調試,我將保存或打印出您的樹的級別(但這需要時間!)。

還請記住,權重非常重要。 例如:

123
4 6 <- your final state
789
           213                               1 3
To change  4 6  is much more expensive than  426
           789                               789

希望對您有所幫助。

顯然,這不僅取決於您的硬件,還取決於您的實現。 但是,這並不是衡量性能的好方法:您要做的是確定啟發式方法的有效分支因子,而不是其他一些非啟發式方法的實際分支因子。

我不想說太多,因為這是一個家庭作業問題,但是如果有記性的話,Russel和Norvig會在滑動拼圖本身的背景下實現這一目標……也許是第三章? (我的R + N不在手邊。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM