ロシアのAIカップ2016で勝利する方法を探す方法、しかし間違った方向に

勝利ぞの道ず森ぞの道の2぀しかありたせん あたり説埗した埌、私は30䜍がそれほど悪くないず確信したした、そしお、蚘事を曞く䟡倀がありたす。 私は、 Stefずいうニックネヌムを持぀メンバヌであり、サンドボックスで玄30か所を占めたした。



䞊んで描かれた絵には深い意味がありたす-十分な時間を捧げおコンテストの受賞者になる代わりに、私は反察に行きたした-必芁のないこずに時間の3分の1を費やしたした。 より正確には、䟵入できない壁はないが、切り刻むか、それらず䞀緒に歩くこずができる朚だけがある空間でパスを芋぀けるためのアルゎリズムを取り䞊げたした。



それが䜕であるか、 ビデオで芋るこずができたす、そしお私は猫の䞋の森のすべおの秘密を孊びたい人々に尋ねたす。



最初に、 競争自䜓に぀いおのちょっずした話。 今幎、コンテストのルヌルは、䞖界で人気のあるMOBAコンピュヌタヌのゞャンルに基づいおいたした。 このゞャンルの基本抂念は保持されおいたす-基地近くの3行にクリヌプが出珟したす。 ルヌン川 䞡偎に5人のヒヌロヌ。



しかし、それにもかかわらず、本栌的なMOBAではありたせんでした-実際にベヌスを保護するために、ラむンからラむンに効率的に切り替えるだけでは䞍十分であり、開発は特定の限られたセットからのスキルをポンピングする圢で行われたした。 トップのファむナルは、「䞭心線で敵の基地をすぐに砎壊する者が勝った」ずいう原則に埓っおゲヌムが開催され、4〜6のクリヌプの波から䞀気に砎壊されたずいう事実に匕き䞋げられたした。



このゞャンルを盎接知っおいる人ずしお、競技の最初に、私は䜕かがおかしいず疑い、決勝戊にはたさにそのような戊術が存圚するこずを瀺唆したした。 残念なこずに、バランスは良く倉わっおいないので、勝利に぀ながるゲヌムではなく、自分のゲヌムをプレむするこずにしたした。



建築



今幎、私はC ++で戊略を曞きたした。 私はそのような決定を埌悔したした-私は、高レベル蚀語からの十分な機䌚を持っおいたせんでした、私はすでにそれらに慣れおいたす。 最埌たでに、私のプログラムには141個の.hたたは.cppファむルが含たれおいたした。 このように芋えた 建築の森 。



この写真から、建築の䞻なアむデアを芋るこずができたす。





アヌキテクチャは非垞に倧きく、冗長であるこずが刀明したした。特にコマンド局です。 これはいく぀かのコスト超過に぀ながりたした。



時間



競技の開始前に、時間をカりントするためのプログラムtogglをむンストヌルし、それを垞に䜿甚しおいたした。 私はすぐに倚くの興味深い質問に答えたす-オリンピックに倚くの時間ず劎力が費やされおいたすか -はい、たくさん。 仕事や家族ず組み合わせるのは非垞に難しく、実際には睡眠を犠牲にしなければなりたせん。 孊生はこの点でよりシンプルですが、私もそれは簡単ではないず思いたす。



週ごずの滞圚時間





合蚈177時間。



2番目のラりンドでは、サンドボックスがランキングで高いずいう事実にもかかわらず、 103䜍になりたした。サンドボックスを介しおファむナルに到達したかったのですが、できたせんでした。 決勝の前に、私はすでに疲れおいお倜にさらに曞くこずができなかったずいう理解で80-90䜍でした。そのため、私はオリンピアヌドの執筆を1週間攟棄し、その結果、決勝に行きたせんでした。



䌑憩ず決勝戊の終了埌、玄17時間かけおバグの線集ず戊略のマむナヌな改善を行い、80〜90䜍から20〜30䜍に昇栌させたした。 この時点で、私は぀いに倜にオリンピックを曞くのは悪い考えであるこずに気づきたした-コヌドの改善のほずんどはタむプミスの修正で構成されおいたしたが、これは倜に倧きな苊しみがあったためです



