中國象棋軟體製作感想

來源:互聯網
上載者:User

小時候大概四五年級的時跟著我姥爺學下象棋,到後來上高中的時候可以下過我姥爺了,感覺很得意,我姥爺說人老了,腦子不好使了…就象我現在寫的這個軟體一樣,它是我寫出來的,曆時一個月,到現在我完全不是他的對手了,很多時候跟它下,都能知道它下一步走什麼,感覺自己有很大的優勢,可就是不管怎麼努力都不能把優勢轉成勝勢!最後一點一點的我的攻勢被瓦解,然後輸掉整盤棋!我絕對是個初學機器博弈的菜鳥,但我象棋水平還不算太業餘,結果我輸給了自己做的程式,我就在想,要是全人類中的頂尖高手會不會做出挑戰全人類無敵的軟體呢?很可怕,人的一切智慧的行為都是博弈的行為!說下初學機器搏弈的心得,有共同興趣的同志可以一起探討,我無嘗提供我做的這個象棋的原始碼,不過沒我給你解釋們很難看的懂,不是太難,而是太亂,哈哈!一個完整的程式要有:局面的表示,由於運算量巨大,要使用一維數組,二維的話運算時間幾乎為平方倍!棋子的表示,建意使用整數型別,還是為了速度,我曾花了大概十幾天的時間來加快運算速度,這是件蛋疼的事情!還有用一個二維數組來關聯一個局面中紅黑方棋子的位置,這在走法產生時將節約大量時間,我的程式中沒有用到這個,我的程式目前只搜到六層,就是深度,七層的話大概每走一部運算40多秒,這是無法忍受的!再就是走法產生涵數,先找到一個本方棋子,根據棋子類型產生所有符合規則的走法。再就是搜尋引擎,就是個基於曆史啟發的阿爾發貝塔搜尋涵數,基本思想就是:把能走的都走一遍試試,然後就是讓對方把能走的都走下,這樣下去,從最底層的那一步往上反向推算,再該程式走的那些走法裡選對程式最有利的走,再該對方走的時候對方肯定會選對程式最不利的走發走,這樣展開就會找到最好的走發,然後讓程式走這個走發,舉個例子:比如開局,程式用紅子,有四十五種走發,從裡面取一種走,然後讓對方走他所有能走的中的一種,平均也是四十多種,這樣程式走一步,對手走一步就會有大越四十乘四十種可能,這就是所謂的深度為二,深度為三就是當對手走一步之後再讓程式走一步,這樣深度為三大越就會有四十乘四十乘四十等於64000種可能,為四就是2560000種,指數增長的東西是可怕的,除了上帝誰都追不上,這就是為何我們做這類程式到處都會講效率!回到原來的例子,最後就是讓程式從這2560000種可能種選出最好的情況走,怎麼選擇?如何讓程式知道哪種情況對自己有利?這就是局面評估涵數,好的評估涵數能避免搜尋部分大量無畏的搜尋從而節約時間,回頭我們再說阿爾發貝塔怎麼來加快搜尋。我們知道過河的兵比不過河的兵貴重,當頭兵比邊兵貴重,在九宮中心的兵甚至比一個馬還要貴重,這樣每種棋子就會有一個與絕對位置相關的價值,稱為子力價值,我的程式直接照搬了開源的象眼軟體的子力價值表,當然還有很多因素決定一個局面的好壞,我沒有做研究,我把這個任務交給了搜尋引擎,我們回頭說搜尋,試想下,如果我們的搜尋深度為八大概有幾種可能?6553600000000種!這樣個天文數字既使電腦素度很快了也要很長時間,我們假設一秒可以評價五十萬種情況的好壞,要評價完這麼多種情況大約需要207813年,那時候你都成化石了!那該怎麼辦?剪枝!這麼多情況中有很多是不用評價好壞的,比如對方將軍,我們就沒必要考慮毫無關係的棋子該怎麼走,由那幾種毫無關係的走發延伸出來的所有走發都不用考慮,因為你選擇他們的話對方就會吃掉你的將,你就掛了!就是說我們知道那些走發很不好就行了,沒有必要知道到底有多壞!這就是阿爾發貝塔剪枝,我們沒必要考慮那些已經足夠壞的情況了。但是這有一個問題,如果我們已經考慮了所有情況才開始剪枝,那將是毫無意義的!因為我們已經花了大量時間去考慮所有情況了,但要是我們剛搜尋沒多久就可以剪枝了,那就會剪掉大量不用考慮的情況,節約大量時間!這就是說待搜尋的情況的排序是關鍵,如何排序?根據什麼排序?曆史啟發!有些比較好的走發的後續走發中往往會有更好的走發(對對手來說就是壞),我們就優先搜尋他就會盡量早的剪枝,一個多次被搜尋到並認為是好的走法我們就優先搜尋他,這就是所謂的曆史啟發!總的來講就這麼多,但這還不行,還有許多細東西,這隻是個架構,比如將軍的時候你就得多往後想幾步,看會不會將死,就是深度要在原來的基礎上加一,這就是將軍延伸,還有胡相吃子就是換子的時候也要延伸,這就是兌子延伸,再就是檢測重複,有很多都是詢環出現的,我們沒必須都考慮,還有就是迭代加深實現時間控制!我考,感想都快寫成教程了!有這方面興趣的加我QQ377693703共同學習下哈

 

 

軟體:http://files.cnblogs.com/lipf/%E4%B8%AD%E5%9B%BD%E8%B1%A1%E6%A3%8B.zip

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.