第1回大会の結果

2014年1月25日(土) 14:00 から第1回ネオ富豪大会が開催されました。
メイン会場は(株)ネオジニア事務所、関係者含め参加者は全7名、うちスカイプでのリモート参加の方が1名でした。

エントリープログラム一覧(プログラム名またはニックネーム)

プログラム名またはニックネーム [プログラミング言語] (敬称略)
  • risa@徹夜 [JavaScript]
  • Mitchy [JavaScript]
  • kazufsaf [Haskell]
  • Erami [C#]
  • ネオ爺2 [C++11]
  • まつ and てら [JavaScript] (残念ながら当日不参加)
  • Vinculo [プログラムではなく人力での参戦] (今回の企画の言いだしっぺ)

優勝者

クラスAの優勝は、"risa@徹夜" でした!おめでとうございます!

クラスBは、該当者なしとさせていただきました。

記録

プログラムでの参加者が5名だったため、2つの組に分かれて予選を行いました。 予選では一人が敗退となります。
1つの対戦は人間とCOMを加えた5人対戦とし、10回戦まで行って累計得点数の多かった者が勝者となります。
得点は、大富豪5点、富豪4点、平民3点、貧民2点、大貧民0点 となっています。
なおCOMはクイックプレイ用のプログラムとなっています。

〔おことわり〕 大会当日、上記の通り各10回戦を実施したつもりでしたが、人力用のプレイプログラムの接続処理に問題があったようで、 実際には1回戦目がスキップされて9回戦しか行われておりませんでした。 以降の記録表記および再現観戦では、スキップされた1回戦目をノーカウントとし、実質9回戦での回数表記としています。


【クラスA 予選1組】

記念すべきネオ富豪大会の最初の対戦は、人間にはかなわないもののCOM1にもなかなか勝てないという、ややレベルの低いバトルとなりました(笑
強いカードが早い段階で出され、手札に弱いカードばかり残っていく傾向の局面が目立ちました。
一旦大富豪になったCOM1が怒涛の勢いで連勝を重ねると、 5回戦での "峯&中西" による無謀な革命によってさらに場が荒れ、観戦していた参加者も少しずつ盛り上がり、 自分の作ったプログラムの行動に一喜一憂しながら、最後まで楽しめました。
また、"Mitchy" はゲーム開始時と終了時に必ず挨拶ツイートをしてくる、何ともお行儀のよいプログラムでした。

成績表
対戦者(敬称略、接続順)総合得点大富豪富豪平民貧民大貧民
峯&中西 …(峯さんとVinculoさんによる人力) 38点4回3回2回0回0回
ネオ爺2 22点0回1回4回3回1回
kazufsaf 8点0回1回0回2回6回
Mitchy 21点1回1回2回3回2回
COM1 37点4回3回1回1回0回

【クラスA 予選2組】

続く予選2組では、先ほどの組とは場の雰囲気がガラリと変わって、ハイレベルな戦いとなりました。
2回戦でマスタサーバの大サービス(バグ?)によって何とジョーカーが2枚配られるというハプニングや、 "Erami" が決断したようにカードを切り始めるとなぜか最後に弱いカードを手札に残してあがれないというシーンが何回かあり (5回戦では上がれるのにパスしてしまう)、観戦者を沸かせました。
前半戦は大富豪になったCOM2がそれなりの強さを見せ、後半戦も人間が苦戦するほどのハイレベルな戦いが続きました。
結果を見てみると "risa@徹夜" の圧勝。 しかもそのプログラムは、ジョーカーを他のカードとペアにして出すことが出来ないそうなのですが、それでも十分な強さを見せてくれました。

成績表
対戦者(敬称略、接続順)総合得点大富豪富豪平民貧民大貧民
risa@徹夜 41点5回4回0回0回0回
Erami 29点0回4回3回2回0回
峯&中西ペア …(峯さんとVinculoさんによる人力) 27点1回1回4回3回0回
COM1 8点0回0回0回4回5回
COM2 21点3回0回2回0回4回

【クラスA 決勝】

いよいよクラスAの決勝戦です。
初戦で長考型の "ネオ爺2" が勝利し、続く2戦目でも2位となり順調に勝ち進んでいくかと思われましたが、 3回戦で "峯&中西" が放った革命によって大転落。以降、なかなか勝ちの機会を見いだせず、 また3を2枚持っているときになぜか1枚ずつ出してしまって勝利を逃してしまうシーンも見られ、 大苦戦となったようです。
後半戦は "risa@徹夜" と "Mitchy" が順調に勝ち点を稼ぎ合う進行となり、手に汗握る優勝争いが続きました。
最終の第9回戦では、またしてもジョーカーが2枚配られ、大貧民 "ネオ爺2" が初手から革命を仕掛けると "Mitchy" が革命返しをするという劇的な展開が見られ、大いに盛り上がりました。
実は "Mitchy" は、その直前に4枚出しに対応するためのプログラム修正が即興で行われており、 すぐさま実戦での大技披露となりました。

成績表
対戦者(敬称略、接続順)総合得点大富豪富豪平民貧民大貧民
峯&中西 …(峯さんとVinculoさんによる人力) 37点3回4回2回0回0回
ネオ爺2 16点1回1回1回2回4回
risa@徹夜 34点2回4回2回1回0回
Mitchy 30点3回0回3回3回0回
COM1 9点0回0回1回3回5回

【クラスA エキシビションマッチ】

当初の予定では、本戦終了後エキシビションとして優勝プログラム vs 開発者たちを考えておりましたが、 プログラムだけの対戦を行ってみよう、ということになりました。
もともと、人間が最低一人参加しないとマスタサーバに対戦開始を指示できない仕様だったのですが、 またしても "Mitchy" 開発者のアドリブ対応によって、マスタサーバに対戦開始指示を送る機能を "Mitchy" に 付けていただいたおかげで、プログラムだけの対戦が実現しました。 (この辺は普段からハードな開発現場で鍛えられているのか、流石の対応力です。)
なお、"Erami" は開発者のスケジュールのため途中退場となっていましたので、代わりに "ネオ爺1" を参戦させて 5人対戦としました。("ネオ爺1" は "ネオ爺2" の簡易思考版です)

エキシビションでは、"ネオ爺2" が2回戦3回戦と革命を連発し、富豪以上の有利な地位を確保しながら進み、 その後を "Mitchy" が正確な打ち筋で着々と追うという展開になりました。
"kazufsaf" はここにきて革命時の対応が上手くできていないことが判明し、かなりの苦戦を強いられたようです。
本戦で優勝した "risa@徹夜" は手札にツキがなく、なかなか勝機を見いだせないまま後半戦へ。
9回戦で "Mitchy" が大富豪となって総合得点35点になり、なんと "ネオ爺2" と同点となって最終10回戦へ。
10回戦では、派手な展開は特になく地味な戦いとなりましたが、"Mitchy" が "ネオ爺" をおさえて先にあがり、総合39点でトップとなりました。

やはり人間が一人いるのといないのとでは展開が全然違ってくるようで、プログラムの打ち筋というか個性のようなものが顕著にみられました。
初期手札の運もさることながら、プログラム同士の相性といったものもあるのかもしれません。

成績表
対戦者(敬称略、接続順)総合得点大富豪富豪平民貧民大貧民
risa@徹夜 23点1回2回0回5回2回
Mitchy 39点3回4回2回1回0回
ネオ爺2 38点4回3回2回0回1回
kazufsaf 12点0回0回2回3回5回
ネオ爺1 28点2回1回4回1回2回

【クラスB 試験対戦】

クラスBは、エントリーが "ネオ爺2" だけだったのですが、"risa@徹夜" 開発者が「なんとかなるんじゃないか」、 ということで、せっかくなので少しやってみることになりました。
2回戦、4回戦、5回戦で "Office Vinculo" が階段革命を乱発し、難解な局面が続きました。 やはり人間にはかないませんでしたが、3回戦ではジョーカー待ちの "ネオ爺2" が "ネオ爺02" に革命返しされるなど、 面白い展開が楽しめました。
5回戦までの試験的な対戦ではありましたが、せっかくなので対戦記録を掲載しておきます。 ("risa@徹夜" はクラスBルール未対応での対戦となっております)

成績表
対戦者(敬称略、接続順)総合得点大富豪富豪平民貧民大貧民
ネオ爺2 10点0回1回2回0回2回
risa@徹夜 13点1回1回0回2回1回
ネオ爺02 17点1回1回2回1回0回
Office Vinculo …(Vinculoさんによる人力) 19点3回1回0回0回1回
COM1 11点0回1回1回2回1回

参加プログラムの開発者へのアンケート

プログラム名またはニックネーム risa@徹夜
プログラミング言語や使用ライブラリ JavaScript
開発環境 Windows 7 + Eclipse + Chrome
ステップ数 約450step
制作所要時間 約8時間
アルゴリズムの構想や感想など 頭の中にあった構想を全て盛り込めなかった。 既に出されたカードを認識するところまでは実装できたが、 それをもとに、上がれるかどうかを判定するところまでは至らなかった。 ヒストリデータの解析を行う処理も実装しようと思ったが、間に合わなかった。 次回は、もっと人工知能的なアプローチでアルゴリズムを構成したい。
プログラム名またはニックネーム Mitchy
プログラミング言語や使用ライブラリ JavaScript
開発環境 Windows 7 + 秀丸 + Chrome
ステップ数 約450step
制作所要時間 約10時間
アルゴリズムの構想や感想など 自分の手札の中から最強のものと、それ以外のカードを分類識別し、 何を出せば次の親になれるかを判断しながら行動するようにした。 基本的には弱いカードから順に出すようになっている。 4枚来た時にバグがあったようで、本戦対戦中にそれに気づいてその場で修正した。 すると、決勝最終回で奇跡的な革命返しを打たせることが出来た。
プログラム名またはニックネーム kazufsaf
プログラミング言語や使用ライブラリ Haskell + aeson + websockets
開発環境 Mac OS + Emacs
ステップ数 約300step
制作所要時間 約10時間
アルゴリズムの構想や感想など 今回はHaskellの習得が自分のテーマでもあった。 2割ぐらいの習得率でした。 もっと手札の評価を行うようなアルゴリズムを実装したかった。
プログラム名またはニックネーム Erami
プログラミング言語や使用ライブラリ C# + WebSocket4Net
開発環境 Windows 7 + Visual Studio 2012
ステップ数 約440step
制作所要時間 約8時間
アルゴリズムの構想や感想など 久々にプログラミングをしたので、頭の中で思っていることを実装する事ができなくて苦労しました。 既に出ているカードを解析して手札を切るロジックや、ギャンブル的なロジックの構築ができず、 ただ間違いなく手札を切ることしかできなかったので、 次回開催時は全体の場を見て最適なカードが出せるようなアルゴリズムが組めたらと思う次第です。
プログラム名またはニックネーム ネオ爺2
プログラミング言語や使用ライブラリ C++11 + libwebsockets + picojson.h / Java (Androidアプリ化のため)
開発環境 Ubuntu 13.04 + GVim + gcc4.7 / Android NDK r9 + Eclipse (Androidアプリ化のため)
ステップ数 約2000step (Android部分を除く)
制作所要時間 約50時間
アルゴリズムの構想や感想など アルゴリズムは以下のような感じ。
1. 手札のカードの組み合わせから、出すことが出来る手をすべて列挙する
2. 場に出たカードをもとに、流せる手と流せない手に分類する
3. 流せる手を出してから流せない手を出す、という組み合わせで手順の木構造を展開し、勝利確定手順がないかを幅優先探索で求める。
4. 勝利確定手順が見つからない場合は、一手出した後の残りの手札を評価し、もっともよい評価値になる手を出す。
手札の評価は、そのカードより強いカードが何枚残っているか等を得点式で計算しているため、得点が低いほうがよい手札となる。 ジョーカーや必ず流せる手は評価値がマイナスとなるようにし、無駄遣いすると評価値が上がるようにした。 また、局面の進行状況に合わせて、カード1枚の評価基準値が変動するようにし、序盤は温存型で、終盤では挑戦的になるようパラメータ調整したが、本戦では様々な対戦相手と状況に対応し切れておらず、まだまだ改善の余地があると思う。
感想としては、ハッキリ言って大変でした。(笑
とりあえず libwebsockets を Android NDK でビルドする方法が見つからず苦労した。 途中、期日までに完成できないんじゃないかと方針転換も検討したが、何とかそれなりの強さになるまでアルゴリズムを作り上げることができて本当に良かった。
Androidアプリとしてパッケージングするのは当初からの構想でした。 やはり開催元の参加プログラムとあっては、それぐらいの完成度を追求しないと画竜点睛を欠くと思ったからです。
プログラム名またはニックネーム まつ and てら (残念ながら当日不参加)
プログラミング言語や使用ライブラリ JavaScript
開発環境 Windows 7 + Brackets + Chrome
ステップ数 200step
制作所要時間 10時間
アルゴリズムの構想や感想など 二人がかりでしたが、仕事&体調不良で当日参加出来ず残念でした。
触り慣れていないJavascriptだったので四苦八苦しながらの実装になりました。
やりたいことの3割程度しか実装できませんでしたがいろいろと勉強になりました。
次回は、やりたいことの6割ぐらいまでは詰め込めて、かつ、ちゃんと参加できるようにしたいと思います。