2019年12月27日金曜日

今年のふりかえり 2019年版

以前は毎年書いていた一年のふりかえりを、久しぶりに書きます。今年は例年になく良い年だったので、記憶に留めておきたいと思ったのです。

将棋に専念

去年10月のツイートです。当時は、後に「リコー将棋AI棋譜記録システム」として発表することになるシステムを、必死に作っていたのでした。当初は個人プロジェクトであったこともあり、多くのプライベート時間をプログラミングに費やしていました。このプロジェクトは、なんとしてもやり遂げたいと、強い想いを持っていましたので、何か大事なものを代わりに差し出さなければいけないんじゃないかと考えた時、それは私の場合バックギャモンでした。

バックギャモンをそんなに一生懸命やっているの? と聞かれると、実はそうでもありませんが、少し離れてもいいかと。いつでも戻れるし、ギャモンはどこにも逃げない。あとは、リーグ戦でも勝てないし、自分より後から始めたプレーヤーがどんどん強くなり、大会に出ても期待値低すぎだよなーと、正直ネガティブに思うところもありました。

さて、システム開発の方は順調に進み、今年の冬には森内俊之専務理事(当時)、鈴木大介常務理事へのデモンストレーションもうまく行きました。そして6月にはまさかの記者会見。新聞各社、テレビの取材があり非常に緊張しました。人間の掌からは、あんなに汗が出るものかと、驚きましたね。夏からは実証実験開始。近頃はだいぶ完成度が上がって来て、ゆったりと年末を迎えることが出来ています。

このプロジェクトのおかげで、他にも有り得ないような体験をいくつもさせてもらいました。まずはグッドデザイン賞。六本木で開催される受賞展は、毎年のように家族で見に行ってたのですが、私の名前が「デザイナー」として出ているとは、夢のようですね。


あとはこれ。リコー杯女流王座戦の前夜祭でシステムのデモをしました。このシステムは女流棋士の先生方にモテモテなのですが、自分がモテていると勘違いしているわたくしでした。


禁酒

私はギャモンが好きで酒も好き。となれば「飲んでギャモン」というスタイルでやって来ましたが、8月にこの態度を改めました。ツイートの日付から判断するに、リーグ戦で恒次さんに負けて心を入れ替えたようです。実際のところ、家に帰って酒を飲んでしまうと、クリエイティブなことはほとんどできない。結局ダラダラとテレビや動画見てしまう。そこをグッと堪えると、GGでレーティング戦しても良い結果になる。8月末からは、突如としてGGで勝てるようになり、一時期は勝率8割超えてましたし、当然レーティングも上がりました。JBLのレーティング戦でも概して好調で、直近の例会で自身の最高レーティングも更新しました。

将棋をするとギャモンが強くなる

勝ち続けていた時期は、これまでよりギャモンボードが狭いというか、「あれとこれがこうなって・・」という構想が冴えてたような気がします。こんな風に感じるようになったのは、きっと将棋のおかげです。将棋は81マスあるし、駒も入り乱れて複雑なことこの上ない。おまけに、星図に載っていない銀河系の星から角がすっ飛んで来てやられてしまう、とてつもなく注意力が要求されるゲームです。それと比べたら、ギャモンは24マスしかないし、ゾロ目の見落としだって頑張ればなんとかなるレベル(たぶん)。

あとは、相手の打ち手に対して、対抗策を考えられるようになりました。飛車取りとやられて黙って取られんじゃなくて、じゃあ代わりにあなたの飛車を頂きましょうみたいな手。ギャモンの場合は、スロットしたチェッカーが打たれても、今度はあなたの陣地のいい場所にアンカー取りますよって感じでしょうか。総じて、困った時に「どっかに隙はないか?」と真剣に考えるようになりましたね。

もう一つの大きな要因は、ギャモンの配信をしてくれるプレーヤーの存在です。特にいぺさんの配信は最近よく観ています。対局中に何を考えているか喋ってくれるし、感想戦もがっつりやってくれる。至れり尽くせりです。いぺさん独特の表現も大好きで、「ここをちょっとほぐして」とか「ヒットして痺れさせましょう」など、実に的確だなとニヤニヤしながら観ています。これからも配信してくれるプレーヤーが増えることを期待しています。ギャモンの「観戦」は、私の禁酒ルールから除外してあるので、飲みながら適当なコメント入れるのが楽しいです。

今後の目標

特に無いです。

が、それだとモチベーション的に問題があると思うので、100マッチで PR5.5以下(BMAB M2相当)を目指そうと思います。やはり「PRは裏切らない」でしょう。もはやこれが限界かと思っていた私のPRも、夏の「禁酒」以降は大改善していて、この目標は到達可能だと思っています(グラフの縦軸は企業秘密だ)。10マッチならPR5以下も時々出ますし、来年中に達成してさらに突き抜けたいと思います。ちなみにこの目標は、2015年に打ち立てた目標よりも低いですw


