999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種基于改進(jìn)權(quán)重的黑白棋AI的設(shè)計(jì)與實(shí)現(xiàn)

2020-08-23 07:45:01徐剛翟夢(mèng)姣
數(shù)碼設(shè)計(jì) 2020年4期

徐剛 翟夢(mèng)姣

摘要:本文基于改進(jìn)權(quán)重設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)黑白棋的人工智能程序,系統(tǒng)可以設(shè)置計(jì)算層數(shù),經(jīng)測(cè)試,程序效果較好。

關(guān)鍵詞:黑白棋;AI;設(shè)計(jì)與實(shí)現(xiàn)

中圖分類(lèi)號(hào):TP18?? 文獻(xiàn)標(biāo)識(shí)碼:A?? 文章編號(hào):1672-9129(2020)04-0054-02

Abstract: In this paper, based on the improved weight design and implementation of a black and white ai program, the system can be set to calculate the number of layers, through testing, the program effect is better.

Key words:Black and white; AI; Design and Implementation

前言:黑白棋,又叫翻轉(zhuǎn)棋(Reversi)、奧賽羅棋(Othello)等。近年來(lái),人工智能是重要的研究領(lǐng)域之一。研究黑白棋的AI有助于了解人類(lèi)只能行為。網(wǎng)上已有較多黑白棋的AI程序。經(jīng)過(guò)測(cè)試,筆者發(fā)現(xiàn)網(wǎng)上常見(jiàn)的黑白棋棋盤(pán)每個(gè)格子的權(quán)重如果做一定程度的調(diào)整,比如,適當(dāng)降低四個(gè)角的格子的權(quán)重,且適當(dāng)增加四條邊每個(gè)格子的權(quán)重,那么有助于提升黑白棋AI的水平。接下來(lái)的部分筆者將詳述該系統(tǒng)的需求,設(shè)計(jì)和實(shí)現(xiàn)。

1 系統(tǒng)需求和設(shè)計(jì)目標(biāo)

系統(tǒng)可以自動(dòng)畫(huà)出黑白棋的棋盤(pán),供雙方落子,并實(shí)時(shí)顯示雙方的棋子數(shù)量,是否分出勝負(fù)和勝負(fù)關(guān)系,以及接下來(lái)該哪一方落子。當(dāng)用鼠標(biāo)點(diǎn)擊棋盤(pán)某個(gè)格子時(shí),需要做判斷。如果棋盤(pán)已滿(mǎn),或者接下來(lái)雙方都沒(méi)有可以下子的格子,則根據(jù)雙方的棋子數(shù)量自動(dòng)判斷勝負(fù)關(guān)系并顯示出來(lái);如果上個(gè)條件不滿(mǎn)足且某一方落子后,并不能導(dǎo)致另一方的任何棋子被吃掉,則落子無(wú)效,仍有該方走棋;如果上述兩個(gè)條件均不滿(mǎn)足且某一方落子后,另一方?jīng)]有可以落子的格子,則由某一方繼續(xù)走棋;如果上述幾個(gè)條件均不滿(mǎn)足且某一方落子后可以導(dǎo)致另一份某些棋子被吃掉,則換另一方走棋。系統(tǒng)AI需要根據(jù)棋盤(pán)每個(gè)格子的權(quán)重,自動(dòng)計(jì)算當(dāng)時(shí)系統(tǒng)方的權(quán)重值和玩家方的權(quán)重值。首先,遍歷接下來(lái)若干步雙方所有可能的落子順序;然后,計(jì)算每一種可能后系統(tǒng)方的權(quán)重值;之后,選出權(quán)重值最大的一種然后落子并等待玩家方的下一步走棋;最后依次類(lèi)推,直到分出勝負(fù)。系統(tǒng)AI需要根據(jù)棋盤(pán)每個(gè)格子的權(quán)重,自動(dòng)計(jì)算當(dāng)時(shí)系統(tǒng)方的權(quán)重值和玩家方的權(quán)重值。首先,遍歷接下來(lái)若干步雙方所有可能的落子順序;然后,計(jì)算每一種可能后系統(tǒng)方的權(quán)重值;之后,選出權(quán)重值最大的一種然后落子并等待玩家方的下一步走棋;最后依次類(lèi)推,直到分出勝負(fù)。此外,系統(tǒng)還要允許用戶(hù)設(shè)置計(jì)算層數(shù),并根據(jù)計(jì)算層數(shù)計(jì)算勝率最高的點(diǎn)。同時(shí),允許用戶(hù)在游戲進(jìn)行中隨時(shí)改變系統(tǒng)AI控制哪一方的棋子,并作出對(duì)應(yīng)的操作。

