2011-04-22 76 views
9

首先,我是一個noob。我也是一名從未製作過硬幣編碼的看門人。這只是我喜歡做的事情。這是爲了好玩:)據說,我寫了這個基於控制檯的tic-tak-toe遊戲,有足夠的ai不會失去每場比賽。 (我猜ai就是它應該被調用的東西。)它有類似70 if/else if語句的計算機轉向。我使用3個int數組,如下所示:如果(),否則如果()在c + +替代(這是AI?)

int L[2], M[2], R[2]; 

0 =空白; 1 = X; 2 = O;
董事會然後'看起來像'
L [0] | M [0] | R [0]
L [1] | M [1] | R [1]
L [2] | M [2] | [R [2]

所以我基本上寫了每一種可能的情況下我能想到是這樣的:

if(M[0]==1 & M[1]==1 & M[2]==0){M[2] = 2;}//here the computer prevents a win 
else if(L[0] ==2&M[1]==2&R[2]==0){R[2]=2;}//here the computer wins 
//and so on....68 more times! 

我想我的問題(s)爲(是):
有沒有更好的辦法?
有沒有辦法用較少的代碼行來實現相同的結果?
這是否被認爲是人工智能?

+0

一個有趣的井字遊戲算法的實現,可能是一個ImageJ宏,它可以讀取http://xkcd.com/832/上的PNG圖像(例如wget http://imgs.xkcd。 com/comics/tic_tac_toe_large.png)並從中提取他們的答案......任何接受者? – 2011-04-22 21:20:45

+1

保持樂趣!顯然,根據回覆,有很多東西可供你學習。它的美妙之處在於,學習下面這些花哨的流行語,可以打開更多玩法。搜索「tic-tac-toe ai」以找到解決問題的方法。所以你知道,對「有沒有更好的方法來編程?」的正確迴應。是「是的,我的方式」。 :) – gregg 2011-04-22 21:29:32

+2

研究電腦玩遊戲取勝是人工智能領域的一部分。事實上,遊戲是人工智能領域的第一個案例研究。這就是說,爲每一個可能的舉措提供一個罐頭響應並不是真正的AI。 :-)你是提供情報的人;電腦並不是「爲自己弄清楚」。幾乎任何介紹性AI教科書都會討論Colin在下面的答案中描述的Minimax算法。 – 2011-04-22 22:44:56

回答

5

對此的標準算法被稱爲Minimax。它基本上構建了一棵樹,遊戲的開始是根,然後孩子們代表X可以在第一回閤中做出的每一個可能的移動,然後每個節點的孩子都可以作出迴應,等等一旦整個樹被填滿(這可能是Tic-Tac-Toe,但是對於像Chess計算機這樣的遊戲仍然沒有足夠的內存),假設兩個玩家都足夠聰明,可以做出最好的移動,並達成最佳的舉措。這裏是Minimax的another explanation,特別是使用Tic Tac Toe作爲例子。

1

是的,有更好的方法。

最明顯的將是考慮董事會不同的鏡像視圖如何簡化案例數量。另外,考慮在數組中預先存儲「有趣」模式,然後將遊戲狀態與數據進行比較。例如,一系列的模式將是一個球員在下一步移動中可以贏得的所有方式。

另外,還要注意與申報INT L[2],只有兩個在陣列L,即L[0]L[1]條目。您需要的參考文件L[2]M[2]等都是編譯器應該捕獲的錯誤。考慮提高警告水平。這是如何完成取決於編譯器。對於gcc,它是-Wall

這算作人工智能的一種形式。系列的if陳述是積累的知識:如何識別一個情況和適當的最佳反應。

+0

那是我的想法。似乎神經網絡適用於有更多可能結果的事物。這讓我感覺更好。我還在代碼中將這些數組聲明爲L [5]。 (?) – 2011-04-22 22:00:10

+0

額外的空間通常是很好的做法,尤其是如果有解釋(在聲明旁邊的註釋中),就像是「暫時未使用」。在這種情況下,額外的元素加起來就是滿手未用的字節。這就像「免費」一樣。 – wallyk 2011-04-22 22:33:14

2

Tic-Tac-Toe上的維基百科頁面有一個非常好的贏得(或捆綁)每個遊戲的算法大綱: http://en.wikipedia.org/wiki/Tic-tac-toe這是我幾年前用來製作井字遊戲的遊戲。

當你瞭解算法後,實現井字遊戲電腦播放器的最聰明的方法之一就是用一個魔方。該方法在here討論。就規模而言,我已經看到這實現了大約50行代碼,如果我找到它,我會發布代碼:)

這不是技術上的人工智能,因爲AI通常指的是人造神經元,神經元層,梯度下降,支持向量機,解複雜多項式等。解決Tic-Tac-Toe

0

與真正的人工智能最接近的解決這樣一個遊戲的方法是編寫一個人工網絡並用tictactoe遊戲的所有組合來訓練它。

在這種情況下,如果其他解決問題的代碼不會做得太多,但會通過採用最合理的選擇來解決問題,從而解決問題。

但編碼的神經網絡不是一件簡單的事情:)

+0

你不需要神經網絡 - 你可以用一堆火柴盒和一些珠子做到這一切。試用Google搜索「火柴盒井字遊戲」 – 2011-04-22 21:30:12

+0

迷你最大或alpha-beta算法也被認爲是整個AI領域的一部分,對於這類問題會更​​加簡單和有效 – Voo 2011-04-22 23:27:09

0

當需要編寫一個基於規則的系統(如你正在構建的AI),你可以使用一個規則引擎,例如像CLIPS (這是美國國家航空航天局開發的用於創建用C編寫的專家系統的工具)。

http://en.wikipedia.org/wiki/CLIPS

也許是玩井字矯枉過正,但如果你的心情學習酷AI的東西,專家系統是一個非常有趣的領域,但是不同的(也許少麻煩)比神經網絡。

玩得開心!