ということで、来年も楽しくギャモンで遊べる年でありますように。良いお年を!

2018年7月1日日曜日

おうち kifu.me

kifu.meの開発を始めたのは、ちょうど一年くらい前でした。当初から、低コストで運用できるシステムを構想し、Amazon Web Services(AWS)の各種マネージドサービスを駆使して作りました。その結果、手離れが良くて運用が楽チンなサービスが出来ました。コスト面では、kifu.meが使っているAWSのほとんどの機能が、タダみたいな料金で使えるのですが、唯一データベースだけが、コストがかかってました(飲み会1回分/毎月 くらいのコスト)。そのため、サービスを利用している人にコストを負担してもらおうかと考えていましたが、最近別の作戦に切り替えました。

データベースは「自宅サーバー」で運用すればいいじゃんということに思い当たったので、少し前にデータを移行しました。
「自宅サーバー」は、言うほど立派なものじゃなくて、写真の通りのシングルボードコンピュータ(SBC)です。今はkifu.meの利用者がとても少ないので、これ一枚で十分さばけます。なおかつ、SBCと電源アダプタ+SDカードを合わせても、飲み会2回分くらいの値段です。

自宅サーバーにした結果、保存できるデータの容量が格段に増えたので、これまで制限していたXGファイルのアップロード可能数は、2000ファイルまでに変更しました。

kifu.meは、ポジションをアップロードして共有する機能がありますが、私としてイチ押しの機能は「検索」機能の方です。これまでの全棋譜を対象に検索することも簡単に出来ますので、ぜひ使って欲しいです。どんなことが出来るかは、また別の記事で紹介したいと思います。

最後に、kifu.meは無料のサービスということにしましたが、「寄付」はいつでも受け付けております。

2018年3月11日日曜日

初手で一番難しいのは たぶん64

kifu.meは、データベースに登録した棋譜を検索することができますが、データの分析をすることもできます。出目とスコア、何ロール目かをキーにして集計する機能をリリースしました。


これを使うと、自分がどんな場面で多くミスしているのか気づくことができると思います。例えば初手ムーブでエラーの多い出目を調べてみましょう。私のムーブを集計した結果です。
初手で平均エラーが一番多いのは64だと分かりました。次に、初手64の条件で、どのスコアでエラーが多くなっているか見てみましょう。
いろいろ出てきましたが、分かりやすいところで、2away-4away4away-2awayの場合をみてみましょう。このスコアはご存知の特殊スコアなので、4away側はギャモンが取りたい、2away側はその逆で取られたくありません。この状況が初手の選択に大きく影響するので、最善手とそれ以外の手との期待値の差が大きくなります。2away-4awayで初手64はアクションプレイ、4away-2awayでは2ポイントメイクが最善となります。

近頃はこのパターンで間違えることはなくなりましたが、全データを対象に集計するとこのような結果となりました。過去1年分の棋譜に期間を絞ると、今度は43の間違いが多くなりました。例えば、2away-4awayではツーメンダウンが良いことになってますが、つい最近も間違えてました。

序盤のパターンを丸暗記できればよいのですが、私にはそんなことできそうもありません。なので「これ間違えたらダメでしょ」という大きなエラーについて、こんな感じでつぶしていこうと思ってます。

2017年12月31日日曜日

Do you remember how many Whoopers you’ve eaten in your life so far?

kifu.meを公開してから約2ヶ月経ちました。たくさんの方に使って頂いて、本当にありがとうございます! シェアしていただいたポジションの数も順調に増えていて、今見たら469になってました。
さて、kifu.meの"community"機能は公開済みですが、本丸の"検索・分析機能"はまだ開発中です。とはいえ、出来ている部分もあるので少し紹介したいと思います。

ギャモンプレーヤーにとっての「ワッパー」とは、0.100以上期待値を下げるエラーを指します。皆さんは、これまでいくつ「ワッパー」をやらかしたか覚えていますか? 私はもちろん覚えてませんし、そもそもワッパーの数が多すぎて・・

こんな時、kifu.meの検索機能を使えば、これまでの全ての棋譜から条件を指定して「ワッパー」のみを取り出せます。例えば、0.100なんてケチな条件ではなく、1.0以上の超超超特大ワッパーを探してみましょう。こんなとてつもないエラーは、みなさんの棋譜に無いかもしれませんが、非常に残念なことに私の棋譜からはザクザク出て来ます。


これまでのチェッカープレイでの最大のエラーはこれでした。14バックゲームでヒットチャンスが来たのに、特大ワッパーとはこれいかに? 実戦では5の目でヒット出来るのを見落としてしまったのでした。これはボットとの練習試合だったのですが、ほぼ同じ局面で同じ見落としをしていることが、今回調べてみて分かりました。以下の局面は、2015年9月25日の寺尾さんとの7ポイントマッチです。ということはフェスティバルのオンライン予選とかだったかもしれません。24/19*がどうして私には見えないのか?? 全くもって理解不能です。