2 系統(tǒng)主要功能實(shí)現(xiàn)

本系統(tǒng)使用C#程序設(shè)計(jì)語(yǔ)言,在Visual Studio 2010軟件下編譯運(yùn)行通過(guò)。系統(tǒng)為該軟件下的Windows窗體應(yīng)用程序。程序要需要若干個(gè)Label控件用于顯示黑方棋子數(shù)量、白方棋子數(shù)量、接下來(lái)該何方走棋;使用一個(gè)GroupBox控件和三個(gè)RadioButton控件來(lái)設(shè)置玩家為黑棋,或白棋,或兩方都是玩家;使用一個(gè)TextBox控件來(lái)設(shè)置AI搜索層數(shù),層數(shù)越多,AI越智能,但是消耗系統(tǒng)資源較大。使用Panel控件當(dāng)作棋盤(pán),并使用Graphic類(lèi)的Pen子類(lèi)畫(huà)出棋盤(pán)和棋子。具體方法是,首先畫(huà)出一個(gè)邊框較粗的正方形作為棋盤(pán)外框,并占據(jù)整個(gè)Panel控件,然后在里面畫(huà)出等距的7條豎線(xiàn)和7條橫線(xiàn),之后在中心的四個(gè)格子里以某對(duì)角兩格作為一種顏色畫(huà)出黑色棋子,另一個(gè)對(duì)角兩格畫(huà)出白色棋子,最后等待玩家用鼠標(biāo)點(diǎn)擊棋盤(pán)某格,根據(jù)情況畫(huà)出棋子。接下來(lái)以玩家為黑棋為例,詳述整個(gè)系統(tǒng)AI的實(shí)現(xiàn);當(dāng)玩家為白棋時(shí)則反之;如果兩方都是玩家只需判斷落子是否已經(jīng)分出勝負(fù)和是否落子有效即可[1-2]。

系統(tǒng)首先等待玩家落子,并建立兩個(gè)8行8列的二維整型數(shù)組代表棋盤(pán)落子情況,其中1代表黑棋,-1代表白棋,0代表該位置沒(méi)有棋子,第一個(gè)數(shù)組代表棋盤(pán)的實(shí)時(shí)狀態(tài),第二個(gè)數(shù)組作代表臨時(shí)棋盤(pán)以作判斷落子是否有效使用。如果鼠標(biāo)點(diǎn)擊了Panel控件,則觸發(fā)其MouseDown事件,如果鼠標(biāo)點(diǎn)擊了棋盤(pán)的橫線(xiàn)、豎線(xiàn)或已有的落子點(diǎn)時(shí),則其為無(wú)效落子,系統(tǒng)什么都不做并繼續(xù)等待玩家落子;如果點(diǎn)擊到了其他部分,則根據(jù)規(guī)則判斷是否可以導(dǎo)致系統(tǒng)方丟子,具體方法是:(1)把新的落子賦值到第二個(gè)數(shù)組中;(2)判斷該子上、下、左、右、左上、左下、右上和右下八個(gè)方向行進(jìn)一格是否有對(duì)方棋子,如果都沒(méi)有對(duì)方棋子則落子無(wú)效,系統(tǒng)繼續(xù)等待玩家落子,并把第二個(gè)數(shù)組恢復(fù)到之前狀態(tài);(3)如果有對(duì)方棋子,則繼續(xù)向該方向搜索,直到找到本方棋子為止,如果八個(gè)方向都沒(méi)有本方棋子,則該落子仍為無(wú)效落子,系統(tǒng)繼續(xù)等待玩家落子,并把第二個(gè)數(shù)組恢復(fù)到之前狀態(tài);(4)如果有方向能找到本方落子,則其為有效落子。之后把此方向落子點(diǎn)和找到的本方棋子間的所有對(duì)方棋子的值-1賦值為本方棋子的值1,并根據(jù)第二個(gè)數(shù)組在棋盤(pán)中重新畫(huà)出每個(gè)格子新的棋子,并把第二個(gè)數(shù)組的值賦值到第一個(gè)數(shù)組,最后重新計(jì)算其中1和-1的數(shù)量,并賦值給相應(yīng)的Label控件的Text值。然后判斷是否分出勝負(fù)。具體方法是:(1)先判斷棋盤(pán)是否全是某方棋子,即判斷第一個(gè)數(shù)組是否全是0和1,或者全是0和-1,如果是,則分出了勝負(fù),并把相應(yīng)Label控件的Text值改為某方勝;(2)判斷棋盤(pán)是否走滿(mǎn),即判斷第一個(gè)數(shù)組是否有0值,如果沒(méi)有即為走滿(mǎn),并統(tǒng)計(jì)雙方棋子數(shù)量,即計(jì)算其中1和-1的數(shù)量,并賦值給相應(yīng)的Label控件的Text值,然后判斷哪一方的數(shù)量更多,并把哪方勝出或平手的信息賦值給相應(yīng)的Label控件的Text值。(3)如果沒(méi)有分出勝負(fù),則繼續(xù)落子。之后判斷是否仍該本方走棋。方法是:(1)當(dāng)一方落子后,為有效落子,未分出勝負(fù)時(shí),按照之前的方法,用另一方的棋子遍歷棋盤(pán)剩余所有空位,即找出第一個(gè)數(shù)組中,值為0的格。并將其賦值為另一方的棋子對(duì)應(yīng)的值,然后判斷其是否為有效落子;(2)如果沒(méi)有有效落子,則還由之前一方繼續(xù)落子;(3)重復(fù)上一步,直到另一方有有效落子為止。

