Misty:オープンソースのフォグ・オブ・ウォー・チェスエンジン
要約
- Mistyは、PythonとRustで書かれたオープンソースのフォグ・オブ・ウォー・チェスエンジンで、ライセンスはGPL。
pip install misty-chessで導入するか、Mistboardでウェブブラウザから対局できる。- Obscuro(Zhang and Sandholm、ICLR 2026)に倣い、これまでに見たものと矛盾しない盤面をすべて保持し、そこから決まった数をサンプリングして、そのサンプル上で反実仮想後悔最小化を実行する。
- 信念が400局面でも4,000万局面でも、探索コストは変わらない。増えるのはサンプルが取りこぼす割合で、探索が速くなればそのぶんサンプルを大きくできる。
- 論文から外れた箇所はすべて、理由と、測定済みのものはそのコストを添えて挙げてある。未解決の問題はGitHubのissueになっている。
Mistyは、GPLで公開しているオープンソースのフォグ・オブ・ウォー・チェスエンジンだ。pip install misty-chess で入れるか、何もインストールせずにウェブブラウザで対局できる。
Obscuro(Zhang and Sandholm、ICLR 2026)のアーキテクチャを実装している。Obscuroは、このゲームで初めて人間を超えたエージェントだ。論文にはコードが付いておらず、arXivにもOpenReviewにもない。私が知っているもう一つの公開実装は、2026年8月に始まったJavaScript移植のobscuro-chessである。MistyはPythonとRustによる実装で、文書化されたエンジンプロトコルと、対局できる公開サーバーを備える。論文から外れた箇所は下にすべて挙げ、理由と、測定済みのものはコストも添えた。
対局の場はMistboardで、こうしたゲームのために私が作ったサイトだ。2015年にlichessが追加するかもしれないバリアントを挙げたとき、ダークチェスは「おそらく優先度が最も低いものの一つ。不正を防ぐのが難しく(対局を完全に非公開にする方法があれば別だが)、観戦の面白さがまったくない。複雑な審判システムが必要になる」とされていた。Mistboardがその審判である。本当の盤面を持つのはサーバーだ。各プレイヤー、各エンジン、各観戦者は、その席から見てよいものだけを受け取る。だから誰のウェブブラウザにも読み取れる隠れた状態はなく、終わった対局は誰でも確かめられるよう完全に再生できる。
いちばん効くのは三種類の協力だ。フォグ・オブ・ウォー・チェスを指す人がMistyと何局か対局すること、フォグ・オブ・ウォーのエンジンを持っている人がそれをMistyと対戦させること、そして未解決の問題のどれかに取り組むこと。方法は記事の最後に書いた。
問題
フォグ・オブ・ウォー・チェスでは、自分の駒が動けるマスしか見えない。相手の手は見えない。代わりに、その結果を観測する。自分の駒が消える、見張っていたマスが変わる。そこから逆算していく。
このサイトで実際に指された5分切れ負けの対局の9手目、Mistyは黒番。3枚の盤はどれも同じ局面を白の側から見たもの。白には黒の駒のうち14個が見えず、黒には白の駒のうち15個が見えない。真ん中の盤は、どちらのプレイヤーも一度も目にしない。
これで、あらゆる古典的エンジンが拠って立つ前提が崩れる。Stockfishは一つの局面を根とする木を探索する。フォグの下では、局面は一つに定まらない。あるのは観測したすべてと矛盾しない盤面の集合で、その全体に対して持ちこたえる一手が必要になる。
この集合を P と呼ぶ。ある対局で二度、それが図に描けるほど小さくなった。
それと矛盾しない2つの盤面
g5は、この段で黒が見通せない唯一のマス。
236,480個のうちの5個
実際の中盤。下に埋め込んだ対局から。4つは集合から一様に抽出したもので、5つ目が実際の盤面。
黒は、自分の視界にできた穴から、一度も見ていない駒の存在を割り出した。通常のチェスには、この種の推論に当たるものがない。それでも推論のあとには盤面が二つ残り、黒はその両方に対して指さなければならない。
中盤になると、もう図に描けるものは残っていない。エンジンは自分がいる局面に合わせて手を選べない。それがどの局面なのか分からないからだ。選ぶのは、そのすべての局面で指されることになる一手である。問題のすべては P がどこまで大きくなるかにある。
2026年9月までにMistyと指された216局で、判断時の矛盾しない盤面数の中央値は74、10回に1回は7,000を超えた。人間との対局での最大は8,200万。Misty同士の対局では、異なる盤面が3億4,600万に達した。論文は、このゲームの単一の情報集合が109に及ぶとしている。
最初の判断は、必ずちょうど20の盤面を相手にする。合法な初手一つにつき一つだ。12回目の判断でも中央値はまだ84にとどまる一方、最悪の10%は19,427、最悪の1%は250万近くに達する。そこから駒の接触がそれを減らしていく。駒取りも、視界に入ってくる駒も、一つ一つが情報であり、そこまで続いた対局では45回目の判断で中央値は42まで下がる。これはゲームの性質で、方針によるものではない。Mistyには情報の獲得に報いる項がなく、接触を狙って指すこともない。Mistyが学べるかもしれないことの中で、これはかなり面白いものの一つである。
対局
4局を紹介する。Mistyが見えないものについて推論する2局、フォグが両者を混乱させる1局、そして信念の大きさが何を招くかを示す負けの1局だ。各盤面の上には「白」「真実」「黒」の切り替えがあり、どちらかの側を選べば、その側に見えたものだけが表示される。
1手30秒のMisty同士の対局。駒取りによって、黒は白のクイーンがいられるマスが一つしかないと知る。黒は白から見えないマスへナイトを動かしてクイーンを狙い、次の手でそれを取る。盤面全体が見えるStockfishなら、このナイトの手は指さない。フォグの下では、これが勝ちにつながる。スタディには11局の自己対局がすべて収めてある。
匿名のゲストとの対局で、持ち時間は10分+5秒。11…b6のあと、a6の黒ナイトは浮いているが、Mistyは5手のあいだそれを放置する。Mistyが可能だと考える局面の大半で、そのマスは守られているからだ。守っているのはたいていビショップで、そのビショップは実際には2手目に、Mistyの視界の外でc8を離れていた。二つ目の攻め駒が並ぶと、Mistyはビショップで取る。クイーンの代わりにビショップを危険にさらす選択だ。ゲストにもa3の白クイーンは見えておらず、クイーンで取り返してそのクイーンを失う。ゲストは37手目で投了した。
別の自己対局は、どちらの側もほとんど見えないときにフォグが何をもたらすかを示している。黒は白から見えないところでクイーンサイドにキャスリングし、黒のナイトがc5に来ると、白はそれを取る。背後のd8には黒のクイーンがいると考え、そこにルークがいる可能性は100に1つ程度と見ていた。この駒取りで、dファイルが白自身のクイーンに向かって開く。そこからは両者のクイーンが、どちらも全体を見通せない駒の間を暴れ回り、数手ごとに駒の損得が入れ替わる。対局は、白が必要な事実を一つ突き止めたところで終わる。白は黒のキングを一度も見ていないが、可能だと考えるどの局面でもキングはc8にあり、27.Re8+がそれを捉える。
そして負けた1局。相手は友人で、信念の大きさの代償が見える対局だ。30手目、Mistyはおそらく守られていると考えたルークを取った。安全チェックの穴がその駒取りを通してしまい、ルークと引き換えに失ったクイーンが1.6につながった。その後、楽に勝っていた白は、Mistyから見えないところで静かに手を進めた。見えない手のたびに、Mistyが保持すべき局面は何倍にも増える。駒取りの直後は4、5手後に55,000、それから140万、360万、650万。手に要した時間は、5秒の予算に対して9秒、11秒、そして16秒。次の950万局面への更新はサーバーの応答期限を超え、Mistyは持ち時間を4分近く残したまま、サーバーによって反則負けとされた。人間との対局のスタディには、ほかに7局ある。
Mistyの手の選び方
論文に沿った6つの段階を、1.6で出荷している設定(misty-chess 0.1.3の v1.6-net-prune プロファイル)で説明する。
信念:矛盾しないすべての盤面
相手の見えない手のあと、Mistyは観測した内容で P をふるいにかけ、観測と食い違う盤面をすべて捨てる。自分の手のあとは、すべての盤面を進める。P は厳密に保持している。矛盾しない局面はすべてRustで列挙し、毎手作り直す。パーティクルフィルタも近似も使わない。本番では上限を1,600万局面としている。
上限を超えると、Mistyは一様ランダムなサンプルを残して指し続ける。記録上最悪の対局では、これで7.7 GBに達した。6月の上限を超えた唯一の対局では、相手が見えないところでポーンをプロモーションさせるあいだに信念が8,200万盤面まで膨らみ、本当の局面がサンプルから抜け落ちた。Mistyは続く2回の判断を、自分が実際にいる盤面を含まない集合に対して下した。そして新しいクイーンがMistyのキングを取った。各手は直前の手だけから作られるため、真実を取り戻す手立てはない。新しいサンプリングシードで観測履歴を再生すれば取り戻せる(#10)。P が空になったら、エンジンは修復せずに例外を送出する。空集合は、観測モデルが間違っているということだからだ。
Rustの列挙器はPythonのものより約500倍速い。Python版はオラクルとして残してある。テストスイートは実際の対局を再生し、すべての手で両者の一致を求める。このチェックは、かけたコスト以上のバグを見つけてきたし、設計の中で最も残す価値のある部分でもある。
サンプル:P から決まった数の世界を取る
Mistyは P から決まった数のルート世界をランダムに抽出する。1.6では32で、これはプロファイルの設定値だ。論文は数百を使う。数を固定しているから、探索コストは信念とともに増えない。P が400局面でも4,000万局面でも、探索が見る数は同じになる。なぜ増やさないのかは時間の問題で、答えは1手のコストにある。
矛盾しない盤面はどれも同じ重みを持つが、実際に同じくらいありそうなわけではない。相手がルークを行ったり来たりさせて3テンポを費やした盤面は、証拠とは矛盾しないものの、現実にはまずありえない。Mistyには、それらを見分ける相手モデルがない。Obscuroにもない。obscuro-chessにはある。Chess.comの246局に当てはめた指し手の事前分布だ。
探索:Mistyが見たものをキーとする一本の木
サンプルした世界は、一緒に一本のゲーム木を育てる。その木のノードは観測履歴、つまり手番のプレイヤーがそれまでに見たすべてである。Mistyから見て区別できない世界は同じノードに入り、一つの戦略を共有する。このまとまりが情報集合の意味であり、探索が一つの答えを返すのはそのためだ。
これで、すぐに思いつく方法は使えなくなる。各世界をStockfishに渡して票を数える方法だ。投票だと、区別できない局面で別々の手を指せてしまうが、実際の盤の前ではそれはできない。世界ごとのStockfishの評価値を平均する方法は、もっと微妙な理由で失敗する。どの評価値も、この手のあとには自分がどの世界にいるか分かるという前提に立っているからだ。
同じ確率の世界を二つ、手を二つ考える。waitのあと、次の手は二つのマスのどちらかを当てる賭けになる。当たれば勝ち、外れれば負け。safeは、どちらの世界でも小さな優位になる。
world 1 world 2 average really
wait, then guess +1 +1 +1 0
safe +0.3 +0.3 +0.3 +0.3
世界を一つずつ渡されたStockfishは、必ず正しく当てる。その世界には当てるべきものがないからで、そのためwaitの平均は確実な勝ちになる。実際の盤の前のMistyは世界を区別できず、当たるのは半分で、waitの価値はゼロだ。探索は、同じに見える世界を一つのノードにまとめることでこれを避ける。そうすれば、両方の世界で同じ推測を強いられる。
相手にも選択の余地がある。こちらに何が見えるかを決めるのは相手なので、隠れた脅威にいつも同じように応じていれば、相手はそれを学び、こちらが備えていない枝へと誘導してくる。Mistyが探すのは、自分の決め方を知っている相手に対して譲るものが最も少ない戦略だ。その戦略が、二つの手の間のコイン投げになることもある。
それを見つける道具が反実仮想後悔最小化で、ポーカーを解いたアルゴリズムの系統である。
各ノードは混合を持つ。手ごとの確率で、最初は均等だ。木を一回走査するたびに、下から上へ次の四つを行う。
leaf v = tanh(centipawns / 500)
move v(a) = average of a over the worlds
node v(I) = Σ x(a) · v(a)
regret R(a) ← max(0, R(a) + v(a) − v(I))
next mix x(a) ∝ max(0, R(a) + Δ(a))
ここで x はノードの現在の混合、Δ(a) は R(a) がいま受けた変化量である。最初の行は、Stockfishの評価値を−1から+1の尺度に直す。ポーン得で約+0.2、ルーク得で約+0.75、キングを取ればちょうど+1。二行目と三行目は平均だ。相手が指すノードでは、値を相手の現在の混合で重み付けする。したがって手の値は、Mistyが区別できないすべての世界にわたって、相手のいまの指し方に対してその手が稼ぐものになる。
後悔とは、各手が混合と比べてどれだけ良かったかの累計である。あるノードが二つの手を半々で指していて、今回の走査でそれぞれ+0.12と+0.08が出たとする。ノードの値は+0.10なので、最初の手は後悔を0.02得て、二つ目の手はゼロに落ちる。後悔は負にならないからだ。次の走査では、混合は最初の手に寄る。その間、相手のノードもすべてMistyの混合に対して同じことをしており、それが値を動かし、値がまた混合を動かす。どのノードでも自分の混合を上回る手がなくなると、走査を重ねても何も変わらなくなる。それが均衡だ。一回で済まずに何千回もの走査が要るのは、両者が互いに合わせて調整しているからである。
最小の例なら表に収まる。二つのマスのうち一つを守れて、相手はこちらから見えないマスの一つを攻める。守られていないaを攻められると丸々一点、bなら半点の損になる。同じ更新を、両者同時に回してみる。
| 走査 | aを守る | 相手がaを攻める |
|---|---|---|
| 1 | 100% | 0% |
| 2 | 11% | 87% |
| 3 | 83% | 53% |
| 10 | 72% | 28% |
| 20 | 67% | 33% |
最初はどちらの側も相手に過剰に反応するが、やがて落ち着く。三回に二回aを守れば、どちらの側も手を変えて得をすることはできない。この落ち着いた混合が、探索の求めるものだ。
最後の行が、素の後悔マッチングに加えた唯一の改良点になる。直近の変化量を足すのは、次の走査も今回と似たものになるという予測だ。これによってMistyは最後に、通過してきた全混合の平均ではなく現在の混合で指せる。この系統は予測型CFR+と呼ばれる。
12,567個から抽出した32のワールドのうち4つ。色付きのマスは、この4つの間で食い違う13マスで、黒にはそのどれも見えない。だから探索にとって4つはすべて同じ局面になる。
黒の30の合法手に対する1つの戦略。残る5手の合計は0.001未満。
サンプルしたどのワールドも黒に同じ観測履歴を示すので、それらは探索木の1つのノードを共有し、この5秒の手の20,768回の反復はそこで一緒に後悔を蓄積する。出力は1つの分布になる。それを1つの手に落とし込む必要があり、ここではe5とQf5を0.0017の差で分けることになる。
これは5秒で下した実際の判断の一つで、コイン投げが実戦で現れた例である。二つの手の差は0.002以内。各反復では全ノードを一回走査し、それから新しいリーフを一つ加える。2,000リーフに達すると木は育つのをやめ、時間が尽きるまで固定された木の上で走査が続く。そのため1手の反復の大半は、木を広げるより混合を磨くことに使われる。止まる条件は時間だけで、混合が落ち着いたかどうかは何も確かめていない(#8)。
スコープ:どこまで先を解くか
フォグの下では、決まった深さで止めるのは止めどころを誤っている。効いてくるのは、ある局面が、誰かがそれと取り違えうる局面からどれだけ離れているかだ。Mistyは、どちらか一方のプレイヤーが区別できない二つのノードを結び、そうした段階が数歩以内にあるリーフだけを展開する。相手が自分について何を知らないかをMistyが推論し始めるのは、ここからである。
評価:リーフにStockfish
新しいリーフは深さ1のStockfish 18で評価する。スレッド1本、ハッシュ16 MBで動かし、固定したコミットからソースでビルドしているので、どのデプロイでも同じバイナリが動く。この固定以前の本番は、Linuxディストリビューションが配布するもの、つまり14を使っていた。両者を比べた唯一の条件では、差はノイズの範囲だった。それ以上のバージョン比較はしていない。リーフの評価が1手に占めるのは11%だからだ。Stockfishはフォグを見ない。答えるのは「この具体的な盤面はどれだけ良いか」だけで、それはStockfishが最も得意とする問いであり、フォグの推論は上の層に残る。これには、上の層では直せないコストがある。ポーンの張り合いは古典的エンジンにとっては中立だが、フォグの下では決定的だ。先に取った側が視界を得るからである。論文は評価関数の寄与を約262 Eloとしている。
決定:分布から一手を選ぶ
探索は各手の確率を持って終わり、Mistyはその最上位を指す。Obscuroが手を安全に混ぜられるのは、前の手から引き継いだ戦略に照らして候補を確かめているからだ。Mistyは手と手の間で木を捨てるので、混合を確かめる基準がない。混合を強制したところ、0勝7敗1引き分けに終わった。
最後にガードが走り、信念の十分な範囲で大駒をただで取られる手や、キングを取られる位置に動かす手を拒否する。ガードは論文にはなく、まれにしか働かない安全網でもない。上の11局では、17%の手で探索の選択を置き換えていた。人間から見てエンジンが間抜けに見えるミスを防ぐ一方で、ガード自身もミスを生む。上の自己対局では、両者の最悪手のうち三つはガードの選択で、探索のものではなかった。ガードは一手先しか見ないが、ポーンのフォークには二手かかる。探索自身がそうした危険を見抜き、ガードを外せるようになること。それが、ほかの多くの問題の根にある未解決問題だ。
設定
| 設定項目 | 出荷時の値 | 上げると |
|---|---|---|
| 信念の上限 | 16,000,000局面 | 厳密さをより長く保てるが、RAMを数GB使う |
| サンプルするルート世界の数 | 32 | 信念をより広く見られるが、それぞれの反復回数は減る |
| 展開予算 | 1手あたり2,000リーフ | 木が広くなり、その走査が遅くなる |
| スコープの次数 | 2 | 部分ゲームが大きくなり、1手ごとに再求解する部分が増える |
| リーフ評価の深さ | 1 | リーフの評価は良くなるが、数は激減する |
| 1手の予算 | 5秒 | 上のすべてが比例して増える |
ルート数、展開数、スコープはプロファイル v1.6-net-prune にあり、信念の上限と1手の予算は呼び出し側が与え、リーフの深さは評価関数の中で固定されている。次数2では、混同の段階が3以内のリーフが展開の対象になり、1段階から2段階の帯は探索中に再求解される。
1手のコスト
本番の手はすべて、時間の使い道を記録している。913手の平均は次のとおり。
| 段階 | 平均 | 割合 |
|---|---|---|
| 均衡の走査 | 3.91秒 | 69% |
| 新しいリーフのStockfish評価 | 0.61秒 | 11% |
| 展開のその他 | 0.18秒 | 3% |
| リーフの選択 | 0.16秒 | 3% |
| スコープ | 0.06秒 | 1% |
| 探索の外:信念の更新、ガード、決定、通信 | 0.68秒 | 12% |
| 合計 | 5.68秒 |
均衡の走査は、反復ごとに木の全ノードを更新する処理で、だから時間の大半を占める。誰もが重いと予想する信念の更新は、平均6ミリ秒にとどまる。ガードは探索の時計が止まったあとに走るので、5秒の手が5.7秒かかる。ローカルでプロファイルしたある判断では、ガードに1.2秒かかった。
1手は実時間で区切られる。time_budget_seconds がそれで、本番では5、対局の持ち時間によって下がることもある。プロファイルには反復回数の上限もあるが、1,000万に設定してあるので常に時間が先に効く。時間の予算も持ち時間も渡さなければ、反復回数の上限が止める条件になる。5,000反復の実行は、別々の三つのプロセスで同じ手を選び、同じ木を作り、上位四つの確率も同じだった。再現したいものには、このモードが向いている。時間で区切った手は、そのときのマシンの速さに左右されるからだ。
当然出てくる疑問にも、コストが答えになる。論文が数百の世界を使うのに、なぜ32なのか。すべての世界は走査のたびに辿られるので、一回の走査のコストは世界の数に比例する。同じ局面、同じ時間で比べると次のとおり。
| ルート世界 | 5秒間の反復回数 | 木のノード数 |
|---|---|---|
| 32(出荷設定) | 45,068 | 6,322 |
| 128 | 10,645 | 25,291 |
| 200 | 5,958 | 43,070 |
| 256(論文の範囲の上限) | 4,958 | 52,557 |
世界を8倍にすると、走査の回数は9分の1になる。2,000リーフの予算も世界の間で分け合うので、256では各世界に回るリーフが60から約8に減り、手の40%の時間は木がまだ育っている。32なら木は早く完成し、その上で約43,000回の走査が混合を磨く。世界を増やせば信念のより多くが見えるが、一つ一つを解く質は落ちる。1手5秒固定の直接対決では、64、128、200の世界はどれも、一つを除くすべての条件で32に負けた。
だから世界の数を増やすには、まずスループットが要る。そしてスループットの余地は均衡の走査にある。展開がすでに従っているスコープに走査を限定する(#6)か、複数コアに分けることが、何倍という改善の源になる。論文の、求解スレッド一本と展開スレッド二本という分け方を真似ても、そうはならない。それが並列化するのは展開で、展開は時間の14%だからだ。時間の計測値はマシンに依存するため、ここでのラップトップの数値は互いに比べるためのもので、本番とは比べられない。
論文との比較
MistyはObscuroを指針にしているが、忠実な再現ではない。論文と一行ずつ比べる。
| 論文 | 本実装 | 理由 |
|---|---|---|
| 探索木と均衡を手から手へ引き継ぐ | 毎手捨てて、サンプルし直す | 1.1で実装、1.2で削除。下を参照 |
| 情報集合ごとのリーチギフト | 単一のスカラーのマージンで、値はゼロ | 未実装 |
| 安全ガジェット用のブループリント戦略 | カバー率は小さい P で約38%、大規模では約0 |
一行目の帰結 |
| ResolveとMaxmarginの二つの方式を切り替える | Resolveのみ | 切り替えは環境変数の裏にあるが、出荷されたことはない |
| 数百の世界からなるルート集合 | 32 | スループット。1手のコストを参照 |
| 部分枝刈り付きのCFR。1回の反復にかかる時間は通常、木の大きさに対して劣線形 | 毎回の反復で木全体を辿る | 未実装。木が2,000リーフで止まるのはこのため(#6) |
| 求解スレッド一本と、共有の木を展開するスレッド二本 | スレッド一本 | 未実装。実装しても、すでに時間が足りていない部分を並列化することになる |
一行目が二行目と三行目の原因だ。ブループリントは前の手の探索なので、ルートをサンプルし直すと、小さい P では世界の約38%を覆い、大規模ではまったく覆わない。ブループリントがないとMistyの安全ガジェットは守りすぎるため、序盤でしか使っていない。
引き継ぐ木は1.1で実装し、1.2で削除した。序盤では真の盤面で約125センチポーンの損になり、反復回数も21%減った。報われるはずなのは、P が大きくブループリントが意味を持つ中盤である。
今後
作業はstrengthラベルのissueとして管理しており、それぞれに証拠、修正案、そして効果を示すための測定が付いている。見込める効果の大きい順に並べる。
- スループット(#6)。均衡の走査は反復のたびに木全体を辿るが、どのリーフが育つかはすでにスコープが制限している。走査も同じように限定すれば、数%ではなく何倍という効果があるはずで、世界の数はこれを待っている。いまの速度で32の世界が勝った直接対決を、新しい速度でやり直す。
- 中盤での木の引き継ぎ(#11)。手の間で探索を引き継ぐと、信念の小さい序盤では約125センチポーンの損だった。論文が効果があるとするのは中盤で、手の間での混合も、機能する安全ガジェットも、これに依存している。
- ガードを必要としない探索。 ガードは17%の手で探索の選択を置き換え、最悪手のいくつかを生んでいる。ポーンのフォークのような二手先の危険は、探索自身が見なければならない。確かめるには、ガードを切ってマッチを指せばよい。
- 形の見えている修正: 持ち時間の貯金を使う(#7)、時間切れを待たず混合が落ち着いた時点で止める(#8)、裸のキング相手の勝ち終盤を勝ち切る(#9)、信念の上限を超えたところで本当の盤面を取り戻す(#10)。
この記事は2026年9月時点の1.6について書いている。現状はissueのほうにある。
対局する、試す、発展させる
対局する。 MistyはMistboardにあり、アカウントもインストールも要らない。そこのボットは、リポジトリが出荷しているのと同じエンジンとプロファイルで動いている。人間との対局はMistyにとって最も乏しいデータで、自己対局では見えないものを見せてくれる。
連絡する。 フォグ・オブ・ウォー・チェスを指していてMistyと何局か対局したい人、不完全情報ゲームに取り組んでいる人、研究やプロジェクトでMistyを使いたい人、この記事の誤りに気づいた人は、contact@brianhliou.comまでメールしてほしい。
発展させる。 pip install misty-chess でエンジンが手に入る。Rust拡張と、純Pythonのフォールバックにした場合のコストはREADMEに書いてある。エンジンはstdio越しにJSONプロトコルで通信し、その仕様はリポジトリに文書化してある。サーバーが送るのは伏せ字にした観測だけなので、対局中のエンジンが真実にたどり着く道はない。
エンジンを持ち込む。 Mistyには、自分を測る相手がほとんどいない。このプロトコルを話すフォグ・オブ・ウォーのエンジンなら同じサーバーで対局でき、結果はどちらに転んでも公開する。