「海戊」におけるゲヌムのアルゎリズム敵の砲撃

こんにちは、愛しい人 ゲヌム「海戊」に倚かれ少なかれ適切なAIをプログラミングするずいう質問は、2004幎埌半にどこかで困惑したした。 たぶん私は、適切な指導なしで自転車を発明したしたが、その埌、私は圌らの誠実さに驚くべき玠晎らしいアルゎリズムに出くわしたした。ランダムに撃ち、時々バランスをずるために船の䜍眮を芗きたす。 その埌、アルゎリズムを数回改善したした。 Habréの最新の蚘事によるず、このトピックが関連しおいるず刀断できたす。たた、他のナヌザヌが曞いたものに远加するものがありたす。

だから、私のメモの目暙は、 敵の船を攻撃するための戊略の最適なものの実装であり 、最初のヒットだけでなく、その埌の「底たでの远跡」でもありたす。 私の実装での船は、ほが以䞋でさらに任意の圢状であるこずに泚意しおください。



はじめに



序文郚分を短くするこずを蚱可したす-写真の完党性のために、以前の蚘事を参照するこずをお勧めしたす。





「デッキ」の代わりに「船の船䜓に属するケヌゞ」など、倧きなタヌンで物語を耇雑にしたくないずいう願望に起因するいく぀かの専門甚語に぀いおすぐに謝眪したす私の子䟛時代、私たちは船を「4デッキ」、「シングルデッキ」などず呌びたした-理由はわかっおいたす。

船は任意の圢状をずるこずができたすが、船䜓「デッキ」に属する各セルは、他のセルず氎平および/たたは垂盎および/たたは斜めに接続する必芁がありたす。

座暙グリッド競技堎を芖芚化した図巊から右-数字、䞊から䞋-文字。



ご泚意



この蚘事では、コヌドレベルでの最適化を考慮しおいたせんが、アルゎリズムは最も詳现な詳现な圢匏で提瀺されおいたす。

説明図に加えお、蚘事には私のプログラム/ゲヌムのスクリヌンショットが含たれおいたす。



モヌド



戊闘戊略では、2぀のステヌゞ2぀のモヌドを明確に区別できたす。





ほずんどの人は、敵の船を「傷぀け」お、それを殺そうずしたす。 logical死により、沈没した船の呚囲に远加のバッファゟヌンが発砲にずっお無意味になり、敵のフィヌルドに関する情報量が増加し、発砲する確率が䜎䞋するため、これは論理的です。 さらに、船が占有する次のポむントが蚈算され、最悪の堎合、4タヌン察角船-8タヌンで蚈算されるこずが保蚌されたすが、新しい船をノックアりトしようずするず生産性が倧幅に䜎䞋したす。

したがっお、AIは「むンテリゞェント」モヌドで動䜜を開始し、重倧でない損傷「負傷」が発生した堎合、敵船は「仕䞊げ」モヌドになりたす。 2番目のモヌドでは、AIは船が砎壊されるたで機胜し、その埌、最初のモヌドが再び遞択されたす。

「叀兞的な」飛行隊ベンドのない船のアルゎリズムを最適化する堎合、3番目のモヌドを遞択するず䟿利な堎合がありたすこれに぀いおは埌で詳しく説明したす。 1番目ず2番目のモヌドは、確率行列の圢成の特城以䞋で詳しく説明したす、およびレゞヌム倉曎のロゞックが異なりたす。



知胜



任意の圢状の任意の数の船から圢成された飛行隊を攻撃できる抜象化レベルを達成するためにそれでも、ルヌルによれば、敵に関するこの情報は事前に知られおいたす、壊れおいない船の砎片この競技堎の「デッキ」の確率の抂念を導入したす"。 攻撃ポむントを遞択するための基準は、䞊蚘の確率に比䟋する倀になりたす。぀たり、敵の船浮いおいる船があらゆる方法でフィヌルドに配眮しようずした堎合に、このセルに萜䞋する正芏化されたデッキの数です。

説明しおみたしょう。マトリックス以降、「Pマトリックス」ず呌びたすを取りたす。このディメンションは、盞手のフィヌルドのディメンションに察応したす。 れロで埋めたす。 敵の船のリストから最初に利甚可胜な぀たりただ沈んでいない敵船を取埗し、芏則に埓っお、砲撃䞭に取埗した情報に基づいお座暙A1に配眮しようずしたす。 配眮できた堎合は、Pマトリックスで、船䜓で芆われおいるすべおの芁玠競技堎のセルに察応をむンクリメントしたす。 すべおの座暙に察しお手順を繰り返したす。 次に、船を90床回転させ、すべおの座暙に぀いお通過を繰り返したす。 180床ず270床に぀いおも同じこずを繰り返したす。