對(duì)于電腦AI的算法使用遞歸算法。具體方法為:(1)如果計(jì)算層數(shù)為一層時(shí)的勝率最高的點(diǎn),即遍歷所有可落子的點(diǎn),然后計(jì)算之后AI的總權(quán)重值,求助讓AI權(quán)重值最大的點(diǎn)。在程序中,可以跟據(jù)第一個(gè)二維數(shù)組,遍歷其中數(shù)組為0的點(diǎn),并按照上文方法判斷有效點(diǎn)和求出落子后的棋盤(pán)對(duì)應(yīng)的二維數(shù)組,將每種情況的最大權(quán)重值和對(duì)應(yīng)的索引值存入臨時(shí)變量,然后用冒泡法求出權(quán)重最大的點(diǎn),并使用Graphic類(lèi)的子類(lèi)Pen根據(jù)索引值畫(huà)出權(quán)重值最大的點(diǎn)和新的棋盤(pán)的棋子情況,最后仍要對(duì)是否分出勝負(fù)和是否仍由之前一方繼續(xù)落子做出判斷并進(jìn)行相應(yīng)操作;(2)如果計(jì)算層數(shù)不為一層。比如為N層,則先找出所有落子方和對(duì)手方各落一個(gè)子的情況。在程序中,可以按照上文方法找尋落子方的落一字的所有有效點(diǎn),然后在找到的所有情況下,按照同樣方法找出另一方接下來(lái)的所有有效點(diǎn),期間可能要不斷申請(qǐng)多個(gè)二維數(shù)組。之后的問(wèn)題即求出計(jì)算層數(shù)為N-1層時(shí),總權(quán)重值最大的點(diǎn)和對(duì)應(yīng)的索引,此時(shí)可由遞歸函數(shù)求得。得出勝率最高點(diǎn)后也需要判斷是否分出勝負(fù)和是否仍由之前一方繼續(xù)落子做出判斷并進(jìn)行相應(yīng)操作。考慮到目前計(jì)算機(jī)的內(nèi)存足夠大,足夠存儲(chǔ)多個(gè)二維數(shù)組,則該算法不用考慮內(nèi)存溢出問(wèn)題。經(jīng)過(guò)測(cè)試,筆者給出的各個(gè)格子的權(quán)重值數(shù)組,左上角16位依次為50,25,20,15,25,25,15,10,20,15,15,5,15,10,05,0。其余48位與此角各值呈中心對(duì)稱(chēng)。考慮到玩家可能在游戲過(guò)程中,可能會(huì)臨時(shí)改變AI和玩家的棋子,即在游戲中,玩家點(diǎn)擊了相應(yīng)RadioButton控件,此時(shí)根據(jù)該控件的CheckedChanged事件是否觸發(fā)相應(yīng)的來(lái)判斷是否改變用AI計(jì)算另一方接下來(lái)的勝率最高的點(diǎn)并作出相應(yīng)操作。在測(cè)試中,還需要兩個(gè)TextBox控件和兩個(gè)Label控件,其中兩個(gè)TextBox控件用于存放目前棋盤(pán)對(duì)應(yīng)的二維數(shù)組和接下來(lái)計(jì)算層數(shù)為一層時(shí),落子到最優(yōu)點(diǎn)后的棋盤(pán)對(duì)應(yīng)情況,兩個(gè)Label控件用于實(shí)時(shí)顯示黑白雙方的權(quán)重值[3]。

