关于五子棋AI的一点小尝试
這兩天是周末。。。就舉行了個(gè)五指棋AI大賽娛樂(lè)一下
星期六早上寫了個(gè)裁判程序下午就開(kāi)始寫AI了
不知當(dāng)時(shí)怎么的。。。寫了一些很奇怪的東西進(jìn)去。。。導(dǎo)致下的棋完全看不懂。。。然后果斷的輸了
算法基本上是這樣的:搜索Maxstep步。。。處理這中間的勝敗,決策出最佳的走法(對(duì)于Maxstep之后,并沒(méi)有一方勝的,對(duì)局面做一個(gè)估價(jià)然后返回)
下午寫跪了就是因?yàn)楣纼r(jià)亂搞的過(guò)分了。。值可能大于必勝態(tài)的inf 或小于必?cái)B(tài)的-inf? 。。然后把這個(gè)估價(jià)重新寫了之后看起來(lái)就基本上算是"棋手"了(看起來(lái)可以打敗我自己。。。因?yàn)槲蚁碌奶炝?#xff09;
我一開(kāi)始Maxstep設(shè)為5。。。這樣可以堵上三個(gè)一排之類的情況。。不過(guò)速度有點(diǎn)慢。。
然后就想到一個(gè)簡(jiǎn)單的優(yōu)化:把4個(gè)連在一起且兩邊都是空的情況也直接看做勝利,就可以少搜兩層。。。
這個(gè)優(yōu)化看起來(lái)理所當(dāng)然。。其實(shí)是有問(wèn)題的:當(dāng)對(duì)方差一顆湊齊五個(gè),而自己差一顆湊齊上述狀態(tài)時(shí)。。。會(huì)優(yōu)先湊齊自己而不是去堵別人。。。
于是嘛。。。就特判了一下。。。只有當(dāng)這樣操作下一步不會(huì)輸?shù)臅r(shí)候,才可以進(jìn)行這樣的操作
不過(guò)還是有問(wèn)題:下一步必輸。。。如果下一步必輸是因?yàn)閷?duì)手湊成了這種情況,不必算在內(nèi)
于是就有一個(gè)很簡(jiǎn)單的想法:把由于湊成上述特殊情況而必勝的必勝態(tài)的值弄成 inf-1 這樣不僅區(qū)分了兩種必勝,而且取min,max時(shí)也不會(huì)被除了必勝態(tài)的狀態(tài)弄掉。。。
于是就233了
后來(lái)發(fā)現(xiàn)一個(gè)問(wèn)題。。。寫出來(lái)的幾個(gè)程序都是誰(shuí)先手誰(shuí)勝。。比較沒(méi)意思,而且同樣的兩個(gè)程序下出來(lái)的都是一樣的...
算了就這樣吧。
寫的弱爆的產(chǎn)品在這里:http://pan.baidu.com/s/1qWnquYw
總結(jié)
以上是生活随笔為你收集整理的关于五子棋AI的一点小尝试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 前端学习之vue+element-ui电
- 下一篇: 立体相册,你值得拥有