毎幎恒䟋のロシアAIカップ2015での勝利の歎史

Mail.Ru Groupの幎次AIプログラミングコンテスト「Russian AI Cup 2015」ぞの参加ず勝利に぀いおお話ししたいず思いたす。 ご垌望の方は、競技りェブサむトrussianaicup.ruで競技の詳现なルヌルず詊合の蚘録をご芧ください 。



画像



今幎のコンテストはたったく新しいレベルで開催されたした。 AIが動䜜するゲヌムワヌルドの芏暡ず、競争のWebサむトの䞡方で倉化が起こっおいたす。 3次元の芖芚化のおかげで、ゲヌムははるかに゚キサむティングに芋えたした。 ゚ンタヌテむンメントの面では、私の意芋では、競争は昚幎のホッケヌず2013幎の「兵士」を倧きく䞊回りたした。



参加者は、サバむバルレヌスで車を運転するためのAIを曞くように求められたした。 昚幎ず同様に、課題は「物理孊」でした。 しかし、今回は、「物理゚ンゞン」の゜ヌスは公開されおいたした。 たた、昚幎ずは異なり、今回はゲヌム䞖界のすべおのランダム珟象は芖芚的でした-ランダムカヌド、ランダムに配眮されたボヌナス。 運があなたの偎にあり、それがあなたから背を向けたずき-それはすぐに明癜でした。 昚幎のホッケヌでは、匷さが倧幅に異なる察戊盞手の詊合を芳戊しおも、チャンスがチャンスによるものかスキルによるものかを理解するこずは困難でした。 これは競技の゚ンタヌテむメントに良い圱響を䞎えるず思いたす。



ルヌルの簡単な説明



目暙は、閉鎖された高速道路で誰よりも速く2呚を走るこずです。 より正確には、最も倚くのポむントを獲埗する必芁がありたすが、ポむントを獲埗する䞻な方法は最初に来るこずです。 たた、道路䞊のボヌナスを収集し、敵にダメヌゞを䞎えるためのポむントを䞎えたす。 トラックは、コンストラクタヌずしお、正方圢の「タむル」から組み立おられたす;これらは、トラックの盎線郚分、コヌナヌトラックの90床回転、たたは亀差点T字型ず通垞です。 トラックのキヌポむント「タむル」に特定の順序で移動する必芁がありたす。ルヌプを䜜成する必芁がある堎合もあれば、戻るこずもありたす。 たた、車には燃料の氎たたりを背埌に泚ぎ、特別なシェルタむダずワッシャヌでお互いを撃ち、特別なニトロアクセラレヌタを䜿甚する機䌚がありたす。 これらすべおのデバむスの料金は制限されおおり、マップ䞊にランダムに散らばったボヌナスを遞択するこずで補充されたす。



私のAIがどのように機胜するのか、そしおどのように私は勝぀こずができたのかを説明したす。



最初のバヌゞョン



コンテストに参加するのはこれが初めおではなく、毎幎、前回よりも良い結果を達成するこずができたした。 私の経隓から、成功の倧郚分は戊略を適切に組織化するこずです。 時間は非垞に限られおいるため、最初から䜕をどの順序で行うかを考える必芁がありたす。 すべおを捚おお曞き盎さなければならない堎合、勝利の可胜性はほずんどありたせん。

私の戊略には「キラヌ機胜」はなかったず思いたすが、倚くの小さな成功した゜リュヌションが1぀の倧きな利点を圢成したした。 ストヌリヌは非垞に長く、これらすべおのポむントの詳现な説明が含たれたす。



テストずデバッグに぀いお。 過去数幎、私のアルゎリズムが期埅しおいた利益をもたらさない理由を理解しようずしお頭を壁にぶ぀けたこずがありたした。 そしお、倚くの時間を費やしお、アルゎリズムの栞心に突然バグを発芋したした-そしお、すべおが予想よりもさらに高くなりたした。 今幎でさえ、バグのために勝利を逃しそうになりたした。テストにより倚くの時間を割く必芁がありたした。 今回は、芖芚化がデバッグの䞻な方法になりたした。 短いが効果的なテストを思い付くこずができなかったので、長いテストを曞くのに倚くの時間を費やすのは残念でした。 予枬された軌道を実際の軌道ず比范する物理シミュレヌタヌのテストのみがありたした。 それなしでは、衝突の物理をデバッグするこずは完党に䞍可胜です。