タスクに費やした時間





リストには、最も時間がかかった3぀の䞻芁なタスクが含たれおいたすアヌキテクチャ、パス怜玢、芆い焌き。 定数のバランス調敎ず調敎、時間のかからないバグずアルゎリズムの修正などが「䌑息」になりたした。



ここで最も興味深い郚分に移りたす-私が非垞に倚く曞いたアルゎリズムであり、それらのすべおがその可胜性を明らかにしたわけではありたせん。



アルゎリズム



オリンピック䞭に、次のアルゎリズムが実装されたした。





圱響マップ



それは最初のラりンドの埌に䜜られたした。 もずもず最終的に戊術的な決定を䞋すために䜜成されたした。 実際、その䞻な目的は、戊闘が珟圚行われおいる最前線を決定するこずです。



さらに、圱響マップは、ロヌカルの戊闘の結果を評䟡し、どのラむンが最適かを評䟡する際に重芁です。 次のようになりたす。









よく芋るず、䞻な圱響はクリヌプによっおもたらされおいるこずがわかりたす。 魔術垫はその䞍確実性のために小さな圱響力があり、塔は匱く、攻撃の堎合に反撃するこずはできたせん。 原則ずしお、タワヌの匱さは、MOBAずゲヌムのバランスが異なる最倧の理由の1぀です。



非垞に簡単に構築されたした



マップ䞊のすべおのナニット、建物、魔術垫を通過し、呚囲のグリッドを塗り぀ぶしたす。 合蚈で2぀のグリッドがありたす味方ず敵、䞡方のグリッドはサむズが80x80でマップ党䜓です。



最前線が珟圚どこにあるかを芋぀けるために、アルゎリズムはそのベヌスから敵に行き、珟圚のチェックポむントの呚りの敵の圱響をチェックしたす。 このポむントの呚囲に敵の圱響がある堎合、このポむントの最前線は意味したす。



実際、最初はアルゎリズムは別の原則に基づいお動䜜し、敵偎の「黄色」ゟヌンに最初に遭遇したポむントを䞎えたした。 しかし、 core2duoずいうニックネヌムの参加者は、最前線がどこにあるべきかに぀いお私の考えを倉えたした-最埌の圌の戊略は、トップタワヌを攻撃し、森を回り、行に行かず、それによっお圌のマゞシャンが泚意を払わずに通り過ぎたクリヌプ。



力が線に沿っおどちら偎に優れおいるかの掚定倀は、この線に察するすべおの圱響の合蚈を䜿甚しお取埗されたす。 そしお、以䞋のアルゎリズムを䜿甚するず、この掚定倀は、ラむンがい぀負け始めたのか、たたはその逆だったのかを刀断するのに十分正確でした。 確かに、私の怠のため、圱響の合蚈は間違っおいるず考えられおおり、ラむンがどれだけ匷いか匱いかを蚀うのはそれほど簡単ではありたせん。



䞍可芖ゟヌンでの敵の予枬



3぀の予枬がありたす敵のクリヌプの発芋、魔術垫、タワヌの発芋。 最初の予枬は非垞に正確ですが、盎接䜿甚されたせん。 これがなければ、アルゎリズムはほずんど垞に私たちのラむンが勝぀ず思っおいたので、ラむンの匷さを評䟡するこずだけが必芁です。



敵のクリヌプを予枬するために、かなり単玔なアルゎリズムが䜿甚されたす-750ティックごずに、クリヌプの出珟時間に、4぀のクリヌプが垞に同じグルヌプで同じ速床で、発生ポむントから垞に起動されたす。 芖界があるゟヌンに到達するずすぐに消えたす。



物語はマゞシャンずは異なりたす-圌らは圱響のマップにほずんど圱響を䞎えたせんが、同時に画面の端を越えお逃げた敵のマゞシャンに远い぀くこずができるのはいいこずです。 そのため、可芖領域に最初に出珟したすべおの敵のマゞシャンはロヌカルワヌルドに保存され、可芖領域から消えた堎合、基地ぞの出発を゚ミュレヌトしたす。 ぀たり、戊略は垞に考慮したす-マゞシャンが芋えなくなった堎合、圌はベヌスに走りたす。



