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マッチの解析です! こんなことやってるより、ポチポチ棋譜入力した方が早いのは分かっていますが、もっと大きな野望のために開発を続けます。

2016年10月11日火曜日

バックギャモンフェスティバル 2016

10月8,9,10日に開催されたバックギャモンフェスティバル 2016に参加しました。忘れないうちに、いろいろあったことを書き残しておこうと思います。

日本選手権 1/8 サテライト

事前のネット予選にもエントリーしていましたが、2回エントリーしていずれも初戦負け。「今年はダイレクトエントリーするか・・」とも考えたのですが、ケチなので1/8サテライトにエントリーしました。
初戦の相手は、東京や横浜の例会でよくお会いする鈴木さん。「何もフェスでわざわざ対戦したくないよね」とお互いに言いつつ対戦しました。途中、スコアでリードされて危なかったのですが、逆転勝ちしました。後から振り返ってみると、この勝利が波に乗るきっかけを作ってくれたような気がします。
2回戦は小倉さん。5月の王位戦以来の対戦でした。このマッチも同じように逆転勝ち、リズムが出てきました。
サテライト決勝は、高知からいらした下元さん。初めての大会だという下元さんに対して、私は対戦中おしゃべり過ぎたようです、申し訳ありませんでした。
ということで、サテライトを勝ち上がることが出来、メインの1枠獲得しました。

日本選手権 メイン

去年の初戦は光吉さんでした。そして今年の相手も光吉さん! そんなことあるかと思いますが、全く知らないプレーヤーよりは、やり易いかもしれないです。去年は私が途中までリードしていたのに、光吉さんに最後まくられて無念の逆転負けでした。今年は一進一退の展開から、最後は私が競り勝ちました!
そして、2回戦の相手は私淑している景山プロでした! これまで対戦していただいたことは一度も無かったので、朝からワクワクしてました。試合の方は、(私を含め)大方の予想通り景山プロがリードを広げる展開となりました。スコアが開いてしまった局面でキューブをどうしたらいいかと悩む場面が多かった気がします。
最後はちょっとだけ粘りましたが、圧倒的なskillの差を感じて負けました。

日本選手権 コンソレーション

コンソレ初戦はEdでした。Edとの試合では途中トラブルがあったのですが、それは後述します。トラブルの後は、私の集中力はmaxとなり、試合は私が勝ちました。
二回戦は長尾くんでした。試合中は、長尾くんのペースに巻き込まれまいと意識してプレイしました。最後の場面では、レースで大量リードしていると判断した私の緩手を長尾くんが見逃さず、6ゾロ連発されて気持ちが折れそうでした。しかし、私もゾロ目振り返して薄氷の勝利でした。
三回戦は香港のSteve。試合の後半、私がいい目を振りすぎて、Steveがぼやくほどの展開で勝ちました。
2日目最後の試合は四鹿さんでした。この試合も出目の良さが継続し勝つことができました。

3日目となり、いよいよコンソレのベスト4でipetani魔王と対戦しました。魔王の強さはニコ生やBackgammonAceで周知の事実ですが、リアルに降臨した魔王も呆れるほど強かったです。
そんなわけで私の日本選手権は、コンソレベスト4という入賞圏内の末席でした。

スコアのトラブル

Edとの試合の中盤、私はスコアボードが更新されていないことに気づき、Edに「スコアが4-5じゃなくて、4-6だよね?」と確認したところ、「違うよ、3-6だろ」とのお答え。最初、彼は何を言っているのだろうかと理解できなかったのですが、要はお互いが記録していたスコアカードのスコアが食い違っていたことが判明したのでした。
これまでのマッチの経過を遡って、お互いの記憶と記録が正しいことを主張し合うのですが、肝心のポイントではお互いの意見が一致しません。

Ed:「君はこのゲームでどうやって2点取ったのか覚えているのかい?」
私:「覚えてませんよ じゃああなたは覚えているのですか?」
Ed:「覚えてる訳ないだろう 私は77歳だぞ!」
私:「だけどスコアボードを更新して、私が2点追加したのを見たでしょ?」
Ed:「スコアボードなんてオレは見てないよ 私のスコアカードの記録が正しいはずだ」

こんな不毛なやりとりになってしまいました。それもこれも、各ゲーム終了後にお互いのスコアカードを確認していなかった我々のブランダーです。なお悪いことに、こういう時にはマッチを録画してないんですよね・・ 後で棋譜起こしをしなかったとしても、できるだけマッチは録画しておこうと思いました。結局、大会を運営している望月さんに仲裁していただき、スコアは決まりました。

Edと議論している時、私は自分の主張を一歩も譲りませんでしたし、感情的になることもありませんでした。なぜなら、ドイツに住んでいた頃はこんなことが結構頻繁に起きていて、最後はどうなるかも見当がついていたからです。こういう時は、お互いに合意できるポイントを事実ベースで積み上げていって、ロジカルに判断すると「これは有りえないよね」というポイントが見つかれば、そこで決着をつけられます。しかし、今回のように事実が乏しい場合は、権威者(ディレクター)の判断に従う他ありません。
大事なことは、感情的になって相手を罵ったりしないことです。議論を散々したとしても、裁定が決まれば握手をしてゲーム再開です。我々がもめてしまったため、望月さんや周りのプレーヤーに大変ご迷惑をおかけしてしまいました。申し訳ありませんでした。

Jörgen Grandstedt

今年の世界チャンピオンにして、人類最多のthree time world championである。Jörgen Grandstedtがフェスティバルに来ていました。フェスティバルの初日、メイン本戦が始まる前にタリーズコーヒーで寛いでいたところ、Jörgenが後ろの席にやってきました。これはチャンスと思った私は声をかけ、しばらくお話させてもらいました。
「一緒に写真撮ってもらえませんか?」とお願いし、Ricoh Theta Sで撮影しました(こんな風に「自撮り」にも使えて便利ですよ)。そのあと、ひとしきりThetaを自慢したところ「そのカメラはどこで買えるのか?」と聞かれたので、その辺のカメラ屋に行けば売ってるはずと教えました。日本のお土産どうしようとかおっしゃってたので、まさかとは思いましたが・・

果たして、フェスの3日目にJörgenがやってきて、「おい、カメラ買ったぞ 使い方教えてくれ」と言われた時はビックリしました。私の営業力も大したものですねw。この後、私の自撮り棒を借りたJörgenは、渋谷の街でどんな写真撮ったかなぁ。


これから

今回の日本選手権で入賞しことに気を良くした私は、ショップで本を買ったりしました。白のダイスは、「自動棋譜取りシステム」のダイス認識をするときに、ダイスの目が黒いものも用意しておこうと思い買いました。
これからしばらくは、自動棋譜取りシステムの開発を続けたいと思います。フェスティバルで多くの方から「pipおじさん」に対するコメントをいただき、私のやる気は最高潮に高まっています。なおかつ、Phil先生も同様のシステムを開発しているそうなので、頑張らないとなーって感じです。アメリカのおじちゃん達はパワフルですね! 負けられんぞ。
目標は、12月までに棋譜取りができるプロトタイプ作って、名人リーグで実証実験に投入したいです。


最後になりますが、バックギャモンフェスティバルの運営の皆様、本当にありがとうございました。来年のフェスティバルも楽しみにしています。