私は最初のバヌゞョンを教えお、トラックをパスするだけにするこずにしたした。 しかし、この最小限でさえ、正盎に実装された堎合、かなり倚くの䜜業が必芁でした。機械の自由な動きの物理シミュレヌタヌ、偎面ずの衝突怜出、経路の探玢、軌道蚈画者が必芁でした。 最初の3぀のコンポヌネントは明確でした-方法、4番目はあたりありたせん。



以前のように、私は物理シミュレヌタヌを曞くこずから始めたした。 問題はありたせんでした-物理゚ンゞンの゜ヌスが利甚可胜でした。 ゚ンゞンのようにティックごずに10回繰り返しを行うず、パフォヌマンスに問題がある可胜性があるこずがすぐに明らかになりたした。 昚幎の受賞者の蚘事を思い出しお、絶察的な正確さが必芁かどうか疑問に思いたした。 それにもかかわらず、私はそれを正確に行うこずにし、必芁に応じお、10回ではなく1回の反埩でそれをやり盎したした。結局、正しい遞択でした。 次に、フェンスずの衝突を怜出し始めたした。 ゚ンゞンで衝突怜出を行うのが怖かったので、遅すぎるず刀断したした。 いく぀かのオプションを怜蚎したので、このアルゎリズムに決めたした。



各タむルは、正方圢のグリッドで9぀のセクタヌに分割されおいたす。 各セクタヌにあるため、マシンは4぀の偎面の1぀にある特定のタむプのフェンスにのみ遭遇でき、䞀郚のタむプではミラヌのようなフェンスに遭遇したす。



フェンシングのタむプは次のずおりです。





これらの6぀のオプションは、考えられるすべおのケヌスをカバヌしおいたす。 マシンは1぀の「タむル」に眮かれ、フェンスのあるコヌナヌは別の「タむル」に眮かれるため、オプション5ず6が必芁です。 次に、マップ党䜓のテヌブルが䜜成され、各「タむル」の9぀のセクタヌのそれぞれに、マシンがフェンスず衝突したかどうかをチェックできるオブゞェクトが眮かれたした。 実装は非垞に効果的であるこずが刀明し、反埩に費やされた時間の3分の1未満でした。 これにより、パフォヌマンスが倧幅に䜎䞋するこずなく、ティックごずに1回ではなく、反埩ごずに衝突チェックが可胜になりたした。



別の最適化に぀いお説明したす。 角速床がモヌションに関䞎しおいたため、最初の実装では各反埩でサむンずコサむンを蚈算したした-遅いです。 しかし、ホむヌルの回転角角速床に圱響するはティックごずに1回しか倉化せず、衝突からの角速床はめったに珟れなかったため、通垞は各反埩で同じ䞀定の角床をマシンのオリ゚ンテヌション角に远加する必芁がありたした。 マシンの方向角をベクトルで保持し、各反埩で䞀定の倀で回転させたした。これらは4回の乗算ず2回の加算です。 サむンずコサむンは、ティックごずに1回だけカりントする必芁があり、たれに、各反埩での衝突埌にカりントする必芁がありたした。



パスの怜玢は、最も単玔な方法であるりェヌブアルゎリズムで行われたした。 それから、タヌン、ボヌナス、燃料油のプヌルの存圚を䜕らかの圢で考慮するために、ダむクストラのアルゎリズムにそれを曞き盎したかったのです。 しかし、圌は決しおこれに戻りたせんでした。



最埌のコンポヌネント-トラゞェクトリプランナヌ。 私は圌ずいじらなければならなかった、私は、党䜓の競争の䞀般的な説明では、圌は半分の時間がかかったず思う。 埌半は物理シミュレヌタヌで、最小限の時間が他のすべおに費やされたした。 最初は、以前ず同じ方法で問題を解決しようずしたした-特定の圢匏の軌道を列挙したす。 最も単玔な圢匏Nティックを盎接移動し、Mティックでステアリングホむヌルを䞀方向に回転させおから、ステアリングホむヌルを䞭立䜍眮に戻したす。 うたくいきたしたが、悪くお非垞に遅く、事前に100ティックのすべおのオプションを誀っお蚈算するず、時間制限に収たりたせんでした。 マシンは、タヌンの前に次の列のレヌンを倉曎する必芁があるこずを理解しおいたせんでした。 このアむデアに数日費やした埌、私は䜕か他のものが必芁であるこずに気づきたした。



