注:試合を実行するために必要な言語をインストールできないため、この課題は現在無効です。他の誰かがそれをする時間と興味を持っているなら、私は反対しません。
リーダーボードについては、投稿の下部をご覧ください。
これは、ボットが2次元グリッドグラフを介してパスを構築する、準協力的なキングオブザヒルチャレンジです。最もトラフィックの多いノードを制御するボットが勝者です。ただし、実際に接続パスを構築するには複数のボットのリソースが必要なので、ボットはある程度連携する必要があります。
ゲームプレイ
以下ではN > 0
、プレイ中のボットの数をみましょう。
グリッド
ゲームは、サイズの2次元整数グリッドで再生されます。そのグリッドの左下座標はです。各座標と3点の座標への発信エッジ有し、およびその上、-coordinatesはモジュロを取られるが 。これは、グリッドが東端と西端で折り返されることを意味します。すべての下部座標はソースであり、すべての上部座標はシンクです。⌊4/3N2⌋ × ⌊4/3N2⌋
(0,0)
(x,y)
0 ≤ y < ⌊4/3N2⌋-1
(x-1,y+1)
(x,y+1)
(x+1,y+1)
x
⌊4/3N2⌋
(x,0)
(x,⌊4/3N2⌋-1)
次の図は8 × 8
グリッドを示しています。
グラフの各頂点は、非アクティブ、アクティブ、または破損しています。すべての頂点は非アクティブで開始され、ボットによってアクティブ化できます。ボットはその後、所有者になります。また、ボットは頂点を破壊する可能性があり、修復できません。
順番を変える
ターンは破壊フェーズと活性化フェーズで構成されます。破壊フェーズでは、各ボットが1つの非アクティブな頂点を破壊する場合があります。その頂点はそれ以降壊れていて、だれもアクティブにできない可能性があります。アクティブ化フェーズでは、各ボットが1つの非アクティブな頂点をアクティブ化できます。それ以降、彼らはその頂点を所有し、他の誰もそれを再アクティブ化することはできません。複数のボットが1つの頂点を所有している場合がありますが、それらがすべて同じターンにアクティブ化される場合です。各フェーズでは、頂点の選択が同時に行われます。
得点
1ラウンドは正確なターンの間続きます。この後、ラウンドは次のように採点されます。アクティブな各ソース頂点から、アクティブな頂点に沿ってランダム化された深さ優先探索を実行します(つまり、各頂点の子がランダムな順序でアクセスされます)。ソースからシンクへのパスが見つかった場合、そのパスに沿ったすべての頂点について、頂点のすべての所有者が1ポイントを取得します。N2
N
ゲーム全体は100ラウンド続き、全体で最もポイントの多いボットが勝者となります。スコアの分散が高すぎる場合、この数を増やすことができます。
追加の規則
- コントローラや他の提出物をいじることはありません。
- 出場者ごとに最大1つの提出。
- 1つのプライベートテキストファイルを除き、ゲームの開始時に完全に消去された外部リソースはありません。
- 特定の敵を倒したりサポートしたりするようにボットを設計しないでください。
- ボットをコンパイルして実行するコマンドを提供します。Debian Linuxで自由に利用できるコンパイラ/インタープリターはすべて受け入れられます。
コントローラー
コントローラーはPython 3で作成されており、GitHubにあります。詳細な手順については、READMEファイルを参照してください。開始するためのAPIは次のとおりです。
- ボットは各ラウンドの開始時に開始され、ラウンドの終了まで持続します。改行で終了するメッセージを使用して、STDINおよびSTDOUTを介してコントローラーと通信します。
BEGIN [num-of-bots] [num-of-turns] [side-length]
先頭に入力されます。DESTROY [turn]
各破壊フェーズの開始時に入力されます。ボットはVERTEX x,y
、頂点を選択するか、で応答しますNONE
。BROKEN [turn] [your-choice] [other-choices]
各破壊フェーズの終わりに入力されます。他のボットの順序は各ゲームの開始時にランダム化されますが、その間は固定されたままです。選択肢はx,y
またはとして表示されN
ます。ACTIVATE [turn]
およびOWNED [turn] [your-choice] [other-choices]
は、アクティベーションフェーズの上記と同等であり、同じセマンティクスを持ちます。SCORE [your-score] [other-scores]
ゲームの終了時に入力されます。- あなたのボットを持っている1秒フェーズの結果を分析し、次の頂点を選択し、ために1秒のスコア与えられた後に終了することを。私は比較的古いラップトップで提出物をテストするので、ここにいくらかのマージンを残した方が良いです。
出力バッファをフラッシュすることを忘れないでください。そうしないと、環境によってはコントローラーがハングする場合があります。
リーダーボード
2015年3月13日更新
Peacemakerは稼働しており、Funnelwebも更新されました。スコアは桁違いに跳ね上がりました。コネクタが2つのゲームの制限時間を超えました。
Funnelweb: 30911
Connector: 18431
Watermelon: 3488
Annoyance: 1552
Explorer: 735
Checkpoint: 720
Random Builder: 535
FaucetBot: 236
Peacemaker: 80
ASCIIアートグラフィックを含む完全なログは、コントローラのリポジトリのにありますgraphical_log.txt
。
いくつかの観察:
- コネクタは、その前の1つの頂点を壊すことで非常に簡単に停止できます。迷惑が頻繁にこれを行うと思います。ただし、Connectorのみがパスを構築できると考えられるため、現時点ではほとんど意味がありません。
- スイカは、たまたま接続パス上にあることでまともなスコアを取得できます(DFSは頂点を使用する可能性が非常に高いため)。
- エクスプローラーはスイカからブドウを育てるのが好きです。
- 更新されたFunnelwebは、グリッドの下半分で通常ラッチされるため、非常に良いスコアを取得します。
- ゲームはかなり長くなっており、私のマシンでは平均ラウンドに約25秒かかります。
4/3*N^2
が、それでもボットは有効なパスの形成に問題がありました。ただし、Connectorはエラーのため一時的に失格となりましたが、修正されたため、ゲームがより面白くなると思います。今夜、別のバッチを実行します。