キューブアクションはどうでしょうか? Doubleの最大エラーはこれです。

2015年5月25日。その"事件"は起こりました・・ というほどでも無いのですが、PlayOKでdaruma3と対戦していた私は、操作を間違えて、ここでダブルしてしまいました。対戦中に小泉さんに「私、今ダブルしました?」と確認したように思います。これ以降、何となくPlayOKから足が遠のくきっかけになった瞬間でした。

二番目にひどいキューブアクションは、こちらです。

2015年12月22日の木村さんとのマッチです。この時は"操作ミス"をした記憶無いので、ガチでdouble-takeと思ってダブルしたんだと思われます。いやヒドイもんだ。

ということで、ワッパー見つける以外にもいろいろ使えるはずのツール作ってます。来年早々にもリリースしたいと考えていますので、どうぞよろしくお願いします。


今年はリーグ戦にフル参戦できたし、リーグの成績はすこぶる良かった。私にとっては最高の一年でした。例会とかネットでお世話になった皆さまありがとうございました。来年も楽しくギャモンが遊べる年でありますように!

2017年11月24日金曜日

ガマンぎりぎりライン

先日、twitterにこう書いたものの、実は思っていたキューブアクション間違ってたし(スコアを加味すると)、もう一度ちゃんと調べてみることにしました。

バーポイントホールディングゲームでは、18ポイントと13ポイントのアンカーが相対し、お互いにギリギリまでポイントを崩さない状況が発生すると思います。私はこれを「ガマンぎりぎりライン」と心の中で呼んでいます。NHKの「デザイン あ」という番組にそういうコーナーがあるんです。このラインを越えると、途端にダイレクトヒットのチャンスがやってくるので、キューブアクションを考えるわけです。

さて、上記のポジションは、マネーなら Double / Take で、実戦のスコアだと No Double / Take でした。


チェッカーの配置をいくつか変えてみて、Double / Take と No double / Take の境界はどのあたりか探してみました。その結果が上のポジションで、pip差が大きく効いてくるようでした。この局面では紫が68、水色が81。紫13pip(19%)リードです。これよりリードが大きいと水色からはダブル出来ないようでした。
他の条件としては、水色が完全なボードを作っている必要があります。6ポイントが空いてしまっているようなボードでは、勝率がガクッと下がります。

こんなポジション本当に出てくるの? と思い検索してみましたが、実際に過去に何度も出てきてました。
例えば、これは一年くらい前の私の実戦で出てきた局面です。ほとんど条件を満たしているように見えますが、ボードが完全じゃないのでダブルできないようです。
他にも、nishikenさんとの名人ネット予選nasuさんとの王位戦などなど、割と頻繁に出くわす形と思いました。

そんなわけで、過去の局面をサクッと検索できる、ギャモン研究に革新をもたらすと信じて疑わないシステムを開発中です。一部の機能は使えますので、ぜひ https://kifu.me/ へ来てください。




2017年6月24日土曜日

第23期名人戦決勝トーナメント

今期の名人リーグは、東京の2部で優勝し2枠を獲得しました。さらに、くじ運が良くて決勝トーナメントではいきなりベスト8からの登場となりました。

こんなチャンスはもう2度と無いかもしれないと考え、ここ2週間ほどは大好きなプログラミングもほどほどに、ギャモンに打ち込みました。実際のところは、先週風邪を引いて寝込んでしまい、暇な時間はAceをひたすらやってました。これでだいぶギャモンの感覚を取り戻したと思ったのは気のせいで、あまり考えずにプレイしてしまう悪い癖がついただけでした。それを急いで修正しているところで、今日はUSBGFのトーナメントで Joe Russellと当たる幸運に恵まれました。最強クラスのプレーヤー相手にどこまでやれるのか、自分の調子を測るにはもってこいの相手です。

試合は負けましたが、自分の調子としては悪くなかったので、明日は体調を万全に整えて下平さんに挑戦したいと思います。

2017年6月3日土曜日

棋譜ミー ライブストリーミング

5月のバックギャモンフェスティバルで、棋譜ミーを使ってライブ配信しました。Kazuki-Sander戦という好カードでした。
AbemaTVで配信し、たしか2000人以上のviewがあったと思いますが、私としてはあまり満足の行く内容ではありませんでした。全くの言い訳ですが、準備を始めたのが前日で、ストリーミング用に作っていなかった棋譜ミーを改造するのは、あの時点ではあれが限界でした。
ライブ配信自体、フェスの配信が初めてだったのですが、横瀬さんにやり方を教えてもらったので、今では自分で出来るようになりました。棋譜ミーを改造して、ライブ配信でここまで出来るようになりました。