軌跡のツリヌを䜜成するこずにしたした。倚くの参加者がこの考えに来たず思いたす。 しかし、おそらく私がそれを構築した方法は興味深いものです。 このツリヌを構築するための成功したアルゎリズムのおかげで、私は倧郚分が勝ったず思う。 圌は、既知の䜕かに基づいおではなく、自分でアルゎリズムを発明したした。 自転車を発明したかどうかを厳密に刀断しないでください。 ツリヌは次のように構築されたした。



450ティックの長さでいく぀かの初期軌道を䜜成したすここず以䞋の長さはティックで枬定され、すぐに450で停止したせんでした。 その埌、䜕床も割り圓おられた時間がなくなるたで、再垰的なメ゜ッドが呌び出されたした。このメ゜ッドは、ツリヌのブランチのいずれかで「ブランチ」を生成したした。 「分岐」䞭に、分岐点ぞのパスのセクションが新しいサブツリヌのトランクになり、その埌のセクションが新しいサブツリヌのブランチの1぀ずなり、新しいブランチが远加されたした。 すべおのブランチの長さは、ルヌトから最終状態たでのパスの党長が䞀定たたはそれ以䞋で、ブランチが衝突で終了するように遞択されたした。 最初のバヌゞョンでは、4぀のモヌションオプションが分岐に䜿甚されたした。 ガスは垞に床にあり、ステアリングホむヌルを4぀の䜍眮で回したす。右、巊、䞭立䜍眮、珟圚の䜍眮を維持したす。 埌に、ブレヌキず埌方ぞの乗車のオプションが远加されたした。 このツリヌ構築アルゎリズムの操䜜には、3぀の評䟡関数が䜿甚されたした。



  1. 子孫の枝の平均の長さが幹の長さより短い堎合、珟圚のツリヌの幹の「枝」を䜜成したす垞に䞭倮に。 それ以倖の堎合は、再垰呌び出しの子孫を遞択したす。 私はここで倚くのこずを詊したした-このオプションが最高であるこずが刀明したした。
  2. 珟圚のツリヌの子孫を遞択しお、再垰呌び出しを行いたす。 最倧倀を持぀子が遞択されたす<ツリヌ内のブランチの平均長> * <3番目の評䟡関数> / sqrtツリヌのすべおのブランチの長さの合蚈。 ツリヌが瞮退しないように、分割が必芁です。ブランチの探玢に時間がかかるほど、分母が倧きくなり、優先床が䜎くなりたす。
  3. 䞻な評䟡関数。これに基づいお、どのブランチを䜿甚するかが決定されたすどちらのブランチが優れおいるか。 最初のバヌゞョンでは、この関数の倀はトランクのスコアず子孫の最倧スコアの合蚈に等しくなりたした。 フィニッシュラむンに近づくず、「タむルを取る」ずいう報酬が䞎えられたした。 この機胜は、かなり埌に倉曎されたした。


それは、仕䞊げに぀ながったそれらのブランチのブランチ優先順䜍を持぀かなり均䞀なブランチツリヌであるこずが刀明したした。 残念ながら、そのツリヌの写真はありたせんでしたが、芖芚的には最新バヌゞョンずほずんど倉わりたせんでした。



これは、私の戊略の最新バヌゞョンの芖芚化が、可芖性が制限された状態のマップの1぀でどのように芋えるかです。 これらは、1ティックで構築される軌道です。 最適なものは、倚くのティックに察しお取埗されたそのようなツリヌのセットから遞択されたすこれずその他のトリックに぀いおは、以䞋の蚘事で説明したす。



画像



ここで䞻催者に感謝したいず思いたす。 今回、AIが動䜜しおいた䞖界は過去よりも著しく耇雑であるこずが刀明したため、参加者は新しいアルゎリズムずアプロヌチを探すようになりたした。 このような軌跡の朚は、昚幎のホッケヌやタンクで完璧に機胜したず思いたす。



最初のラりンドの玄9日前に、最初のバヌゞョンの準備が敎いたした。 圌女は普通に運転し、玄200x-300xの堎所に登りたした。 さらに、それは戊略のフレヌムワヌクになり、根本的に倉曎されず、新しい機胜のみが远加されたした。



最初のラりンドの準備



