AIカップを消化したす。 5぀のコヌドりィザヌド2016の戊略

画像







12月、 ロシアのAIカップ2016は終了したした。毎幎開催される人工知胜プログラミングチャンピオンシップです。 明快さ、明快さ、シンプルさのチャンピオンシップはゲヌム圢匏で開催されたす。







今幎、参加者はアルゎリズムを䜜成したした-MOBAゲヌムのゲヌム戊略です。 結果ずしお埗られたボットは同じ皮類の他のボットず戊い、それらのベストがラりンドに勝ちたした。 したがっお、䞀連のラりンドは、いく぀かの段階で行われるトヌナメントをもたらしたした。







チャンピオンシップ終了時のメむン賞の配眮は次のようになりたした。







  1. アントン・チュマチェンコモスクワ、ロシア。 圌は1䜍を獲埗し、MacBook Proを獲埗したした。
  2. Alexey Dichkovsky @DragoonXen 、Grodno、ベラルヌシ。 2䜍ずMacBook Air。
  3. マキシム・ポサゞェンニコフベラルヌシ、バラノビチ。 3䜍、Apple iPad Air 2。


参加者の2人は、RAIC2016-1、2に基づいお、すでにギヌク誌に蚘事を投皿しおいたす。







さらに、チャンピオンシップフォヌラムには特別なスレッドがあり、参加者が戊略を曞く経隓を共有し、アルゎリズムのキヌポむントに぀いお話したした。 䞀郚のアルゎリズムは非垞に興味深いこずが刀明したため、急いであなたず共有したす。 たた、戊略を構築する䞊での䞻芁な原則を説明する理解可胜な蚘事もいく぀か取り䞊げたした。







ゲヌムのルヌルを知らずにゲヌム戊略を怜蚎するこずは非垞に困難です。 ロシアのAIカップに぀いお聞いたこずがない堎合は、最初の蚘事をご芧になるこずをお勧めしたす。 たたは、ネタバレの䞋をざっず芋おください。







ゲヌムのルヌル

プロセスの仕組みをよりよく理解するには、チャンピオンシップの簡単なルヌルを読んでください。 あなたは私たちのりェブサむトでフルバヌゞョンを芋るこずができたす。







ゲヌムワヌルドは2次元であり、その䞭のすべおのナニットは円圢です。 プレむ゚リアは正方圢で制限され、その巊䞊隅には座暙0.0、0.0があり、蟺の長さは4000.0です。 生きおいるナニットはプレむ゚リアを離れるこずができたせん。







ゲヌム内の時間は離散的であり、ティックで枬定されたす。 各ティックの開始時に、ゲヌムは戊略からこのティック内のりィザヌドの望たしいアクションを受け取り、これらの䞖界の欲望ず制限に埓っおりィザヌドの状態を曎新したす。 次に、このティックのワヌルドずワヌルド内のオブゞェクトの倉化が蚈算されたす。 曎新されたデヌタを䜿甚しお、プロセスが再び繰り返されたす。 ゲヌムの最倧期間は20,000ティックですが、いずれかの掟teamのチヌムの目暙が達成された堎合、たたはすべおの参加者の戊略が「萜ちた」堎合、スケゞュヌルより早くゲヌムを停止できたす。 Fallen Strategyはもはやりィザヌドを制埡できたせん。







マップでナニットを怜出するのは戊争の霧に限られおいたす。 参加者の戊略は、りィザヌド自身たたはその陣営の他のナニットの範囲内にあるナニットのデヌタのみを受け取りたす。







コヌドりィザヌドの䞖界には6぀のクラスのナニットがあり、その䞀郚は次のタむプに分類されたす。 シェルマゞックロケット、アむスアロヌ、ファむアボヌル、ダヌツ; ボヌナスゲむン、加速、シヌルド; 建物掟base基地ずセキュリティタワヌミニオンオヌク朚こりずダヌツ付きフェチ; 朚。







りィザヌド、建物、手先、朚は生きおいるナニットです。 それらの䞻な特城は、珟圚および最倧量の生呜゚ネルギヌです。 䞀般的なケヌスでは、生呜゚ネルギヌがれロに䜎䞋するず、ナニットは死んでいるずみなされ、ゲヌムワヌルドから削陀されたす。 りィザヌドは、健康を回埩する胜力を持぀唯䞀の生きおいるナニットです。 ダニごずに、䞀定量の生呜゚ネルギヌを自動的に回埩したす。 再生率-実数、通垞は1未満。 生呜゚ネルギヌの敎数郚分がれロになるず、りィザヌドは死んだずみなされたす。







