最高の戦艦AIは何ですか?質問する

最高の戦艦AIは何ですか?質問する

戦艦!

2003年(17歳)に私は戦艦AIコーディングコンテスト。そのトーナメントでは負けてしまいましたが、とても楽しかったし、たくさんのことを学びました。

今、私は最高の戦艦 AI を求めてこのコンテストを復活させたいと思います。

ここはフレームワークは現在Bitbucketでホストされています

優勝者には +450 の評判が与えられます!コンテストは2009 年 11 月 17 日から開催されます。17 日の午前 0 時以降のエントリーや編集は受け付けられません。(中央標準時) チャンスを逃さないように、早めにエントリーを送信してください。

この目的を達成するには、コンテストの精神に従ってください。

ゲームのルール:

  1. ゲームは 10x10 のグリッドでプレイされます。
  2. 各競技者は、5 隻の船 (長さ 2、3、3、4、5) をグリッド上に配置します。
  3. 船舶は重なり合うことはできませんが、隣接していることは可能です。
  4. その後、競技者は交代で相手に単発射撃を行います。
    • ゲームのバリエーションでは、生き残った船ごとに 1 発ずつ、一斉射撃ごとに複数の弾を発射できます。
  5. ショットが沈むか、ヒットするか、ミスするかは、対戦相手が競技者に通知します。
  6. いずれかのプレイヤーの船がすべて沈没するとゲームプレイは終了します。

コンテストのルール:

  1. 競争の精神は、最高のバトルシップ アルゴリズムを見つけることです。
  2. コンテスト精神に反するとみなされるものはすべて失格の理由となります。
  3. 相手を妨害することは競技の精神に反します。
  4. マルチスレッドは、次の制限の下で使用できます。
    • 自分の番でない間は、1 つのスレッドしか実行できません。(ただし、任意の数のスレッドが「一時停止」状態になる場合があります)。
    • 「通常」以外の優先度でスレッドを実行することはできません。
    • 上記の 2 つの制限を考慮すると、自分のターン中に少なくとも 3 つの専用 CPU コアが保証されます。
  5. プライマリ スレッドでは、各競技者に対してゲームごとに 1 秒の CPU 時間制限が割り当てられます。
  6. 時間切れになると、現在のゲームに負けることになります。
  7. 処理されない例外が発生すると、現在のゲームに負けることになります。
  8. ネットワーク アクセスとディスク アクセスは許可されていますが、時間制限がかなり厳しいと感じるかもしれません。ただし、時間的負担を軽減するために、いくつかのセットアップおよびティアダウン メソッドが追加されました。
  9. コードは回答として Stack Overflow に投稿するか、大きすぎる場合はリンクしてください。
  10. エントリの最大合計サイズ (非圧縮) は 1 MB です。
  11. 公式には、.Net 2.0 / 3.5 が唯一のフレームワーク要件です。
  12. エントリは IBattleshipOpponent インターフェイスを実装する必要があります。

スコア:

  1. 101 ゲーム中 51 ゲームを優勢に進めた者が試合の勝者となります。
  2. すべての競技者は、ラウンドロビン形式で互いに対戦します。
  3. その後、参加者の成績上位半数によるダブルエリミネーション方式のトーナメントで勝者を決定します。(実際には、半分以上の 2 の最小の累乗です。)
  4. 私はトーナメント APIトーナメントの枠組み。
  5. 結果はここに掲載されます。
  6. 複数のエントリーを提出した場合、最高得点のエントリーのみがダブルエリミネーションの対象となります。

頑張ってください!楽しんでください!


編集1:
感謝解放された関数にエラーが見つかりましたShip.IsValid。修正されました。フレームワークの更新バージョンをダウンロードしてください。

編集 2:
統計をディスクに保存することなどに関心が集まっているため、必要な機能を提供する、時間制限のないセットアップおよびティアダウン イベントをいくつか追加しました。これは、半ば破壊的な変更です。つまり、機能を追加するためにインターフェイスが変更されましたが、それらに本体は必要ありません。フレームワークの更新バージョンをダウンロードしてください。

編集 3:
バグ修正 1:GameWonタイムアウトGameLostの場合にのみ呼び出されていました。
バグ修正 2: エンジンがゲームごとにタイムアウトすると、競争が終わらなくなります。
フレームワークの更新バージョンをダウンロードしてください。

編集4:
トーナメント結果:

ベストアンサー1

試合ごとにもっと多くのゲームを行うという提案に賛成します。50 ゲームを行うのは、コインを投げるようなものです。テスト アルゴリズム間の合理的な違いを得るには、1000 ゲームを行う必要がありました。

ダウンロードドレッドノート 1.2

戦略:

  • ヒット数が 0 を超える船のすべての可能な位置を追跡します。リストは 30K を超えることはなく、すべての船のすべての可能な位置のリスト (非常に大きい) とは異なり、正確に保持できます。

  • GetShot アルゴリズムには 2 つの部分があります。1 つはランダム ショットを生成する部分、もう 1 つはすでに命中した船を完全に沈めようとする部分です。命中した船がすべて沈む可能性のある位置 (上記のリストから) がある場合は、ランダム ショットを実行します。それ以外の場合は、最も可能性のある位置 (重み付け) を排除するショット位置を選択して、船を完全に沈めようとします。

  • ランダム射撃の場合は、沈没していない船の 1 隻がその場所に重なる可能性に基づいて、射撃に最適な場所を計算します。

  • 統計的に敵が射撃する可能性が低い場所に船を配置する適応アルゴリズム。

  • 統計的に敵が船を配置する可能性が高い場所を優先して射撃する適応アルゴリズム。

  • 船同士が接触しないように配置します。

おすすめ記事