ちょっと分かりづらいですか、これはプレイ中にリアルタイムで処理している映像です。テストプレイの時はいつも息子に手伝ってもらってますが、息子はこの画面をチラ見しながらプレイしています。つまり、ダイスをロールするとまもなくベストムーブが画面に表示されます。その気になればいくらでも「チート」できます。
後半、映像が途切れ途切れになってしまいましたが、これは自宅のネットワークの問題で、プログラム自体は最後までちゃんと動いてました。

現実のマッチでは、これを見ながらやっては意味ないですが、ライブ配信を見ている人には参考になるかもしれません。作ってみて改めて思ったのは、そもそもこういう情報が必要かってことです。将棋の電王戦みたいに「評価値」が出るのがすでに受け入れられているかもしれませんが、バックギャモンにおいてはどうでしょうか? 私としては、一流のプレーヤーがコメンタリーしているのを聞くのがとても楽しいです。コメンタリーを用意できない場合も多いでしょうから、そういう配信では有効かもしれないです。
これに加えて、キューブアクションの評価と勝率を表示する機能までは作ろうと思ってます。

2017年5月23日火曜日

8away - 4away

4月まで名人リーグ、5月はフェスティバルと、途切れなくギャモンで遊んでいると、ドイツ人が"Nach der EM ist vor der WM"と言っていたのを思い出します。ユーロが終わると次はワールドカップ予選、ワールドカップが終わるとすぐにまたユーロの予選と、いつまで経ってもサッカーの楽しみが続くのです。
というわけで、次のお楽しみ「盤聖リーグ」が始まりました!

5月21日の四ツ谷例会で、犬塚雄輝くんと対戦しました。2セット目でこんな場面がありました。白の振り番です。キューブアクション?


仮にこれがマネーゲームだったらビーバーでしょうし、XGもビーバーだと言っています。実戦ではこれが 1-5/9p と白がリードされている 8away-4away のスコアでした。このスコアで解析すると、キューブアクションの結果は全く異なるものになります。なんと白はダブルすべきで、黒はパス!

白の勝率はさほど高くありませんが、ギャモンがそこそこあります。リダブルしてギャモンが取れればぴったりマッチ勝ちとなるので、ここでのギャモンはとても価値があります。4away-2awayのキューブと同じように考えればよいと、試合後に日野くんに教えてもらいました。なるほどー、対戦中は全く気づきませんでした。なんてボンヤリしているんでしょうか・・

XGID=-b--BCCBA---A----abbbbcaBA:1:1:1:00:1:5:0:9:10

X:mkisono   O:yuki
Score is X:1 O:5 9 pt.(s) match.
 +13-14-15-16-17-18------19-20-21-22-23-24-+
 |             O  O |   | O  O  O  O  O  X |
 |                O |   | O  O  O  O     X |
 |                  |   |          O       |
 |                  |   |                  |
 |                  | X |                  |
 |                  |BAR|                  |
 |                  |   |                  |
 |                  |   |                  |
 |                  |   | X  X             | +---+
 |                X |   | X  X  X        O | | 2 |
 | X           X  X |   | X  X  X        O | +---+
 +12-11-10--9--8--7-------6--5--4--3--2--1-+
Pip count  X: 148  O: 111 X-O: 1-5/9
Cube: 2, X own cube
X on roll, cube action

Analyzed in Rollout
No redouble
  Player Winning Chances:   53.33% (G:17.58% B:2.10%)
  Opponent Winning Chances: 46.67% (G:24.01% B:9.01%)
Redouble/Take
  Player Winning Chances:   54.52% (G:18.08% B:4.28%)
  Opponent Winning Chances: 45.48% (G:25.71% B:12.09%)

Cubeless Equities: No Double=+0.056, Double=+1.051

Cubeful Equities:
       No redouble:     +0.644 (-0.356)
       Redouble/Take:   +1.051 (+0.051)
       Redouble/Pass:   +1.000

Best Cube action: Redouble / Pass

Rollout:
  1296 Games rolled with Variance Reduction.
  Moves: 3-ply, cube decisions: XG Roller
  Confidence No Double: ± 0.014 (+0.631..+0.658)
  Confidence Double:    ± 0.020 (+1.030..+1.071)

  Double Decision confidence: 100.0%
  Take Decision confidence: 100.0%

  Duration: 13 minutes 08 seconds

eXtreme Gammon Version: 2.10, MET: Kazaross XG2

実戦で私は、missed doubleを繰り返し、ブランダーの山を築きました。例えば、以下のポジションでもXGはダブルせよといいます。まだまだ修行が足りないことを痛感しました。


XGID=---bBCCBA---A------bcbccBA:1:1:1:00:1:5:0:9:10

X:mkisono   O:yuki
Score is X:1 O:5 9 pt.(s) match.
 +13-14-15-16-17-18------19-20-21-22-23-24-+
 |                  |   | O  O  O  O  O  X |
 |                  |   | O  O  O  O  O  X |
 |                  |   |    O     O  O    |
 |                  |   |                  |
 |                  | X |                  |
 |                  |BAR|                  |
 |                  |   |                  |
 |                  |   |                  |
 |                  |   | X  X             | +---+
 |                X |   | X  X  X  O       | | 2 |
 | X           X  X |   | X  X  X  O       | +---+
 +12-11-10--9--8--7-------6--5--4--3--2--1-+