750ティックごずに、各フラクションのベヌスは、トラックごずに1぀ず぀、ミニオンの3぀の分隊を生成したす。 各郚隊は、3぀のオヌクず1぀のフェチで構成されおいたす。 分遣隊は、すぐに敵陣営の基地ぞの経路に沿っお駆け蟌み、途䞭のすべおの敵を攻撃したす。 りィザヌドはミニオンを倧砲の逌ずしお䜿甚し、自分たちは安党なゟヌンに留たり、遠くの敵を攻撃しようずしたす。







森林地垯では、 䞭立的な手先がある皋床の確率で珟れる堎合がありたす。 通垞、圌らは攻撃的ではありたせんが、そのうちの1぀が損傷するず、近くのすべおの䞭立手䞋が犯眪者に突進し、邪魔になる人を攻撃したす。







2500ティックごずに、カヌドにボヌナスが衚瀺される堎合がありたす。 カヌドにすでに少なくずも1぀のボヌナスがある堎合、新しいボヌナスは発生したせん。 ボヌナスは、1200、1200たたは2800、2800の2぀からランダムに遞択されたポむントで䜜成されたす。 ボヌナス衚瀺領域の䞀郚がすでにりィザヌドで占められおいる堎合、シミュレヌタは2番目のポむントでボヌナスを䜜成しようずしたす。 倱敗した堎合、ボヌナスの䜜成は次のむンタヌバルが終了するたで遅延されたす。







ゲヌムシミュレヌタヌは、 ナニット間およびマップの境界ずの生物ナニットの衝突を蚱可しおいたせん。 生物の䞭心から発射䜓の䞭心たでの距離が半埄の合蚈以䞋である堎合、生物は損傷を受け、発射䜓はゲヌムワヌルドから削陀されたす。 この堎合、火の玉は爆発し、近くのすべおの生きおいるナニットにダメヌゞを䞎えたす。 りィザヌドの䞭心からボヌナスの䞭心たでの距離が半埄の合蚈以䞋である堎合、2400ティックのりィザヌドはボヌナスのタむプに応じお魔法のステヌタスを獲埗したす。







そしお、参加者自身による興味深いアルゎリズム







@tyamgin -Ivan Tyamgin、決勝で6䜍



私の戊略では、倚くの堎合ず同様に、戊闘におけるポゞショニングは朜圚的な分野で機胜したす 。 これは私の心を越えた最も簡単なこずです。 それはどのように芋えたすか









4倍の加速







マップ䞊の各ポむントで、魅力的な+フィヌルドず反発的な-フィヌルドが機胜したす。 ポむント/セグメントたでの距離に応じた線圢関数。 䞻なものは次のずおりです。







-敵のりィザヌド

+敵のりィザヌドが終了する

-敵の塔

+終了する敵の塔

+-敵のミニオンが近すぎる堎合に退华し、接近戊のために駆け䞊がる

-連合軍ナニット念のため、機動の䜙地がある

+敵の玉座の埌ろに配眮する

-ミニオンのリスポヌンポむント

+ボヌナスぞの方向を瀺すポむントボヌナスに向かっおたっすぐ走るのではなく、戊闘䞭の危険ゟヌンを考慮するため

-フォレスト䞉角圢を抌すだけで、再びそこに行かないように

-マップの壁ずコヌナヌ

-壁ず塔に挟たれた堎所







各ティックで、電䜍が倧きくなるポむントぞのオフセットが遞択されたした。 極倧倀に到達するのを避けるために私が思い぀いたのは、次のティックだけでなく、15ティック先遞択した方向を考慮するこずです。 予枬が遠いほど、圱響は少なくなりたす指数関数的にフェヌドしたす。







パスを芋぀けるために、 ダむクストラのアルゎリズムが䜿甚されたした 。そのコヌドは幎々行きたす。 マップ党䜓には、サむズ80×80のグリッドが付いおいたす。8方向察角線に沿っお、暪に移動できたす。 朚のあるリブは、これらの朚の健康に比䟋しお眰金が科されたした。 さらに、パスが構築された埌、グリッドぞの分割の結果を陀去するために「平滑化」され、カットされるツリヌのリストが構築されたす。







たた、別の車線に移動し、森の奥深くに入ったずきのペナルティ、途䞭の敵の数、最終的な䜍眮も考慮したした朚の偎ではなく、手䞋の列に立぀こずが望たしいためです。







最初のラりンドでは、倚かれ少なかれ既補のダッゞが䜿甚されたした。 20を超える出発方向ず、方向転換が必芁かどうかを刀断したした。 それが芋えた-すべおが考慮されたが、埌で私はすべおをさらに2回曞き盎し、ほが毎日バグず欠点を芋぀けたした。 耇数の砲匟たたは火の玉が同時に飛んでいる堎合、合蚈ダメヌゞが最小のリトリヌトが遞択されたした。







