2011-04-20 23 views
4

我想代表遊戲connect6 wiki(也許謂語石(P,X,Y),其中P是玩家,X,Y是座標)。此外,我想用任何好的啓發式方法來解決問題(使對手)。你能給我一個關於Prolog中關於遊戲AI的文章嗎?謝謝Prolog中Connect6遊戲的表示和啓發式

+2

是的。但我不想複製粘貼任何代碼。我只想找到最好的解決方案。 – 2011-04-24 07:18:35

回答

2

你可能想查找http://en.wikipedia.org/wiki/Minimax遊戲樹。爲了優化搜索,您可能不想考慮所有可能的舉措。也許只是移動,與現有的作品和6個或更少的空間。您需要一個http://en.wikipedia.org/wiki/Evaluation_function。可能就像將分數分配給「我到完成一條線有多近」一樣。

構建和優化遊戲樹更像是一個機械過程。創建一個評估函數是有趣的部分,它會給你的AI對手帶來獨特的風味。

搜索谷歌爲「極小博弈樹序言」打開了一個很好的PowerPoint: http://staff.science.uva.nl/~arnoud/education/ZSB/2009/

+0

謝謝!這篇文章非常有幫助。 – 2011-04-24 07:46:16

2

如果你在一個有限的板實施Connect6,那麼這個遊戲可能表現將是列表的列表變量,最初不受約束。通過將變量與原子blackwhite中的一個統一起來,你會「放置一塊石頭」。然後您可以使用var(P)測試P的位置是否仍爲空。這種表示的操作速度應快於stone/3條款列表。它的工作原理是因爲在Connect6中,你永遠不能移除一塊石頭。

我假設通過啓發式您的意思是適合minimax,negamax或alpha-beta搜索的評估函數。考慮到遊戲規則,我建議對每個玩家計算長度爲5的行數並對這5個進行評分,對長度爲4的那些進行評分,等等。這給出了兩個分數S 和S 。從S 減去S 爲玩家1帶來相對優勢。然後找到一些方法將這些歸一化到[-1,1]範圍內,或者在遊戲超過無限大負無窮的情況下得分。 (如何將Prolog中的所有內容都表示爲練習題。)

+0

var(P)是一個好點。謝謝! – 2011-04-24 07:27:15