こんにちは、みんな、
先日、息子が「バトルシップ」のマス目紙バージョンで遊びたいと言いました。各プレイヤーは、長さが 5、4、3、3、2 単位 (幅は 1 単位) の 5 隻の「船」を持ちます。「船」は XY 空間の 10 x 10 のマス目に配置され、各「船」には固有の (x,y) 座標セットがあります。たとえば、3 単位の「船」の 1 つが (3,4)、(4,4)、(5,4) の座標を持つことができます。同じ (x,y) 座標には、複数の「船」を配置することはできません。「船」は垂直または水平にのみ配置できます。斜めの配置は許可されていません。
次に、座標 (x,y) のペアを順番に呼び出して、誰が他の人の「船」に直撃したかを調べました。各自が 16 ターンで、できるだけ多くの相手の「船」に命中 (または沈没) しようとしました。この作業を進めていくうちに、座標をランダムに呼び出すよりも、他の人の「船」に命中 (または沈没) する確率を最大化するもっと良い方法があるはずだと思いました。もちろん、すでに使用した座標 (x,y) を呼び出すことはありません。そうすれば、「船」に命中したかどうかがわかるからです。
最初は、カスタム デザイン プラットフォームが適切な方法かもしれないと考えましたが、Y が「ヒット」(いいえ/はいの場合は 0/1)、X1 = x および X2 = y 座標 (10 レベルの離散数値) のデザインを作成すると、プラットフォームは各 X および Y の高レベルと低レベルのみを使用するデザインを生成します。ちなみに、モデル項は x、y、および交差項 x*y だけです。そのため、残念ながら、カスタム デザインは機能しません。
完全要因 DOE プラットフォームは、100 回の実行 (10x10 要因) を実行する必要があるのに、実行 (試行) は 1 回あたり 16 回しかないため、機能しません。
RSM DOE プラットフォームは、高/低レベルでのみ機能し、低/高レベルには 1 と 10 を入力します。CCD 設計オプションは、実際には「船」が配置される 10 x 10 グリッドのスペースを埋めません。グリッド スペースをカバーするには、中心の実行が多すぎます。
これに適用できる唯一の他のプラットフォームは、スペース充填設計です。応答として、x と y に同じ低/高、1/10 の設定を使用し、「ヒット」(これはバイナリで、0/1 はいいえ/はい) すると、グリッド スペースを埋める (x,y) ペアの DOE テーブルを取得できます。スペース充填設計方法、FFF、ユニフォーム、ラテン ハイパーキューブなどの最適な選択が何であるかはわかりません。
もっと重要なのは、DOE は固定されており、最初の実行の結果に基づいて、既知の情報を考慮して DOE をどのように変更するかという意味で「適応可能」ではないということです。上記の 3 単位のボート座標を使用して、最初の実行で座標 (3,4) を呼び出してヒットしたとします。「船」のレイアウトが水平または垂直であることがわかっているので、次の呼び出しでは DOE にまったく従わず、(3,5)、(3,3)、(2,4)、または (4,4) を呼び出します。つまり、x または y を 1 単位増やして結果を確認します。ボートが沈むか、次の可能な開始座標に移動するまで、これを繰り返します。
16 回の実行を最適化して「ヒット」を生成する適応型 DOE を生成するための、より科学的な方法を見つけたいと思っています。静的 DOE では、実行ごとに座標が「使い果たされ」、ヒットかどうかがわかるため、それが実現できません。実行ごとに、n+1 回の次の実行が通知されます。私の知る限り、このような処理を実行できる DOE は存在しませんが、私もこの分野の専門家ではありません。
「バトルシップ」でできる最善のことは、スタート地点をランダムに選択することでしょうか? そうは思いませんが、基本的に「if/then」ステートメントを含む適応型 DOE を作成して、前のステップの情報を考慮しながら 16 回の試行を最大限に活用する方法を見つけるのに苦労しています。16 回の試行で勝つ可能性を最大化するために、各実行の選択を最適化する「適応型」DOE があれば素晴らしいと思います。
議論してくれてありがとう!
DS
PS、JMP と「Battleship」を検索していたところ、 @Jordan_Hillerによるこの投稿を見つけました。この投稿では、JMP を使用してさまざまなゲームをプレイする方法が紹介されています。また、 @brady_brady は、実際に「Battleship」をプレイするための JSL コードも書いています。とてもすばらしいです。すぐにその JSL をダウンロードします。
やあ@Jordan_Hiller 、
ブログへのリンクをありがとうございます。記事を楽しみました。
私は、船が特定のマス目に存在する確率を計算する方法の背後にある概念を概ね理解しています。これは船の種類ごとに異なります。 ただし、ボードの確率状態はプレイの各ラウンド後に変化するため、次のマスを攻撃するための選択も変化します。これは私にとって、ヒット/ミスを考慮して再最適化されたスペース充填デザインに他なりません。ボートのサイズと残りの走行数。
ブログ投稿者は、ボートが占めるマスの数のちょうど 2 倍である 34 の手でゲームを実行できるアルゴリズムを生成することができました。 おそらく、勝つために必要な手数を 17 に近づける最適な決定パスを生成することが可能でしょう。 正確に 17 ではないかもしれませんが、非常に近いです。
確かに、ML/AI アプローチはゲームに勝つためのアルゴリズムを構築できますが、それはやりすぎであり、私が本当に求めているものではないことに同意します。 私は、おそらくブログ担当者が行ったことと DOE の利用を組み合わせたものに興味があります。 明らかに、ゲーム ボードの確率密度関数は、意思決定を行う際に重要です。 しかし、これを純粋な確率計算から、最適化されたスペース充填に基づく計算に変更することはできるでしょうか。DOE が最も可能性の高いヒットを生成するように、ボードの確率関数を DOE の「重み付け」関数として供給するのとほとんど同じです。 最初に最大のヒット数を生成してから沈没に集中するほうが、狩猟モードに進む前にまず船を沈めることに集中するというブロガーのやり方に比べて、より早い勝利につながるように思えます。
とにかく、私は考えたり考えたりするのが面白いと思いました、そしてどうやら他の人もそうしているようです!
ありがとう!、
DS
面白いアイデアだよ、ディードリヒ!
これは、このトピックに関する古いブログ投稿です。誰かが、特定のゲーム状態に対して、グリッドの各マス目に船が存在する確率を計算する方法を考え出しました。 https://www.datagenetics.com/blog/december32011/その後、モデルは必要なく、最も可能性の高い正方形を選択するだけで済みます。 機械学習プロジェクトもいくつかありますが、それはやりすぎのように思えます。
ヨルダン