1. 程式人生 > >【國象AI】評估函式(一)

【國象AI】評估函式(一)

先做個框=感覺有些是應該由搜尋樹去考慮的、也沒做過這些所以有點困擾
思路有點亂一邊整一邊寫……
在很努力把每種情況分開來但感覺還是蠻難的- -而且某隻鳥不下棋也很久了(咳咳)本來也下不好……

一邊寫一邊聽歌“棋局與人生,哪個更多劫?”迷之滄桑感。sigh

以下我執白。白先。

重要棋子

定義一些需要深搜的\或者說作為一個人類(捂臉)會需要額外關注的、
或許在搜尋的時候不一定用得上

  • 敵方移動之後直接會攻擊到的子、需要想辦法保護或者移動
  • 下一步會造成將軍的子、這種棋子很可能將要發起進攻或者存在某些潛在威脅,比如牽制、閃將

子力

一些可能沒有直接體現出來但是在長期看起來會有蠻多加分的棋

基礎價值

後900,車500,象325,馬300,兵100

具體價值

這個部分是對,己方每種棋子進行分析。暫時不考慮對方以及自己的其他棋子情況。

然後感覺還是,兵馬的具體情況影響比較大,象在中間。
然後我在想要怎麼把具體的情況區分開來……比如馬在靠近中間的話會帶來基本會帶來(具體價值&機動性&子力交換)一系列提升、在思考要怎麼處理。

在這個過程中順便更新一下佔據的棋盤啥的(比如我可能會用一個int【64】來記錄一下每個棋盤能被我直接攻擊到的棋子的子力的最小值,如果下面需要的話還可以接著補充嘛= =)

兵Pawn

兵形
- 疊兵
我對疊兵的態度近於棄療……太煩了走起來像毛毛蟲一點都不優雅……
- 孤兵
如果不是通路兵的話一隻孤零零的也很危險、當然如果是通路兵的話有那個價值特意找棋子來保護

然後這兩種應該要獨立在,是否被兵保護之外。
就沒被保護的兵,可能是一排兵的最後一個可能是孤兵……但孤兵和疊兵應該要有額外的扣分因為,一串兵的最後一隻不容易在斜線上和馬線上威脅。

距離底線的距離、
因為越近越容易升變,這個最後的價值= 我覺得我會考慮用對方子力最低的為一個基礎根據距離調整(因為對方要是沒有馬象了就只能用車換了- -思路簡單)//這個不知道算不算髮展價值了……裝作不算吧

馬Knight

馬的攻擊力受位子影響會非常大,馬的棋子位置從2-8相差是最大的
這個和機動性不一樣的在於馬提供保護攻擊也在考慮範圍之內。

象Bishop

象的話差距也會有一倍那麼多……不過象和馬的不一樣是(馬的進攻不會被擋住),象的憋屈基本上都是……被別人家的兵擋了、被自己家的兵擋了……所以在這裡相對受到位置影響會小一點。
然後這裡雙象我覺得可以給加分、單象的價值隨著進入殘局會減的很明顯(有可能剩了一直白象然後對方所有子都在黑格了=)

王King

王的易位保留破壞扣分
王前的兵形(就那種開了個天窗的)

綜合價值

這裡考慮相互影響的情況
這裡主要是,受到對方棋子的影響 = =

兵Pawn

兵 - 兵
通路兵給加分

馬Knight

兵 - 馬
馬的一個優勢位置就是(周圍的兩個兵都走遠了),就是說兵沒法直接驅趕馬的情況下,馬會處於一個相對安全的位置。然後要是這個馬還在比較中間的話,威力就會比較大。
對於中局比較適用、(然而中局殘局的分界有點難辦)

象Bishop

兵 - 象
自己的兵感覺起來,同色的可以給保護 - 不同色的不會擋路,自己的棋子的影響要比對方的小很多就不打算考慮了- -而且考慮到基本上因為【對兵】兩邊的兵色會是反的所以也就只考慮對方的兵的情況了。
還沒想好具體咋做、就對方與自己同色的兵越多這顆象價值越低。
然後要是有,自己的兵擋住的情況,應該會在後面的機動性中體現。

車Rook

車的話,佔據通路適當加分吧,因為不單單是自己的移動區域大還有限制別人的移動區域。
車的優勢在殘局才能體現的完全。在開局車出不來中局殺傷力不算大。

後Queen

後的話機動性一定要考慮0 0 以前玩的一個遊戲我經常可以抓住它的後。

王King

王前的正常兵形我在想要怎麼表示……
覺得王的評價沒法和整個局勢獨立開來。換句話說王到了後期成為我進攻的子力,但這個後期要怎麼界定

空間

這裡先簡單的列為,單邊佔據的格子數(佔有或者直接能攻擊到)之差。
不知道會不會出現為了佔據更大的空間而放棄進攻

空間感覺應該算為數不多的整體評價指標了。但確實也有潛在的風險要考慮,比如說兩個車相互保護的話犧牲的空間應該說是蠻多的但因為(人類)比較容易顧此失彼= =

然後這個在想一些別的 - - 比如可不可以通過、王附近的位置給分評價高來定義王的安全性。

機動性

這個聽說原則性影響不超過150分(原來兵那麼重要啊)
將軍的時候對機動性的評價

這應該也是歸於,單獨的每個棋子的分值。
這一點我可能不想單純的從著法數來定、至少我感覺兵的著法數沒有統計的必要,大概可以用(兵的基礎分+疊兵的扣分)來表示了

然後我想的是,按照每個棋子的著法數來判斷,感覺對於一步棋子的落點是自己的棋子還是對方的棋子應該要給不一樣的判斷。

然後還有一點就是長射程的棋子再考慮不同棋子的阻隔作用對於某一顆棋子的影響。比如說比較穩定的兵不太會移動這樣,從長遠來看被這樣的兵擋住的棋子不太可能有未來(。。)

發展評價

接近於預測向的、最近這幾步就會發生的事情,我覺得這個要是搜尋做得好的話可以不用?(tan90’)

子力交換

這裡的判斷肯定得和,接下來是誰走有關係吧= =
像後這種棋子尷尬的地方就是基本一被抓就只能跑- 自己子力太高了

這一項還有就是,到底用哪個層次的價值=

加分項

黑方無保護並且被白方攻擊的子的子力

黑方有保護但其子力比攻擊子力高,減去子力的差(就是交換)
在這種情況下還應該考慮一下,交換之後的局面評估,以及當前評價(佔優方更可能在局面評分差改動不大的情況下進行子力交換)

這裡還有一個勝負判斷,如果黑的King在被攻擊的位置上就可以返回+INF了。

減分項

我覺得這裡不能完全和上面相反……哪一方移動,應該是納入評價範圍內的。
然後所以減分應該是:

上面兩個的相反情況 -
比如捉雙的時候,基本上會選擇躲子力大的那個,所以說減去價值小的那個。
(這種我想想也應該不會超過仨?)
但是這個還要判斷下去就有點麻煩……因為還要考慮,比如反正逃不掉了可以再隨便吃顆子這樣……

進攻訊號

這個可能會作為一個單獨的評判指標,當它大於一定值的時候給這一枝一個附加的訊號、至少告訴他們應該往這個方向搜尋。
(又要瞎定指標了)、比方說王在兩步之內能夠達到的距離能夠通過排程棋子覆蓋的話可以給一些加分(具體再議再議、)

藐視因子