Pip count  X: 148  O: 94 X-O: 1-5/9
Cube: 2, X own cube
X on roll, cube action

Analyzed in Rollout
No redouble
  Player Winning Chances:   43.18% (G:8.31% B:0.54%)
  Opponent Winning Chances: 56.82% (G:34.96% B:19.06%)
Redouble/Take
  Player Winning Chances:   43.46% (G:9.03% B:0.61%)
  Opponent Winning Chances: 56.54% (G:37.43% B:18.90%)

Cubeless Equities: No Double=-0.401, Double=+0.186

Cubeful Equities:
       No redouble:     +0.129 (-0.057)
       Redouble/Take:   +0.186
       Redouble/Pass:   +1.000 (+0.814)

Best Cube action: Redouble / Take

Rollout:
  1296 Games rolled with Variance Reduction.
  Moves: 3-ply, cube decisions: XG Roller
  Confidence No Double: ± 0.013 (+0.116..+0.142)
  Confidence Double:    ± 0.015 (+0.171..+0.200)

  Double Decision confidence: 100.0%
  Take Decision confidence: 100.0%

  Duration: 15 minutes 03 seconds

eXtreme Gammon Version: 2.10, MET: Kazaross XG2

ようやく私がダブルしたのは以下の場面でした。ここでのキャッシュポイントは60%くらいでしたので、その勝率も超えてしまっており、遅すぎるダブルでした。

盤聖リーグではあり得ないスコアですが、8away-16awayでも同じ理屈でしょうから、次にこんな場面に出くわしたら、サッとキューブを差し出したいと思います。


XGID=-a-BBBBBB----------cbbcdC-:1:1:1:D:1:5:0:9:10

X:mkisono   O:yuki
Score is X:1 O:5 9 pt.(s) match.
 +13-14-15-16-17-18------19-20-21-22-23-24-+
 |                  |   | O  O  O  O  O  X |
 |                  |   | O  O  O  O  O  X |
 |                  |   | O        O  O  X |
 |                  |   |             O    |
 |                  |   |                  |
 |                  |BAR|                  |
 |                  |   |                  |
 |                  |   |                  |
 |                  |   |                  | +---+
 |             X  X |   | X  X  X  X       | | 2 |
 |             X  X |   | X  X  X  X     O | +---+
 +12-11-10--9--8--7-------6--5--4--3--2--1-+
Pip count  X: 138  O: 77 X-O: 1-5/9
Cube: 2, X own cube
X on roll, cube action

Analyzed in Rollout
No redouble
  Player Winning Chances:   66.64% (G:12.18% B:0.52%)
  Opponent Winning Chances: 33.36% (G:12.82% B:2.96%)
Redouble/Take
  Player Winning Chances:   67.24% (G:13.09% B:0.78%)
  Opponent Winning Chances: 32.76% (G:13.55% B:3.68%)

Cubeless Equities: No Double=+0.353, Double=+1.383

Cubeful Equities:
       No redouble:     +0.806 (-0.194)
       Redouble/Take:   +1.383 (+0.383)
       Redouble/Pass:   +1.000

Best Cube action: Redouble / Pass

Rollout:
  1296 Games rolled with Variance Reduction.
  Moves: 3-ply, cube decisions: XG Roller
  Confidence No Double: ± 0.011 (+0.796..+0.817)
  Confidence Double:    ± 0.015 (+1.368..+1.397)

  Double Decision confidence: 100.0%
  Take Decision confidence: 100.0%

  Duration: 14 minutes 19 seconds

eXtreme Gammon Version: 2.10, MET: Kazaross XG2

2017年5月1日月曜日

棋譜ミー ハーフバースデー

去年のフェスが終わった後から、自動棋譜起こしアプリの開発を続けています。テクノくんが名前を付けてくれてから、もう半年経ったのでハーフバースデーのお祝い、というか開発状況を書きます。

一言で言えば、「そこそこ動く」ところまで来ました。条件さえ良ければ、手で棋譜を入力するよりも、棋譜ミーが出力した棋譜の間違いを手で直す方が早いです。「条件」については、別のブログに書きました

名人リーグでの対戦動画を自動で処理しようと思って開発を始めたのですが、最初のマッチの解析が終わったのは、対戦が終わってから3ヶ月も後でした。それが現在では、週末の5試合の棋譜起こしが、次の週末までにはだいたい終わっているところまで来ました。
小野盤聖との19ポイントマッチでは、棋譜ミーが特定した全718ムーブのうち、手作業による修正が必要なのは35でした。これは割合にすると 4.87%で、私の平均PRよりもだいぶいいです。すでに娘は父を超えました!


