1. 程式人生 > >人工智慧:博弈--人機中國象棋

人工智慧:博弈--人機中國象棋

為了應付某人的畢設,研究過一段時間的人機象棋,現來談談詳細的演算法思路和流程。
注:本文沒有任何干貨原始碼,寫過二層遍歷、基本評價函式與所謂“深度學習”演算法下的人機象棋,棋力之弱小,就不獻醜了。

首先,程式需要囊括象棋的基本著法,比如馬走“日”字,相飛“田”,實現人人象棋是進行人機象棋的第一步。
進入正題,試想如何實現象棋的AI?按著人的思路,很容易想到“博弈樹”,所謂博弈樹,就是一顆大樹,根節點就是開局棋盤,第二層節點就是走了一步棋的棋盤,第三層棋盤就是在二層棋盤下對方走一步棋的棋

盤,以此類推。這顆樹異常龐大,龐大到囊括了象棋所有的可能性,據統計,象棋每一步平均有50-70種走法,而平均30幾回合決出勝負,所以一共大概有60的30次方種走法。大膽想象一下,如果計算機能完全模擬並

記憶這顆完全博弈樹,那麼無論什麼棋局,計算機都能找到對應的節點,通過對節點後續所有走法的遍歷,回推一個最佳走法,那麼就能保證AI的絕對優勢。
這裡提到一個詞,“遍歷”,人機象棋的一個核心就是遍歷演算法,即從當前棋盤開始,模擬後續的走法,返回最優走法,但是現在的計算機一般能保證的也只是5-10層的遍歷,也就是說只能預測接下來5-10步的發展


==>遍歷演算法的核心就是去模擬所有可能的情況,程式實現並不難,首先遍歷每一個棋子,在遍歷某一個棋子所有可能的走法,如果是多層,則是遞迴遍歷,這是值得推敲的<==
遍歷演算法會產生博弈樹,博弈樹是可以進行剪枝處理的,比如最簡單的剪枝對已經分出勝負的棋局不再遍歷,就可以簡化博弈樹。更加優秀的方法是α-β剪枝等,有興趣可以仔細推敲研究。
說完遍歷,來聊聊評價函式,什麼叫評價函式?對於一個棋盤,怎麼判斷這個棋盤對誰有利,這就需要評價函數了。通過評價函式對棋盤進行評分,分值越大越有利,棋局向分值大的方向發展。
評價函式分為4個部分:
1、棋子自身價值。自身價值不用多說,就是棋子越多局面越有利。且各棋子分值不一,比如車>炮,馬>兵等,注意一般我們令將的分值極大,比如車是100分,將可以設定成10000或者100000等,這樣做是為了讓機器

足夠重視將,及時其他所有棋子都沒了,也要保留將。這種分數評估都是按照經驗來的,我當時按照參考書推薦設定的是炮80,馬70等
2、棋子的位置價值。每一種棋子都有位置矩陣,比如車在原位時位置價值為0,當其出動後,位置價值逐步提升,當車在對面半區尤其是中心位置時,位置得分較高。尤其是兵,當其未過河時,位置得分極低,當其

過河後位置得分突然變高,比棋子本身價值還要高。為什麼要位置價值的原因就是在於不同位置的棋子重要度不一樣。
3、棋子靈活性價值。靈活性指棋子可能的走法,比如兵未過河時只有一種走法,當其過河後就有最多3種走法,走法越多,棋子靈活性越好,得分也就越高。靈活性的計算即遍歷每一個棋子,用走法數乘基本靈活性

價值,最後得到總和就是靈活性得分。靈活性價值的意義在於定義棋子是否有多種走法,是否可以創造多種可能,比如若某一棋子被卡死,那它的價值就非常低。
4、保護威脅價值。威脅價值指若有敵方棋子能吃到己方棋子,則認為這個棋子是受威脅的,平常下棋時這種情況就是快走開,或者用其他棋子保住,或者丟車保帥等,受威脅的棋子需要大量減分,甚至減棋子自身價

值相應的分數,這樣做是為了讓AI能夠保護棋子。而保護價值指己方棋子對棋子的保護,比如連環馬,如果走到連環馬的位置上,將增加保護價值。保護威脅價值的意義在於在進行棋盤進行評價估分時會綜合考慮其

他棋子的位置,敵方會有威脅,己方會有保護作用。
==>評價函式直接決定了棋力大小,定義的各個部分的評價分數不一樣將直接導致棋力不一,重視度不一樣<==
最後,提出“深度學習”演算法,先上個流程圖:

什麼意思?先看虛線框外的內容,就是一個匹配的方法,就是在執行遞迴遍歷和評價函式之前,先與大資料對比庫進行匹配,如果庫裡有對應的資料,則直接用反饋回的走法進行走棋,就節省了遍歷和評估的時間,極大加快速度。

那麼大資料庫怎麼來,就需要用到機器學習方面的內容,遍歷大量棋局,整合最佳走法,每一條對應一個棋局佈局下的最佳走法。

OK,人機象棋介紹完畢,還想再說一句,博弈是AI中一個重要的部分,博弈蘊含很多思想,探究完人機象棋如何實現後,突然發現AI也就這樣了!但是入門容易,優化很難!!!想提升一點速度都是一件不容易的事