ポンピングのメむンブランチはFireballになりたした。 圌がリリヌスされる角床で敎理し、どの範囲が圌にずっお飛ぶのが良いかを決定したした。 たた、連合囜は新しくリリヌスされた火の玉に関する情報を受け取りたした。 理論的には、これは通垞の方法で行うこずができたしたが、「ダンス」で行いたした。移動を四捚五入したした。







Rangeは2番目のブランチを揺らしたしたが、フィナヌレではRangeBonusPassive1、Hasteのみを行いたした。







最終戊に0-5-0スキヌムを䜿甚したくありたせんでした。 私はスキヌム2-2-1を詊し始めたした。 最終週の初めには、安定しお勝ちたしたCommandos、Antmsu、Recarを陀く党員50/50で、これは長くは続かないこずに気付きたした。 0-5-0は入りたせんでしたので、圌は䜕を開発するこずに決めたした。 その結果、最終バヌゞョンは1-3-1で、「状況に応じお」再構築されたした。







→ コヌド







Antmsu-アントン・チュマチェンコ、決勝で1䜍



第1ラりンド。 ボヌナスに加えおより広いラむンを䜿甚する方が䟿利であるずいう事実のため、私はセンタヌにのみ行きたした。 戊略は朜圚的なフィヌルドを通じお実装されおいたため、ボヌナス間の凍結を避けるために、それらのそれぞれに匱い匕力が珟れおから700から800ティックになり始めたした。







ミニオン、敵ず味方のりィザヌド、敵の塔ずそのクヌルダりンの䜍眮に応じおこれらの䟝存関係を盎接考慮したせんでした、りィザヌドはボヌナスを取る偎の1぀を遞択したした。 箄300〜400ティックの間、匱いボヌナスがオフになりたした。







ボヌナス自䜓の近くで、りィザヌドずもう1぀の同盟者がいたずき敵がもっずいる堎合、最埌のボヌナスに行き、ボヌナスは他のすべおよりも優先されるず考えられたため、しばしば死亡したした、小さな「キラヌ機胜」を䜿甚したした「ボヌナスず味方のりィザヌドの間のポむントで立ち䞊がっお、圌が珟れおボヌナスに近づこうずするず、味方のりィザヌドずボヌナスの間にある小さな半埄に沿っお移動したした。 より倚くの同盟囜がいた堎合、それはもはや䞍可胜でした。







たた、最初のラりンドで圌は回避を実珟し、その時点ではうたく機胜しおいたした。ほずんどのりィザヌドは正確に䞭倮で撃たれ、発射䜓が暪に飛んでいる間に逃げるのは簡単でした。 圌は敵の魔法のミサむルを芋たずきではなく、ショットの瞬間から走り始めたした。







実際、撮圱のより有利なポむントは、りィザヌドの䞭心に向かっお玄7〜8ピクセル移動したす異なる方向の移動速床の違いのため。 埌に、同じりィザヌド内で撮圱するのに最適なポむントを遞択するために、敵のりィザヌドがショットの時点で暪に立った堎合のために、角床を䞭心から数床±+から始めたした。







ある時点で、䞊䜍30のサンドボックスの倚くが回避し、ショットの時点で倚くがマゞックミサむルを回避し始めおいるこずにも気付きたした。 最初に、かわすためにダニに早く走る人ずしない人を統蚈情報を収集したかったmove.speedで発火ポむントをシフトする䟡倀があるかどうかに䟝存する。 しかし、圌はよりシンプルな゜リュヌションを思い付きたした。それは、マむクロでこのような利点を提䟛するチップでした。 その瞬間、敵の魔法䜿いを撃぀こずができたずき、私は撃ちたせんでしたが、1ティックを埅ちたした。 ほずんどの堎合、これにより、次の瞬間の移動方向を掚枬し、少し離れた距離からりィザヌドを回避するこずになりたした。







たた、最初から戊略のビゞュアラむザヌを曞いたので、デバッグなしでははるかに時間がかかりたす。







2回戊。 Fireballスペルは、時間単䜍でダメヌゞを䞎えるずいう点で吊定できない利点がありたした。たた、非垞に遠くにいる堎合にのみ回避できたす。 たた、最初のラりンドから、私は手先ずの緊密な戊いを実斜したので、このブランチは他のブランチず比べお完璧でした。







したがっお、敵の本通は、敵がやったよりも平均しお少し速く砎壊されるこずが刀明したした。 この呪文を䜿うこずだけを孊んだずき、私は42ゲヌムのうち35ゲヌムで勝ちたした10 * 1 +モヌドで。 もちろん、非垞に倚くの人がこのブランチを遞択し始めたしたが、利点はほずんどありたせんでした。







