查看完整版本: 開局(十)

xianrenb 2017-9-2 03:04 PM

開局(十)

今天還是想到了一些新點子,於是試了修改我的象棋程式。
應該棋力提高了點,但是試殘局時看不出來。
不過試開局時,看來有一點驚喜!

以下是 6 級深的開局:
1:炮八平五
2:馬8進7
3:傌二進三
4:砲2進5
5:傌八進七
6:砲2平5
7:相三進五
8:卒7進1
9:俥九平八
10:馬7進6

車馬象士將士象-車 紅 黑
|+++++++|    
|#+/+\+砲| 帥 將
卒+卒+卒+#+卒 仕 士
+----馬卒-+ 相 象
+-------+ 傌 馬
兵+兵+兵+兵+兵 俥 車
|#傌\相/傌炮| 炮 砲
|+++++++| 兵 卒
+俥相仕帥仕--俥    

11:俥八進七
12:馬2進3
13:俥八平七
14:馬6退5
15:俥七平五
16:象7進5
17:俥一平三
18:車9平7
19:兵七進一
20:車1平2

+車象士將士車-+ 紅 黑
|+++++++|    
|#+/象\+砲| 帥 將
卒+卒+卒+#+卒 仕 士
+-----卒-+ 相 象
+-兵-----+ 傌 馬
兵+#+兵+兵+兵 俥 車
|#傌\相/傌炮| 炮 砲
|+++++++| 兵 卒
+-相仕帥仕俥-+    

首 10 茈郁”C茠 9.1 秒。
首 20 茈郁”C茠 6.6 秒。

驚喜在於第 12 荈簞2進3前後。
黑這樣走,紅吃馬後必然失俥,即是要以一俥換雙馬。
之後論子力而言,黑稍優。
紅若不吃再走俥的話又浪費了一荂C
所以黑這蚨漎O一蚖韌恁C

rhwlam 2017-9-3 02:35 PM

很佩服xianrenb對象棋算法的熱情。
以現時強棋軟如「名手」,即使配上強機計算至25-30層,開局可能也是有所不足。
可否考慮為閣下程序定立一個條件分辨開局和中殘局,再個別對兩者分別用不同的計算機制?這樣應該會好一點。那麼閣下便可專心優化開局的計算方法[color=#ff0000]取代[/color]開局庫,而不用顧慮影響中殘棋力了。

[[i] 本帖最後由 rhwlam 於 2017-9-3 04:47 PM 編輯 [/i]]

xianrenb 2017-9-3 03:58 PM

[quote]原帖由 [i]rhwlam[/i] 於 2017-9-3 02:35 PM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=467197135&ptid=26898919][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]
很佩服xianrenb對象棋算法的熱情。
以現時強棋軟如「名手」,即使配上強機計算至25-30層,開局可能也是有所不足。
可否考慮為閣下程序定立一個條件分辨開局和中殘局,再個別對兩者分別用不同的計算機制?這樣應該會 ... [/quote]

先多謝你的建議。

我相信 25~30 層的計算力某程度上只是宣傳上的計算力。
因為即使用儘各種有效方法,大幅減少不必要的路徑,同時又要保持棋力的話,我看每荋悁雂眴n考慮 3 路分叉選擇。
而 3^25 ~= 8500 億(8.5E11)種路數,根本是天文數字。
除非在硬件上有足夠的資源,否則應該無可能有相關的合理算法。

所以, 25~30 層算力,應該只是某種情況下達到的算力。
例如是連將的情況才有這麼深,其他走法則較淺。
以我所知,象棋小巫師在某些條件下也是可以算出 64 層的情況。
而我的程式, 6 級深也不是 6 層深,在特定條件下會加層數。
而且某程度上與象棋小巫師一樣, 6 層的樹狀搜尋至葉端後,會另加搜尋層數來解決雙方互相連吃的問題。
在我的程式而言,如果不斷互相連吃,中間無閒荂A也是無限制層數,可以算至無棋剩。
所以理論上過 30 茪]不是問題。
其實我也可以修改我的程式做到可連將時有極多層數。
事實上以前測式過的版本當中有 6 級深可以有 30 層以上的算力。
不過之前考慮過,如果取這個方式,算非連將時的棋力對比起來就較弱。
而且將不死時,計算就更加花時間。
所以我才限制連將時的算力。