圓時はただカヌドが少なく、それらはシンプルでしたが、マシンはしばしば行き詰たりたした。 圌女は埌方に乗るこずができなかったので、壁に寄りかかっお。 メむンアルゎリズムに障害が発生した堎合の「スマヌトガむ」ぞの切り替えは無効でした。 私はすべおを䞻芁なものに教える぀もりで、時間を無駄にしたくないので、私は緊急の発芋的アルゎリズムを曞きたせんでした。 ツリヌパスのルヌトの分岐オプションにリバヌスラむドを远加したした。 この段階で、ティックごずに軌跡のツリヌを再構築したした。 すべおの分岐に分岐オプションを远加するず、通垞の分岐の分岐が倧幅に削枛されリ゜ヌスは限られおいたす、マシンの性胜が䜎䞋し始めたした。 そのため、ルヌトにのみ、そしお緊急スタックの堎合にのみ新しいブランチを远加しようずしたした。 私は簡単な状況から離れるこずを孊びたした-病倉は少なかった。 評䟡はratingい䞊がり、二癟に達したした。



ここで私は、最初に問題を解決するために、すべおの改善をこの順序で実行しようずしたこずに泚意しおください。これは、最も倚くの敗北の原因です。 いく぀かの問題を修正する必芁がなかったため、このアプロヌチが功を奏し、時間を節玄したした。



次の改善は非垞に簡単でしたが、非垞に効果的でした。 芋぀かったパスのすべおのティックを捚おお、次のティックで再び探すのはなぜですか 物理シミュレヌタヌは小数点以䞋10〜12桁の粟床を瀺したため、数十ティックの間、車は非垞に高い粟床で遞択されたパスに残りたした。 その埌、軌道を完党に正確に予枬するこずで、倚くのコンピュヌティングリ゜ヌスを節玄できるこずに気付きたした。 新しく構築されたツリヌの各ティックは、前のティックに保存されおいるものず比范され、叀いものを残すか、新しいものに眮き換えるかの決定が行われたした。 圌は、予枬された座暙ず実際の座暙たたは速床が7番目のサむンで異なる堎合、機械が軌道から「倖れた」ず信じおいたした。 ツリヌは察称ではなく、タヌゲットに向かっお䌞びおおり、各ブランチの長さは最倧10ティック以䞊だったため、芋぀かったツリヌはかなり「叀くなった」ようになりたした。



したがっお、軌跡は、数十本以䞊のチヌクで䜜られた森党䜓から遞択されたした。 絶察的な粟床は必芁ないずいうアドバむスに埓った堎合-この手法を適甚するのは難しいかもしれたせんが、环積誀差を制埡する必芁がありたす。 各ティックの10回の反埩により、軌道の蚈算速床が10倍実際にははるかに枛少したしたが、数十倍の蚈算が可胜になりたした。 そしお、絶察的な正確さなしにタむダを䞀気に振り回すようなトリックを行うこずは困難ですこれは十分な正確さの問題です。



前回の最適化の埌、パフォヌマンスの問題は緩和されたした。ツリヌを構築する時間を3〜4倍短瞮しおも、戊略を匱めるこずはほずんどありたせんでした。 別の改良により、ブレヌキを䜿甚できるようになりたした。 ここで問題が発生したした。すでにほずんど停止しおいるマシンのブレヌキングに割り圓おられたすべおの時間を費やしお、互いにほずんど区別できない倚くの状態。 私はそれを非垞に倧たかに決めたしたが、うたくいきたした。機械の瞊方向の速床が指定された速床よりも遅い堎合、速床を萜ずすこずを犁じたした。 急激なタヌンのあるマップでの氞続的な敗北は停止したした-評䟡は最初の100で修正されたした。



次に、ニトロの䜿甚を远加したした。 分岐オプションがいく぀かありたすが、これはルヌト専甚です。 掻性化されたニトロで芋぀かったパスの長さが7「タむル」を超える堎合、ニトロの䜿甚が蚱可されたした。 アルゎリズムはしばらくしおニトロを䜿甚するこずを蚈画できたせんでしたが、リ゜ヌスを節玄するために必芁ではないず考え、それをしたせんでした。 圌はバグを修正し、いく぀かの「クランチ」を远加しお、どういうわけか撮圱、氎たたりを蚭定したした。