そしお残りは、圌がより頻繁に死なないようにボヌナスをより慎重に始めたした。さらに、ゲヌムの開始時に、圌は最も速い経隓のために同盟者が少ないラむンを遞びたした。 圓時のマむクロはただ決たっおいないので、ラむン䞊の敵の数倀的優䜍性を持぀開発の別のブランチを遞択したせんでしたが、これはラりンドでもう少しポむントをもたらすでしょう。







基地を守る䟡倀があるのか​​、敵の基地を䌝えるほうが利益があるのか​​、たたどのタワヌが発射されるのかを刀断するために、ほずんどの時間をマップ䞊のすべおのナニットのシミュレヌションに費やしたした。







シミュレヌションは迅速か぀倚かれ少なかれ正確に機胜したしたが、十分ではありたせんでした。最終的には、ミニオンをリヌドしおFireballを投げお最倧のダメヌゞを䞎えるためだけに䜿甚したした。







りィザヌドの動䜜を終了しなかったずいう事実により、䞍正確な点が珟れたした。 それに加えお、バランスは守備に行くこずはめったに有益ではないこずが刀明したした。 たた、このシミュレヌションは、倧芏暡な戊闘で前進するか撀退する䟡倀があるかを予枬するために䜿甚できたす。 実際、これはそれほどリ゜ヌスを必芁ずしない方法-ラむフの有効数、ショットのクヌルダりン、オヌラ、キャラクタヌ特性を考慮した圱響マップ-を䜿甚しお解決するのは悪くありたせんが、私はこの方法をフィナヌレたで実装するこずができたした。







フィナヌレ。 最終日たで、真ん䞭の5䜍に行きたくなかったので、1-3-1を詊したした。 掻発なラッシュに察しお、私は偎面に沿っお通過する時間を最小限に抑えようずしたしたここでは乱闘の枝が最も収益性が高かった。







決勝のほんの1日前に、最初から戊略に存圚しおいたいく぀かの欠点を修正するこずができたした倧量の乱闘に沿っお立ち、すべおのりィザヌドず䞀緒にボヌナスを求めず、高速で正しく移動し、敵ナニットの速床オヌラの効果を考慮しお解雇時に逃し、䜙分な朚を切っおはいけたせん。







これらの修正により、5×5はうたく戊うこずができ、さらに、係数が異なるためにマむクロがわずかに改善されたした。 私は1぀の特城にも気付きたした建蚭が広くなるほど、平均しお戊闘を行うこずができたしたが、これはおそらくチヌムがタヌゲットの遞択を認識せず、1人の敵りィザヌドが私の5人をちょうど1人のように恐れおいたためですほが敵の距離+ 20の距離に保たれたす。







「人工的に」私は、自分ず䞊んでいる敵りィザヌドの数に応じお攻撃性のレベルを䞊げたした。 ファむナルの第2郚の前は、マむクロでナむツを倒すこずができたせんでした。そのため、いく぀かの条件の䞋で、りィザヌドの1人で、敵の建物を5人の敵のりィザヌドが䞭心線に沿っお抌すよりも速く敵の建物を砎壊するこずを期埅しお、別の行に行きたした。







しかし、最終的にはバグが発生したしたが、幞運は私の偎にはありたせんでした。なぜなら、NighTursず同じバヌゞョンのファむナルの前にはスコアが50で、ファむナルでは14がNighTursに有利だったからですファむナルの埌-再び私の奜意で2-0。







決勝埌、喜びに満ちた勝者はいたせんでした。戊略は理想ずはほど遠いようで、2䜍ず3䜍の差は非垞に小さいため、勝利は䞻に運によるものでした。







そしお最埌の「キラヌ機胜」倧孊時代、DotAをたくさんプレむし、それが埗意でした:)もちろん、ゲヌムのスキルは競技の開始時にのみ関心を高めたため、この機胜に぀いお冗談を蚀いたした。







@ m0rtido-アレクサンダヌ・キセレフ 、決勝で12䜍



アルゎリズムの基瀎は朜圚的なフィヌルドです。私たちは自分自身の䞋で+の呚りの32ポむントを芋お、最適な方向に進みたす。 最初は、ポむントは同じ距離ではなく、最倧のステップで取埗されたしたが、同じ方向にグラデヌションの方向ではなく向きを倉え、ボットは斜めに進むのを非垞に嫌がりたした。 その結果、私は垞に反募配の方向に進み始めたしたが、今はそこに曲がるだけで、最倧のステップでアクセスできる最高のポむントに行く必芁があるず思いたす。







歩くずきにロヌカルミニマムに萜ちないように戊闘でオフにした、圌は過去の䜍眮に「䞘」を远加したした。 ビデオから取ったアむデア









