今回からConnect Xコンペに参加したいと思います。
Connect Xは、ボードゲームの一種で上からコインを交互に落として、縦か横か斜めに4枚コインをそろえた方が勝ちというルールになっています。
ConnectX Getting Startedというスタート練習用のノートブックがありますのでこれを試しに実行してみます。
Kaggle環境のインストール
下記バージョンのKaggle環境をインストールする必要があるようです。
Connect Xはバージョンに依存する環境なんでしょうかね。
[ソース]
1 | !pip install 'kaggle-environments>=0.1.6' |
[結果]
問題なくインストールすることができました。
Connect X環境の作成
Connect X環境を作成します。
[ソース]
1 | from kaggle_environments import evaluate, make, utils |
エージェントの作成
エージェントを作成します。
ここではサンプルとしてランダムにコインを落とす場所を決めているようです。
今後はこのロジックを実装していき勝率を上げていけばいいんですね。
[ソース]
1 | # This agent random chooses a non-empty column. |
エージェントのテスト
上記で作成したエージェントのテストを行います。
ただ相手のロジックもランダムにコインを落とすようなので・・・・今回はただの動作確認用です。
[ソース]
1 | env.reset() |
[結果]
上記のようなボードが現れてコインが次々に落とされ、コインが4つそろったら終了になります。
アニメーションとして動くのでちょっとおもしろいです。
エージェントのテストと訓練
エージェントのテストと訓練を行います。
[ソース]
1 | # Play as first position against random agent. |
[結果]
一回の動作(どの位置にコインを落とすのか)ごとに、その動作がデバッグ表示されます。
エージェントの評価
作成したエージェントを評価します。
[ソース]
1 | def mean_reward(rewards): |
[結果]
ランダム選択の相手との結果と、NegaMax法の相手との結果(平均報酬)が表示されます。
ゲーム終了時に勝つと 1 が、負けると 0 が、どちらでもない場合 (引き分け・勝負がついていない) だと 0.5 が報酬として得られるとのことなので、ランダム相手にはたまたま勝ち越し、NegaMax相手には全敗したということになります。
エージェントと対戦
手動でエージェントとの対戦ができます。
[ソース]
1 | # "None" represents which agent you'll manually play as (first or second player). |
[結果]
マス目をクリックしてみたのですが、「Processing…」と表示されたまま動作しませんでした。
提出ファイルの書き出し
提出用のファイルを出力します。
[ソース]
1 | import inspect |
[結果]
問題なく出力されました。
提出ファイルのチェック
提出用のエージェント同士で対戦させて、提出ファイルの妥当性をチェックするようです。
なぜ妥当性をチェックする必要があるかというと、「完全にカプセル化されていてリモート実行できることを確認するため」???とのことでした。
[ソース]
1 | # Note: Stdout replacement is a temporary workaround. |
[結果]
エラーになってしまいました。
メソッドがないという意味かと思いますが、仕様の変更があったのでしょうか。
おいおい調査していきたいと思います。
一通りConnect Xの動作方法が分かったので、これから少しずつ調査・実装・改善を行っていきます。