3 系統(tǒng)測(cè)試

測(cè)試計(jì)算機(jī)的CPU為AMD FX-8350,內(nèi)存為16GB,操作系統(tǒng)為Windows 7 x64 SP1。系統(tǒng)運(yùn)行良好,當(dāng)計(jì)算層數(shù)達(dá)到12層或以上時(shí),一般玩家難以勝過(guò)系統(tǒng)AI。當(dāng)計(jì)算層數(shù)達(dá)到20層或以上時(shí),計(jì)算機(jī)運(yùn)行有明顯的延遲。

4 小結(jié)

本文根據(jù)改進(jìn)權(quán)重的AI,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)黑白棋人工智能程序。系統(tǒng)效果較好。但是還系統(tǒng)還有很多需要改進(jìn)和完善的地方。比如:程序界面的美觀性,棋盤(pán)和棋子的顏色、樣式,落子的效果等。下一步的重點(diǎn)是對(duì)該系統(tǒng)做出優(yōu)化,減少系統(tǒng)資源占用,比如根據(jù)之前的計(jì)算創(chuàng)造出棋譜,以及創(chuàng)新出新的占用資源少,并且勝率更高的算法。

參考文獻(xiàn):

[1]美蘭多夫,等著.VisualStudio2010高級(jí)編程[M].北京:清華大學(xué)出版社.2012.

[2]本杰明·帕金斯,等著.C#入門(mén)經(jīng)典[M].北京:清華大學(xué)出版社.2019.

[3]王喆.深度學(xué)習(xí)推薦系統(tǒng)[M].北京:電子工業(yè)出版社.2020.

作者簡(jiǎn)介:徐剛(1985-),碩士,研究方向:計(jì)算機(jī)技術(shù)和經(jīng)濟(jì)分析。

主站蜘蛛池模板: 91成人免费观看在线观看| 久久精品嫩草研究院| 在线一级毛片| 99久久免费精品特色大片| 久久亚洲精少妇毛片午夜无码| 真实国产精品vr专区| 91精品视频播放| 91精品情国产情侣高潮对白蜜| 一区二区三区国产精品视频| 国产在线观看高清不卡| 全部免费毛片免费播放| 麻豆国产原创视频在线播放| 欧美第二区| 草逼视频国产| 色哟哟色院91精品网站| 三级国产在线观看| 九色最新网址| 亚洲av无码久久无遮挡| av在线无码浏览| 国产在线97| 欧美a在线看| 色综合手机在线| 国产精品偷伦在线观看| 日韩一二三区视频精品| 蜜桃臀无码内射一区二区三区 | 国产精品女在线观看| 又爽又黄又无遮挡网站| 国产在线小视频| 无码区日韩专区免费系列| AV色爱天堂网| 久久精品欧美一区二区| 2020亚洲精品无码| 精品欧美日韩国产日漫一区不卡| 欧美成人影院亚洲综合图| 19国产精品麻豆免费观看| 尤物国产在线| 国产精品亚洲精品爽爽| 国产精品蜜芽在线观看| 欧美特级AAAAAA视频免费观看| 久久久久无码精品| 亚洲欧美另类色图| 国产靠逼视频| 欧美国产日韩另类| 国产激情无码一区二区免费| 日本在线免费网站| 中文字幕在线一区二区在线| 无码在线激情片| 日韩在线成年视频人网站观看| 香蕉久久永久视频| 免费国产一级 片内射老| 亚洲人成网站在线观看播放不卡| www.91中文字幕| 一本久道久久综合多人| 在线a视频免费观看| 久久夜色精品| 亚洲一级毛片| 本亚洲精品网站| 天天躁夜夜躁狠狠躁图片| 国产又粗又猛又爽视频| 婷婷在线网站| 88av在线看| 在线国产三级| 欧洲亚洲一区| 中文字幕日韩久久综合影院| 成人午夜福利视频| 欧亚日韩Av| 久久人人爽人人爽人人片aV东京热 | 一级在线毛片| h视频在线观看网站| 国产xxxxx免费视频| 精品夜恋影院亚洲欧洲| 91国内外精品自在线播放| 日韩在线视频网站| 91国内视频在线观看| 青青国产在线| 精品一区二区无码av| 国产白浆一区二区三区视频在线| 欧美成人午夜影院| 欧美日韩一区二区三区四区在线观看| 亚洲精品图区| 91精品在线视频观看| 婷婷丁香在线观看|