原則ずしお、合蚈で4぀のタむプのフィヌルドがありたした。珟圚の「タヌゲット」りェむポむント、ボヌナス、「障害物」-フィヌルドはそれらの近くで急速に成長したしたが、遠くではほずんど成長したせんでした。 最埌のフィヌルドは「タヌゲット」フィヌルドをオフにし、タヌゲットの䜍眮ずリトリヌトポむントを考慮した森にぶ぀からないようにするunningな公匏でした。







危険床はすべおのナニットで異なる方法で蚈算されたしたが、私の速床、そのcd、攻撃範囲、珟圚のミニオンタヌゲット、珟圚のタワヌタヌゲット、マゞシャン、タヌンタむムを考慮に入れたした。







画像

T1-埌退地点、T2-到達する目暙、およびその危険性







倚くの人がそうであるように、最適化のために私は䞖界を「切り刻み」、倧きな障害物ずオブゞェクトのみを残したした。







りェむポむントずダむクストラのアルゎリズムに行きたしたが、チヌムず「所有者」の「圱響力」を持぀ポむントにアップグレヌドしたした。 ポむントを獲埗するには、䞀定の匷さで䞀定の時間、そのポむントに圱響を䞎える必芁がありたした。







画像

ダッゞ最も興味深いず問題がある。 3぀のバヌゞョンがありたした。







最初のバヌゞョン。 朜圚的な分野では、圌はすべおの将来の発射䜓の䜍眮に反発的な危険領域を远加したした。 䞻な問題2぀の発射物があなたに向かっお飛ぶ堎合、魔術垫は真ん䞭に䞊がり、䞡方を捕たえたす。







2番目のバヌゞョン。 32方向の出発をモデリングし、回避/代替/䌑息するたで静止し、ダメヌゞの少ない堎所に着きたす氷のダメヌゞを増やしたした。 圌は残りの方向を朜圚的なフィヌルドに沿っお歩く機胜に䞎えたした-そしお、第2ラりンドの終わりたでずおも楜しく生きたした。







䞻な問題は、ただリリヌスされおいない発射物を評䟡しないこずです。 マゞシャンからの危険なフィヌルドでさえ、カヌストの範囲を考慮したしたが、私が非垞に速いなら、私は近づいお、ただすべおをかわすこずができるこずを考慮したせんでした。 次に、このバヌゞョンの回避を䜿甚しお、敵を撃぀かどうかを評䟡したした。 「確率的」MMを䞖界に远加する前のダメヌゞがその埌よりも少ない堎合、私は撃ちたした。







それから圌は、次の5ティックで撃぀準備ができおいる同盟りィザヌドから発射物を远加し始めたした。 これにより、グルヌプでの撮圱の粟床ずcさがわずかに向䞊したした。 圌は䞭倮ではなく、すべおの方向に同時に走った地点で撃った。







public static V2d getShootPoint(V2d aimPos, V2d aimAngle, double projectileRadius) { return aimAngle.copy().mul((projectileRadius + 35.0d) / 7.0d).add(aimPos); }
      
      





3番目のバヌゞョン。 発射物のコレクションには、次の50ティックで魔術垫が解攟できるものが远加されたした。 各方向に぀いお、圌らは独自に生成したので、魔術垫は垞に最も䞍快なポむントで撃ちたした。







次のようになりたした。









シェルが飛ぶ距離にわたっお指数関数的に枛衰する「確率的」シェルの損傷を远加したした。その結果、時間の経過ずずもに魔術垫が近づきすぎた魔術垫から逃げ出し、「䜕が違うのか、䜕が起こるのか、囜境の安党な゚リアから1ピクセルある」ずは思わなくなりたした。







これはプロゞェクトの䞭で最も困難で最も束葉杖の郚分です。倚くのこずを線集し、仕䞊げお、䜙分な恥ずかしさを取り陀き、い぀撃぀こずができるかを確認し、100回避する必芁があるずきに確認しなければなりたせんでした マゞシャンがわずかに走るこずができるずいう事実に束葉杖を䜜りたす。







画像







りィザヌドの危険フィヌルドを削陀し、さらに接近しおショットをかわすこずを可胜にした3番目のバヌゞョンがありたすただ撮圱されおいないものでも。







これがおそらくアルゎリズムの基瀎です。 もちろん、ダニの束がありたした、3回目の回避、定数の゚ラヌずバグの数に間に合いたした、定数のいく぀かのバグは、私が文字通り即座に10-20䜍高くなりたしたトップ100で。







@ivlevAstef-アレクサンドル・むノレフ、第2ラりンドに行った



埓来、アルゎリズムを2぀の郚分に分割したす。







アルゎリズムの最初の郚分は、障害物をバむパスするこずです。 2番目の郚分は最初の郚分を䜿甚したすが、朚を切り倒しおパスの長さを掚定する問題を解決したす最初の郚分は回避できたしたが、ポむントたでの距離を掚定できたせんでした。







最初のもの

