2016-02-12 93 views
1

我想我已經終於圍繞最小極限和Alpha beta修剪,但實現它是一個完整的其他故事!Minimax Alpha Beta算法

根據我的理解,基本知識如下: 您爲某些動作(例如Gomoku)指定啓發式功能分數。

  • 如果連續有5個,我們應該像分配9999的高值,因爲 這是一個成功的舉動。
  • 如果我們在一排,我們有兩個開口端 有4個,我們應該重新分配一個較高的值,因爲這是不可能阻止 這一舉動和等等等等

我的問題是當我們真正必須實現這在Java中!

我有一個彩色[] []板(8×8),其中黑色爲玩家1和白色是球員2和null指示一個空的空間,我感到困惑,我們將如何

  1. 搜索板找到反對的動作和賦值 他們
  2. 搜索董事會找到我的動作和賦值 他們
  3. 然後挑選出最好的可能的移動(我想我能做到 如果我知道如何第一2工作,因爲這基本上是 算法)。

讚賞一些幫助和指導!我已經看過來自各種在線資源的YouTube教程,講座筆記,但是在物理編寫代碼時,它們都沒有對我有意義。

如果它的確與衆不同的遊戲是五子棋在一個8x8板

回答

2

起到定義國家

首先,你必須定義遊戲的狀態。在你的例子中,它將是代表電路板配置的2d數組。

創建一個存儲遊戲配置和棋盤狀態的java類。這個類現在將成爲你的極大極小樹的節點。

定義兒童

定義最小最大樹的節點後,你必須定義兒童按遊戲規則。這代表你的動作。

有了這個,你有極大極樹!

搜索板找反對派運動和給它們賦值

分配每個板配置的值,將其存儲在類本身。此外,您不必搜索董事會來尋找反對派動作,因爲它是由您的孩子代表的。[注意主板存儲與每個類]

搜索董事會找到我的移動,並給它們賦值

再次,如果某一類代表玩家1的舉動,那麼兒童代表播放器 - 2招。

然後選擇最佳的可能的移動

這是由算法定義。如果您處於最大節點,則選擇與最大值對應的移動。即你選擇最有價值的孩子。
如果是最小節點,則選擇最小值的子節點。

PS:您不必事先定義整個minimax樹。它可以在執行dfs時動態創建。這將顯着減少內存。

PPS:有關更多詳細信息,請參閱Chess Programming

+0

當你說存儲遊戲配置時,你是指存儲棋盤上哪些棋子? – Aceboy1993

+0

是的,你可以存儲棋子上的棋子。通過遊戲配置,我的意思是,任何時候都可以描述遊戲狀態的東西。你可以存儲每個玩家的分數,特徵值(如5行等)。 –