その結果、䟿宜䞊P行列に最倧倀に正芏化された倀を入力したす。 埗られた特性は、船の最も可胜性の高いポむントで単䞀の倀を取り、䞍可胜でれロになりたす。 たずえば、発射されおいないマップでは、䞭心点 叀兞的な戊隊の堎合に最倧倀がありたす。

誀解を避けるために、「 確率 」ずいう甚語を定矩する䟡倀がありたす。 このアルゎリズムは、珟堎での船舶の均䞀な配眮を想定しおいたす。 血管をフィヌルドの端に沿っお抌す詊みは、個別に怜出する必芁がありたす。 たずえば、トレヌニング䞭に䜕らかの圢で圢成されるりェむトマトリックスを入力できたすこの察戊盞手ずの以前のゲヌムその前に敵が船をフィヌルドの䞭倮に配眮しない堎合、りェむトマトリックスの察応するセルには最小係数がありたす。 いずれにせよ、これはチェスではありたせん-垞に未知の情報があり、状況が成功すれば、「ディフェンダヌ」に利点を䞎えるこずができたす。

巊の図は、 叀兞的な戊隊を䜿甚したゲヌムでの最初のAI移動䞭のPマトリックスの芖芚化を瀺しおいたす。 カラヌ[RGB0; 0; 0; RGB255; 0; 0]は、セルの倀を瀺したす。 癜い十字は最倧倀を瀺したす。 ご芧のずおり、通垞はいく぀かの高倀がありたす。 ゲヌムを倚様化し、AIによっお遞択された攻撃ポむントを予枬する可胜性を排陀するおよびそれに応じお船を配眮するために、最倧倀から任意のポむントを遞択したす図では-黄色の枠がありたす。

盞手の回答が「過去」たたは「殺された」の堎合、AIの動䜜モヌドは倉曎されたせん2番目の堎合、いく぀かのアクションが必芁です。 回答は、敵の力のバランスに関する知識を蓄積する特別なマトリックスに保存されたす。 Pマトリックスの蚈算で船舶を配眮する詊みは「 このマトリックス䞊 」で行われたす。

叀兞的な飛行隊のみを䜿甚する堎合、行列の蚈算を最適化するこずができたすこれに぀いおは以䞋で詳しく説明したす。



仕䞊げ



盞手から「負傷」した応答の埌、AIは第2の動䜜モヌドに切り替わりたす。

このモヌドでは、Pマトリックスを蚈算するずきに、テストされた船の「デッキ」の数が「傷぀いた」セルの数よりも倚くなければなりたせん。 船は、その配眮が「傷」ずしおマヌクされたすべおのセルをカバヌする堎合にのみ、Pマトリックスの芁玠の倀を増分したす。 すべおの船を列挙した埌、「傷぀いた」セルをさらに匷調したす。 そのようなセルを撃぀こずは無意味なのでただし、「by」セルずは異なり、船の䞀郚であり、Pマトリックスにれロ以倖の倀がありたす、Pマトリックスの察応する芁玠の倀はリセットされたす。 「傷぀いた」セルのいずれにも隣接しおいないセルも無効になりたす。 埌者の状況は、非叀兞的な戊隊船の゚キゟチックな圢状によっお匷化された状況䞋で、別の船に察応するPマトリックスの最倧倀を遞択できるずいう事実によるものです攻撃されたセルが「傷぀いた」ものから分離されおいる堎合にのみ可胜です。 この状況は、AIが䞡方のセルを満たす船を拟おうずするずいう事実に぀ながり、遅かれ早かれ倱敗したす。 これは、Pマトリックスのすべおの芁玠がれロの倀をずるずいう事実に぀ながりたす。したがっお、すでに発火したポむントは適切な攻撃オプションになりたす。 したがっお、近くのポむントを攻撃するのが劥圓です。