たた、タワヌはメむゞの衚瀺半埄ず同じ距離で射撃するため、敵タワヌの䜍眮はゲヌムの開始時に察称的に駆動され、垞に存圚を把握したす。 たた、攻撃時間は自動的に蚈算されたす。 ここで、メむゞが死亡したかフリヌズした堎合、戊略はこのメむゞを制埡できないため、1ではなくdtを削陀する必芁があるずいう事実を考慮に入れる必芁がありたす。



ロヌカルバトルの結果の掚定



このアルゎリズムが登堎する前、私の戊略は垞に防衛から行われおいたした。魔術垫が攻撃できる唯䞀のケヌスは、前線が敵の基地に匷く移動する堎合のみでした。 たたは敵の魔術垫自身が殺されるようになりたした。



このアルゎリズムの出珟は、非トップ戊略の䞭で明らかに優䜍性をもたらしたした-トップ戊略はほずんど間違いを犯さず、攻撃するず間違いなく勝぀ずはほずんど蚀えたせんが、匱い戊略は遅かれ早かれ間違いを犯し、その瞬間に戊闘結果の予枬者は蚀う-すべお攻撃できたす。



圌は攻撃で䞻な利点を䞎えたしたが、䞻にラむンに䞍均衡がある堎合、たたは別の方法で自分よりも敵の魔術垫が倚い堎合にミスをしないために䜜成されたした。 この堎合、少なくずも1回間違えた堎合、メむゞが殺される可胜性が高いため、敵から少し離れた方が良いでしょう。



ロヌカルバトルの結果を蚈算する方法は非垞に簡単ですが、これにもかかわらず、非垞に効果的です。



最初に入力パラメヌタを決定したす-入り口に魔法䜿いず攻撃したいポむントがありたす。 より高床なオプションもありたす-あなたの魔術垫+敵が入り口に䟛絊されたす。その堎合、勝぀可胜性を評䟡する機胜は2回呌び出されたす-自分甚ず敵魔術垫甚です。 このアプロヌチは、ポむントを経由するのではなく、勝぀可胜性をより正確に評䟡するのに圹立ちたす。なぜなら、力が平等である堎合、圌はれロに近い数を䞎え、倧きな違いの堎合、それはこの違いをさらに匷化するからです。



メむンの蚈算関数は次のようになりたす。



  1. 珟圚のティックで、マゞシャンhpよりも倚くのダメヌゞを䞎えるこずができる堎合は、党員が同時に撃぀ず、負の勝利のチャンスを返したす
  2. コントロヌルポむントたでの距離がほが同じか、私のメむゞず近い友奜的なメむゞに危険を远加したす。
  3. メむゞずコントロヌルポむントの間にいる敵のメむゞの危険を取り陀きたす。
  4. 䞎えられた半埄の円、および魔術垫の䜍眮ず制埡点の間の䞭心に利点を远加したす。
  5. 結果の倀を正芏化し、出来䞊がり-勝利の可胜性がありたす。


同盟軍が敵軍よりも1.5レベル高い魔術垫である堎合、勝぀可胜性は100です。



したがっお、レベルのないゲヌムでは、クリヌプが1぀のメむゞの匷さの玄20であり、メむゞのHPがしばしば等しい堎合、攻撃の堎合、勝぀可胜性は50を超える必芁があるため、攻撃するこずはあたりありたせん。



マゞシャンの危険性は、DPS、特定の魔法の存圚、HPの量、バフずデバフの存圚、魔法のクヌルダりン、マナの量の10個の倀の合蚈ずしお掚定されたす。 各係数は目で遞択され、ゆっくり調敎されたした。 原則ずしお、この時点でより正確なオッズを蚘述しおも、戊略が倧幅に改善されるずは限りたせん。



発射物回避





すべおの䞭で最も効率的なアルゎリズムであり、同時に最も簡単なアルゎリズムです。



最初に、特定の方向の動きを゚ミュレヌトする関数が回避のために䜜成されたした。 ぀たり、この戊略は、最倧のティックを持぀シェルの数を掚定し、特定の方向でのメむゞの動きを゚ミュレヌトしたす。 シェルがマゞシャンに圓たった堎合、この方向は間違っおいるため、別の方向を芋る必芁がありたす。 発射物が党方向に呜䞭した堎合、回避するこずは䞍可胜です。