これまで多大なる時間と労力をこのプロジェクトに投入して来ましたが、いよいよ投資を回収するフェーズに移りつつあります。開発にご協力いただいた方々、応援してくださった方々に感謝します。

私のフェス事前入金は間に合いませんでしたが、棋譜ミーは間に合いました。フェスのマッチ動画を棋譜ミーに解析させてもいいよという方は、フェス会場でお声がけくださいませ。

そんなわけで、私の今年のフェスの最大の関心事は「会場の照明」です。ダイスがテカらずに動画が撮影できるかどうか、それが最も重要なポイントであります。

棋譜ミー ユーザーガイド 2017年4月バージョン

棋譜ミーが扱えないケースがいろいろあります。

チェッカーをなるべく重ねない

現状ではチェッカーが重なっている場合をうまく扱えません。「チェッカーが重なる」とは以下のような状態のことです。右上にご注目。

チェッカーが重なって置かれてしまうと、そのターンのムーブを特定できません。やむを得ない場合を除いて、チェッカーをできるだけ重ねないようにしましょう。

例えば序盤で65が出て 24/13 と動かしたとします。チェッカーを重ねずに並べることができる場合は、下図のようにムーブしてください。

これはチェッカーをバーに置く場合も同じです。2枚以上がオン・ザ・バーだったとしても、一枚ずつ並べましょう。

カメラはボードの真上に

試合を撮影するカメラは、ボードの真上に配置してください。多少横にズレていても支障はありませんが、斜めすぎるとチェッカーやダイスを認識することができず、解析できません。

例えば、カメラが斜めすぎると、バー横のダイスやチェッカーを認識することができません。

また、ボード全体が写っていることも重要です。プログラムは「丸いもの」をチェッカーと認識しますので、チェッカーの一部が写っていなくて半月型になっていると、解析ができません。

解像度は1080pで

様々なマッチ動画でテストして来ましたが、解像度が低すぎる動画では、解析の精度が悪かったです。私は1080pの設定で撮影していますが、もう少し低い解像度(720p)でも大丈夫かもしれないです。
1080pでは動画ファイルのサイズが大きくなり過ぎる問題がありますが、そういう場合はタイムラプスモードが有効です。私は0.5秒ごとのコマ撮りにしています。これなら4時間録画しても、ファイルサイズは1GBくらいです。
棋譜ミーの解析は1秒ごとのフレームで処理していますが、この頻度で解析できなかったことは今までありません。

つまり、フレームレートを上げるよりも、解像度を上げてもらった方が、棋譜ミーとしてはうれしいです。


これらが最も重要なポイントですが、以下も注意してもらえると助かります。

ボードを動かさない
棋譜ミーは、対戦中にボードが固定されている前提でプログラムを作っています。なので、途中でボードが動いてしまうと困ります。実際は多少ずれても平気で、おおよそチェッカーの直径以内のズレなら大丈夫なはずです。
この問題は、いずれプログラム的になんとかしようと思っていますが、現状では制限事項です。

ダブリングキューブについて
ダブリングキューブは、ボード上に一つだけある前提でプログラムを書いています。たまに見かけるのですが、テイクしたキューブをボードの外に置いたり、ダブリングキューブが2つ以上置いてあったりする(シュエットじゃないのに!)のですが、棋譜ミーちゃんが混乱するのでやめましょう。

クロック・スコアボード
ボードの上に置いてあってもなんとかしますが、出来ればボードの外に置いて欲しいです。

だいたいこんなことろです。他にも「ドット柄のシャツを着ない」とか、そんなことにも口を出したい気持ちなのですが、プログラムが未熟なのを人のせいにしている上に、おせっかい過ぎるのでやめておきます。

2017年3月11日土曜日

Web 棋譜ミー

バックギャモンフェスティバル直後から「棋譜ミー」の開発を始めて、すでに5ヶ月も経ちました。未だにプロトタイプの状態ではありますが、徐々に進化しています。

「棋譜ミー」が出来ることは見た目あまり変わっていないのですが、中身の構造は大きく変更しました。1月になってから画像認識処理をごっそり変更した結果、処理の高速化が出来ました。なので2月の四ツ谷で「例会デビュー」し、対戦からリアルタイムで棋譜を起こすデモもやりました。当時はムーブの解析処理も一部実装していない状態でしたので、結構エラーが出ちゃいました。

最近は、細かいバグも都度対応しているので、エラーが起きる確率もだいぶ下がってきました。このデバッグ作業はこれからも果てしなく続くでしょうから、少しでも効率的にデバッグできるよう、エラーが起きた場面を即座に画像で確認出来るようなHTMLを出力する機能を追加しました。これで私のデバッグ作業は飛躍的に効率化できたのですが、マッチ動画を振り返るツールとしてもなかなかに使える気がします。こちらのページをご覧ください。名人リーグの私と鈴木さんのマッチです。

