Friday, February 22, 2008

Some further explanation of EGDB

meifire 其實對殘局庫的瞭解已經很透徹了。很多地方也解釋得比我清楚,所以我就從他的回答基礎上,再加說明。

meifire:

"order的含义在残局库的主页上有说明.我理解是:在当前局面前往被吃子的局面的途中,还要经过多少次弱势方可以长将或长捉的局面.

由此得到的几点推论:

對於只有一方有攻擊子的盤面,Order 都是 0,因为弱方无法长捉或长将

在order是正数时,value的值表示距离下一个弱势方可以长将或长捉的局面的着数.

当order 是正数,value为0时,弱势方的推荐着法都会造成长将或长捉对方,当弱势方被迫变着时,order就会减少(感觉似乎应该是减1,但我发现过例子是减很多的),而value重新变为正值,开始前往下一个长将或长捉局面,直到order为0,value也为0,则是到达吃子局面."

___________

meifire 的解釋清楚而正確。對order不見得只減1的觀察也是正確的。order會逐漸變小,通常在換捉不同子時,減的數目較可能會大於1。

關於看起來像是錯的推薦走法,我己經被問很多次了。不少人因此而認為殘局庫的結論是錯的。我一直想解釋清楚,但一直沒有用中文做過。一樣,我們從meifire的說明開始:

meifire:

残局库推荐着法首先当然是看结果,如果一种走法的结果为和,另一种为胜,当然选可胜的;

其次看哪种着法可以最快的吃子,不单独考虑"将死"和"欠行",因为残局库认为出现这些情况后,就是一方被迫送吃自己的将/帅,包含在"吃子"这种情况里了.而在考虑吃子时也不会优先考虑将/帅被吃的情况.

~~~~~~~~

會有看似錯誤的推薦走法,最主要根源於我最原先的一個設計決定。殘局庫可以記錄到吃將軍的步數(distance to mate, DTM),或是到吃任何一子,而進入子殘局庫的步數 (distance to conversion,DTC)。
在考慮過象棋的特性,以及殘局庫製造的效率,我最後選擇了 DTC。原因如下:
1. 由於象棋有長將及長捉的規定, DTM 似乎不太能夠成立。每次長將或長捉應算幾步?
2. DTC 在程式的運行上有較高的效率。

然而在選擇 DTC 後,便帶來了一些人觀察到的不自然現象。由於吃子勝和將死被視為同等,所以會有推薦走法出現一步殺的情形。在沒有更好的方法前,我只能選取我覺得最好的方法。