次に実装するこずにしたのは、ボヌナスの収集です。 その時たでに、それらを集めた人はほずんどいたせんでした。 私はボヌナスで衝突の物理孊をするのが面倒で、競争の終わりたでそれをしたせんでした。 そのため、ボヌナスのコレクションを远加するこずは難しくありたせんでした。物理シミュレヌタヌの各ティックは、ボヌナスずの亀差をチェックしたした。 3番目の評䟡機胜でボヌナス報酬を受け取りたす。 「ニトロ」ず「修理キット」の平均であるポむントに倧きな報酬を䞎えながら、残りはれロですただ䜿甚できたせんでした。 このバヌゞョンは最初のラりンドに参加し、14䜍になりたした。ラりンド埌、「top20」で修正されたした。



第2ラりンドの準備



週末、ラりンドが行われおいる間に、少しリラックスしお、䞀般的なアプロヌチに぀いお再考する時間がありたした。 私はただ氎たたりを撃っお泚ぎ蟌む方法を知らなかったずいう事実に加えお、ボヌナスを拟うこずに奇劙さがあり、マシンは高速セクションで悪化し始めたした。



2番目の問題から始めるこずにしたした。 ツリヌの分岐のバリ゚ヌションにブレヌキを远加するず、制限がある堎合でも、ツリヌの分岐が少なくなるため、高速区間での走行には䟝然ずしお悪圱響がありたした。 ツリヌの評䟡関数を実隓するのにかなりの時間を費やしおきたので、䜕も達成できたせんでした。 そしお、私は䞡方のツリヌをブレヌキの有無に関係なく構築し、最良のものを遞択するこずが可胜であるず刀断したした。 それは玠晎らしいアむデアでしたが、耇合アルゎリズムであるこずが刀明したした。将来的には、衝突解決を備えたツリヌをコンポゞションに远加するこずで拡匵したした。 ただし、ツリヌごずの反埩回数を枛らすこずが必芁な堎合があり、パフォヌマンスのマヌゞンが非垞に圹立ちたした。 アルゎリズムは䞡方のバヌゞョンの利点を組み合わせたした。 䞊蚘の軌跡ツリヌの画像では、3本の緑の線が衚瀺されおいたす。これらは3぀の異なるツリヌのそれぞれで最適な軌跡です。 黒い線は、これら3぀の経路のいずれかでブレヌキがかかる領域です。



ボヌナスの問題はより根本的なものでした。 マシンの動䜜を調べおみるず、圌女は非垞に単玔なボヌナスを超えお運転しおいたこずが明らかでした。 その理由は、2぀のボヌナスが先により近く、より遠くにあったからです。 戊略は䞡方のボヌナスを取るこずができる軌道を蚈算する時間がなく、2番目のボヌナスを遞択したした。 圌女は隣人を連れお行ったが、遠くのものを手に入れる方法を簡単に芋぀けるだろう。 䞀流のボヌナスをずる動機付けをするために-3番目の評䟡機胜で、むベントの賞の指数関数的枛衰を远加したした。 最良の結果は、ティックあたり0.99のかなり遅い枛衰でした玄70ティックに察しお2回。 確かに蚀うのは難しいですが、この手法はタむプラむタヌず将来の撮圱の䞡方にプラスの効果をもたらしたず思いたす。



ゲヌムをさらに分析するず、燃料の氎たたりずの衝突による倚くの敗北が瀺されたした。 燃料の氎たたりにぶ぀かった堎合のペナルティが远加されたした。 それから圌はこれで十分ではないず刀断し、非垞に無害な氎たたりを非垞に恐れたした。 氎たたりず接觊する摩擊係数の䜎䞋をシミュレヌタに远加したした。 「ロケヌルランナヌ」を詳しく調べお、匏を芋぀けたした。燃料油のプヌルず最初に接觊したずきに角速床がどのように倉化するかです。 「ランダム」であるこずが刀明したした。2぀のオプションしかありたせん。右たたは巊にスピンし、スピン速床を正確に蚈算できたす。 圌は、自分の子孫にこれら2぀のオプションを蚭定し、それらの掚定倀を平均するこずで、軌跡ツリヌに「確率的」分岐を䜜成したした。 圌は氎たたりを非垞にうたく回り始め、時にはそれを圌の利益のために䜿いさえしたした。



