キングオブザヒルボットのヒント


12

キングオブザヒルチャレンジに参加するボットを作成するための一般的なヒントは何ですか?チャレンジを検討してからボットを作成するまでの戦略は何ですか?どのデータ構造が最も便利だと思いますか?

回答ごとに1つのヒントを投稿してください。


16
これは特定の問題に大きく依存しているように感じます。
基金モニカの訴訟

@QPaysTaxes他の多くのヒントの質問の後、これを直接モデル化しました。この質問を改善する方法はありますか?また、これらの古いヒントの質問も修正する必要がありますか?
mbomb007

古いヒントの質問は、私が知る限り、言語に基づいています。つまり、ヒントは普遍的ですが、使用しない可能性があります。この質問は、「コードゴルフチャレンジのヒント」に似ています。チャレンジに完全に依存しています。しかし、以下の答えが証明するように、いくつかの普遍的なものがあります。私は対立しています。
ファンドモニカの訴訟

2
私はあなたが別の言語の多くは、とにかくさまざまな課題に機能を使用するので、これは、「(LANG)でのゴルフのためのヒント」などの特定の質問に限り依存だと思う
破壊可能なレモン

回答:


4

ナッシュ均衡を見つける

これは、KOTHが比較的単純な決定セットを含み、少数のプレーヤー(通常2人)のみを含み、決定論的である場合に非常に重要な概念です。ナッシュ均衡は「グリッドロック」ポジションを表します。2人のプレイヤーが2つの戦略を決定した場合、2人のプレイヤーはそれらのポジションに効果的にロックされます。

ナッシュ均衡が重要なゲームの例:

  • Rock-Paper-Scissors(-Lizard-Spock)、「無敵」戦略はランダムプレイ
  • Morra、平衡の「スペクトル」を持っています。ピーターテイラーは彼の答え良い例をここに書いた。
  • 囚人のジレンマ、「誰もが負ける」グリッドロックを持つことで有名な協力ゲーム

平衡を見つける方法

実際に均衡を見つけることは、実際にはほとんどの単純なゲームで非常に簡単であり、多くの場合非常に直感的です。トンの様々な方法についての詳細は、インターネット上で見つけることができます。通常は適用される基本概念は、2人のプレーヤーが使用できる戦略のリストを作成することです(ゲームで提供されるオプション)。ある戦略が別の戦略に「支配されている」場合、その戦略はリストから削除され、プロセスが繰り返されます。「支配」とは、戦略Aが戦略Bよりも常に同等以上の結果を与える場合、残りのすべての敵戦略に対して、戦略Bをリストから削除できることを意味します。

例:じゃんけん

RPSには「混合」平衡と呼ばれるものがあります。これは、分布が関係していることを意味します。同じ動きを繰り返しプレイするのではなく(クイック敗北につながる)、1/3のロック、1/3のペーパー、1/3のハサミをランダムな分布でプレイします。ランダムにプレイする場合、対戦相手が私に有利になるためにできることは何もありません。対戦相手がランダムにプレイしないことを選択した場合、それは彼の側に脆弱性を作成するだけです。

混合平衡のゲームは、おそらくPPCGで最も一般的です。なぜなら、それらは多くの形をとることができるからです(純粋な平衡で考えることができる唯一の興味深いゲームは、囚人のジレンマです)。混合平衡は一様にランダムである必要はなく、単に毎回同じ動きをすること以外の何かに注意する必要があります。

この情報を使用する

ゲームのナッシュ均衡は、多くの場合、操作を試みる必要がある「ベースライン」を表します。RPSでは、ランダムにプレイすることで、パックの中央付近でのフィニッシュスポットが保証されます。トップに移動するには、他のプレーヤーの弱点を特定し始める必要があります。

これを行うには、相手の弱点が不確かな場合に均衡を保つ必要があります。それらの弱点が特定されたら(相手が平衡状態にないことを検出したら)、平衡状態から穏やかにシフトして、相手を利用する必要があります。このアクションは、次に、あなた自身の弱点を作成します。その後、対戦相手が戦略を変更していることを検出する必要があります。これにより、攻撃を停止してランダムプレイを再開できます。

平衡からの変動の検出

