中國(guó)象棋對(duì)弈系統(tǒng)-計(jì)算機(jī)專業(yè)畢業(yè)設(shè)計(jì)畢業(yè)論文_第1頁(yè)
中國(guó)象棋對(duì)弈系統(tǒng)-計(jì)算機(jī)專業(yè)畢業(yè)設(shè)計(jì)畢業(yè)論文_第2頁(yè)
中國(guó)象棋對(duì)弈系統(tǒng)-計(jì)算機(jī)專業(yè)畢業(yè)設(shè)計(jì)畢業(yè)論文_第3頁(yè)
中國(guó)象棋對(duì)弈系統(tǒng)-計(jì)算機(jī)專業(yè)畢業(yè)設(shè)計(jì)畢業(yè)論文_第4頁(yè)
中國(guó)象棋對(duì)弈系統(tǒng)-計(jì)算機(jī)專業(yè)畢業(yè)設(shè)計(jì)畢業(yè)論文_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

河北大學(xué)2009屆本科生畢業(yè)論文(設(shè)計(jì))PAGE24中國(guó)象棋對(duì)弈系統(tǒng)摘要人機(jī)博弈是人工智能研究的經(jīng)典課題之一。憑借設(shè)計(jì)優(yōu)良的算法和計(jì)算機(jī)的快速運(yùn)算能力,計(jì)算機(jī)可以在人機(jī)對(duì)弈中表現(xiàn)出相當(dāng)高的“智能”。中國(guó)象棋是我們中華民族文化傳統(tǒng)的一部分,有著悠久的歷史,并擁有著廣泛的群眾基礎(chǔ)。象棋程序主要由人工智能和界面設(shè)計(jì)組成。人工智能體現(xiàn)計(jì)算機(jī)的下棋思路,既計(jì)算機(jī)如何進(jìn)行思考并以最佳走法完成下一步,先由相應(yīng)的搜索算法進(jìn)行搜索,并對(duì)各種可能的走法進(jìn)行估值,從中選擇勝利面最大的一步。界面部分主要便于用戶通過(guò)以前的下棋步驟,更好地調(diào)整下棋思路,著法顯示使用戶能夠清楚地知道下棋過(guò)程,更準(zhǔn)確地把握整個(gè)局面。本文在概述計(jì)算機(jī)博弈,特別是中國(guó)象棋軟件概況的基礎(chǔ)上,分析了現(xiàn)有中國(guó)象棋博弈軟件實(shí)現(xiàn)方法中存在的問(wèn)題,設(shè)計(jì)了棋盤(pán)、棋子和評(píng)價(jià)函數(shù)的表示方法,在博弈理論的基礎(chǔ)上采用遞歸方法實(shí)現(xiàn)了α-β剪枝搜索,應(yīng)用VC和MFC設(shè)計(jì)并實(shí)現(xiàn)了博弈界面。實(shí)現(xiàn)了一個(gè)具有一定棋力的中國(guó)象棋人機(jī)對(duì)弈程序。關(guān)鍵詞:人機(jī)博弈中國(guó)象棋博弈樹(shù)VCABSTRACTMan-machineGameisaclassictopicinArtificialIntelligence.Relyingonfine-designedalgorithmsandthefastoperationability,computerscandisplayhigh"intelligence"inplayingchess.TheChinesechessisourChinesenationculturetraditionpart,whichhastheglorioushistoryandishavingthewidespreadmassbase.TheChinesechessprocedureismainlycomposedoftheartificialintelligenceandthecontactsurfacedesign.Theartificialintelligencemainlymanifeststhementalityofthecomputerwhichplayschess.Inotherwords,thecomputerhowtocarryontheponderandcompletesthenextstepbythebestmove.Firstitcarriesonthecorrespondingsearchingalgorithm,andselectsthebestmovetowin.Surfaceisusedtoadjustwellthementalityofplayingchess.Demonstratingcanmakeusersknowclearlytheprocessofplayingchess,inordertograsptheentireaspectaccurately.Inthisthesis,wefirstpresentasurveyofthestateoftheartinComputerGame,especiallyComputerXiangQisoftware.ThenaimingataddressingtheexistingproblemsinXiangQisoftware,wedesignaconciseframeworkforXiangQichessboardrepresentation,staticevaluationfunctionandhuman-computerinterface.Futher,weimplementtheinterfaceandtheXiangQigameprogramMyChessinVC++andMFC.Itisfairforbeginnerandweimplementtheman-machingplayingchesswithcerainchessstrengh.Keywords:Man-machinegamblingXiangQigametreeVC一引言從1956年正式提出人工智能學(xué)科算起,50多年來(lái),獲得了迅速的發(fā)展,在很多學(xué)科領(lǐng)域都獲得了廣泛應(yīng)用,并取得了豐碩的成果。人工智能已逐步成為一個(gè)獨(dú)立的分支,無(wú)論在理論和實(shí)踐上都已自成一個(gè)系統(tǒng)。人工智能目前在計(jì)算機(jī)領(lǐng)域內(nèi),得到了愈加廣泛的重視。人工智能研究的一個(gè)主要目標(biāo)是使機(jī)器能夠勝任一些通常需要人類智能才能完成的復(fù)雜工作。當(dāng)計(jì)算機(jī)出現(xiàn)后,隨著社會(huì)的進(jìn)步和科技的發(fā)展,現(xiàn)在計(jì)算機(jī)似乎已經(jīng)變得十分聰明了。1997年5月,IBM公司研制的深藍(lán)(DeepBlue)計(jì)算機(jī)戰(zhàn)勝了國(guó)際象棋大師卡斯帕羅夫(Kasparov)。在一些原來(lái)只屬于人類的工作地方計(jì)算機(jī)以它的高速和準(zhǔn)確性為人類發(fā)揮著它的作用。人工智能始終是計(jì)算機(jī)科學(xué)的前沿學(xué)科,計(jì)算機(jī)編程語(yǔ)言和其它計(jì)算機(jī)軟件都因?yàn)橛辛巳斯ぶ悄艿倪M(jìn)展而得以存在。基于人工智能的博弈程序?qū)⑷斯ぶ悄芎蛫蕵?lè)有機(jī)結(jié)合在一起。人工智能結(jié)合最強(qiáng)的博弈程序是國(guó)際象棋程序。國(guó)際象棋程序可以不斷學(xué)習(xí),因此可以不斷的提高。計(jì)算機(jī)程序不會(huì)像人那樣下棋,它只通過(guò)搜索所有可走的步來(lái)確定要走的下一步,而且計(jì)算機(jī)走的每一步都來(lái)自上一步的學(xué)習(xí)得到。博弈過(guò)程可以構(gòu)建一棵博弈樹(shù),將所有的走法羅列出來(lái)。博弈樹(shù)的結(jié)點(diǎn)對(duì)應(yīng)一個(gè)棋局,分支表示一步著法。根結(jié)點(diǎn)表示初始局面,葉節(jié)點(diǎn)表示終局。終局可以是贏、輸、和三者之一。在深度優(yōu)先的極大極小樹(shù)過(guò)程中,博弈樹(shù)的某些部分并不會(huì)產(chǎn)生有意義的值,因而無(wú)需擴(kuò)展這一部分。α-β剪枝過(guò)程就是利用這一點(diǎn),將生成后繼與倒推估計(jì)值相結(jié)合,及時(shí)剪掉一些無(wú)用分支,從而提高了搜索效率。本設(shè)計(jì)項(xiàng)目擬將人工智能技術(shù)與中國(guó)象棋博弈相結(jié)合,應(yīng)用博弈樹(shù)的剪枝技術(shù)和最大最小值原理進(jìn)行搜索,找出博弈的最佳著法,實(shí)現(xiàn)基本的人機(jī)對(duì)弈過(guò)程,在實(shí)踐中更好地學(xué)習(xí)并掌握人工智能博弈技術(shù)。二需求分析2.1系統(tǒng)概述2.1.1中國(guó)象棋的一般描述中國(guó)象棋是歷史上最為悠久的棋類,早在兩千多年前的戰(zhàn)國(guó)時(shí)代就有了中國(guó)象棋的記載,它至今仍是華人最喜歡的棋類之一。下棋雙方根據(jù)對(duì)棋局形勢(shì)的理解和對(duì)棋藝規(guī)律的掌握,調(diào)動(dòng)車馬,組織兵力,協(xié)調(diào)作戰(zhàn)在棋盤(pán)這塊特定的戰(zhàn)場(chǎng)上,進(jìn)行著象征性的軍事戰(zhàn)斗。棋盤(pán)和棋子:棋盤(pán)由九道直線和十道橫線交叉組成。棋盤(pán)上共有九十個(gè)交叉點(diǎn),棋子就擺在和活動(dòng)在這些交叉點(diǎn)上。棋盤(pán)中間沒(méi)有劃通直線的地方,叫做“河界”;劃有斜交叉線的地方,叫做“九宮”。棋子共有三十二個(gè),分為紅黑兩組,每組共十六個(gè)。紅棋子:帥一個(gè),車、馬、炮、相、仕各兩個(gè),兵五個(gè)。

