ふむふむ、ポンダーを理解する

...つまりは、

①「ポンダー」を有効にする → 将棋所のエンジン設定より

"setoption name USI_Ponder value true" でポンダーONと認識ですな。

『エンジンが先読み機能を使用できるかどうか指定します。これでfalseを指定すると、エンジンは先読み機能を使うことはできません。』

②"go" で、普通どおりに探索だけど、探索結果を返す時、

bestmove (move1) ponder (move2)

と、2手通告。 ← 例外 = 詰めた時は一手で十分にゃ。

定跡から読み出す時も一手で十分なので、

bestmove (move1)

...でよろし。

③...と、以下の様にエンジンから ポンダーしてもいいよ と通知があるまで(直ぐにだけど)待つべし

position startpos moves (move data)
go ponder

④先読み探索を開始する...

((先読みが外れました))

stop → 探索を打ち切って、最善手を bestmove で返します(エンジンには無視されるケド)

position startpos moves (move data)
go

...で、現在状況を把握し、探索を新規に開始します。

((先読みが当たりました))

ponderhit で告知します。探索が終えた時点で

bestmove (move1)
bestmove (move1) ponder (move2)

...を返して対局を続行。

投稿者: webMaster 投稿日時: 水, 04/25/2012 - 10:12 categories [ ]

コメントの表示オプション

お好みの表示方法を選択し、「設定の保存」をクリックすると、表示方法を変更することができます。

ポンダーにおける戦略

①相手の手を予測してその手のみ(もしくは数手に絞って)読む

→ 狭く・深く - 当たれば見返りは大きい、当然空振りもある

②全幅、もしくはそれに準する広さで読む

→ 広く・浅く - 完全なハズレを最小に抑える

...とまで考えましたが、普通のプログラム(アルファ・ベータ、ハッシュテーブル使用)ならハッシュテーブルをガンガン埋めさせすればよいので どーでもいいこと ...なのかな?

対局テスト中

...ですが、マシンからの発熱がカナリのものなので部屋が暑くなりますね。

窓開けて換気です。

(追記)

やはり、混んだ局面では 多数決投票 が必要みたいです。

補足

...我の実装では探索時に訪れたノードをメモリー内に持っていますので

極自然に複数の候補手をポンダー中に探索できる

...ので 当てはまるのだ と宣言しておきます。

でもやっぱり

...我は楽をしたいお年頃なので

『予想手を一つではなく複数考えたいということがあるかもしれません。そのような場合は、USIの本来の使い方からは外れますが、bestmove move1 ponder move2ではなく、単にbestmove move1だけを返し、相手の手番中に勝手に先読みするようにして下さい。』

...を乱用して 簡易ポンダー にします。

水は低きを求め~

さらにメモ

A. ポンダー中の探索は意図的に選択確率を低くして手広く探索するべし

B. ポンダー停止の指令が何時来るか予測はできないのでリピートの間隔は短く取るべし

C. ポンダー中詰みを見つけた時の処理に気をつけるべし ← 一手のみ返す

D. ポンダーが長すぎで メモリーが足らな~い エラーを回避するべし ← ビルドの時、最大のメモリーを確保すること

コメントの表示オプション

お好みの表示方法を選択し、「設定の保存」をクリックすると、表示方法を変更することができます。