2012-06-11 52 views
2

我有一個「連接4」遊戲(與可變數量的列和行)的Java實現。我應該如何爲Connect 4設計一個好的評估函數?

此實現使用(根據用戶的選擇)與α-β與MAXDEPTH的搜索的最大深度修剪迷你最大的微型-MAX算法

我的問題是現在的設計一個良好的評估函數爲板的狀態(這是在maxDepth返回的值)。

值是-100之間(最差的choise,它對應於一個失敗的情況)100(最好的choise,它對應於一個勝勢)其中應該是「畫」情況

其實我實現了兩個功能(我彙報的僞代碼,因爲代碼很長)

1)

  • 沒有贏/輸不

- >如果表格已滿==>繪製(0)

- > if if not full ==>不確定情況(50)

  • 贏得

- >如果我的勝利:100

- >如果對手的勝利:-100

2)

Of me: 
- InARow[0] = maximum number of pieces in a HORIZONTAL in a row 
- InARow[1] = maximum number of pieces in a VERTICAL in a row 
- InARow[2] = maximum number of pieces in a DIAGONAL (ascending) in a row 
- InARow[3] = maximum number of pieces in a DIAGONAL (descending) in a row 
Of the opponent 
- InARow2[0] = maximum number of pieces in a HORIZONTAL in a row 
- InARow2[1] = maximum number of pieces in a VERTICAL in a row 
- InARow2[2] = maximum number of pieces in a DIAGONAL (ascending) in a row 
- InARow2[3] = maximum number of pieces in a DIAGONAL (descending) in a row 

value = (100* (InARow[0] + InARow[1] + InARow[2] + InARow[3]))/16 - (100* (InARow2[0] + InARow2[1] + InARow2[2] + InARow2[3]))/16 

我需要設計一個第三(如果可能的話更好)函數。任何建議?

預先感謝您。

回答

3

只需計算每個球員仍然可以做出的可能的4的數量並且相互減去。

例如,兩位玩家的得分均爲7*4 (horizontal) + 4*7 (vertical) + 4*4 (diagonal up) + 4*4 (diagonal down)。如果紅色將一個放在左下角,那麼黃色將失分1 + 1 + 1 + 0 = 3。但是如果紅色代替中間的一個,黃色輸掉4 + 1 + 1 + 1 = 7

當然,如果任何玩家獲勝,則其他玩家的得分是-infinity,不管上述系統如何。

+0

計算6^7次不是很重嗎? (其中6是深度,7是有多少列) – shinzou

3

你的基本情況已經被解決:我的勝利= 100分,我的損失= -100,平局= 0。你可以殺死的「不確定」的情況,它並不反映董事會的「善良」。所以現在你需要填補空白。你要考慮和賦值案例:

  • 我有X成一排(如果我在一排有3個,這比只有兩連勝更好 - 你的函數應該有利於在更短的增加更長的行的)
  • 我的對手有X成一排(同樣,更多的他/她已經在一排,離更糟我們)
  • 算你有多少行填寫(放置一塊,形成2行3比放置一塊,只形成一行3)
  • 計算你阻塞了多少行(同樣,如果你可以放下一塊並阻止t我的對手排的3,這比阻止單排2)更好
0

下面是兩個獨立的評價功能連接4

  1. 一個基本的評價函數是在另一種答案建議,我們可以計算出的可能4的行數的玩家仍然可以和減去它對手。與只有1個圖塊的圖塊相比,您可以對已經具有三個圖塊的圖塊賦予不同的權重或重要性。
  2. 另一個更強大的評估功能可以使用威脅的概念來構建。威脅是一個連接4的方塊,當瓦片被對手丟棄時。您可以簡單地返回每個玩家的威脅數量的差異,但我們可以通過實際過濾無用的威脅(比如高於對手威脅的威脅或高於雙方威脅的威脅)並且甚至分配獎金對於某些威脅(例如某列的最低威脅或同一玩家的兩次連續威脅)。

權重可以通過手工調整,也可以通過自學方式調整大型項目。

相關問題