至於開局庫與殘局庫,我也知道這會使象棋程式算力有很大的差別。
但一來我無資源去取得大量相關資料,二來是我想我的程式與一般程式有種類上的分別。
我的目標就是無開局庫/殘局庫。
某程度上,開局庫/殘局庫是一種程式算法的取巧方式,相等於一早在別處算出答案,要求答案時就立刻拿來答,根本不用算。
而現在我的程式,大概是小數無開局/殘局庫,而又能有一定棋力的程式。

rhwlam 2017-9-3 04:46 PM

不好意思,我打漏了字,可能因此造成誤解:
"這樣應該會好一點。那麼閣下便可專心優化開局的計算方法[color=#ff0000]取代[/color]開局庫"

我的意思是:
開局同樣是"計算"出來,但是是用不同的"計分"法則。
依小弟愚見,真人考慮開局和中殘局也是用不同的方針思考。
謝謝。

xianrenb 2017-9-3 05:34 PM

[quote]原帖由 [i]rhwlam[/i] 於 2017-9-3 04:46 PM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=467204029&ptid=26898919][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]
不好意思,我打漏了字,可能因此造成誤解:
"這樣應該會好一點。那麼閣下便可專心優化開局的計算方法取代開局庫"

我的意思是:
開局同樣是"計算"出來,但是是用不同的"計分"法則。
依小弟愚見,真人考慮開局和中 ... [/quote]

某程度上,現在已是用這個方法。

很久之前,我的程式會以開局後第幾茪坐滿A評定局勢分數的方式會有明顯分別。
但後來一方面加了可輸入局面的功能,一方面我認為目標應是只看局面而不應考慮是第幾荋N能評定局面優劣。
所以,後來的計算分數方式,已修改到只看局面棋子的位置,就有合適的評定。
換句話說,現在我的象棋程式,無開局、中局或殘局之分。

xianrenb 2017-9-3 05:49 PM

[quote]原帖由 [i]rhwlam[/i] 於 2017-9-3 04:46 PM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=467204029&ptid=26898919][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]
不好意思,我打漏了字,可能因此造成誤解:
"這樣應該會好一點。那麼閣下便可專心優化開局的計算方法取代開局庫"

我的意思是:
開局同樣是"計算"出來,但是是用不同的"計分"法則。
依小弟愚見,真人考慮開局和中 ... [/quote]

其實不只開局及殘局,象棋軟件也可設計成入中局棋譜作運算用的資料。

這些棋譜資料,不只局面完全相同才有效。
如果大部份棋子位置相同,棋軟很多時可以有效快速比對,選出較有效的應對棋荍@優先考慮。
大部份情況之下,這樣的分析應該會對比無資料的情況下有效率得多。
如果我無理解錯,強與弱的棋軟真正差別,很可能就在這些內置棋譜的量與質素的分別。

xianrenb 2017-9-4 09:15 AM

[quote]原帖由 [i]xianrenb[/i] 於 2017-9-3 05:49 PM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=467207268&ptid=26898919][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]


其實不只開局及殘局,象棋軟件也可設計成入中局棋譜作運算用的資料。

這些棋譜資料,不只局面完全相同才有效。
如果大部份棋子位置相同,棋軟很多時可以有效快速比對,選出較有效的應對棋荍@優先考慮。
大 ... [/quote]

其實我的程式(及象棋小巫師)相比其他棋軟的效能較低的主要原因,應該是前者是單線程的程式。
以現代的電腦而言,算力至少是 4 倍起的分別。
如果改良我的程式成能平行運算,相信效能應該不錯。
頁: [1]
查看完整版本: 開局(十)