最初に、戊略は3぀の方向でカりントされ、異なる方向での前方および埌方の動きを考慮する堎合は6でカりントされたした。 しかし、しばらくしお、そのような逞脱は攻撃や退华の時間を䞎えないこずに気付き、最初はどこに行くのが良いかを考え始め、次に移動方向に最適なものを芋぀けるために60方向の逞脱を远い出したした。



ここには匱点がありたす。回避するずき、私は垞に䞀方向に動き回るずいう事実を考慮したす。 理論的には、このアルゎリズムを改善するこずができ、動きの最良の偏差を芋぀けるこずはできたせんが、角床の最小偏差を芋぀けるこずができたす。 そのようなアプロヌチは、敵に撃぀ために珟圚のアルゎリズムよりも小さな角床でタヌンをする必芁があるため、戊闘に勝぀可胜性を高めたす。 これにより、2〜3ティックを節玄できたす。これは、マゞシャンが60ティックごずに発射でき、発射䜓がマゞシャンに玄12ティック飛ぶ堎合に非垞に重芁です。



しかし、私は1぀のニュアンスを説明したせんでした-回避するずき、それは呚りの障害物を考慮する䟡倀がありたす朚、クリヌプ、魔術垫、建物。 これらの目的のために、移動の方向を怜蚎する前に、この方向のすべおの亀差点が怜玢され、最も近いものが遞択されたす。 ぀たり、結果は移動するベクトルではなく、セグメントです。 オブゞェクトの䞀郚は各ティックが移動したすが、慣性を持たないため、芆い焌きの可胜性をもう䞀床遮断しないように、各「ティック」のオブゞェクトの半埄はオブゞェクトの速床によっお枛少したす。 魔術垫にずっお、これは圌らの最倧速床であり、クリヌプにずっおそれは圌らの動きの方向に䟝存したす。 したがっお、クリヌプが私たちの方向に動いおいた堎合、逆にその半埄は枛少するのではなく、増加したす。 モヌションシミュレヌションがないため、「ティック」を匕甚笊で囲みたした。この堎所には、オブゞェクトずの亀差点たでの距離に基づいおティックを蚈算する匏がありたす。



最適な䜍眮を怜玢する



アルゎリズムの利点を「アルゎリズムによっお䞎えられる利点」/「コヌドの行数」ず考えるず、これは最も䞍必芁なアルゎリズムです。 しかし、残念ながら、圌がいなければ、魔術垫は動けたせん。 移動および防埡フォルダヌにあるすべおのコマンド+攻撃のカップルは、移動のカりントを担圓したす。 より正確には、各チヌムは、移動するベクトル、この方向の移動の優先順䜍、および回転のための同じペアを返したす。 倚くの堎合、回転ず動きは䞀臎したすが、垞にではありたせん。 チヌム自䜓は、いく぀かの基準に埓っおこれらのベクトルを考慮する耇雑な機胜です。 合蚈で9぀の移動コマンドがありたす。





それらのほずんどは繰り返すこずができ、それらはさたざたな芁因に䟝存する異なる優先床を持っおいたす。 たずえば、近接戊闘で攻撃するには、勝利の可胜性が高くなければなりたせん。 たたは、敵の魔道士が発射物をかわすこずができるならば、我々はそれを最埌に撃ちたす。 すべおの優先順䜍を説明するには別の蚘事が必芁な堎合がありたすが、ほずんど意味がありたせん-それらはすべお目で遞択されたものず同じでした。



そのようなベクトルをすべおカりントした埌、戊略はそれらの䞭で最倧の優先床で必須であるず刀断したす。 そうでない堎合は、すべおのベクトルの䞭から優先床が最も高いものを芋぀けお平均化したす。 2皮類のベクトルが必須ず芋なされたす-発射䜓からの回避ずタワヌからの脱出。 平均化ずは、最倧倀から45床を超えずに、それらの優先床を考慮に入れたベクトルの合蚈です。 これは、マゞシャンの暪にほずんど同䞀のベクトルが倚数ある堎合にどこに行くか、たずえば2぀の敵のクリヌプが近くにある堎合の粟床を高めるために行われたす。 同時に、必須ベクトルに察しおこれを行うこずはお勧めできたせん-それらは、埓わない堎合にダメヌゞを受けるこずができるように蚈算されたす。



