freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

五子棋人工智能人機(jī)博弈畢業(yè)設(shè)計(jì)-資料下載頁

2025-06-26 04:20本頁面
  

【正文】 (int y=0。y15。y++){ for(int x=0。x15。x++){ key^=hash32[board[y][x]][y][x]。 } } return key。}該函數(shù)根據(jù)當(dāng)前棋局棋盤上各位置的棋子狀態(tài)使用hash32數(shù)組中的不同隨機(jī)數(shù)進(jìn)行異或運(yùn)算,生成hash碼,從而保證不同的棋局hash碼盡可能不同。上面僅列出了hash碼的生成方法,校驗(yàn)值的方法一樣,但使用64位的隨機(jī)數(shù)組。另一個(gè)版本的hash生成函數(shù)需要父節(jié)點(diǎn)的hash值以及下子的坐標(biāo),可以知道,父節(jié)點(diǎn)與子節(jié)點(diǎn)僅一個(gè)棋盤坐標(biāo)上的棋子不同,僅需要進(jìn)行一次has運(yùn)算,所以可以大大簡化計(jì)算,其實(shí)現(xiàn)如下:unsigned long hashCode(unsigned long parHash,int side,int y,int x){ return parHash^ hash32[side][y][x]。}校驗(yàn)碼的生成方式一樣的就不再說明了。另外兩個(gè)函數(shù)getHashItem與setHashItem顧名思義,分別是根據(jù)hash碼取得與設(shè)置hash表元素的值。使用hash方法的Alphabeta截枝搜索在本設(shè)計(jì)中將hash表與排序的alphabeta算法相結(jié)合,具體實(shí)現(xiàn)在CHashAlphaBeta類中(),與排序的AlphaBeta算法大體差不多,但在每一個(gè)節(jié)點(diǎn)的搜索中,加入以下操作,一,檢查該節(jié)點(diǎn)是否已經(jīng)存在于hash表中,若存在并且深度比當(dāng)前的搜索深度大,則該節(jié)點(diǎn)不用搜索,直接返回表中的值。二、計(jì)算出該節(jié)點(diǎn)子節(jié)點(diǎn)的hash值和校驗(yàn)值,查找表中是否有子節(jié)點(diǎn),若有,則用其值作為預(yù)估值,沒有的話用估值函數(shù)估值作為預(yù)估值然后排序。三、每次子節(jié)點(diǎn)返回后,更新哈稀表。167。 有限范圍限定其實(shí),在棋盤上很多位置都是不必要去搜索它的得分的,我們這里采用一種簡單的判定方法,即如果在某一坐標(biāo)范圍內(nèi)都不存在棋子,則我們認(rèn)為這個(gè)位置沒有下子的意義,不必要搜索。在本設(shè)計(jì)中半徑范圍為2內(nèi)都沒有棋子,則不搜索。本設(shè)計(jì)中將有限范圍限定與hash表、預(yù)估排序的alphabeta結(jié)合,其實(shí)現(xiàn)類為CRangeLimit,它繼承自CHashAlphaBeta。需要改變的代碼并不多,在將走法放入要排序的數(shù)組前先檢查該走法的坐標(biāo)范圍為2內(nèi)有沒有棋子,有則加入待排序數(shù)組,否則不加入。167。 多核優(yōu)化現(xiàn)在,計(jì)算機(jī)已經(jīng)具有一定程度的智能了,但該程序效率仍然不高,當(dāng)深度為3時(shí),現(xiàn)在的計(jì)算機(jī)可能仍然要花費(fèi)以分為計(jì)時(shí)間,第一步用時(shí)達(dá)85秒,現(xiàn)代的計(jì)算機(jī)已經(jīng)向多核發(fā)展,4核已經(jīng)很普及,所以,可以考慮讓每個(gè)cpu核心都能能發(fā)揮作用。本程序采用OpenMP優(yōu)化。一、 OpenMP簡介OpenMP是由OpenMP Architecture Review Board牽頭提出的,并已被廣泛接受的,用于共享內(nèi)存并行系統(tǒng)的多線程程序設(shè)計(jì)的一套指導(dǎo)性注釋(Compiler Directive)。二、 OpenMP的使用要在Visual C++ 2005 中使用OpenMP其實(shí)不難,只要將 Project 的Properties中C/C++里L(fēng)anguage的OpenMP Support開啟(參數(shù)為 /openmp),就可以讓VC++2005 在編譯時(shí)支持OpenMP 的語法了;而在編寫使用OpenMP 的程序時(shí),則需要先include OpenMP的頭文件:。在所有的CSearch類的派生類中的Search函數(shù)中遍歷每一種走法的for語句中使用了OpenMP:pragma omp parallel for for(int i=0。i15*15。i++){//償試每一個(gè)位置這一循環(huán)試著在棋盤上的每個(gè)位置上下子,pragma omp parallel for表示后面的for語句可以并行執(zhí)行。但這些并行執(zhí)行必須在for循環(huán)結(jié)束時(shí)同步。三、 需要注意的問題所有并行執(zhí)行需要注意的問題便是共享變量的讀寫,在并行的for循環(huán)中的共享變量(在for循環(huán)外定義的變量)有best和pos,并且對(duì)它們進(jìn)行了寫操作,所以必須定義臨界區(qū)(pragma omp critical[臨界區(qū)名])。另外,在并行運(yùn)行中所調(diào)用的函數(shù)也應(yīng)該注意共享變量的問題,上面的for循環(huán)中調(diào)用了generate,generate中除估值引擎的指針pe外都使用的是局部變量,而pe中所用的估值函數(shù)value()也全都未涉及共享變量寫的問題,所以就不需要臨界區(qū)操作了。 第8章 總結(jié)結(jié)論167。 各算法效率對(duì)比下表給出了各種算法的效率(占有用cpu時(shí)間)。計(jì)算機(jī)為白方,黑方先下。計(jì)算機(jī)為單核的pentium M 。算法123456平均每步耗時(shí)極大極小值92183275361449544AlphaBeta182843597695PVS131624364965估值排序AlphaBeta112345估值排序PVS112345Hash+估值排序+AlphaBeta122345有限范圍限定+Hash+估值排序+AlphaBeta000111 各搜索算法在深度3時(shí)cpu耗時(shí) 各搜索算法在深度4時(shí)cpu耗時(shí)算法123456平均每步耗時(shí)估值排序AlphaBeta293135384143估值排序PVS2932384246488Hash+估值排序+AlphaBeta273541434648有限范圍限定+Hash+估值排序+AlphaBeta011222因?yàn)闃O大極小值算法不截枝,由極大極小值算法可以知道,當(dāng)深度為3時(shí),白方的第一步需要計(jì)算224*223*222=11089344個(gè)葉子節(jié)點(diǎn),故計(jì)算機(jī)每秒能計(jì)算大約11089344/92=120536,即每秒大約計(jì)算12萬步,可見,估值函數(shù)的效率并不太高。從表()可以看出,極小窗口算法PVS效率是比AlphaBeta效率要高的,因?yàn)樗婚_始就用很小的窗口搜索,但加入預(yù)估值排序后PVS算法比AlphaBeta算法效率要低一些了,大概是因?yàn)轭A(yù)估值的關(guān)系,一開始搜索到了比較好的節(jié)點(diǎn),減小了AlphaBeta的窗口,剪枝效率已經(jīng)很高,而PVS算法畢竟要多搜索一次,故反而不如預(yù)估值排序的AlphaBeta算法。當(dāng)引入預(yù)估值排序后,由于一開始就搜索了比較好的走法,所以AlphaBeta的截枝效率大大地提高,加入hash表后效率基本差不多,但第2步卻花了較長時(shí)間,再看后面的幾步的時(shí)間差,基本上是差不多的。速度最快的是“有限范圍限定+Hash+估值排序+AlphaBeta”,因?yàn)橛行Х秶薅ù蟠鬁p少了搜索范圍。 綜上所述,計(jì)算機(jī)博弈中的搜索算法是以AlphaBeta截枝為基礎(chǔ)的,其截枝效率的高低取決于AlphaBeta表示的窗口大小,窗口越小,截枝效率越高,其后的各種算法都是圍繞減小AlphaBeta的這個(gè)窗口來進(jìn)行改進(jìn)的。167。 成果與不足通過本次畢業(yè)設(shè)計(jì),基本上掌握了博弈算法的構(gòu)成,包括走法產(chǎn)生,估值,和搜索三個(gè)部分,并一一對(duì)這幾部分進(jìn)行了實(shí)現(xiàn),特別對(duì)搜索算法進(jìn)行實(shí)現(xiàn),掌握了基本的AlphaBeta算法原理,能夠初步地根據(jù)實(shí)際情況運(yùn)用AlphaBeta算法并作一定程度的改進(jìn)。現(xiàn)在計(jì)算機(jī)向著并行處理方向發(fā)展,在本次設(shè)計(jì)中也考慮了并行處理,通過學(xué)習(xí)OpenMP的使用,初步了解和掌握了并行處理的一些基本原理,如同步、互斥、共享變量等使用方法。同時(shí),在實(shí)現(xiàn)過程中對(duì)軟件工程的一些原理也進(jìn)行了學(xué)習(xí),初步掌握了軟件開發(fā)的分析、設(shè)計(jì)、實(shí)現(xiàn)的過程,為將來的進(jìn)一步學(xué)習(xí)實(shí)踐打下了一定的基礎(chǔ)。通過本次實(shí)踐,也發(fā)現(xiàn)了自己很多的不足,自己的實(shí)踐能力還需要進(jìn)一步提高,在設(shè)計(jì)過程中經(jīng)驗(yàn)不中,以后需要多多學(xué)習(xí),特別是編寫的代碼效率不高。如估值部分的效率還不高,需要進(jìn)一步優(yōu)化。采用Hash表的算法效率還不太高,需要進(jìn)一步優(yōu)化。對(duì)于并行的搜索算法沒有進(jìn)行深入的探索,這也是今后努力改進(jìn)的一個(gè)方向。人機(jī)界面還需要改進(jìn),不太美觀計(jì)算機(jī)在思考時(shí)程序會(huì)出現(xiàn)假死狀態(tài)。上述這些方面都當(dāng)前應(yīng)該改進(jìn)的方面,當(dāng)然,不足之處還有很多,計(jì)算機(jī)科學(xué)知識(shí)浩如大海,在今后我將繼續(xù)努力在計(jì)算機(jī)科學(xué)領(lǐng)域?qū)W習(xí)探究。參考文獻(xiàn)1.《MFC Windows 程序設(shè)計(jì)》清華大學(xué)出版社 Jeff Prosise著2003年7月 2.《數(shù)據(jù)結(jié)構(gòu)》嚴(yán)蔚敏 吳偉民著著1998年5月3.《PC游戲編程(人機(jī)博弈)》重慶大學(xué)出版社 王小春著2002年6月4.《深入淺出MFC第2版》 華中科技大學(xué)出版社 侯俊杰 著2001年2月++面向?qū)ο蟪绦蛟O(shè)計(jì) 清華大學(xué)出版社 譚浩強(qiáng)2006年1月6.《OpenMp API用戶指南》 百度文庫 Sun studio2011年1月7.《軟件工程》機(jī)械工業(yè)出版社 陸麗娜著2000年3月 8.《連珠五子棋入門》金盾出版社 彭建國,那威著2001年7月 9.《人工智能及其應(yīng)用》 清華大學(xué)出版社 蔡自興1999年1月36致 謝在論文即將完成之際,本人在此向所有關(guān)心我的及幫助我的老師和同學(xué)們致以最真誠的感謝。在本次畢業(yè)設(shè)計(jì)中,我從指導(dǎo)老師官老師,從選題到論文結(jié)束,官老師都給了我不少幫助,提出了許多寶貴意見,沒有他的指導(dǎo),我就不能較好的完成課題設(shè)計(jì)的任務(wù)。另外,我還要感謝在這幾年來對(duì)我有所教導(dǎo)的老師,他們孜孜不倦的教誨不但讓我學(xué)到了很多知識(shí),而且讓我掌握了學(xué)習(xí)的方法,更教會(huì)了我做人處事的道理,在此表示感謝。
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1