黑棋子:將一個(gè),車、馬、炮、象、士各兩個(gè),卒五個(gè)。其中帥與將、仕與士、相與象、兵與卒的作用完全相同,僅僅是為了區(qū)分紅棋和黑棋。將或帥

移動(dòng)范圍:只能在九宮內(nèi)移動(dòng)。

移動(dòng)規(guī)則:每一步只能沿水平或垂直方向移動(dòng)一點(diǎn)。

士或仕

移動(dòng)范圍:只能在九宮內(nèi)移動(dòng)。

移動(dòng)規(guī)則:每一步只可以沿對(duì)角線方向移動(dòng)一點(diǎn)。

象或相

移動(dòng)范圍:河界的一側(cè)。

移動(dòng)規(guī)則:每一步只可以沿對(duì)角線方向移動(dòng)兩點(diǎn),在移動(dòng)的過(guò)程中不能夠穿越障礙。

移動(dòng)范圍:任何位置

移動(dòng)規(guī)則:每一步只可以水平或垂直移動(dòng)一點(diǎn),再按對(duì)角線方面向左或者右移動(dòng),移動(dòng)的過(guò)程中不能夠穿越障礙。

移動(dòng)范圍:任何位置

移動(dòng)規(guī)則:可以水平或垂直方向移動(dòng)任意個(gè)無(wú)阻礙的點(diǎn)。

移動(dòng)范圍:任何位置

移動(dòng)規(guī)則:移動(dòng)起來(lái)和車很相似,但它必須跳過(guò)一個(gè)棋子來(lái)吃掉對(duì)方的一個(gè)棋子。

移動(dòng)范圍:任何位置