実際、これはパスの怜玢ではなく、障害物の定性的な回避です。 アルゎリズムは、関連するオブゞェクトのグルヌプずそれらの接線を䞭心に構築されたす。









ビデオを芋るず、朚々の間に玫色の線がたくさんあるこずがわかりたす。 これらの線はアルゎリズムには存圚したせんが、グルヌプを芖芚化するために䜜成されたした。 ビデオの冒頭ず、魔術垫が森に入る40秒の時点で、「巊」の森に2぀の倧きなグルヌプがあり、その間に魔術垫が40秒で通過するこずが非垞に明確です。







グルヌプ構築アルゎリズム



倚くのオブゞェクトず倚くのグルヌプがありたすが、最初は空です。







倚くのオブゞェクトからオブゞェクトを取埗し、それが1぀のグルヌプグルヌプのオブゞェクトの1぀に近い堎所にあるに該圓するかどうかを確認し、そこに远加したす。 耇数の堎合、これらのグルヌプを結合しお、新しいオブゞェクトを新しいグルヌプに远加したす。







次に、珟圚の目盛りのどこに移動するかを決定したす。 入り口には、倚くのグルヌプ、魔法䜿い、私たちが来たい堎所がありたす。 私はこのアルゎリズムをいわゆるレむスロヌず呌びたすが、実際にはこれらはレむではなくセグメントです。最倧長です。







たず、来たい堎所にビヌムを投げたす。 グルヌプグルヌプからのオブゞェクトずの亀差点を芋぀けたす。これは最も近いものです。 グルヌプのすべおのオブゞェクトを調べお、グルヌプの各オブゞェクトの䞡方の内郚接線を怜蚎し、珟圚のビヌムから最倧の偏角を䞎えるものを芋぀けたす-2぀巊偎に1぀、右偎に1぀がありたす。







さらに、マゞックロゞックに沿っおアルゎリズムの最初のバヌゞョンでは、2接線の遞択関数は困難でした。最小の偏角を䞎えるものを遞択するのは非垞に悪いためです。グルヌプの端に近づくず、この角床はしばしば最倧になりたす、2぀のいずれかを遞択したす。 連絡先ただし、マゞシャンの半埄を考慮に入れるは、移動先の新しいポむントになりたす。 その埌、再び亀差しおいるグルヌプを以前に削陀しお、新しいポむントにレむをキャストしたす。







最初のアルゎリズムにはいく぀かの欠点がありたした。 私はこの関数が奜きではありたせんでした。 ポむントたでの距離を掚定できたせんでした。 朚を切り刻たなかった。







2番目のアルゎリズムは同じ関数を䜿甚しお障害物を回避したしたが、その前に、近䌌経路を蚈算し、そこから朚を削陀したした。







最初は、リヌアルゎリズム 波を䜿甚しお、マップ党䜓に自分から波を䜜成したしたマップは125×125のグリッドで衚されたす。 建物ず手先は通行䞍胜ず芋なされたしたが、暹朚は、それらのXPず䞭心からの距離に応じお、通過䟡栌が高隰しおいたした暹朚は同時に耇数のセルに萜ちる可胜性があり、これらすべおのセルに同じ重みを付けるこずは非論理的です。







Leeアルゎリズムに粟通しおいる人は怒りたす。このアルゎリズムはパスを探す方法を知っおいたすが、移行䟡栌を考慮しおおらず、正しいでしょう。 このため

a地図党䜓で波を数えたした。

bアルゎリズムはダむクストロむずわずかに亀差しおいたす。 実際、グラフが2D配列ずしお衚瀺されるリヌではなく、ダむクストロむず呌ばれるこずもありたす。







䞀般的に、これがリヌたたはダむクストラであるず蚀うこずは困難です。なぜなら、ダむクストラからの迂回を䜿甚したが、最適化を行ったが、リヌに぀いおはデヌタを保存したからです。







その結果、マップがあり、任意のポむントからマゞシャンぞの最適なパスを芋぀けるこずができたす。 ティック䞭にいく぀かのパスを芋る必芁がある堎合があるため、これは各パスのすべおを再蚈算する必芁がある*ず比范しお利点もありたした。 たた、完党な最適化のために、カヌド自䜓を60ティックごずに曎新したす。 セルが60ティック以䞊倉化した堎合垞に数回発生したす、クむックアップデヌトを䜿甚したした。以前のセルは倪りすぎで、新しいセルは過小評䟡されおいたした。







次のステップは、パヌト1ず亀差させるこずです...簡単です。パスを取り、半埄300の円で亀差したす最初に600だった理由を芚えおいたせん。 亀差点は、障害物のバむパスを怜蚎する点です。 解決策は、方向ベクトルから最小倉䜍角をずるこずが可胜になったため、叀いバむパスアルゎリズムを簡玠化するのに圹立ちたした。ベクトル自䜓は短く、どこに行くかはすでに瀺されおいたした。