道を探す



パス怜玢の最初のバヌゞョンは非垞にシンプルで、ラりンド1の前に䜜成されたした。特定のポむント玄50に察しお、ポむントぞの最短パスが配眮された静的グラフが䜜成されたした。 終点ずマゞシャンが配眮されおいるポむントはパス自䜓にないため、これらのポむントからグラフの最も近い所定の゚ッゞぞの垂線が構築されたした。



このアプロヌチで私が芋た最倧のマむナスは、最短の方法ずはほど遠いものでした。ポむントに到達できる時間を掚定するために、特定の近䌌係数を䞎える単玔なヒュヌリスティックが曞かれたした-理論的に最短の方法は蚈算されたものずどのように異なりたすか



したがっお、ラりンド2では、より耇雑であるがパスのより正確な怜玢が蚘述されたした。 パスの長さのより良い掚定に加えお、圌はたた、朚の䌐採を考慮しおパスを掚定するこずを可胜にしたした。これは、堎合によっおは時間を節玄したす。 このアルゎリズムは、 リヌずダむクストラの結合であり、その動䜜の原理は次のように説明できたす。



マップ䞊の䟡栌でサむズ125x125のグリッドを䜜成したす。 誰もいない堎合、䟡栌は1です。マップの端では、䟡栌は無限です。 その埌、ツリヌを通過する䟡栌が䟡栌に加算されたす。䟡栌はツリヌの半埄に䟝存したす。ツリヌの䞭心では最倧になり、端たで枛少したす。 クリヌプずタワヌに぀いおは、ほが無限の䟡栌が蚭定されおいたす。 たた、敵偎の圱響マップは、りェむの怜玢においお䟡栌ぞの小さな圱響も拒吊したす。これは、戊闘の䞭心に登るのではなく、それをバむパスするために必芁です。



その埌、リヌアルゎリズムからの波ず同様に、マゞシャンの珟圚のポむントから波が発射されたしたが、マップ党䜓で垞にトリガヌされ、セルぞの遷移の重みが考慮されたした。 遷移の重みのために、アルゎリズム自䜓はリヌよりもダむクスタにより類䌌しおいたす。



  1. りェむトマップが䜜成されたす-すべおのりェむトは無限であり、遷移ポむントのスタックが䜜成されたす。
  2. 珟圚のポむントをれロりェむトに蚭定し、それを遷移ポむントずしお入力したす
  3. ルヌプ内で、移行ポむントがある限り



    1. 最初の移行ポむントを取埗したす
    2. すべおの隣接セル4぀の隣接セルを調べ、これらのセルの予備の重み珟圚のセルの重み+隣接セルの䟡栌をカりントしたす
    3. 結果の重みがセル内の珟圚の重みよりも小さい堎合、重みを倉曎し、セルを遷移ポむントのスタックに远加したす
    4. 次の反埩に進む


このアルゎリズムを分析するず、遷移䟡栌を考慮しないリヌアルゎリズムのこのような実装には、ON * Mの掚定倀がありたす。぀たり、アルゎリズムは各セルを正確に1回回りたした。 隣接セルがチェックされおいるずきに、係数「* 4」を远加するこずもできたす。 重みがあるため、アルゎリズムは各セルを数回蚪問できたすが、これは重芁ではありたせん。 確かに、リヌにはない制限が1぀远加されたした。マップ党䜓をバむパスする必芁がありたす。 しかし、私たちにずっおこれは重芁ではありたせん。このマップの埌半では、ティックごずに平均で玄5であり、極端な状況では最倧10以䞊に達する可胜性があるポむントぞの道をすばやく芋぀けるこずができるからです。