これはかなり難しく、私は専門家ではありません。バリエーションにはさまざまな形式があります。

  • ハサミの2倍の頻度でロックを弾くRPSプレーヤーや、紙を弾かないRPSプレーヤーなど、理由のない他のオプションの上/下のオプションを好む。比較的単純な統計でこれを検出できます。
  • 予測可能なパターンで、現在の動きを過去の動きに基づかせる。これには、コピーキャット、「最後の動きを打つもの」ボット、または「サイクリング」ボットが含まれます。動きがランダムではない場合でも、全体の動きの分布を均等に分散できるため、これを検出するには追加のロジックが必要です。動きの記録を取り、「2ターン前に行った動きと対戦相手が今行った動き」や「1ターン前に行った動きと彼が今行った動き」などの相関関係見つけるようにしてください。
  • 移動分布があなたのものに基づいているボット。これらのボットの脆弱性は、多くの場合まで(測定可能な量で)作成されていません後にあなた自身がランダム分布から変化しています。一般的に、自分のボットはこのカテゴリに分類されます。

3

ボットを実行するための要件について具体的に説明する

ボットはさまざまな言語(およびそれらの言語のバージョン)で記述できるため、次の場合にすべての人に役立ちます。

  1. OPが指定する環境で(またはできる限り近くで)テストします。
  2. 可能であれば、他のさまざまな環境でテストします(実行したい他の人を支援するため)。
  3. 使用する言語とバージョンについて具体的に説明し、ボットの実行方法を説明します。

おまけとして:あまり知られていない言語を使用している場合は、バイナリ/ソースをダウンロードして実行できる場所へのリンクを作成します。


2

チームベースの場合は、チームと協力してください

通常、チームを支援するタスクを完了するために単独で動作するボットを作成できますが、ゲームの内外で調整する場合には、はるかに大きな利点があります。この典型的な例は、赤対青ピクセルチームバトルボットで見ることができます。

開発中、チームはチャットを行い、ボットを調整して単独よりもうまく機能させる方法を話し合うことができました。技術的には同じボットですが、SphiNotPi3000は他のボットと連携して動作するように記述されており、単独で存在する場合に直面する脆弱性を考慮した方法で移動することができました。最終的な結果は、他のチーム全体に対して2人だけだったとしても、彼らが戦場をほぼ完全に支配できたです。

ゲーム外で、どの戦略をカバーするかについてチームメイトと計画し、調整します。多分誰かが地図を斜めにスキャンするボットを持っているでしょうか?水平方向にスキャンしてください(ほんの一例)。ゲーム内で、チャレンジがチームコミュニケーションを可能にする場合は、それを利用します。たとえば、バトルボットゲームでは、視界外のボットの位置についてチームメイトにメッセージを送信し、それらの信号を使用するために互換性のある方法でボットを書くように促すことができます。


2

メタ戦略を使用する

ほぼすべての巧妙な戦略には、それを打ち負かす別の戦略があります。たとえば、対戦相手は次の動きを予測してそれを打ち消すためにあなたとまったく同じ推論を使用するかもしれません。対戦相手をもう一度推測しようとするかもしれませんが、いつ停止するかを知るのは困難です。

別の問題は、賢い相手を推測するのが得意な戦略は、より単純な相手に対して最適とはほど遠いことです。

どうすればこれを解決できますか?ボットに、どの戦略を使用するかを即座に決定させます!

このために、ボットにさまざまな戦略のレパートリーを与えることから始めます。次に、各移動の前に、ボットはこれまでに記録されたゲームの履歴を見て、これらのさまざまな戦略がどのように成功したかを評価します。それはそれから最も成功したであろうものを写真にします。

そもそも強力な戦略を含めることは、ボットから選択するための適切なオプションを提供するのに役立ちます。しかし、非常に単純なものも含める必要があります。なぜならば、それらはしばしば愚かな相手に対してより良く機能するからです。

オーバーフィッティングを回避する(たとえば、対戦相手がランダムに行動するパターンに勝とうとする)ため、またはまだ多くの情報がないときに特定の戦略を優先するために、いくつかの戦略にバイアスをかけることを検討できます。

もちろん、このアプローチは特定の種類のキングオブザヒルチャレンジでのみ機能します。Rock-Paper-Scissors-Lizard-Spockの試合では、私にとってはとてもうまくいきました。他のゲームでは、特定の戦略が実際にプレイされなかった場合にどのように成功したかを評価することはほとんど不可能です。

この不正なアプローチ(不正行為との境界線)の極端な形は、他のすべてのボットの既知の動作を自分のボットに含めて、その動きを完全に予測できるようにすることです。


他のすべてのボットの既知の動作を自分のボットに含めること、不正行為との境界にとどまらず、不正行為です。許可されていない抜け穴だと確信しています。
mbomb007
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.