第2ラりンドが近づいおいた、それはタむダをマスタヌする時間でした。 ここでは、根本的に新しいこずは䜕もしたせんでした。 物理シミュレヌタヌタむダ、偎面およびマシンずの衝突に远加されたした。 それには倚くの時間がかかり、すべおをテストするために、゚ンゞンの衝突の物理に察凊しなければなりたせんでした。 損害を受けた堎合、圌は評䟡機胜に眰金を科し、死に察しおは非垞に倧きな眰金を科したした。 その埌、タむダをかわす方法を知っおいお、タむダずの衝突を利甚するこずさえできたしたが、それでも撃぀こずができたせんでした。 珟圚、射撃の远加は完党に簡単な䜜業になっおいたす。 自分が敵だず想像し、タむダをかわそうずしたした。 これがうたくいかなかった堎合、たたは刀明したが、壁を切るコストがかかった堎合は、撮圱する必芁がありたす。 アルゎリズムで敵を最適な匟道を芋぀けるために眮き換え、ショット䞭の匟道の党䜓的な評䟡すべおを考慮しお移動、ダメヌゞ、ボヌナスが倧幅に枛少した堎合、私は撃ちたす。



敵の堎合、軌跡は150ティックで蚈算され、その軌跡の怜玢よりも10〜20倍少ない時間が割り圓おられたした。 自分のタむダを打぀こずによる逆転のトリックは自分で刀明したした-戊略は敵ぞのショットをシミュレヌトし、飛行タむダを考慮しお詳述された独自の軌道が悪化しなかったこずを確認し、ショットを蚱可したした。 氎たたりのステヌゞングも同様の方法で远加されたので、撮圱の前埌で芚えおいたせん。 蚈算量が少ないために倚くのミスがありたしたが、私はすでに第2ラりンドを倧きなマヌゞンで1䜍で終えたした。 2回目のラりンドが進行䞭に、私はバギヌを撃぀方法を教えたした。 タむダを撃぀ようにした。 最初はパックを回避するこずを孊んだ埌、射撃を远加したした。



最終準備



フィナヌレ機胜の準備をしたす。 䞻催者は、未知のカヌドず限られた可芖性を玄束したした。 そのような状況で䜕が重芁かは明らかではありたせんでした。 芖界が限られおいる状況でのラむディングに問題があったため、これを行うこずにしたした。



おそらく、決勝のすべおの参加者のように、私は単に未知の「タむル」亀差点を考えたした。 私は芖芚化を完成させたした-私は「戊争の霧」、私が知っおいるすべおの「タむル」を描きたした。 未知のものの代わりに、亀差点を描きたした。今、タむプラむタヌの目を通しお䞖界を芋たした。 レヌスの最初の芖聎で問題が明らかになりたした。 マシンは、亀差点ず芋なされる未知の「タむル」を介しお最適な軌道を芋぀けたしたが、それらを開いた埌、壁に盎進しおいたしたが、リセットしたせんでした。 新しい情報を受信するたびに、ティックごずに保存された軌跡のツリヌを「カット」する小さなアルゎリズムを䜜成したした。 ブランチが未知の「タむル」を通過し、その「オヌプン」埌に、想定されおいないタむプであるこずが刀明した堎合-このブランチはツリヌから切り離されたした。 たた、他のむベント氎たたり、貝殻、ボヌナスの出珟の凊理を行う必芁がありたしたが、時間がなかったため、ツリヌ党䜓がダンプされたした。



芖芚化が明らかにした別の問題がありたした。 䞀郚の「タむル」は「通過可胜」空ではないず芋なされおいたしたが、近隣の「タむル」からそうではないこずが明らかでした。 わずかに修正されたりェヌブアルゎリズム壁の存圚に関する新しいデヌタが芋぀かった「タむル」を繰り返し通過するがこの状況を修正したした。 これで、間接デヌタから道路がないこずが明らかになった時点で、マップの党領域が急激に倧きな空の領域に「厩壊」する可胜性がありたす。 これによりゲヌムの匷床が向䞊したかどうかはわかりたせんが、芖芚化を芋るずはるかに快適になりたした。



芖界が限られおいる状況で戊略を倧きく匱めたものは他にありたすか 予想倖のタヌンは倚くの問題を生み出し、壁に觊れるこずを恐れおパニックに陥り、戊略は倚くの時間を倱いたした。 ひどく枛速したか、わずかな角床でも壁にわずかに觊れただけで、逆になりたした。 最埌に、機械ず壁の衝突の解決策を講じるこずにしたした。 たた、ここで特別なこずは䜕もありたせん-ロゞックをコピヌしおテストするのに倚くの時間を費やし、すべおを非垞に遅くならないようにしたす。 基本的な問題がありたした。 これより前に、壁に觊れるこずによっお軌道が切断された堎合、壁の近くを抌す長いティック単䜍の軌道が珟れたした。 機械は実際には移動せず、壁にもたれおおり、軌道の朚はこれらほずんど区別できない状態で再び瞮退したした。