画面の左側のテーブルがいわゆる棋譜のデータですが、いくつかリンクがあります。一番左のリンクは、「出目を読んだ動画のフレーム」です。ここを参照すれば、どんな目がロールされたのかおよそ分かります。その隣のリンクをクリックすると、棋譜ミーが「ムーブを確定させたフレーム」が表示されます。なので、これらのフレームをぽちぽち辿っていけば、ゲームの流れを把握することができます。マウスでぽちぽちクリックするのは面倒なので、キーボードの左右矢印キーでもフレーム間を移動できるようにしました。現在は不完全な棋譜しか出力できない棋譜ミーですが、このページを見ながら修正していけば、それほど時間がからないのではないかと目論んでいます。(もしくはこれを見ながらXGで棋譜入力した方が早いかもw)


先日、リーグ戦の対戦のため赤坂に行きました。もはや行きつけの caffe beneで、盤聖戦のために上京されていた永井一矢さんにお会いしました。永井さんは私が棋譜ミーを開発していることをご存知でしたので、しばらくその話で盛り上がりました。その時話したネタも、このWebページに入れてみました。

動画には、当然ながら「時間」の情報も含まれています。つまり、あるムーブをしてから次のムーブが行われるまでどれくらい時間を要したかは、先ほど説明したフレームの番号を引き算すれば求めることができます。実戦でウンウン悩んだポジションこそ、後で振り返りたいものではないでしょうか? そんなわけで、60秒以上かかったムーブやアクションはオレンジ、120秒以上は赤でマークしてあります。


開発を始めた当初は、リーグ戦のマッチ動画解析に実践投入とか思っていたのですが、すでにリーグ戦は終わってしまいました・・ 棋譜を振り返るためのツールを開発していたはずが、いつの間にか棋譜を起こすこと自体が目的となってしまい、もはや振り返りなど全くしていません。それどころか、プログラミングが面白すぎるので、プログラミングの合間に思い出したようにギャモンをする状態となっています。それでもリーグ戦の成績が良かったのは、出目が良かったからに他なりませんが、開発用に提供していただいたマッチ動画がいずれも世界屈指のプレーヤーの動画だったのが奏功したかもしれないです。横田名人はたくさん動画を見たそうですが、私もこの数ヶ月でだいぶ見ましたから、その効果が少しはあったのかもしれないです。

棋譜ミーは私一人で作っていますが、他の人と意見交換するのは大事だと思っています。先日の永井さんとの会話もアイデアが膨らみましたし、これからもいろんな人の意見を伺いつつ、改善して行きたいと考えています。プレーヤーの皆さんから、コメントいただければうれしいです。

2017年1月28日土曜日

棋譜ミーボード

棋譜ミーの開発を続けています。
試行錯誤の毎日ですが、結局のところ、ボード上にあるチェッカー、ダイスとキューブが正確に認識できれば、あとはひたすらバックギャモンのルールに従って処理をすればいいわけです。
ところが、肝心の物体認識処理はすこぶる難しい。協力者の方に試合の動画を提供してもらい、様々な条件でうまくいくようにできないものかと頑張っているところです。

ここまでやってみて難しい条件だったのは以下のような場合です。
  • 照明が暗い上に、ボードの絵柄とチェッカーのコントラストが弱い
  • チェッカーがテカっていて、色が判別しづらい
  • チェッカーのテクスチャが複雑で、ダイスと誤認識してしまう
などなどです。

棋譜ミーボード

他にも課題はたくさんあるのですが、それらを少しでも解消すべく、棋譜ミーにとって都合のよいボードを考案しました。これです!

バックギャモンのボードは、ポイントの色とチェッカーの色が同じ場合が多いです。見た目にはこの方が美しいと思うのですが、チェッカーの場所を特定したいプログラムにとっては悪条件です。理想的には、例えば以下のようになっていたらいいです。背景がぼんやりした色で、チェッカーの色とハッキリ違っているといいな。アプリだと色が簡単に変更できて便利ですね。

リアルボードはアプリと違ってどうしようも無い気がしますが、そんなことはない。自分でチェッカーを別の色に塗ってしまえばいいのでは?
ということで、東急ハンズでスプレー塗料を買ってきて、緑と白だったチェッカーを、ピンクと青にリノベしました!
塗装したチェッカーを乾かしているところ

ボードの背景が緑ベースなので、色空間上で距離の遠そうな赤と青に近い色にしました。さらに大事なポイントは「つや消し」タイプの塗料であること! チェッカーのテカリは侮れない要素で、黒のチェッカーがテカっているために、見た目は白になっていることさえあります。こうなると判別はすこぶる難しいのが現状です。

ちなみに元はこうでした。


ARダブリングキューブ

チェッカーは常に丸い。プレシジョンダイスは、色は違えどデザインは共通。なので、これらはかなり正確に認識することができます。問題はダブリングキューブです。デザインも大きさもまちまちで、世の中のあまねくダブリングキューブを正確に認識するのは至難の技に思えます。
これではいつまで経っても仕事が終わらないので、棋譜ミー専用ダブリングキューブを試作しました。