移動(dòng)規(guī)則:過(guò)河前,每步只能向前移動(dòng)一點(diǎn)。過(guò)河后,它便增加了向左右移動(dòng)的能力,兵不允許向后移動(dòng)。2.1.2國(guó)內(nèi)外象棋發(fā)展情況象棋是中華民族精神文明的瑰寶,目前象棋博弈即人機(jī)對(duì)弈已經(jīng)成為對(duì)計(jì)算機(jī)的算法以及人工智能研究的經(jīng)典課題。人機(jī)博弈問(wèn)題是近年來(lái)比較熱點(diǎn)的問(wèn)題,機(jī)器博弈被專家們描述為人工智能的果蠅,就是說(shuō)人類對(duì)機(jī)器博弈的研究衍生了大量的研究成果,這些成果對(duì)更廣泛的領(lǐng)域產(chǎn)生了重要影響。國(guó)外的研究人員經(jīng)過(guò)五十多年的對(duì)國(guó)際象棋博弈系統(tǒng)的探索,終于IBM公司在1997年開(kāi)發(fā)出了超級(jí)計(jì)算機(jī)“深藍(lán)”,并且戰(zhàn)勝了世界國(guó)際象棋大師卡斯帕羅夫。這正表明國(guó)外計(jì)算機(jī)人工智能水平確實(shí)已經(jīng)很高。在我國(guó),人工智能也正在飛速發(fā)展中。有幾個(gè)比較有名的中國(guó)象棋軟件:象棋大師Ⅱ、棋海無(wú)涯、象棋奇兵。在中國(guó)象棋軟件中,核心是搜索技術(shù),比較常見(jiàn)的有:α-β搜索、極大-極小搜索、迭代深化、置換表法等。2.2系統(tǒng)運(yùn)行環(huán)境2.2.1硬件環(huán)境CPU:PIII內(nèi)存:512M2.2.2軟件環(huán)境操作系統(tǒng):WindowsXP2.3系統(tǒng)功能需求通過(guò)對(duì)現(xiàn)有游戲工具的研究,游戲本身結(jié)構(gòu)的分析和數(shù)據(jù)流程實(shí)現(xiàn)方式的探討,本軟件在設(shè)計(jì)上分為人工智能和界面兩大部分。人工智能部分實(shí)現(xiàn)了如何讓計(jì)算機(jī)下中國(guó)象棋,其中涉及人機(jī)博弈的基本理論及思想,是該程序的核心部分,同時(shí)也是本項(xiàng)目研究的重點(diǎn)所在。光有下棋引擎尚不能滿足人機(jī)交互的基本要求,因此我們還需要一個(gè)界面來(lái)作為引擎的載體,使系統(tǒng)更具人性化。2.4系統(tǒng)性能需求經(jīng)濟(jì)性:作為中國(guó)象棋這樣的小游戲,其經(jīng)濟(jì)成分比重相對(duì)較少,主要是支出的費(fèi)用:其中包括設(shè)備購(gòu)置費(fèi)、軟件開(kāi)發(fā)費(fèi)用、管理和維護(hù)費(fèi)等。技術(shù)性:技術(shù)上的可行性分析主要分析現(xiàn)有技術(shù)條件能否順利完成開(kāi)發(fā)工作,硬件、軟件配置能否滿足開(kāi)發(fā)者的需要,各類技術(shù)人員的數(shù)量,水平,來(lái)源等。中國(guó)象棋對(duì)弈系統(tǒng)的工作主要是:憑借設(shè)計(jì)優(yōu)良的算法和計(jì)算機(jī)的快速運(yùn)算能力來(lái)搜索出最好的著法,計(jì)算機(jī)可以在人機(jī)對(duì)弈中表現(xiàn)出相當(dāng)高的“智能”。計(jì)算機(jī)硬件和軟件技術(shù)的飛速發(fā)展,為系統(tǒng)的建設(shè)提供了技術(shù)條件。市場(chǎng)性:在當(dāng)前計(jì)算機(jī)技術(shù)飛速發(fā)展的大環(huán)境下,人工智能和軟件技術(shù)的更新使中國(guó)象棋完全有可能也有能力采用這樣先進(jìn)技術(shù)。風(fēng)險(xiǎn)性:包括項(xiàng)目的經(jīng)濟(jì)風(fēng)險(xiǎn)、技術(shù)風(fēng)險(xiǎn)和市場(chǎng)風(fēng)險(xiǎn)。此項(xiàng)目投入小,技術(shù)要求不高,市場(chǎng)潛力比較大。三概要設(shè)計(jì)3.1系統(tǒng)設(shè)計(jì)目標(biāo)程序的大概的思想是:首先使用一個(gè)數(shù)據(jù)結(jié)構(gòu)來(lái)描述棋局信息,對(duì)某一特定的棋局信息由著法生成器生成當(dāng)前下棋方所有合法的著法并依次存入著法隊(duì)列。然后通過(guò)搜索算法來(lái)逐一讀取著法并調(diào)用局面評(píng)估函數(shù)對(duì)該著法所產(chǎn)生的后繼局面進(jìn)行評(píng)估打分,從中選出最有可能導(dǎo)致走棋方取勝的著法。在搜索的過(guò)程中還可以采用一些輔助手段來(lái)提高搜索的效率。本系統(tǒng)設(shè)計(jì)了棋盤(pán)、棋子和評(píng)價(jià)函數(shù)的表示方法,應(yīng)用VC和MFC設(shè)計(jì)并實(shí)現(xiàn)了博弈界面,在博弈樹(shù)理論的基礎(chǔ)上采用遞歸方法實(shí)現(xiàn)了α-β剪枝搜索。該程序用戶界面良好,實(shí)現(xiàn)了一個(gè)具有一定棋力的中國(guó)象棋人機(jī)對(duì)弈程序。程序功能包括:人機(jī)對(duì)弈;2)棋子、棋盤(pán)樣式和顏色選擇;3)搜索深度設(shè)定;4)新局、結(jié)束。3.2程序設(shè)計(jì)總體框架整個(gè)程序的實(shí)現(xiàn)可分為兩大部分:1)人工智能部分該部分實(shí)現(xiàn)了如何讓計(jì)算機(jī)下中國(guó)象棋,其中涉及人機(jī)博弈的基本理論及思想,是該程序的核心部分,同時(shí)也是本項(xiàng)目研究的重點(diǎn)所在。2)界面及程序輔助部分光有下棋引擎尚不能滿足人機(jī)交互的基本要求,因此我們還需要一個(gè)界面來(lái)作為引擎的載體,使系統(tǒng)更具人性化。四詳細(xì)設(shè)計(jì)4.1常用搜索算法4.1.1概述從理論上說(shuō),讓機(jī)器下中國(guó)象棋是一個(gè)簡(jiǎn)單的游戲,只要每一步都考慮各種可能的著法,以及每種著法的后繼變化,如此下去直至出現(xiàn)一方將死或雙方和棋。但是實(shí)踐操作中,這種策略是不可行的,因?yàn)樾枰紤]的每種著法加起來(lái)會(huì)是天文數(shù)字。不管是人類還是計(jì)算機(jī)去下棋,都有一整套下棋的理論,人類好幾百年前就開(kāi)始下棋,在近兩百年里有很多理論知識(shí),而機(jī)器下棋只有五十多年的歷史。4.1.2深度優(yōu)先搜索圖的深度優(yōu)先遍歷的遞歸定義:假設(shè)給定圖G的初態(tài)是所有頂點(diǎn)均未曾訪問(wèn)過(guò)。在G中任選一頂點(diǎn)v為初始出發(fā)點(diǎn)(源點(diǎn)),則深度優(yōu)先遍歷可定義如下:首先訪問(wèn)出發(fā)點(diǎn)v,并將其標(biāo)記為已訪問(wèn)過(guò);然后依次從v出發(fā)搜索v的每個(gè)鄰接點(diǎn)w。若w未曾訪問(wèn)過(guò),則以w為新的出發(fā)點(diǎn)繼續(xù)進(jìn)行深度優(yōu)先遍歷,直至圖中所有和源點(diǎn)v有路徑相通的頂點(diǎn)(亦稱為從源點(diǎn)可達(dá)的頂點(diǎn))均已被訪問(wèn)為止。若此時(shí)圖中仍有未訪問(wèn)的頂點(diǎn),則另選一個(gè)尚未訪問(wèn)的頂點(diǎn)作為新的源點(diǎn)重復(fù)上述過(guò)程,直至圖中所有頂點(diǎn)均已被訪問(wèn)為止。