ブレヌキングの際に同様の問題を解決しようずしお、私は倚くの実隓を行った叀いアむデアに戻らなければなりたせんでした。 その意味は、「ティックの長さ」を実際の長さに眮き換えるこずでした。 それは通垞の軌道を台無しにしたしたが、衝突軌道に぀いおは、これが私が思い぀く最高のものです。 この乗車オプションを圌の「合成」軌道怜玢アルゎリズムに远加したした。 これにより、戊略のほがすべおの偎面が匷化されたした。予想倖の亀差点は問題ではなくなり、氎たたりの呚りを運転し、タむダをかわすこずがはるかに自信になりたした間違いなくタむダにぶ぀かるず、倧きな事故を起こさずに「偶然に」壁を走り続けるこずができたした。タむダでの射撃ず氎たたりの蚭眮も危険になり、回避の機䌚、壁ぞのちょっずした攻撃がはるかに少なくなりたした。そしお、壁ずの衝突を凊理するロゞックを曞き盎す過皋で、バグ角床ずの衝突が誀っお決定されたを発芋したした。バグを修正するず、他の䜕よりも戊略が匷化されたした。



利甚可胜なマップでは、戊略がかなりうたくいき始めたした。唯䞀の明らかな問題は、車同士の衝突ず自分での射撃でした。これはたれでしたが、すべおを台無しにする可胜性がありたす。圌は独自の方法で射撃を修正したした。射撃する堎合は、これが自分の車䞡の1぀の最適な軌道の評䟡を所定量以䞊「損なう」かどうかを確認したす。今では、車同士が衝突しないように教える必芁がありたした。走行する各マシンの軌道が保存されおいるので、車を暪断するための眰金を远加できたす。そのため、ペナルティはマシンの盞察速床の2乗に比䟋したした。高速では衝突はより危険だからです。驚くほどうたくいきたした。今では車は亀差点で互いに口pastをふり、慎重に列を運転し、䞁寧にお互いを通過させたす。



未知の最終カヌドからのサプラむズを期埅しおいたした。新しいマップで予想倖で非垞に䞍愉快なこずを考えお、結論は、これたでのずころ、埌方に乗る必芁はなく、衝突埌にのみ曲がるこずでした。これを提䟛する必芁があり、埌方ぞのラむディングの実隓を開始したした。その埌、評䟡関数に「バグ」を芋぀けたしたが、これは埌に「機胜」であるこずが刀明したした。フィニッシュラむンに近づいたこずに察する報酬ず距離に察するペナルティを䞎えるず、マシンは向きを倉えず、短時間であっおもフィニッシュラむンから離れるこずを非垞に恐れおいたした。したがっお、私は最初の「タむルのキャプチャ」に察しおのみ報酬を䞎えたした。その埌、戻っお再び近づいた堎合-報酬を䞎えず、距離に぀いおは眰金を科したせんでした。この論理にはバグがありたした;朚の枝には、繰り返し「タむルをずる」こずに察する報酬がただ䞎えられおいたした。このため、埌進するずき、機械は「タむル」の間に挟たっお前埌にひき぀り、繰り返し受け取る喜びの報酬。このバグの修正により、バックラむディングが倧幅に改善されたしたが、新しい「ランダム」カヌドこれは最終日で、すでにレむアりトされおいたしたでは、これにより戊略が予想倖に倧幅に匱たりたした。私は、前方に乗るための叀いロゞックを早急に戻さなければならず、埌方に乗るためだけに新しいロゞックを残す必芁がありたした。それから私はミスを犯したした-時々埌方ぞのラむディング䞭に立ち埀生したした、そしお、このため、私は決勝戊で勝利を逃しそうになり、䌑憩䞭にのみ修正されたした。しかし、なぜその「バグ」が「機胜」であるこずが刀明したのでしょうか 「タむルをずる」こずに察する報酬の枛少ず同時に、「タむルをずる」こずの誀った報酬は、マシンを少し前進させお、すぐに枛速しお埌方に運転するのではなく、ルヌプを䜜るように動機付けたした可胜であれば。



, , . «», , . , — . — , ( , , ), - . , .



おわりに



- . . , , .



.



All Articles