2017-02-28 50 views
0

我正在使用python的庫for象棋與乾魚棋作爲國際象棋引擎在我的程序,將創建StockfishVsPlayer遊戲,我希望能夠讓用戶選擇遊戲的難度。我知道深度越高,棋盤引擎檢查的動作就越多,但是需要確定其實力嗎?我能否說難度=發動機的深度?像在這條線上,我選擇深度國際象棋引擎的深度是它的優勢嗎?

[...while it's the computer's turn to move...] 
[...] 
best_move = engine.go(depth=difficulty)[0] 
[...] 
+0

深度確實給一定的難度,只要移動所花費的移動的實際權重結果適當。 – JamesD

+0

你不能訪問UCI選項嗎?有一個「技能水平」選項IIRC。 – miradulo

+1

我不確切知道StockFish是如何工作的,但是還有很多其他方面的問題會影響到國際象棋引擎,傾向於樹的力量,排序移動列表(首先評估最可能的移動),但樹的深度是最重要的方面我的意見) – Arman

回答

1

1.讓我們清楚:

  • Python的國際象棋棋GUI,它不是一個國際象棋引擎。
  • 鱈魚乾是一款國際象棋引擎,它不是一個國際象棋GUI

你不需要鱈魚乾的Python象棋,反之亦然。因此,你寫道:

...如果有選擇,應該提及的水平的一個選項...

不正確。 Python Chess的文檔不應該有任何特別的干擾國際象棋設置。

2.我在哪裏可以找到乾魚的UCI設置?

官方頁面在:

有你想要的東西。如果您想了解更多的細節,你可能想看看源代碼:

3。回答你的問題

深度是國際象棋強度最重要的因素之一。其他的可能性是:

  • Contempt factor
  • 散列大小
  • 時間爲每個移動
  • Tablebase
  • 開局
  • 具體位置

例如,鱈魚乾與Cerebellum書庫比沒有更強。 Syzygy tablebase也提高了遊戲的力量。

乾魚快,但它不是封閉位置上的最佳引擎。還有最近對科莫多巨蜥和魚乾後在關閉位置:

有一個在鱈魚乾一個Skill Level參數(它在上面的鏈接)。如果你想了解它是如何工作的,檢查我的帖子:

-2

棋盤引擎比簡單的深度還要多。

由於我們無法在某個時間點計算整個國際象棋遊戲,因此我們需要對棋盤的當前價值進行一些評估。這個評估越準確,算法就越好。

此外,將分支檢查到同一深度會浪費資源。比如說,在一個分支中,你免費失去了女王。 99%的時間這將是一個死亡分支,並且任何用於進一步計算這個分支的資源都將被浪費。

最後大多數國際象棋計算機都使用數據庫來播放開放和結束遊戲,而這些數據庫的複雜性對計算機的能力有着巨大的影響。

如果這三個因素保持不變,那麼唯一的另一個主要因素是搜索深度。然而我沒有看過蟒蛇中的鱈魚,但從我的經驗來看,建立國際象棋計算機移動深度並不是一個有效的指標。隨着遊戲進行的深度增加,因爲有更少的部分需要考慮。通常我會很難縮放計算時間。