巊の図は、2぀のマトリックスより正確には、それらの倀の芖芚化を瀺しおいたす。 アッパヌ-灰色の船が癜いフィヌルドにありたす。 前の動きでは、AIはZh4に成功した攻撃を実行したした最初の動きが成功したずいう事実は偶然です。「傷぀いた」セルは黄色でマヌクされおいたす。 以䞋はPマトリックスです。 実際の船のセットのゞオメトリを考えるず、AIには4぀の同等の可胜性のある攻撃オプション十字のマヌクが付いたセルがあり、そこからZh3黄色の枠のセルを遞択したした。 移動はミスで終了したした䞊のマトリックスの青いセル。

゚キゟチックなゞオメトリを備えた船のセットを䜿甚するず、マトリックスはさらに神秘的になりたす。 私は叀兞的な戊隊でプレむするこずに慣れおいたすが、 ほが任意の圢状の船を䜿甚するこずで非難されるこずは芋圓たりたせん。 このようなモデルは、たずえば高速双胎船 、 RV FLIP 、 重空母巡掋艊 、 「コンクリヌト戊艊」を暡倣できたす。 動きのないゲヌムの論理によるオブゞェクトは、䞖界倧戊䞭に陞䞊の䜎機動性たたは静止した戊略的オブゞェクトずしお解釈できるずいう事実は蚀うたでもありたせん。 私の意芋では、ゲヌムプレむの䜍眮から、そのような耇雑さはゲヌムに興奮を加えるだけです。

右偎の写真は状況を瀺しおいたす。䜕床かサルボを成功させた埌、AIは間違った方向を遞択し、E13でミスしたす。 意味のある移動オプションが10個あり、そのうち2個が最も可胜性が高いこずに泚意しおください。

「仕䞊げ」モヌドは、察戊盞手が「殺された」ず答えた埌にのみ「知胜」に切り替わりたす。 最初のモヌドず同様に、砲撃䞭に埗られた情報は、次の動きでPマトリックスを圢成するずきに考慮されたす。



クラシック



叀兞的な戊隊、぀たり「1次元」船を䜿甚するず、アプロヌチを指定しお、操䜜の数を枛らすこずができたす。 䞀方で、以䞋で説明するアルゎリズムは柔軟性が䜎く、パフォヌマンスのクラムを節玄したす珟圚の技術レベルずゞャンルによる1移動あたりの長い時間を考慮するずが、䞀方で、これらのアルゎリズムはゲヌムの人間の知芚により近く、プロセスの理解を容易にしたすAI機胜。

叀兞的な船のゞオメトリの詳现぀たり、1次元性によっお、船䜓を180床回転させお回転点に応じお-察応する座暙を修正しお船䜓をれロ回転角で配眮する確率ず等しくするこずができたす。 蚀い換えれば、すべおの船に぀いお刀断するこずは䞍可胜です䞊から䞋、たたは䞋から䞊、巊から右、たたは右から巊にありたす巊の図を参照しおください灰色の船䜓の4぀の回転角床ず叀兞的な茶色の2぀の回転角床。 この状況により、蚈算の数を枛らすこずができ、すべおの船に0床ず90床の角床での配眮テストのみを残したす。

䞀次元性により、船の長さず障害物たでの距離のみに䟝存しお、ケヌゞに萜ちる「デッキ」の数を決定できたす。 右偎の図では、障害物のセル他の船の緩衝地垯などが赀でマヌクされ、特性が蚈算されるセルは緑の円で瀺されおいたす。 3セルの長さの船を配眮しようずしたす。 結果䞊から䞋は0、0、1、1になるず掚枬するのは簡単です。明らかに、最初の2぀のケヌスでは、障害物間の距離は基本的に必芁な長さの䜓に察しお十分ではありたせん。 4番目のケヌスでは、船の可胜な䜍眮の数を増やすために、反察偎の境界線のみをプッシュできるこずが明らかになりたす。

巊に障害物を移動し始め、1、2、3、3の特性を取埗したす。結果から、特性は船の長さによっお䞊から制限されおいるこずがわかりたす。

芁玄するず



䞊蚘に基づいお、特性を蚈算する関数のコヌドの圢匏は次のずおりです。

inline unsigned minimum(unsigned A,unsigned B){ return A<B?A:B; } unsigned Bf(unsigned A,unsigned B,unsigned K){ if(A+B+1<K) return 0; if(A+B+1==K) return 1; return minimum(minimum(A,B)+1,K); }
      
      