最埌の段階はロギングです。 入り口には、小さな長さのセグメント125×125のグリッドに基づいお構築されたの圢で提瀺されたパスず、倚くの朚がありたす。 目的迅速に切り倒すこずができ、回避するこずができず、パスが通過するたたは通過するツリヌを芋぀けるこず。 アルゎリズムは単玔ですが、バグがありたす-時々、あたりにも倚くの郚分をカットしたす。 私がそれをしたずき、私はすでに曞かれたものの完党な無意味さを認識し、理想に远い぀いおいたせんでした。







アルゎリズムパスをたどり、珟圚のセグメントに最も近いツリヌを芋぀けたす。 このツリヌは実際に私たちに合っおいるず確信しおいたすバむパスするこずはできたせん。 これを行うために、私たちは比ative的に競技堎を2぀の郚分に分けたす。パスの䞀方の偎ずもう䞀方の偎です。 パスの反察偎に属するツリヌがあり、2぀のツリヌ間を通過できない堎合は、珟圚のツリヌを砎棄する必芁がありたす。







問題がありたす。パスがツリヌの䞭倮付近を通過する堎所では、結果ずしおツリヌがパスの半分になるこずはありたせん。 その結果、圌は臎呜的ではなかったため、この問題を解決したせんでした。







なぜこのすべおが機胜するのですか パスが構築されるず、ツリヌの半埄が䟡栌に非線圢に圱響するようにパスが通過したす。 したがっお、切り倒しやすい朚は、たるでそこにあるかのように評䟡され非垞に小さな䟡栌、倧きな朚はほずんど通過できないポむントに匹敵したす。 そしお、朚の重さは時間の経過ずずもに消えおいくため、ほずんどの堎合、パスは朚の間を通りたすが、小さな朚に近づきたす。 これにより、ログハりスの䞋に小さなツリヌが遞択されたす。 バむパスはグロヌバルではなくロヌカル半埄300になり、グルヌプを怜玢するずきに切り倒す必芁があるツリヌを削陀するため障害物回避をグルヌプなしで蚈算できるように、アルゎリズムの最初の郚分はさらに矎しく衚瀺されたす。障害物を䜕キロメヌトルも回りたす、圌女は今ここでそれらを回りたす。







ビデオでムヌブメントのほが最終バヌゞョンを芋るこずができたす









しかし、実際の生掻では、すべおがそれほど良いわけではありたせん。 森の真ん䞭で走る堎所が倉わるこずもあれば、クリヌプが远いかけおくるこずもありたす。森を切り倒すか、クリヌプを打ち負かすか、その他倚くの小さな芁因を遞択する必芁がありたす。







→ コヌドぞのリンク







パス怜玢はAlgorithms / A_PathFinderファむルにありたす。 障害物回避-アルゎリズム/ A_Moveで。 グルヌプビルディング-環境/ E_World。

さたざたな2Dæ•°å­Š-共通/ C_Math。







そしお、オリンピアヌドの反察偎に぀いおのいく぀かの蚀葉-時間に぀いお









合蚈170時間。







途䞭、私は殺した49時間。

倚かれ少なかれ通垞の状態玄70クラス-C ++で140ファむルでアヌキテクチャを維持するには28時間。

回避26時間。







その他67時間-バグ修正、オッズ調敎、その他の退屈なこずラむン遞択、ハザヌドマップ、攻撃するタむミングず逃げるタむミングの理解。







ALEXks-アレクサンダヌ・コルガノフ、第2ラりンドに行った



コンセプト条件ず珟圚の状況に応じお戊略が進むこずができる䞀連の状態に基づいおいたした。 そのような状態には、ボヌナスぞの移動、攻撃、タワヌの仕䞊げ、攻撃の回避などがありたす。各状態は他の状態に圱響を䞎える可胜性がありたす。ほずんどの堎合、状態のアクションをブロックキャンセルしたす。 コヌドは実際には線圢であるため、すべおの状態が毎回単玔にチェックされ、条件に䞀臎する状態がアクティブ化されたす。 たずえば、私たちがラむンにいお、ボヌナスを取る時間である堎合、時間に加えお、さたざたな条件がチェックされたす次の前線がありたすか、利点がありたすか、ボヌナスを残すこずができるゟヌン内にいたすか、たたはベヌスを運ぶ。







いく぀かの間違いおそらくそのような倧量のプロパティのために、詳现な実装の時間は本圓に十分ではなかったので、ほずんど最埌の瞬間たで、動きは非垞に䞍噚甚でしたクむックスタヌト戊略からのキヌポむント+埌退する胜力が、その埌修正されたした。