ダイスについているQRコードみたいなものは、「ARマーカー」というものです。プログラムで処理すると、画像からARマーカーの位置を簡単に見つけることができます。これを使えば、キューブの認識はpiece of cakeです。試作品は、これまた東急ハンズで買ったサイコロ型の木材(70円)に紙を貼り付けたものです。実際はもう少しサイズを小さくしても認識可能だと思います。
ARキューブの制作現場

理想のバックギャモンボードとは

棋譜ミー的に都合の良いボードの条件を列挙すると、以下のようになります。

  • ボードの背景とチェッカーの色のコントラストが強い
  • チェッカーがテカらない素材である
  • ボードの縦方向のピッチが長く、両側からチェッカーを6枚ずつ並べても重ならない
  • 「バー」の幅が広い
  • ARダブリングキューブ装備!

ボードの縦方向が狭いと、チェッカーをチェッカーの上に重ねる場面が多くなります。このケースもチェッカーを認識するのが難しく、現状は対応していません。プレイヤーの皆さんは、なるべくチェッカーを重ねないようお願いいたしますw

この条件を見ると、先日矢澤プロが紹介されていたP-40ボードはとても良いです。ボードが自由にデザインできるシステムは素晴らしいですね。オーダーする際には、配色をパッキパキにしてください!!
唯一困ったことはバーの幅が狭いこと。これの何が困るかというと、オンザバーのチェッカーと、バーの隣のポイントにあるチェッカーが見た目重なる場合があるからです。特にボード斜め横から撮影した画像では、この問題が顕著になります。Phil先生、ぜひ広幅バータイプのP-40ボード作ってください!
もう一つP-40で困るのは、このボードで私がまだ一度も勝ってないこと! 相手はそれぞれ景山プロとipetaniさんだったので、まあ無理からぬ結果ではありますが・・


そんなわけで、棋譜ミーと棋譜ミーボードの進化はきっと続きますっ!!

2016年11月23日水曜日

棋譜ミー 誕生

"ピップおじさん"を公開してから、たくさんの方から反響をいただき、棋譜起こしソフトの開発を続けてきました。「12月までにプロトタイプ」が目標でしたが、マイルストーンをクリアすることできました。Take a look!


10月の木曽野-滝沢戦5pointマッチのムーブを、ほぼ全部解析することができました。ダイスとチェッカーとキューブの認識ができたなら、棋譜起こし部分の製造は難しくないんじゃないかと高をくくっていたのですが、実際にやってみたら(いつものことですが)思っていたより大変でした。

アプリの名前はテクノくんが付けてくれました!
私としては珍しく、クラス図を書いたり状態遷移図を作ったりと、ソフトウェアの設計もきっちりやりました。ところが、実際のプレイ動画では想定外の事象が多々発生していたので、最後は魔改造を繰り返す羽目になりました。テントを作るくらいのつもりだったのが、すでに小屋くらいの規模になってしまいました。あと2回くらい建て直したら(ソフトを作り直したら)、まともなソフトウエアになるんじゃないかと思います。

このソフトの開発を通じで、ちょっとした気づきもありました。
例えば、出目にはゾロ目とそれ以外があります。ゾロ目じゃない出目の場合は、ムーブの種類は本質的に4種類しかありません(バリエーションを含めると6通り)。それは、
  • 異なるポイントから同じポイントにチェッカーを進める(ポイントメイク)
  • あるポイントから2つのチェッカーを動かす
  • 2箇所のポイントをそれぞれ動かす(3つのバリエーションがある)
  • 一つのチェッカーを連続して動かす(ラン)
プレイするときには、どのポイントを動かすのか?という問題がありますが、棋譜起こしプログラム的には、上記が区別できれば十分です。
ところが、同じような分類をゾロ目でやってみると大変です。組み合わせの数が途端に多くなります(とはいえ、なんとか整理できるレベル)。プレイしていてもゾロ目は難しいわけですが、棋譜起こしプログラムにとってもゾロ目は難題です。

もう一つの気づきは、"on the bar"のチェッカーです。ピップを数えるときは"25"と数えているので、気づいても良さそうなものですが、バーに乗っているチェッカーは「25ポイントにある」と考えるのが正しいです。少なくともプログラム的にはそう扱った方が便利でしたし、特別扱いする理由は何もありませんでした。
この気づきが実戦で役に立つことがあるかと思っていたところで、kazuさんのブログを読んでハッとしました。バーに乗っていることによる錯覚、新たなテーマ図だなと思いました。続きはこちらで。


次の目標は、先日の名人リーグ寺尾戦19pointマッチの解析です! こんなことやってるより、ポチポチ棋譜入力した方が早いのは分かっていますが、もっと大きな野望のために開発を続けます。