敵の戊隊に同じ長さの船が耇数ある堎合、セルぞの圱響の合蚈を考慮するには、䞀床Bfを蚈算し、結果に装備の数を掛ければ十分です。 敵の船のすべおのナニヌクな長さ クラシック -4オプションの堎合を調べお、この船䜓の長さが浮いおいる船の数を考慮するず、特定の特性Gfが埗られたす。 この特性は、すべおの船舶の固定された方向座暙ではないでケヌゞに萜ちる「デッキ」の数を瀺したすたずえば、䞊の図では氎平。 最終的な特性G2dfは、氎平および垂盎方向のGfの合蚈です。 競技堎のすべおのセルのG2df倀のマトリックスは、䞊蚘のPマトリックスの類䌌物です。 マトリックスの最倧倀に基づいお、攻撃ポむントを遞択したす。 成功した堎合は、フィニッシングモヌドに進み、最も自由なただし、砎壊されおいない敵船の䞭で最倧の船䜓長内にある方向に察応するセルを遞択したす。 耇数の方向が同じ確率である堎合-ランダムに遞択したす。 攻撃の方向を遞択した埌、次のいずれかの結果に向けお発砲し続けたす。





おわりに



これで、敵を攻撃する方法ず、船を最適に配備する方法がわかりたした蚘事の冒頭のリンクを参照。

私自身は、船舶の最適でない均䞀な配眮に関するコミュニティの考えを知りたいず思いたす。 叀兞的なバヌゞョンであっおも、既に蚭定されおいる船舶を動かさないず、デッドロックが発生する可胜性がありたす。 任意の圢状の船の堎合、配眮するフィヌルドの最小サむズの基準を正圓化するこずがおそらく可胜です。

蚘事を最埌たで読んでくださった皆さんに感謝したす。 私はあなたの質問に答えようずしたす。

リク゚スト議論を薄めないように、゚ラヌに関する指瀺ず線集に関するその他の提案をPMに曞いおください。



批評



興味深く建蚭的なコメントをありがずう



mayorovpは、考慮されたアルゎリズムが特定の近䌌でのみ最適に機胜するこずを明確にしたす。 実際、提案された状況を考慮しおください。

ラむンに5぀のセルがあり、2぀の1x2船がフィヌルドに残っおいる堎合、最適なアルゎリズムはそれらを4ショットでミスなく砎壊したす。 アルゎリズムは、䞭心にある船を芋぀ける「確率」が最倧であるず刀断し、そこに射撃しようずする堎合がありたす3぀のうち1぀。


確かに



人にずっお明らかな最適な戊術ずは異なり、33の確率のAIは、N番目の動きでA3を攻撃するこずにより、アプリオリに誀った決定を䞋したす。 N + 1番目の移動N番目の移動で成功した堎合では、誀った攻撃を50の確率で実装できたす図では、2番目のスラむドのA3ぞの攻撃。

mayorovpのメモずしお、

最適なアルゎリズムは

1近隣の制限を考慮に入れお、フィヌルドに1隻ではなく敵戊隊党䜓を配眮する確率を蚈算する堎合。
蚓緎䞭の競技堎での船の䞍均等な分垃ぞの適応の匱さも泚目されたす。

2敵が特定の察戊盞手のために蚓緎するのではなく、最䜎確率の䜍眮たずえば、端に敵が故意に配眮し、最初のゲヌムで既に報埩アクションを行うこずができるこずを考慮したす。




MichaelBorisov は、圌の研究「海戊をするためのボット歎史、理論、実践」ぞのリンクを提䟛しおいたす 。

残念ながら、私の「包括的な」アプロヌチは、珟代のコンピュヌタヌでもすべおの組み合わせを蚈算するこずは䞍可胜であるずいう蚈算䞊の困難に陥りたしたが、モンテカルロ法を䜿甚しお近䌌倀を探すこずしかできたせんが、これはリアルタむムで困難であるこずが刀明したした


zorge_van_daar は興味深い質問を提起したす。敵の装備をすべお怜出するこずがゲヌムの䞻な目暙であり、怜出埌に砎壊するこずができるため、終了する代わりに、新しい船の怜玢に切り替えるこずができたすか



limon_spbおよび他のナヌザヌの 十分に根拠のある アドバむスに よるず、過床に 誇匵された「最適な」特性が削陀されたした。 そのような声明は客芳的な蚌拠を必芁ずするので、それは蚘事では䞎えられおおらず、䞊蚘のおかげで䞎えるこずができたせん。



All Articles