圖的深度優(yōu)先遍歷類似于樹(shù)的前序遍歷。采用的搜索方法的特點(diǎn)是盡可能先對(duì)縱深方向進(jìn)行搜索。這種搜索方法稱為深度優(yōu)先搜索(Depth-FirstSearch)。相應(yīng)地,用此方法遍歷圖就很自然地稱之為圖的深度優(yōu)先遍歷。深度優(yōu)先搜索極大極小樹(shù)的過(guò)程,可以表示為一個(gè)遞歸的形式。如圖4-1所示的一棵樹(shù),共有三層。根結(jié)點(diǎn)為A,其子節(jié)點(diǎn)有B、C、D三個(gè),而B(niǎo)、C、D也各有若干子節(jié)點(diǎn)。以深度優(yōu)先算法搜索此樹(shù)時(shí),先進(jìn)入根結(jié)點(diǎn)A,生成其第一個(gè)子節(jié)點(diǎn)B;然后遍歷B,生成B的第一個(gè)子節(jié)點(diǎn)E;E將其估值返回給父節(jié)點(diǎn)B,刪掉E,B生成第二個(gè)子節(jié)點(diǎn)F;F將其估值返回給父節(jié)點(diǎn)B,刪掉F,B生成第三個(gè)子節(jié)點(diǎn)G;G將其估值返回給父節(jié)點(diǎn)B,刪掉G,B在三個(gè)葉節(jié)點(diǎn)的返回值中取極小值并將此值返回給A,A生成第二個(gè)子節(jié)點(diǎn)C,同樣遍歷C及其子節(jié)點(diǎn),得到C的返回值再生成D并向下遍歷之;最后A在B、C、D的返回值中取極大值,擁有該極大值的子節(jié)點(diǎn)就是下一步要走的方向。AABCEDFGHIJK圖4-1極大極小樹(shù)從上述過(guò)程可以看出,深度優(yōu)先搜索極大極小樹(shù)的過(guò)程中,任何時(shí)候只要保存與其層數(shù)相同個(gè)數(shù)的結(jié)點(diǎn)。圖4-1所示的樹(shù)任何時(shí)候僅需保存3個(gè)結(jié)點(diǎn)。僅生成將要搜索的結(jié)點(diǎn),搜索完成的結(jié)點(diǎn)可以立即刪去以節(jié)省空間。4.1.3 博弈策略如今的象棋程序把棋局看成博弈樹(shù),每個(gè)局面表示成棋局樹(shù)中的一個(gè)節(jié)點(diǎn),每個(gè)著法代表它的一個(gè)分支。這樣,樹(shù)就由雙方不同層面上的所有著法組成。令紅棋勝的局面值為1,黑棋勝的局面值為-1,和局的值為0。當(dāng)輪紅棋走時(shí),紅棋定會(huì)選擇子節(jié)點(diǎn)值為1或0(如果沒(méi)有值為1的子節(jié)點(diǎn)的話)的走法;而輪到黑棋時(shí),黑棋則會(huì)選擇子節(jié)點(diǎn)值為-1或0(如果沒(méi)有值為-1的子節(jié)點(diǎn)的話)的走法。對(duì)于中間結(jié)點(diǎn)的值有如下計(jì)算方法:如果該結(jié)點(diǎn)所對(duì)應(yīng)的局面輪到紅棋走,則該結(jié)點(diǎn)的值是其最佳(對(duì)紅棋而言)的一個(gè)值;如果該結(jié)點(diǎn)所對(duì)應(yīng)的局面輪到黑旗走,則該結(jié)點(diǎn)的值是其最差(對(duì)紅旗而言)的一個(gè)值。這樣,從這棵樹(shù)的葉子節(jié)點(diǎn)倒推向根部,就可以得出所有節(jié)點(diǎn)的值。雙方就可以從其所面臨的棋局中選擇一步好棋。然后一步步走向勝利。表示輪到紅方走棋表示輪到紅方走棋表示輪到黑方走棋圖4-2象棋博弈示意圖 由博弈樹(shù)的構(gòu)造可知:在博弈樹(shù)中,由于葉節(jié)點(diǎn)的值可以由估計(jì)函數(shù)給出,因此中間節(jié)點(diǎn)的值可以通過(guò)從其孩子節(jié)點(diǎn)中或取最大值或取最小值求得,從而最終確定根結(jié)點(diǎn)的值。極大極小搜索算法是通過(guò)遞歸的形式完成的。極大極小搜索算法運(yùn)行時(shí)要檢查整個(gè)博弈樹(shù),然后盡可能檢查最好的線路。極大極小搜索算法容易理解,但是效率非常低。每次搜索最深一層時(shí),樹(shù)的大小就呈指數(shù)增長(zhǎng)。在極大極小搜索的過(guò)程中,存在著一定程度的數(shù)據(jù)冗余。Alpha-Beta搜索能夠讓我們忽略許多結(jié)點(diǎn)的搜索。對(duì)于每一個(gè)被忽略的非葉子節(jié)點(diǎn)來(lái)說(shuō),這都意味著不僅節(jié)點(diǎn)本身,而且節(jié)點(diǎn)下面的子樹(shù)也被忽略掉了,這就導(dǎo)致了Alpha-Beta搜索需要遍歷的節(jié)點(diǎn)遠(yuǎn)遠(yuǎn)于少于極大極小算法所遍歷的節(jié)點(diǎn)。這也同時(shí)意味著對(duì)搜索同一棵樹(shù)來(lái)說(shuō),Alpha-Beta搜索所花費(fèi)的時(shí)間遠(yuǎn)遠(yuǎn)少于極大極小搜索算法所花費(fèi)的時(shí)間。AABCDEF1615表示取極大值的節(jié)點(diǎn)表示取極小值的節(jié)點(diǎn)圖4-3Alpha剪枝示意如圖4-3所示,有一棵極大極小樹(shù)的片段,節(jié)點(diǎn)B的值為16,結(jié)點(diǎn)D的值為15,由此我們可以判斷結(jié)點(diǎn)C的值將小于等于15(取極小值);而結(jié)點(diǎn)A的值為結(jié)點(diǎn)Max(B,C),為16,也就是說(shuō)不再需要估結(jié)點(diǎn)C的其他結(jié)點(diǎn)如E、F的值就可以得出父節(jié)點(diǎn)A的值了。這樣將結(jié)點(diǎn)D的后繼兄弟結(jié)點(diǎn)減去稱為Alpha剪枝。BBACCD16EF1216表示取極大值的節(jié)點(diǎn)表示取極小值的節(jié)點(diǎn)圖4-4Beta剪枝示意如圖4-4所示,結(jié)點(diǎn)B的估值為12,結(jié)點(diǎn)D的估值為16,由此我們可以判斷結(jié)點(diǎn)C的值將大于等于16(取極大值);而結(jié)點(diǎn)A的值為結(jié)點(diǎn)Min(B,C),為12.也就是說(shuō)不再需要求結(jié)點(diǎn)C的其他結(jié)點(diǎn)如E、F的值就可以得出父節(jié)點(diǎn)A的值了。這樣將結(jié)點(diǎn)D的后繼兄弟結(jié)點(diǎn)減去稱為Beta剪枝。通過(guò)對(duì)上述兩個(gè)博弈樹(shù)片段的觀察我們會(huì)發(fā)現(xiàn):Alpha剪枝發(fā)生在MAX節(jié)點(diǎn)上,即剪裁掉冗余的MAX節(jié)點(diǎn);Beta剪枝發(fā)生在MIN節(jié)點(diǎn)上,即剪裁掉冗余的MIN節(jié)點(diǎn)。將Alpha剪枝和Beta剪枝的思想融入到極大極小搜索算法中,就得到了Alpha-Beta搜索算法。將這個(gè)算法用類C的偽代碼描述如下:intAlphaBeta(nply,nAlpha,nBeta){ if(gameover) returnEveluation;//勝負(fù)已分,返回估值if(nPly==0) returnEveluation;//葉子節(jié)點(diǎn)返回估值if(IsMinNode)//此句用于判斷當(dāng)前節(jié)點(diǎn)是何種節(jié)點(diǎn){//是取極小值的節(jié)點(diǎn) for(eachpossiblemovem)//對(duì)每一可能的走法m { makemovem;//生產(chǎn)新節(jié)點(diǎn) score=alphabeta(nPly–1,nAlpha,nBeta);//遞歸搜索子節(jié)點(diǎn) unmakemovem;//撤銷搜索過(guò)的節(jié)點(diǎn) if(score<nBeta) { nBeta=score;//取極小值 if(nAlpha>=nBeta) returnnAlpha;//alpha剪枝,拋棄后繼節(jié)點(diǎn)}}returnnBeta;//返回最小值}Else{//取極大值的節(jié)點(diǎn) for(eachpossiblemovem)//對(duì)每一可能的走法m { makemovem;//生產(chǎn)新節(jié)點(diǎn) score=alphabeta(nPly–1,nAlpha,nBeta);//遞歸搜索子節(jié)點(diǎn) unmakemovem;//撤銷搜索過(guò)的節(jié)點(diǎn) if(score>nAlpha) { nAlpha=score;//取極大值 if(nAlpha>=nBeta) returnnBeta;//beta剪枝,拋棄后繼節(jié)點(diǎn)}}returnnAlpha;//返回最大值}}同極大極小搜索算法一樣,Alpha-Beta搜索算法也有點(diǎn)繁瑣,我們不僅要在基數(shù)層進(jìn)行Alpha剪枝,而且還要在偶數(shù)層進(jìn)行Beta剪枝。不過(guò)只要用負(fù)極大值的形式,這樣在任何一層都只進(jìn)行Beta剪枝,它就會(huì)同負(fù)極大值算法一樣簡(jiǎn)潔。今天的博弈程序大多采用的都是基于負(fù)極大值形式的搜索算法,本次論文也不例外。使用負(fù)極大值方法,博弈雙方都取極大值。負(fù)極大值算法比極大極小算法短小并且簡(jiǎn)單。負(fù)極大值算法的核心在于:父節(jié)點(diǎn)的值是各子節(jié)點(diǎn)的值的負(fù)數(shù)的極大值。對(duì)于象棋還要注意一點(diǎn),估值函數(shù)必須對(duì)誰(shuí)走棋敏感,也就是說(shuō)對(duì)于一個(gè)該紅方走棋的局面返回正的估值的話,則對(duì)于一個(gè)該黑方走棋的局面返回負(fù)的估值。在算法原理上,普通的極大極小算法和負(fù)極大值算法完全等效,負(fù)極大值僅僅是一種更好的表達(dá)形式。使用偽代碼描述如下://alpha-betasearchwithNegamaxframeintalphabteta(intnPly,intalpha,intbeta){ if(Gameover) returneval();//勝負(fù)已分,返回估值 if(nPly<=0) returneval();//葉子節(jié)點(diǎn)返回估值 for(eachpossiblemovem)//對(duì)每一可能的走法 { makemovem;//產(chǎn)生子節(jié)點(diǎn) //遞歸搜索子節(jié)點(diǎn) Score=-alphabeta(nPly-1,-beta,-alpha) Unmakemovem;//撤銷搜索過(guò)的子節(jié)點(diǎn) if(score>=alpha) alpha=score;//保存最大值 if(alpha>=beta) break;//beta剪枝}returnalpha;//返回極大值}4.2棋局表示和走法規(guī)則的實(shí)現(xiàn)4.2.1 棋盤(pán)和棋子的表示計(jì)算機(jī)下棋的前提是要讓計(jì)算機(jī)讀懂象棋,即計(jì)算機(jī)應(yīng)該能夠清楚地了解到棋盤(pán)上棋子的分布情況以及下棋方所走的所有著法。因而首先我們需要有一套數(shù)據(jù)結(jié)構(gòu)來(lái)表示棋盤(pán)上的局面以及著法。棋盤(pán)表示主要探討的是使用什么數(shù)據(jù)結(jié)構(gòu)來(lái)表示棋盤(pán)上的信息。通常,用來(lái)描述棋盤(pán)及其上棋子信息的是一個(gè)二維數(shù)組??梢杂靡粋€(gè)9×10個(gè)字節(jié)的二維數(shù)組來(lái)表示中國(guó)象棋的棋盤(pán),數(shù)組中每一個(gè)字節(jié)代表棋盤(pán)上的一個(gè)交點(diǎn),其值表明這個(gè)交點(diǎn)上放置的是一個(gè)黑棋還是紅棋或是沒(méi)有棋子,。這種表示方法簡(jiǎn)單易行。按此方法棋盤(pán)的初始情形如圖4-5所示。BYTEChessBoard[10][9]={2,3,6,5,1,5,6,3,2},{0,0,0,0,0,0,0,0,0},{0,4,0,0,0,0,0,4,0},{7,0,7,0,7,0,7,0,7},{0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0},{14,0,14,0,14,0,14,0,14},{0,11,0,0,0,0,0,11,0},{0,0,0,0,0,0,0,0,0},{9,10,13,12,8,12,13,10,9}圖4-5棋盤(pán)初始情形其中棋子分別用數(shù)字代表;其中0表示無(wú)棋子;黑棋分別用1,2,3,5,6,7代表;表示帥表示車表示馬5—表示仕6—表示象7—表示兵紅棋分別用8,9,10,12,13,14代表;8—表示將9—表示車10—表示馬12—表示仕13—表示相14—表示卒黑棋的初始位置在棋盤(pán)上方,也就是數(shù)組的前5行;紅棋的初始位置在棋盤(pán)的下方,也就是數(shù)組的后5行;沒(méi)有棋子的格子用0表示。圖4-6棋盤(pán)界面示意圖定義一個(gè)棋子位置的結(jié)構(gòu)typedefstruct-chessmanposition{BYTE x;BYTE y;}CHESSMANPOS;一個(gè)走法的結(jié)構(gòu)typedefstruct-chessmove{ Short ChessID;//標(biāo)明是什么棋子 CHESSMANPOS Form; //起始位置 CHESSMANPOS To;//走到的位置 Int Score; //值}CHESSMOVE;有了對(duì)棋盤(pán)局面和著法的表示之后,程序才能夠完成以下操作:1)生成所有的合法著法;2)執(zhí)行著法、撤銷著法;3)針對(duì)某一局面進(jìn)行評(píng)估。因而,棋局表示好比是整個(gè)程序(計(jì)算機(jī)下棋引擎部分)的地基,之后所有的操作都將建立在其基礎(chǔ)上。4.2.2走法規(guī)則的實(shí)現(xiàn)走法產(chǎn)生就是用來(lái)告訴其他部分下一步可以往哪里走的模塊。我們的程序需要讓計(jì)算機(jī)在輪到它走子的時(shí)候能夠執(zhí)行一步它認(rèn)為對(duì)它最有利的著法,那前提就是它要有若干可供選擇的著法,提供所有候選著法的“清單”就是我們的著法生成器所要完成的。之后用搜索函數(shù)來(lái)搜索“清單”,并用局面評(píng)估函數(shù)來(lái)逐一打分,最后就可以選擇出最佳著法并執(zhí)行了。在中國(guó)象棋中,每一種棋子的移動(dòng)規(guī)則各有不同,這樣的情形導(dǎo)致可較為復(fù)雜的判斷。但是我們可以將每種棋子在某一位置上的最大可走步建成一個(gè)數(shù)據(jù)庫(kù)。在產(chǎn)生走法時(shí)直接從數(shù)據(jù)庫(kù)中取出數(shù)據(jù),進(jìn)行少量判斷就可以算出該棋子的合法步驟。本系統(tǒng)中走法產(chǎn)生采用的基本思想是遍歷整個(gè)棋盤(pán),當(dāng)發(fā)現(xiàn)有當(dāng)前下棋方的棋子時(shí)先判斷它是何種類型的棋子,然后根據(jù)其棋子類型而相應(yīng)地找出其所有合法走法并存入走法隊(duì)列。在進(jìn)行走法產(chǎn)生的時(shí)候,往往伴隨著搜索進(jìn)行。對(duì)于一個(gè)局面的所有直接后繼,有兩種選擇:一次產(chǎn)生一種走法然后搜索之;或者一次產(chǎn)生其所有走法然后搜索之。在實(shí)際使用中,絕大部分程序都是一次產(chǎn)生一個(gè)局面的全部走法,然后調(diào)整其搜索順序。下面給出車的走法程序;//紅車或黑車if(nFromY!=nToY&&nFromX!=nToX) return FALSE;//車走直線if(nFromY=nToY) //水平走{ if(nFromX<nToX)//水平向左走 { for(i=NfromX+1;i<nToX;i++) if(position[nFromY][i]!=NOCHESS)//中間有障礙 return FALSE;}else//{ for(i=nToX+1;i<nFromX;i++) if(position[nFromY][i]!=NOCHESS) return FALSE;}}Else//垂直走{ if(nFormY<nToY) { for(j=nFromY+1;j<nToY;j++) if(position[j][nFromX]!=NOCHESS)//中間有障礙 return FALSE;}else{ for(j=nToY+1;j<nFromY;j++) if(position[j][nFromX]!=NOCHESS) return FALSE;}}4.3局面評(píng)估及搜索算法4.3.1棋子的價(jià)值評(píng)估在象棋程序中如果說(shuō)搜索算法是心臟,那么局面評(píng)估就是大腦。搜索算法負(fù)責(zé)驅(qū)動(dòng)整個(gè)程序,而局面評(píng)估則負(fù)責(zé)對(duì)搜索的內(nèi)容進(jìn)行評(píng)價(jià)。因而搜索與局面評(píng)估是整個(gè)下棋引擎的核心。估值是一個(gè)通過(guò)既有的棋類知識(shí)來(lái)評(píng)估一個(gè)局面優(yōu)劣的過(guò)程。棋子的價(jià)值評(píng)估,簡(jiǎn)單地說(shuō)就是評(píng)估雙方都有哪些棋子在棋盤(pán)上。一方的棋子總值就是棋盤(pán)上存活的該方棋子乘以棋子價(jià)值的和。用一個(gè)式子表達(dá)如下:SideValue=Sum(PieceNumber×PieceValue)其中PieceNumber是某種棋子的數(shù)量,PieceValue是該種棋子的價(jià)值,Sum是對(duì)各種棋子的總價(jià)值求和。如果紅色的棋子價(jià)值總和大于黑色的價(jià)值總和,意味著紅方的局勢(shì)優(yōu)于黑方。而紅黑雙方的SideValue之差越大,紅方的優(yōu)勢(shì)也就越大。但實(shí)際上真正的博弈程序幾乎不會(huì)僅僅利用上面提到的式子來(lái)評(píng)估棋子價(jià)值。在中國(guó)象棋中需要考慮以下幾個(gè)因素:子力總和子力是指某一棋子本身所具有的價(jià)值。根據(jù)經(jīng)驗(yàn),可以讓一個(gè)車價(jià)值500,一個(gè)馬價(jià)值為300,一個(gè)兵價(jià)值為100等。將的價(jià)值為無(wú)限大(通常用一個(gè)遠(yuǎn)大于其他棋子的數(shù))。棋子位置棋子位置是指某一方的棋子在棋盤(pán)上所占據(jù)的位置。在象棋中,如果一位置落在某方棋子的合法走步上,就可以認(rèn)為唄該方控制。如果某一位置同時(shí)落在雙方的合法走步上,可以根據(jù)雙方控制該位置的棋子數(shù)量及棋子價(jià)值來(lái)決定孰優(yōu)孰劣。能控制更多位置的一方在這項(xiàng)評(píng)分上占優(yōu)勢(shì)。棋子靈活性棋子的靈活性是指棋子的活動(dòng)范圍,通常是越大越好。評(píng)估棋子的靈活性是將一個(gè)棋子的所有合法走法羅列出來(lái),乘上該種棋子每一步的價(jià)值。Mobility=Sum(MoveNumber×MoveValue)其中,MoveNumber是某種棋子的合法走法數(shù)量,MoveVulue是該種棋子每一走法的價(jià)值,Sum是對(duì)所有棋子的靈活性價(jià)值求和。Mobility就是所有棋子的靈活性分?jǐn)?shù)。棋子關(guān)系棋子間的關(guān)系也是估值的重要內(nèi)容之一,將某個(gè)棋子把對(duì)方棋子威脅看成是一個(gè)不利的因素。棋子關(guān)系的評(píng)估應(yīng)考慮到該誰(shuí)走棋的問(wèn)題。如果某個(gè)黑車落在紅馬的合法走步之內(nèi),但此時(shí)輪到黑方走棋,則認(rèn)為黑馬遇到的威脅較輕。而如果此時(shí)輪到紅方走棋,則認(rèn)為黑馬受到的威脅很大,應(yīng)減去一個(gè)相對(duì)較大的值了。棋子間關(guān)系的評(píng)估可以在很大程度上提高估值的精度,通常是博弈估值的必備內(nèi)容。分析關(guān)系時(shí),首先,對(duì)將帥的攻擊保護(hù)應(yīng)分離出來(lái)單獨(dú)考慮,因?yàn)閷?duì)將帥的保護(hù)沒(méi)有任何意義,一旦其被吃掉整個(gè)游戲就結(jié)束了。其次,對(duì)一個(gè)普通子,當(dāng)它既受到攻擊又受到保護(hù)的時(shí)候要注意如下幾個(gè)問(wèn)題:1)攻擊者子力小于被攻擊者子力,攻擊方將愿意換子。2)多攻擊或單保護(hù)的情況,并且攻擊者最小子力小于被攻擊者子力與保護(hù)者子力之和,則攻擊方可能以一子換兩子。3)三攻擊或兩保護(hù)的情況,并且攻擊者子力較小的二者之和小于被攻擊者子力與保護(hù)者子力之和,則攻擊方可能以兩子換三子。當(dāng)然,上述三條只是覆蓋了最常見(jiàn)的幾種情況,但是并不全面。而且,在本程序中并沒(méi)有直接地重新考慮雙方兌子之后的控制區(qū)域及機(jī)動(dòng)性變化情況。4.3.2 搜索算法在搜索過(guò)程中,搜索程序通常會(huì)評(píng)估一個(gè)所有經(jīng)過(guò)的節(jié)點(diǎn)是否已分出勝負(fù),如果是就直接返回估值而不再對(duì)該節(jié)點(diǎn)搜索下去。這一估值過(guò)程與其他的部分分開(kāi)置于兩個(gè)模塊中,已分出勝負(fù)的局面不需要再向下搜索,而其他的估值過(guò)程則要在搜索樹(shù)的末端才執(zhí)行。4.4操作界面對(duì)于界面,我們使用VisualC++建立一個(gè)基于對(duì)話框的MFC應(yīng)用程序。主要工作都在對(duì)話框類的兩個(gè)文件CChessUIDlg.h和CChessUIDlg.cpp下展開(kāi)。(一)初始化部分 BOOLCCChessUIDlg::OnInitDialog(){}OnInitDialog()負(fù)責(zé)的是對(duì)話框的初始化。我們把有關(guān)中國(guó)象棋的棋局初始化情況也放在了這里。初始化的內(nèi)容包括:1)對(duì)引擎部分所用到的變量的初始化;2)對(duì)棋盤(pán)、棋子的貼圖位置的初始化;(二)繪圖部分 voidCCChessUIDlg::OnPaint(){}OnPaint()函數(shù)負(fù)責(zé)的是程序界面的繪圖。因此,在這里我們要完成棋盤(pán)、棋子的顯示。(三)走棋部分(用戶動(dòng)作響應(yīng)部分)為WM_LBUTTONDOWN消息添加消息響應(yīng)事件,可得到如下函數(shù): voidCCChessUIDlg::OnLButtonDown(UINTnFlags,CPointpoint){}當(dāng)用戶在窗口客戶區(qū)按下鼠標(biāo)左鍵時(shí),程序就會(huì)調(diào)用OnLButtonDown(UINTnFlags,CPointpoint)函數(shù)來(lái)進(jìn)行響應(yīng)。其中第二個(gè)參數(shù)CPointpoint是我們?cè)诒境绦蛑兴玫降?,它給出了當(dāng)鼠標(biāo)左鍵被按下時(shí),鼠標(biāo)指針的位置坐標(biāo)。OnLButtonDown函數(shù)處理如下兩種操作:1)如果用戶點(diǎn)擊鼠標(biāo)的位置落在己方的棋子上,表示用戶選中了該棋子,下一步將移動(dòng)該子進(jìn)行走棋。2)如果之前用戶已經(jīng)選過(guò)了棋子,那么這一次的點(diǎn)擊表達(dá)了用戶的一次走棋過(guò)程。在收到用戶傳達(dá)的走棋信息后,先判斷該著法是否合法,如果合法,則執(zhí)行之。緊接著我們調(diào)用引擎的搜索函數(shù)計(jì)算出計(jì)算機(jī)對(duì)用戶著法的應(yīng)著,然后執(zhí)行該應(yīng)著。如此,OnLButtonDown函數(shù)里實(shí)現(xiàn)了人與機(jī)器的對(duì)弈(當(dāng)然每走一步棋,也還需要繪圖函數(shù)來(lái)顯示棋盤(pán)局面的更新)。五 結(jié)論在知道老師的熱心幫助下,經(jīng)過(guò)三個(gè)月的設(shè)計(jì)工作,終于完成了畢業(yè)設(shè)計(jì)任務(wù):中國(guó)象棋對(duì)弈系統(tǒng)——對(duì)弈界面的設(shè)計(jì)與實(shí)現(xiàn)內(nèi)容涉及人工智能的基本理論以及開(kāi)發(fā)MFC應(yīng)用程序的一些基礎(chǔ)知識(shí)。通過(guò)這次比較這個(gè)正規(guī)的軟件開(kāi)發(fā),使我們積累了運(yùn)用理論知識(shí)解決實(shí)際問(wèn)題的經(jīng)驗(yàn)。通過(guò)畢業(yè)設(shè)計(jì),我真正認(rèn)識(shí)到了在系統(tǒng)開(kāi)發(fā)中需求分析的重要性,好的需求分析可以避免造成資源的浪費(fèi)。在此次過(guò)程中,也出現(xiàn)過(guò)許多錯(cuò)誤,通過(guò)找出問(wèn)題所在并解決問(wèn)題的過(guò)程更增加了實(shí)踐的經(jīng)驗(yàn)。在中國(guó)象棋對(duì)弈系統(tǒng)的編寫(xiě)過(guò)程中,使我們對(duì)人工智能也有了一個(gè)初步的了解。由于畢業(yè)設(shè)計(jì)時(shí)間有限,系統(tǒng)難免還存在很多的不足,需要進(jìn)一步的改善??傊?,在這次設(shè)計(jì)中,我學(xué)到了大量的知識(shí),開(kāi)闊了視野,也為日后從事軟件開(kāi)發(fā)工作奠定了堅(jiān)實(shí)的基礎(chǔ)。謝 辭首先我要感謝王碩老師。在論文選題、材料的搜集整理及修改過(guò)程中他給予了我悉心的指導(dǎo)和關(guān)懷,對(duì)我的畢業(yè)設(shè)計(jì)十分地負(fù)責(zé)。不僅如此,王老師時(shí)時(shí)關(guān)心我的畢業(yè)設(shè)計(jì)的進(jìn)度,經(jīng)常與我聯(lián)系,進(jìn)行交流與討論。王老師學(xué)識(shí)淵博,治學(xué)嚴(yán)謹(jǐn),平易近人,在整個(gè)畢業(yè)設(shè)計(jì)中給予我很多好的建議。當(dāng)我遇到難題無(wú)法解決時(shí),他總能耐心的給我講解,使我能夠如期完成中國(guó)象棋對(duì)弈系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。我由衷地感謝王碩老師對(duì)本次畢業(yè)設(shè)計(jì)所傾注的大量心血!同時(shí),我要感謝數(shù)學(xué)與計(jì)算機(jī)學(xué)院的所有老師們,由于他們的傳道、授業(yè)、解惑,讓我學(xué)到了扎實(shí)的計(jì)算機(jī)理論知識(shí),使我在本次畢業(yè)設(shè)計(jì)中可以靈活應(yīng)用,以及為以后的工作和學(xué)習(xí)奠定了堅(jiān)實(shí)的基礎(chǔ)。參考文獻(xiàn)[1]王小春.PC游戲編程(人機(jī)博弈):重慶大學(xué)出版社,2002年[2]陳建春.VisualC++高級(jí)編程技術(shù)——開(kāi)發(fā)實(shí)例剖析:電子工業(yè)出版社,1999年[3]張海藩.軟件工程導(dǎo)論[第四版].北京:清華大學(xué)出版社,2003年[4]陸汝.人工智能:北京科學(xué)出版社,1995年[5]馬憲民.人工智能的原理與方法:西北工業(yè)大學(xué)出版社,2006年[6]蔡自興.人工智能基礎(chǔ):高等教育出版社,2005年[7]奧爾費(fèi)耶夫,伍鐵平.人的思維和“人工智能”:中國(guó)社會(huì)科學(xué)出版社,1986年[8]姚領(lǐng)田.精通MFC程序設(shè)計(jì)[專著]:人民郵電出版社,2006年[9]Fran?oisDominicLaramée.國(guó)際象棋程序設(shè)計(jì)(一):引言:/auntyellow/computer/basic_started.htm[10]Fran?oisDominicLaramée.國(guó)際象棋程序設(shè)計(jì)(三):著法的產(chǎn)生:/auntyellow/computer/basic_movegen.htm[11]Fran?oisDominicLaramée.國(guó)際象棋程序設(shè)計(jì)(四):基本搜索方法:/~auntyellow/computer/basic_search.htm[12]Fran?oisDominicLaramée.國(guó)際象棋程序設(shè)計(jì)(六):局面評(píng)估函數(shù):詳見(jiàn)/auntyellow/basic_evaluation.htm[13]DavidEppstein.棋盤(pán)的表示:/auntyellow/computer/struct_intro.htm[14]DavidEppstein.最小-最大和負(fù)值最大搜索:詳見(jiàn)/auntyellow/search_intro1.htm[15]DavidEppstein.Alpha-Beta搜索:詳見(jiàn)/auntyellow/search_intro2.htm基于C8051F單片機(jī)直流電動(dòng)機(jī)反饋控制系統(tǒng)的設(shè)計(jì)與研究基于單片機(jī)的嵌入式Web服務(wù)器的研究MOTOROLA單片機(jī)MC68HC(8)05PV8/A內(nèi)嵌EEPROM的工藝和制程方法及對(duì)良率的影響研究基于模糊控制的電阻釬焊單片機(jī)溫度控制系統(tǒng)的研制基于MCS-51系列單片機(jī)的通用控制模塊的研究基于單片機(jī)實(shí)現(xiàn)的供暖系統(tǒng)最佳啟停自校正(STR)調(diào)節(jié)器單片機(jī)控制的二級(jí)倒立擺系統(tǒng)的研究基于增強(qiáng)型51系列單片機(jī)的TCP/IP協(xié)議棧的實(shí)現(xiàn)基于單片機(jī)的蓄電池自動(dòng)監(jiān)測(cè)系統(tǒng)基于32位嵌入式單片機(jī)系統(tǒng)的圖像采集與處理技術(shù)的研究基于單片機(jī)的作物營(yíng)養(yǎng)診斷專家系統(tǒng)的研究基于單片機(jī)的交流伺服電機(jī)運(yùn)動(dòng)控制系統(tǒng)研究與開(kāi)發(fā)基于單片機(jī)的泵管內(nèi)壁硬度測(cè)試儀的研制基于單片機(jī)的自動(dòng)找平控制系統(tǒng)研究基于C8051F040單片機(jī)的嵌入式系統(tǒng)開(kāi)發(fā)基于單片機(jī)的液壓動(dòng)力系統(tǒng)狀態(tài)監(jiān)測(cè)儀開(kāi)發(fā)模糊Smith智能控制方法的研究及其單片機(jī)實(shí)現(xiàn)一種基于單片機(jī)的軸快流CO〈,2〉激光器的手持控制面板的研制基于雙單片機(jī)沖床數(shù)控系統(tǒng)的研究基于CYGNAL單片機(jī)的在線間歇式濁度儀的研制基于單片機(jī)的噴油泵試驗(yàn)臺(tái)控制器的研制基于單片機(jī)的軟起動(dòng)器的研究和設(shè)計(jì)基于單片機(jī)控制的高速快走絲電火花線切割機(jī)床短循環(huán)走絲方式研究基于單片機(jī)的機(jī)電產(chǎn)品控制系統(tǒng)開(kāi)發(fā)基于PIC單片機(jī)的智能手機(jī)充電器基于單片機(jī)的實(shí)時(shí)內(nèi)核設(shè)計(jì)及其應(yīng)用研究基于單片機(jī)的遠(yuǎn)程抄表系統(tǒng)的設(shè)計(jì)與研究基于單片機(jī)的煙氣二氧化硫濃度檢測(cè)儀的研制基于微型光譜儀的單片機(jī)系統(tǒng)單片機(jī)系統(tǒng)軟件構(gòu)件開(kāi)發(fā)的技術(shù)研究基于單片機(jī)的液體點(diǎn)滴速度自動(dòng)檢測(cè)儀的研制基于單片機(jī)系統(tǒng)的多功能溫度測(cè)量?jī)x的研制基于PIC單片機(jī)的電能采集終端的設(shè)計(jì)和應(yīng)用基于單片機(jī)的光纖光柵解調(diào)儀的研制氣壓式線性摩擦焊機(jī)單片機(jī)控制系統(tǒng)的研制基于單片機(jī)的數(shù)字磁通門(mén)傳感器基于單片機(jī)的旋轉(zhuǎn)變壓器-數(shù)字轉(zhuǎn)換器的研究基于單片機(jī)的光纖Bragg光柵解調(diào)系統(tǒng)的研究單片機(jī)控制的便攜式多功能乳腺治療儀的研制基于C8051F020單片機(jī)的多生理信號(hào)檢測(cè)儀基于單片機(jī)的電機(jī)運(yùn)動(dòng)控制系統(tǒng)設(shè)計(jì)Pico專用單片機(jī)核的可測(cè)性設(shè)計(jì)研究基于MCS-51單片機(jī)的熱量計(jì)基于雙單片機(jī)的智能遙測(cè)微型氣象站MCS-51單片機(jī)構(gòu)建機(jī)器人的實(shí)踐研究基于單片機(jī)的輪軌力檢測(cè)基于單片機(jī)的GPS定位儀的研究與實(shí)現(xiàn)基于單片機(jī)的電液伺服控制系統(tǒng)用于單片機(jī)系統(tǒng)的MMC卡文件系統(tǒng)研制基于單片機(jī)的時(shí)控和計(jì)數(shù)系統(tǒng)性能優(yōu)化的研究基于單片機(jī)和CPLD的粗光柵位移測(cè)量系統(tǒng)研究單片機(jī)控制的后備式方波UPS提升高職學(xué)生單片機(jī)應(yīng)用能力的探究基于單片機(jī)控制的自動(dòng)低頻減載裝置研究基于單片機(jī)控制的水下焊接電源的研究基于單片機(jī)的多通道數(shù)據(jù)采集系統(tǒng)基于uPSD3234單片機(jī)的氚表面污染測(cè)量?jī)x的研制基于單片機(jī)的紅外測(cè)油儀的研究96系列單片機(jī)仿真器研究與設(shè)計(jì)基于單片機(jī)的單晶金剛石刀具刃磨設(shè)備的數(shù)控改造基于單片機(jī)的溫度智能控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)基于MSP430單片機(jī)的電梯門(mén)機(jī)控制器的研制基于單片機(jī)的氣體測(cè)漏儀的研究基于三菱M16C/6N系列單片機(jī)的CAN/USB協(xié)議轉(zhuǎn)換器基于單片機(jī)和DSP的變壓器油色譜在線監(jiān)測(cè)技術(shù)研究基于單片機(jī)的膛壁溫度報(bào)警系統(tǒng)設(shè)計(jì)基于AVR單片機(jī)的低壓無(wú)功補(bǔ)償控制器的設(shè)計(jì)基于單片機(jī)船舶電力推進(jìn)電機(jī)監(jiān)測(cè)系統(tǒng)基于單片機(jī)網(wǎng)絡(luò)的振動(dòng)信號(hào)的采集系統(tǒng)基于單片機(jī)的大容量數(shù)據(jù)存儲(chǔ)技術(shù)的應(yīng)用研究基于單片機(jī)的疊圖機(jī)研究與教學(xué)方法實(shí)踐基于單片機(jī)嵌入式Web服務(wù)器技術(shù)的研究及實(shí)現(xiàn)基于AT89S52單片機(jī)的通用數(shù)據(jù)采集系統(tǒng)基于單片機(jī)的多道脈沖幅度分析儀研究機(jī)器人旋轉(zhuǎn)電弧傳感角焊縫跟蹤單片機(jī)控制系統(tǒng)基于單片機(jī)的控制系統(tǒng)在PLC虛擬教學(xué)實(shí)驗(yàn)中的應(yīng)用研究基于單片機(jī)系統(tǒng)的網(wǎng)絡(luò)通信研究與應(yīng)用基于PIC16F877單片機(jī)的莫爾斯碼自動(dòng)譯碼系統(tǒng)設(shè)計(jì)與研究基于單片機(jī)的模糊控制器在工業(yè)電阻爐上的應(yīng)用研究基于雙單片機(jī)沖床數(shù)控系統(tǒng)的研究與開(kāi)發(fā)基于Cygnal單片機(jī)的μC/OS-Ⅱ的研究基于單片機(jī)的一體化智能差示掃描量熱儀系統(tǒng)研究基于TCP/IP協(xié)議的單片機(jī)與Internet互聯(lián)的研究與實(shí)現(xiàn)變頻調(diào)速液壓電梯單片機(jī)控制器的研究\t"_

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論