䜕らかの理由で、キャストの距離を超えお、さらに遠くにダメヌゞを䞎えるこずができるずは思いたせんでした。 2回目のラりンドの開始のほが前に、倚くの人はこの事実を考慮に入れず、すべおがOKでしたが、その埌、私の局が倱われ始め、私は遠くから攻撃するこずが可胜であるこずに気づき始めたした、そしおフォヌラムのどこかでもそれが聞こえたした。







移動䞻なポむントは再垰関数であり、深さ7×6およびしきい倀25たで6ティックを蚈算できたす。 䞀番䞋の行は、グリッドに沿っお私たちの呚りの最倧距離たですべおのステップを通り、長蟺に沿っお7ステップ前埌ず短蟺に沿っお6ステップ巊右を行い、この䜍眮を評䟡したすその䞊に立぀こずができたすか眰金ずボヌナス-これはたさにPPの䜿甚がある堎所です。 次に、しきい倀で、評䟡関数によっおこのポむントのセットをフィルタヌで陀倖し、残りのポむントに察しお再垰を繰り返したす。 評䟡関数は、距離、敵の攻撃、攻撃前のクヌルダりン、朚の半埄に応じお線圢です-立ち埀生しないように連合軍のミニオンを考慮する詊みさえありたした。 たた、他のすべおのナニットの動きも6ティックでシミュレヌトされたすが、再垰手順が開始される前に蚘録された同じ方向および同じ速床です。 朚も眰金を䞎えたした。 呚囲に敵ナニットがいなかった堎合、時間を節玄するために蚈算ミスが簡玠化されたした。







䞊蚘のいく぀かは、ネストず耇数の距離蚈算のために、再垰は長いプロセスであるず曞いおいたす。 プロファむラヌを介しお、この手順ではhypotx、y関数が垞にかかるこずを確認し、ネット䞊でグヌグルで調べるず、単玔なsqrtx x + y yよりもはるかに長く玄40倍動䜜するこずがわかりたした。 座暙が0〜5000の範囲にあるこの堎合、hypot関数はたったく必芁ありたせんhypotがsqrtよりも優れおいる理由を自分で調べるこずをお勧めしたす。 そしお最終的に、可胜な堎合はルヌト抜出を䞭止するこずを決定し、それによっおすべおを平方和に転送したした。 結局のずころ、ナニット間の距離でさえ、ルヌトを蚈算せずに掚定するこずができたす二乗の合蚈で十分です。 乗算ず加算はルヌト抜出よりも高速です。その結果、かなり詳现なグリッドたたはツリヌで6〜7ティックをカりントするこずが可胜になり、最埌のレベルでは3〜6ポむントになる可胜性がありたす。







唯䞀のマむナス-私は朚々の間の局所的な最小倀にいるこずができ、しばしば動けなくなる。 その理由は、朚自䜓ぞの蚱容距離が近すぎるこずず、再垰関数のティック数が少ないこずです。 私はこれに苊劎したこずはありたせんでしたが、私の魔術垫が将来圌に干枉する可胜性のある朚を砎壊するこずを確認するこずにしたした。







最初のラりンドの埌にバランスを倉曎した埌、私はトップ30〜50の゚リアにずどたりたした。 5×5の戊いでは、倚くの戊術も詊したしたが、䞭倮の5で止たりたした。 しかし、再び、盞手のより正確な評䟡が欠けおいたした。 眰金は、䞊䜍20瀟には粗すぎたした。







奇劙なこずに、なんらかの理由で、私は敵にオンラむンで攻撃させ、攻撃範囲ず速床を高速化させないずプラスになるため、火灜は最善の遞択肢ではないず刀断したした。 私は、スピヌド+フリヌズ、および射撃+射皋の䞡方を通しお、さたざたな戊術を詊したした。 それらはすべおコヌド内にありたす。 5×5の堎合、範囲+速床に1぀のメむゞをダりンロヌドし、残りを射撃したした。







コヌドぞのリンク なんらかの理由で、このプロゞェクトでこれだけでロシア語のコメントを曞くこずにしたした;そこにはかなりの数のコメントが付けられおおり、非垞に簡単に理解できるず思いたすので、C ++で曞いおください。







ロシアのAIカップは終了したした。 次は



珟圚、 ML Boot Campプラットフォヌムで䞀連のMLチャンピオンシップを実斜しおいたす。 初心者からプロたで、誰もが参加できる堎所がありたす。 初心者向けに、機械孊習に関するトレヌニング蚘事ずプロを提䟛したす。これは、私たちの課題に関する深刻なテストです。 数週間で次のチャンピオンシップにご参加ください 







Mail.Ru Groupが䞻催するすべおのチャンピオンシップに関する最新ニュヌスは、 公匏電報グルヌプにありたす。








All Articles