2014-06-30 45 views
0

到目前爲止,我已經成功地在Python中使用Minimax算法並將其應用於井字遊戲。我可以讓我的算法在整個搜索樹中運行,並返回一個值。如何在井字遊戲中從Minimax算法中移動?

不過,我很困惑,如何利用這個值,並將其轉換成一個舉動?我該如何知道該做什麼?

謝謝。

+0

你使用遞歸算法嗎?如果是這樣,除了返回最終值之外,還可以在每一步中返回相應的移動,並在完成整個堆疊時完成移動。 – user189

+0

如果您不知道如何使用該值,您怎麼能成功地使用minimax?我很困惑你在哪裏遇到麻煩。 – twinlakes

+0

@ user189是的,我正在使用遞歸算法。謝謝,我會嘗試。該程序應該如何知道它在最後?既然它是遞歸的,我認爲它不會在每次做它的事情時返回一個移動。 –

回答

0

概念化極大極小算法等的曲線圖,其中每個頂點是所述板的一個可能的配置,和從頂點到其相鄰的每邊是從一個板構成的過渡/移動到下一個。

你需要看每個板狀態鄰國的當前狀態的啓發值,然後選擇最好的啓發價值的狀態,然後更新您的屏幕顯示板的狀態。

如果你正在做的板狀態之間的動畫/過渡,那麼你就不得不看邊緣,找出哪些部分是兩個狀態之間的差異,並據此製作動畫的那件。

0

在使用MM算法時,您必須有辦法生成可能的後繼板;這些都是移動的結果。如前所述,您可以修改算法以包含跟蹤用於生成板的移動(例如,將其添加到板的定義中,或者使用具有板和移動的結構);或者,對於算法的頂層可以有一個特殊情況,因爲這是唯一一個特定移動很重要的情況。例如,如果你的函數當前只返回它傳遞的棋盤的計算值,它可能會返回一個字典(或元組,它不清晰),同時該值和第一次移動都用於獲取該值,然後修改您的代碼以使用任何需要的位。

+0

這是跟蹤,我遇到了麻煩。例如,如果我嘗試返回電路板,由於最小極大遞歸,它會擾亂我的算法。 恐怕如果我只爲最高級別做一個特殊情況,它將不允許程序進行搜索。 在僞代碼中,我該如何實現這種跟蹤? –

0

選擇你的舉動最簡單的方法就是選擇你的舉動有賺錢的倉位從這一舉動所產生的最大數量。

我想,在你的搜索樹(遊戲邦)每個節點保持可由目前的遊戲狀態來創建能夠取勝狀態的記錄。