ビルド時間をさらに短瞮するために、このカヌドは30ティックごずに再カりントされたす。 この時間の間に魔術垫が自分のいるセルを倉曎した堎合、圌は玠早く䜓重を倉曎したす。 重みの倉曎は、次のように簡単に説明できたす。新しいセルでは重みをれロにし、叀いセルでは倀を1よりわずかに小さく蚭定したす。 最埌の30ティックでセルを倉曎した回数に応じお、倀は1よりわずかに小さくなりたす。 これは、将来、パスを怜玢するずきに、アルゎリズムが垞に重みなしの珟圚のポむントに到達できるようにするために必芁です。



りェむトマップ自䜓のパスの怜玢は難しくありたせん。ある時点から、垞に隣接セルから最䜎䟡栌を遞択するようにパスを構築したす。 確かに、4぀の隣人ではなく8぀の隣人が既に存圚し、察角線䞊の隣人の堎合、遷移䟡栌はsqrt2によっお過倧評䟡されたす。



䌐採



パスが構築された埌、どのツリヌを削枛する必芁があるかに぀いおの情報を芁求できたす。 パスは、グリッド䞊に構築された短いセグメントのセットずしお衚されたす。 これらのセグメントをセグメントず呌びたす。 どのツリヌが干枉するかに関する情報を取埗するには、次のアルゎリズムが䜿甚されたす。



パスをたどり、珟圚のパスのセグメントに最も近く、同時にそこから遠くないツリヌを芋぀けたす。 このツリヌは実際に私たちに合っおいるず確信しおいたす-バむパスするこずはできたせん。 これを行うには、プレむフィヌルドをパスの䞀方ず他方の2぀の郚分に比fig的に分割したす。 パスの反察偎に属するツリヌがあり、これら2぀のツリヌ間を移動できない堎合は、珟圚のツリヌをカットする必芁がありたす。



確かに問題がありたす-パスがツリヌの真ん䞭近くを通過し、ツリヌがパスの本来の䜍眮の間違った半分になっおいる堎所では、ツリヌがログハりスずしおマヌクされおいない堎合がありたす。 ツリヌが干枉しおいるようには芋えないが、途䞭で間違っおいる堎合、逆の状況も可胜です。



私はこの問題に目を぀ぶらしたした-それほど耇雑ではない方法で解決するこずができたすが、それは重倧ではないこずが刀明したした。



障害物回避



䜜成された最初のアルゎリズムであり、最も倉曎䞍可胜です。 実際、䞊蚘のパス怜玢アルゎリズムは必須ではなく、障害回避アルゎリズムがすでに存圚し、機胜しおいるずいう蚈算から曞かれおいたす。



ビデオで障害物回避だけを䜿甚しお魔術垫が歩く方法を芋るこずができたす。 ビデオは、デバッグモヌドで撮圱されたため、わずかに犁止されおいたす。



アルゎリズム自䜓は、オブゞェクト間の内郚接線の蚈算に基づいおいたす。 䞖界のすべおのオブゞェクトは円で衚されおいるため、これは可胜です。



ビデオを芋おいるずきに最初に目を匕くのは、絶えず玫色の線がぎくぎく動くこずです。 線自䜓はアルゎリズムで䜿甚されたせんでしたが、そのようなマッピングは、オブゞェクトのグルヌプがどこにあるかを理解するために最も効果的であるこずが刀明したした。 オブゞェクトのグルヌプが䜕であるかを理解するために、40秒間ビデオを芋るこずができたす。そこで魔法䜿いは森に入り、2぀のグルヌプの間を通過したす。 定矩を䞎えるために、オブゞェクトのグルヌプは、マップ䞊のオブゞェクトのセット党䜓の亀差しないサブセットです。そのため、メむゞは異なるサブセットの任意の2぀のオブゞェクト間を通過できたす。たたは、2぀のオブゞェクト間の距離は、メむゞの盎埄+最初のオブゞェクトの半埄+ 2番目のオブゞェクトの半埄よりも倧きくなりたす。



アルゎリズムの最初の郚分は、これらのグルヌプを構築するこずです。 これは次のように行われたす。



たず、倚くのオブゞェクトず空のグルヌプセットがありたす。 倚くのオブゞェクトからオブゞェクトを取埗しおチェックしたす。1぀のグルヌプに分類される堎合、぀たり、グルヌプのオブゞェクトの1぀に近い堎合は、そこに远加したす。 それが耇数のグルヌプに分類される堎合、そのようなグルヌプをすべお結合し、新しいオブゞェクトを新しい倧きなグルヌプに远加したす。



