トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

50万棋譜計画

IOS棋譜訂正ダウンロード

総勢300万以上、解凍時の容量700MB、vsOtha vs Thellの究極の棋譜。IOSの37万棋譜に対してそれぞれ先手後手、10, 20, 30, 40手目から訂正。

Thell-Thellの棋符訂正ログ。15万件くらい?

自宅での暖房用。冬もようやく終わったので公開。25,000件程度。

概略

TCP/IPによって,対局サーバと2つのオセロクライアントが対戦する。ゲームは常に対局サーバ内ですすみ,クライアントに対して次の着手の問い合わせと棋譜の保存をおこなう。また,何回かに一度対局結果をカウントして,レーティングをつける。

仕様

とりあえず,IOS棋譜訂正の形でいいですかね? ラスト20手訂正? ラスト20-40まで訂正(fujita方式)?設定などは,引数に渡すにはでかすぎるので,設定ファイルにおいとく形かな。あと,実行形式はゲーム進行用ノードを一つ用意して,残りは2プロセスずつで計算? 付加かかりすぎかね。

comment by fujita.h

中盤の訂正に全てかかってると思う。終盤だけの訂正だけではだめだ。俺方式だが、全ての位置からの訂正はさすがに大変なので、5手おき(15手目から正確、20手目から正確、25手目から、…、という訂正を作る)あるいは10手おき(同様)というのはどう?

comment by ohkura

序盤をランダムなパターンからスタートさせると、Logistelloがはじめに定石を作ったときと同じことができそう。中盤以降、間違える必要ってあるのかな?あるなら、fujita案でよさげかと。いろいろなパターンが現れるだけでいいなら、序盤10手ランダム程度で充分っぽいかも。

ゲーム進行ノードは1つで充分そうな気がする。

comment by fujita.h

序盤ランダム10手だけで全パターン網羅できるのか?できるような気もするし、できないような気もする。序盤10手で+64〜-64までの結果が現れるだろうか。各ノードでは1プロセッサのみの使用とするのがよさげかと。まああとは周囲の雰囲気次第というか。

仕様(今あがってるヤツ)

シングルスレッド版

IOSの棋譜訂正をします。20手目から10手おきで50手目まで。てか,可変にした方がよさげですな。とりあえず,othellod.cppの該当箇所を変更すればどうにかなります。どこかしらにクライアントプログラムを2つ立ち上げた状態で,そのホスト名とポート番号を指定すれば勝手に対戦して結果を標準出力に流します。詳しい使い方は,/doc/readme.txt参照。

クライアントソフト作成のフレームワークとして,OthelloClientという抽象クラスを用意したので,各イベントハンドラをぺぺっと修正するだけで作れます。それから,通信周りの仕様を勝手にちょっと変えました。可変長にする必要を感じないので,各命令は1行目に命令,2行目に引数の2行構成(必ず)。返信は1行(必ず)。下の仕様で引数をとらない命令(START, END, CLIENTINFO)には,2行目に空行が入ります。逆に,返信しない命令(START, END)も空行を返します。てか,OthelloClientを使えば問題なし。

そういえば,間違った箇所においてもなんにもいわずにおいてくれるので注意が必要です(ぉぃ)。

通信プロトコル

テキストベースでいいや。

 START

開始通知。初期化処理など,どうぞ。

サーバ>クライアント

START

サーバ<クライアント

(なし)

 NEXT

次の着手を問い合わせます。Oが白,Xが黒,-が空白として,左上から右に順番に盤面の情報が64こ。最後に1個,どちらの手か,合計65この続きます。返事は,着手の場所をA1形式で。

サーバ>クライアント

NEXT
O--OOOOX-OOOOOOXOOXXOOOXOOXOOOXXOOOOOOXX---OOOOX----O--X-------- X

サーバ<クライアント

A2

 CLIENTINFO

オセロプログラムの情報を問い合わせる。最初の_までは各プログラムで共通にしといたほうが,ランキング集計のとき便利か?

サーバ>クライアント

CLIENTINFO

サーバ<クライアント(100字以内; 途中のスペース/改行禁止)

Neothec3_20040902_Supervised_fixeddepth:10/solve:18

ファイルフォーマット

 棋譜

一行に1ゲーム。スペース区切りで,通し番号,棋譜,黒スコア,黒の名前,白の名前,日付。棋譜はC3B2...形式。スペース以前はランダム含む(開始棋譜作成用),以降すべて最善手(ランダムな手はなし)。スコアは数字,-32とか,31とか。空きマスは無視。最後に対局終了日付時刻。日付最後でいい? 見にくい? 開始時の棋譜じゃなくて,盤面でもいいかと。

1034 D3C5E6E3D6F5C4C3B4E7F8D7C6E8D2C1D1E1F2B6G6G4C7D8C8B5A6 A4F4F3H4H3H2G3G5F6A5A3A2B8A8H7H6E2F7B3B2C2F1H5H8G1B7A7B1A1G2H1G7G8 0 oxelon neothec 2004/09/02/18:15

comment by ohkura

空きマスは・・・Neothecでは無視(=両者に分配)だけど・・・普通はどうなんだろう?日付はあったほうがいいね。あと,通算試合番号と,各ソフトのバージョンがあるといいかも。あと,「最善と思われる手」か,「最善」かの情報を加えるのはどう?

comment by fujita.h

空きマスは、俺は無視して、単に黒石-白石を「結果」としているな。棋譜のIDみたいなのはあるといいかも。「最善と思われる手」か「本当の最善」かはぶっちゃけ学習において区別しないような気がするんだが、どう?あと、#で区切ってあるよりはそこもスペース区切りの方が読み込みやすくない?

 ランキング

ランキング用の棋譜ファイルを用意。ランキングを見たいときは,適当なコマンドを打つと,カウントして表示してくれる。感じで。

$ othellorank
2004.9
name     win  lose draw    avg
vsOtha   XXX   XXX  XXX   X.XX
Thell    XXX   XXX  XXX   X.XX
Neothec  XXX   XXX  XXX   X.XX
Oxelon   XXX   XXX  XXX   X.XX

修正版棋譜データ