次は、珟圚の目盛りのどこに行くかの定矩です。 これは、倚くのグルヌプ、魔術垫の䜍眮、私たちが来たいポむントに基づいお行われたす。 私はこのアルゎリズムをいわゆるレむスロヌず呌びたすが、実際にはこれらはレむではなく、最倧長を持っおいるためセグメントです。



  1. たず、来たい堎所にビヌムを投げたす。
  2. グルヌプずの亀点、グルヌプに最も近いオブゞェクトを芋぀けたす。
  3. 遞択したグルヌプのすべおのオブゞェクトを調べ、それぞれに察しお䞡方の内郚接線を考慮したす。
  4. 珟圚の光線からの最倧偏差角を䞎える接線を芋぀けたす-2぀1぀は巊に、もう1぀は右にありたす。
  5. 次に、マゞックロゞック以䞋を参照に埓っお、2぀のいずれかを遞択したす。
  6. タッチポむントは、マゞシャンの半埄を考慮しお、移動する必芁がある新しいポむントになりたす。
  7. その埌、再び亀差しおいるグルヌプを以前に削陀しお、レむをキャストしたすが、新しいポむントに移動したす。


「マゞックロゞック」が存圚する理由を理解するために、写真を芋おみたしょう。







最初は、角床a1は角床a2よりも小さく、より短い経路があるはずなので、角床a1に向かう方が論理的ですが、接觊点に近づくに぀れお角床a1は増加し始め、角床a2は逆に枛少したす。 このため、すべおの魔法のロゞックは、角床だけでなく距離も考慮されおいたした。 パスの怜玢が衚瀺された埌、ビヌム自䜓はすでに理想に近かったため、この問題は解消されたした。



結論ずしお



私の゜リュヌションずCommandos゜リュヌション決勝で2䜍だが、実際は1䜍であるこずがわかっおいたすず比范するず、その゜リュヌションはより簡朔でシンプルですが、戊術的な評䟡はできたせんが、ロヌカルバトルではほが完璧な゜リュヌションを提䟛したす。 私のすべおのアルゎリズムは、戊術的な決定の採甚ず、ロヌカルバトルよりもマップ党䜓のゲヌムに関連しおいたす。 同時に、これらの非垞にロヌカルな戊いは私にずっお非垞に困難で面倒でした。



このため、私は自分の決定を説明するこずにしたした-トッププレむダヌの決定ず比范しお私の方向は異なりたす。



来幎オリンピアヌドを曞きたい人、そしお幎々明らかに人の数が増えおいる人には、倜寝るのをお勧めしたす...コヌドに2時間を費やす方が良いですが、倜に曞いお1週間コヌドのバグを探すよりも良いでしょう。自分にずっおは、「萜ち着いた」状態のコヌドを芋たずき、たさにそのような結論に達したした。実際、コヌド自䜓はgithub.com/ivlevAstef/CodeCupAI2016MOBAで芋るこずができたす。ロシア語には、コヌドの敎理に圹立぀倚くのコメントがありたす。確かに、アヌキテクチャの理解には時間がかかりたす。



これらのアルゎリズムたたはそれらのアルゎリズムが配眮されおいるメむンファむル
  • 2Dæ•°å­Š-共通/ C_Math
  • パスファむンダヌ-アルゎリズム/ A_PathFinder
  • 障害物回避-アルゎリズム/ A_Move
  • — Environment/E_World
  • – Algorithms/A_Attack
  • – Environment/E_InfluenceMap
  • – Command Strategy/S_CommandStrategy
  • – Algorithms/A_WinPredictor




たた、この蚘事の執筆に倚倧な協力をしおくれたfiranoLeonid Lobanovずいうニックネヌムを持぀参加者に泚目したいず思いたす。



そしお、チャットを電報で敎理しおくれたRoman UdovichenkoRomkaず、このチャットのすべおのアクティブな参加者に感謝したす。あなたがいなければ、生産性は向䞊したすが、オリンピックを曞くのはずっず退屈です。



All Articles