ゲヌムAIの䜜成方法初心者向けガむド





ゲヌムの人工知胜に関する興味深い資料に出䌚いたした。 簡単な䟋を䜿甚しおAIの基本的なこずを説明し、内郚には䟿利な開発ず蚭蚈のための倚くの䟿利なツヌルず方法がありたす。 それらをどのように、どこで、い぀䜿甚するかずいうこずもありたす。



ほずんどの䟋は擬䌌コヌドで蚘述されおいるため、プログラミングの詳现な知識は必芁ありたせん。 カットの䞋に写真ずgifを含む35枚のテキストがあるので、準備をしおください。



UPD。 すみたせんが、 PatientZeroはすでにこの蚘事の翻蚳をHabréで行っおいたす。 このバヌゞョンはここで読むこずができたすが、䜕らかの理由で蚘事に合栌したした怜玢を䜿甚したしたが、䜕か問題がありたした。 そしお、私はゲヌム開発者のブログを曞いおいるので、サブスクラむバヌに翻蚳オプションを残すこずにしたした私にずっおはいく぀かの瞬間が異なり、䞀郚は開発者のアドバむスを意図的に逃しおいたす。



AIずは



ゲヌムAIは、オブゞェクトが眮かれおいる条件に基づいお、オブゞェクトが実行するアクションに焊点を合わせたす。 これは通垞、「知的゚ヌゞェント」の管理ず呌ばれたす。゚ヌゞェントは、ゲヌムキャラクタヌ、ビヌクル、ボットであり、堎合によっおはより抜象的なものです゚ンティティのグルヌプ党䜓たたは文明です。 いずれの堎合も、呚囲を芋お、それに基づいお決定を䞋し、それらに埓っお行動する必芁がありたす。 これは、センス/思考/行動サむクルず呌ばれたす





AIは、ルヌプのセンス郚分に集䞭する傟向がありたす。 たずえば、自動運転車は道路の写真を撮り、レヌダヌずラむダヌのデヌタず組み合わせお解釈したす。 通垞、これは入力デヌタを凊理しお意味を䞎え、「20ダヌド先に別の車がありたす」などの意味情報を抜出する機械孊習によっお行われたす。 これらは、いわゆる分類問題です。



デヌタのほずんどはすでに䞍可欠な郚分であるため、ゲヌムは情報を抜出するために耇雑なシステムを必芁ずしたせん。 画像認識アルゎリズムを実行しお、先に敵がいるかどうかを刀断する必芁はありたせん。ゲヌムは、意思決定プロセスで情報を盎接認識しお転送したす。 したがっお、センスサむクルの䞀郚は、倚くの堎合、Think and Actよりもはるかに単玔です。



ゲヌムAIの制限



AIには、守らなければならない倚くの制限がありたす。





センス/思考/行動のサむクル党䜓にわたるAIアプロヌチを怜蚎しおください。



基本的な意思決定



最も単玔なゲヌムであるPongから始めたしょう。 目暙プラットフォヌムパドルを動かしお、ボヌルが飛び越えないように跳ね返るようにしたす。 それはテニスのようなもので、ボヌルを打たないず負けおしたいたす。 ここで、AIには比范的簡単なタスクがありたす。プラットフォヌムをどの方向に動かすかを決定するこずです。







条件文



AIの堎合、Pongには最も明癜な゜リュヌションがありたす-垞にボヌルの䞋にプラットフォヌムを配眮しおください。



擬䌌コヌドで曞かれたこのための簡単なアルゎリズム



ゲヌムの実行䞭にすべおのフレヌム/曎新

ボヌルがパドルの巊偎にある堎合

パドルを巊に移動

それ以倖の堎合、ボヌルがパドルの右偎にある堎合

パドルを右に動かす



プラットフォヌムがボヌルの速床で移動する堎合、これはPongのAIに最適なアルゎリズムです。 ゚ヌゞェントに察しおあたり倚くのデヌタず可胜なアクションがなければ、䜕も耇雑にする必芁はありたせん。



このアプロヌチは非垞に単玔であるため、Sense / Think / Actサむクル党䜓はほずんど目立ちたせん。 しかし、圌は





このようなアプロヌチはリアクティブず呌ばれたす-䞖界の珟圚の状態に察応しお行動するルヌルの単玔なセットこの堎合、コヌド内のifステヌトメントがありたす。



決定朚



Pongの䟋は、実際にはデシゞョンツリヌず呌ばれる正匏なAIコンセプトず同等です。 アルゎリズムは、「リヌフ」に到達するためにこれを枡したす-実行するアクションに関する決定。



プラットフォヌムのアルゎリズムの決定朚のブロック図を䜜成したしょう。







ツリヌの各郚分はノヌドず呌ばれたす— AIはグラフ理論を䜿甚しおそのような構造を蚘述したす。 ノヌドには2぀のタむプがありたす。





アルゎリズムは、最初のノヌドツリヌの「ルヌト」から始たりたす。 どの子ノヌドに移動するかを決定するか、ノヌドに保存されおいるアクションを実行しお完了したす。



決定朚が前のセクションのifステヌトメントず同じ仕事をする堎合の利点は䜕ですか ここには、各゜リュヌションが1぀の条件ず2぀の可胜な結果しか持たない䞀般的なシステムがありたす。 これにより、開発者は、ハヌドコヌディングを回避しお、ツリヌ内の決定を衚すデヌタからAIを䜜成できたす。 テヌブルの圢を想像しおください







コヌド偎では、文字列を読み取るためのシステムを取埗したす。 それぞれにノヌドを䜜成し、2番目の列に基づいお決定ロゞックを接続し、3番目ず4番目の列に基づいお子ノヌドを接続したす。 条件ずアクションをプログラムする必芁がありたすが、ゲヌムの構造はより耇雑になりたす。 その䞭に、远加の決定ずアクションを远加し、ツリヌ定矩でテキストファむルを線集するだけでAI党䜓を構成したす。 次に、ファむルをゲヌムデザむナヌに転送したす。ゲヌムデザむナヌは、ゲヌムを再コンパむルしおコヌドを倉曎するこずなく動䜜を倉曎できたす。



デシゞョンツリヌは、倚数の䟋に基づいお自動的に構築される堎合ID3アルゎリズムを䜿甚する堎合などに非垞に圹立ちたす。 これにより、受信したデヌタに基づいお状況を分類するための効果的で高性胜なツヌルになりたす。 ただし、゚ヌゞェントがアクションを遞択するための単玔なシステムを超えおいたす。



シナリオ



事前に䜜成された条件ずアクションを䜿甚するディシゞョンツリヌシステムを分解したした。 AIデザむナヌはツリヌを奜きなように配眮できたすが、それでもすべおをプログラミングした゚ンコヌダヌに䟝存する必芁がありたす。 独自の条件たたはアクションを䜜成するためのデザむナヌツヌルを提䟛できるずしたらどうでしょうか。



プログラマヌが「パドルを巊に眮く」および「パドルを右に眮く」条件のコヌドを蚘述できないようにするために、これらの倀をチェックするための条件をデザむナヌが蚘録するシステムを䜜成できたす。 次に、決定ツリヌのデヌタは次のようになりたす。







本質的に、これは最初の衚ず同じですが、内郚の゜リュヌションには独自のコヌドがあり、ifステヌトメントの条件郚分に少し䌌おいたす。 コヌド偎では、これは決定ノヌドの2番目の列で読み取られたすが、満たすべき特定の条件パドルのボヌルが巊を探す代わりに、条件匏を評䟡し、それぞれtrueたたはfalseを返したす。 これは、スクリプト蚀語LuaたたはAngelscriptを䜿甚しお行われたす。 開発者はこれらを䜿甚しお、ゲヌム内のオブゞェクトボヌルずパドルを取埗し、スクリプトball.positionで䜿甚できる倉数を䜜成できたす。 さらに、スクリプト蚀語はC ++よりも簡単です。 完党なコンパむル段階を必芁ずしないため、ゲヌムロゞックをすばやく調敎するのに理想的であり、非コヌダヌが必芁な機胜を䜜成できるようになりたす。



䞊蚘の䟋では、スクリプト蚀語は条件匏の評䟡にのみ䜿甚されおいたすが、アクションにも䜿甚できたす。 たずえば、パドルを右に移動するデヌタは、スクリプトステヌトメントball.position.x + = 10になりたす。 Move Paddle Rightをプログラミングするこずなく、アクションもスクリプトで定矩されたす。



さらに進んで、スクリプト蚀語で完党な決定朚を曞くこずができたす。 これは、ハヌドコヌディングされたハヌドコヌディングされた条件ステヌトメントの圢匏のコヌドになりたすが、倖郚スクリプトファむルに配眮されたす。぀たり、プログラム党䜓を再コンパむルせずに倉曎できたす。 倚くの堎合、ゲヌム䞭にスクリプトファむルを修正しお、さたざたなAI反応をすばやくテストできたす。



むベント応答



䞊蚘の䟋はPongに最適です。 圌らは継続的にセンス/思考/行動のサむクルを実行し、䞖界の最新の状態に基づいお行動したす。 しかし、より耇雑なゲヌムでは、個々のむベントに応答する必芁があり、すべおを䞀床に評䟡する必芁はありたせん。 ポンはすでに倱敗した䟋です。 別のものを遞択しおください。



プレむダヌが芋぀かるたで敵が動かないシュヌティングゲヌムを想像しおください。その埌、圌らは「専門化」に応じお行動したす。誰かが「抌し぀ぶす」ために走り、誰かが遠くから攻撃したす。 これは基本的なレスポンシブシステムです-「プレヌダヌに気づいたら、䜕かをする」-しかし、論理的にPlayer Seenむベントプレヌダヌに気づくず反応答えを遞択しお実行するに分けるこずができたす。



これにより、感芚/思考/行動のサむクルに戻りたす。 センスパヌツを゚ンコヌドできたす。各パヌツは、プレむダヌのAIが衚瀺されるかどうかを確認するためにチェックしたす。 そうでない堎合は䜕も起こりたせんが、芋える堎合はPlayer Seenむベントが発生したす。 コヌドには、「Player Seenむベントが発生したずきに実行したす」ずいう別のセクションがありたす。ここで、ThinkずActの郚分を参照する必芁がありたす。 したがっお、Player Seenむベントぞの反応を蚭定したす。「成長䞭」のキャラクタヌにはChargeAndAttack、狙撃兵にはHideAndSnipeです。 これらの関係は、再コンパむルせずにすばやく線集できるようにデヌタファむルに䜜成できたす。 たた、スクリプト蚀語を䜿甚するこずもできたす。



難しい決定を䞋す



単玔な反応システムは非垞に効果的ですが、十分ではない倚くの状況がありたす。 ゚ヌゞェントが珟圚䜕をしおいるかに基づいおさたざたな決定を䞋す必芁がある堎合がありたすが、この状態を想像するのは困難です。 決定ツリヌたたはスクリプトで効果的に衚すには条件が倚すぎる堎合がありたす。 次のステップを決定する前に、状況の倉化を事前に評䟡する必芁がある堎合がありたす。 これらの問題を解決するには、より耇雑なアプロヌチが必芁です。



有限状態マシン



有限状態マシンたたはFSM状態マシンは、゚ヌゞェントが珟圚いく぀かの可胜な状態の1぀にあり、ある状態から別の状態に移動できるこずを瀺す方法です。 そのような状態の特定の数がありたす-したがっお、名前。 人生の最良の䟋は、信号機です。 異なる堎所では異なるラむトシヌケンスがありたすが、原理は同じです。各状態は䜕かスタンド、ゎヌなどを衚したす。 信号機は、垞に1぀の状態にあり、単玔なルヌルに基づいお1぀の状態から別の状態に移動したす。



ゲヌム内のNPCに぀いおも同様の話です。 たずえば、次の条件でガヌドを行いたす。





そしお、圌の状態を倉えるためのそのような条件





ガヌド状態倉数ずさたざたなチェックを䜿甚しおifステヌトメントを蚘述するこずもできたす。近くに敵がいるか、NPCのヘルスレベルは䜕かなど、さらにステヌトを远加したしょう。





それぞれの遞択肢は限られおいたす-䟋えば、ガヌドが䜓調が悪い堎合、隠れおいる敵を探しに行きたせん。



最終的に、「if <x and y、but not z>、then <p>」ずいう膚倧なリストが面倒になる可胜性があるため、状態ず状態間の遷移を念頭に眮いおおくこずができる方法を圢匏化する必芁がありたす。 これを行うには、すべおの状態を考慮し、各状態の䞋で、他の状態ぞのすべおの遷移を、それらに必芁な条件ずずもにリストしたす。







この状態遷移衚は、FSMを衚す包括的な方法です。 図を描いお、NPCの動䜜がどのように倉化するかに぀いおの完党な抂芁を取埗したしょう。







このグラフは、珟圚の状況に基づいたこの゚ヌゞェントの意思決定の本質を反映しおいたす。 さらに、各矢印は、その隣の条件が真である堎合の状態間の遷移を瀺したす。



曎新ごずに、゚ヌゞェントの珟圚の状態を確認し、遷移のリストを確認し、遷移の条件が満たされた堎合、新しい状態を取りたす。 たずえば、各フレヌムは10秒タむマヌが期限切れになっおいるかどうかを確認し、期限が切れおいる堎合は、ガヌドがアむドルからパトロヌルに切り替わりたす。 同様に、攻撃状態ぱヌゞェントの健康状態をチェックしたす-䜎い堎合は逃走状態になりたす。



これは状態間の遷移を凊理しおいたすが、状態自䜓に関連する動䜜はどうですか 特定の状態の実際の動䜜の実装に関しお、通垞、アクションをFSMに割り圓おる「フック」には2぀のタむプがありたす。





最初のタむプの䟋。 パトロヌル状態各フレヌムは、パトロヌルルヌトに沿っお゚ヌゞェントを移動したす。 攻撃状態は、すべおのフレヌムが攻撃を開始しようずするか、可胜な堎合は状態になりたす。



2番目のタむプに぀いおは、「敵が芋えおおり、敵が匷すぎる堎合は、ヘルプの怜玢状態に移行する」ずいう移行を怜蚎しおください。 ゚ヌゞェントは、ヘルプの怜玢ステヌタスがどこに行くべきかを知るために、どこに行くかを遞択し、この情報を保存する必芁がありたす。 ヘルプが芋぀かるずすぐに、゚ヌゞェントは攻撃状態に戻りたす。 この時点で、圌は脅嚁に぀いお同盟囜に䌝えたいので、NotifyFriendOfThreatアクションが発生する可胜性がありたす。



そしお再び、感芚/思考/行動サむクルのプリズムを通しおこのシステムを芋るこずができたす。 センスは、遷移ロゞックで䜿甚されるデヌタに倉換されたす。 考えおください-各状態で利甚可胜な遷移。 そしお、行為は、州内たたは州間の遷移で定期的に実行されるアクションによっお実行されたす。



遷移条件の継続的なポヌリングには、コストがかかる堎合がありたす。 たずえば、各゚ヌゞェントがフレヌムごずに耇雑な蚈算を実行しお敵を認識し、パトロヌル状態から攻撃に切り替えるこずができるかどうかを刀断する堎合、これには倚くのプロセッサ時間がかかりたす。



䞖界の状態の重芁な倉化は、出珟したずきに凊理されるむベントず芋なすこずができたす。 FSMが遷移条件をチェックする代わりに、「゚ヌゞェントはプレヌダヌを芋るこずができたすか」各フレヌムで、チェックをそれほど頻繁に実行しないように個別のシステムを構成できたすたずえば、1秒に5回。 その結果、チェックに合栌するずPlayer Seenが衚瀺されたす。



これはFSMに枡され、FSMはPlayer Seenむベント受信状態に入り、それに応じお察応する必芁がありたす。 結果の動䜜は、応答する前にほずんど感知できない遅延を陀いお同じです。 しかし、センス郚分をプログラムの別の郚分に分離した結果、生産性が向䞊したした。



階局的な有限状態マシン



ただし、倧芏暡なFSMを䜿甚するこずは必ずしも䟿利ではありたせん。 MeleeAttacking近接ずRangedAttacking遠隔に眮き換えお攻撃状態を拡匵したい堎合は、攻撃状態珟圚および将来に぀ながる他のすべおの状態からの遷移を倉曎する必芁がありたす。



確かに、この䟋では倚くの重耇した遷移があるこずに気づきたした。 アむドリング状態のほずんどの遷移は、パトロヌル状態の遷移ず同じです。 特に同様の状態を远加する堎合は、繰り返さないこずをお勧めしたす。 アむドリングずパトロヌルを共通のラベル「非戊闘」の䞋にグルヌプ化するのは理にかなっおいたす。ここでは、戊闘状態ぞの移行の共通セットは1぀だけです。 このラベルを状態ずしお提瀺するず、アむドリングずパトロヌルはサブステヌトになりたす。 新しい非戊闘サブステヌトに個別の倉換テヌブルを䜿甚する䟋



䞻な条件





非戊闘状態





そしお、チャヌト圢匏で







これは同じシステムですが、アむドリングずパトロヌルを含む新しい非戊闘状態がありたす。 サブ状態を持぀FSMを含む各状態およびこれらのサブ状態は、独自のFSMを含む-などを䜿甚しお、階局有限状態マシンたたはHFSM階局状態マシンを取埗したす。 非戊闘状態をグルヌプ化しお、冗長な移行の束を切り取りたした。 共通の遷移を持぀新しい状態に察しおも同じこずができたす。 たずえば、将来、攻撃状態を近接攻撃状態ずミサむル攻撃状態に拡匵するず、敵たでの距離ず匟薬の存圚に基づいお互いに亀差するサブ状態になりたす。 その結果、動䜜の耇雑なモデルず動䜜のサブモデルを、最小限の重耇した遷移で衚すこずができたす。



行動ツリヌ



HFSMは​​、簡単な方法で動䜜の耇雑な組み合わせを䜜成したす。 ただし、珟圚の状態に密接に関連する移行芏則の圢で意思決定を行うこずはほずんど困難ではありたせん。 そしお、倚くのゲヌムでこれはたさにあなたが必芁ずするものです。 たた、状態の階局を慎重に䜿甚するず、移行䞭の反埩回数を枛らすこずができたす。 ただし、珟圚の状態に関係なく、たたはほがすべおの状態に適甚されるルヌルが必芁な堎合がありたす。 たずえば、゚ヌゞェントの健康状態が25に䞋がった堎合、圌が戊い、く぀ろいでいる、たたは話しおいるかどうかにかかわらず、圌に逃げおもらいたいのです。この状態を各状態に远加する必芁がありたす。 たた、蚭蚈者が埌で䜎ヘルスのしきい倀を25から10に倉曎する堎合は、これを再床凊理する必芁がありたす。



理想的には、この状況では、「どの状態に留たるか」ずいう決定が状態自䜓の倖偎にあり、1぀の堎所でのみ倉曎を行い、移行条件に觊れないシステムが必芁です。 行動ツリヌがここに衚瀺されたす。



それらを実装する方法はいく぀かありたすが、すべおの本質は決定ツリヌずほが同じであり、アルゎリズムは「ルヌト」ノヌドから始たり、ツリヌには゜リュヌションたたはアクションを衚すノヌドが含たれたす。 確かに、いく぀かの重芁な違いがありたす。





この小さなノヌドのセットを組み合わせお、倚数の耇雑な動䜜パタヌンを䜜成できたす。 前の䟋のHFSMガヌドを動䜜ツリヌずしお想像しおください。







この構造では、アむドリング/パトロヌル状態から攻撃䞭たたはその他の状態ぞの明瀺的な移行はありたせん。 敵が芋え、キャラクタヌの健康状態が悪い堎合、パトロヌル、アむドリング、攻撃など、以前に実行したノヌドに関係なく、実行はFleeingノヌドで停止したす。







ビヘむビアツリヌは耇雑です-それらを構成する方法は倚数あり、デコレヌタず耇合ノヌドの適切な組み合わせを芋぀けるこずには問題がありたす。 たた、ツリヌを頻繁にチェックする方法に぀いおの質問もありたす。すべおの郚分を通過するのか、それずも条件の1぀が倉曎された堎合にのみ実行するのですか ノヌドに関連する状態を保存する方法-10秒間アむドリング状態になったずきを芋぀ける方法、たたはシヌケンスを正しく凊理するために最埌に実行されたノヌドを芋぀ける方法



それが倚くの実装がある理由です。 たずえば、䞀郚のシステムでは、デコレヌタノヌドが組み蟌みのデコレヌタに眮き換えられおいたす。 デコレヌタの条件が倉曎されたずきにツリヌを再評䟡し、ノヌドを結合し、定期的な曎新を提䟛したす。



ナヌティリティベヌスのシステム



䞀郚のゲヌムにはさたざたなメカニズムがありたす。 単玔で䞀般的な遷移芏則のすべおの利点を埗るこずが望たしいが、必ずしも完党な動䜜ツリヌの圢ではありたせん。 明確な遞択肢や可胜なアクションのツリヌを甚意する代わりに、すべおのアクションを調べお、珟時点で最適なアクションを遞択する方が簡単です。



ナヌティリティベヌスのシステムがこれに圹立ちたす。 これは、゚ヌゞェントに倚くのアクションがあり、それぞれの盞察的な有甚性に基づいお、実行するアクションを遞択するシステムです。 ナヌティリティは、このアクションが゚ヌゞェントにずっおどれだけ重芁たたは望たしいかを瀺す任意の尺床です。



珟圚の状態ず環境に基づいお蚈算されたアクションのナヌティリティは、゚ヌゞェントはい぀でも最適な他の状態をチェックしお遞択できたす。 これはFSMに䌌おいたすが、珟圚の状態を含む各朜圚的な状態の掚定倀によっお遷移が決定される堎合を陀きたす。 移行に最も圹立぀アクションを遞択するこずに泚意しおください既に完了しおいる堎合はそのたたにしおください。 より倚様な堎合、これはバランスの取れた小さなリストからのランダムな遞択かもしれたせん。



システムは、ナヌティリティ倀の任意の範囲を割り圓おたす。たずえば、0完党に望たしくないから100完党に望たしいたでです。 各アクションには、この倀の蚈算に圱響する倚くのパラメヌタヌがありたす。 ガヌディアンの䟋に戻りたす







アクション間の遷移はあいたいです。どの状態でも他の状態に埓うこずができたす。 優先アクションはナヌティリティの戻り倀にありたす。 敵が芋えおおり、この敵が匷く、キャラクタヌの健康状態が䜎い堎合、FleeingHelpずFindingHelpの䞡方がれロ以倖の高い倀を返したす。 FindingHelpは垞に高くなりたす。 同様に、非戊闘アクションは50を超える倀を返さないため、垞に戊闘よりも䜎くなりたす。 アクションを䜜成し、その有甚性を蚈算するずき、これを考慮に入れる必芁がありたす。



この䟋では、アクションは固定定数倀たたは2぀の固定倀のいずれかを返したす。 より珟実的なシステムには、連続した倀の範囲から掚定倀を返すこずが含たれたす。 たずえば、゚ヌゞェントのヘルスが䜎い堎合、逃亡アクションは高いナヌティリティ倀を返し、敵が匷すぎる堎合、攻撃アクションは䜎い倀を返したす。 このため、゚ヌゞェントが敵を倒すのに十分な䜓力がないず感じる状況では、逃げるこずは攻撃よりも優先されたす。 これにより、任意の数の基準に基づいおアクションの優先順䜍を倉曎できるため、このアプロヌチはビヘむビアツリヌたたはFSMよりも柔軟で倚様になりたす。



各アクションには、プログラムを蚈算するための倚くの条件がありたす。 スクリプト蚀語たたは䞀連の数匏ずしお蚘述できたす。 キャラクタヌの日垞生掻をモデル化するThe Simsでは、远加の蚈算レベルが远加されたす。゚ヌゞェントは、ナヌティリティの掚定倀に圱響する倚くの「動機」を受け取りたす。 キャラクタヌが空腹の堎合、時間が経぀ずさらに飢え、キャラクタヌが満たすたでEatFoodアクションの有甚性の結果が増加し、空腹のレベルを䞋げおEatFood倀をれロに戻したす。



評䟡システムに基づいおアクションを遞択するずいう考え方は非垞に単玔であるため、ナヌティリティベヌスのシステムは、完党な代替ずしおではなく、AIの意思決定プロセスの䞀郚ずしお䜿甚できたす。 決定朚は、2぀の子ノヌドのナヌティリティスコアを芁求し、より高いノヌドを遞択する堎合がありたす。 同様に、ビヘむビアツリヌには、実行する子を決定するためにアクションの有甚性を評䟡する耇合ナヌティリティノヌドを含めるこずができたす。



移動ずナビゲヌション



前の䟋では、巊右に移動するプラットフォヌムず、パトロヌルたたは攻撃する譊備員がいたした。 しかし、䞀定期間にわたっお゚ヌゞェントの動きをどのように正確に凊理するのでしょうか速床を蚭定する方法、障害物を回避する方法、目的地たでの移動が盎線で移動するよりも難しい堎合のルヌトの蚈画方法を教えおください。それを芋おみたしょう。



運営管理



, , , . , , . . Sense/Think/Act, , Think , Act . , , . — , . , , . :



desired_travel = destination_position – agent_position



2D-. (-2,-2), - - (30, 20), , — (32, 22). , — 5 , (4.12, 2.83). 8 .



. , , 5 / ( ), . , .



— , , , . . steering behaviours, : Seek (), Flee (), Arrival () . . , , , .



. Seek Arrival — . Obstacle Avoidance ( ) Separation () , . Alignment () Cohesion () . steering behaviours . , Arrival, Separation Obstacle Avoidance, . .



, — , - Arrival Obstacle Avoidance. , , . : , .



, , - .





Steering behaviours ( ), — . pathfinding ( ), .



— . - , , . . , ( , ). , Breadth-First Search BFS ( ). ( breadth, «»). , , — , , .







, . (, pathfinding) — , , .



, , steering behaviours, — 1 2, 2 3 . — , — . - .



BFS — «» , «». A* (A star). , - ( , ), , , . , — «» ( ) , ( ).







, , , . , BFS, — .





, . . ? — , — , .



, — . A* BFS . : , — , . (waypoint), , .





1: . , , .





2: ( ). , , .



. , waypoint, . , .



navigation mesh navmesh ( ). 2D- , — , . , .



Unity — navmesh ( - ). navmesh — , . , — , , .







, A*. , .



Pathfinding — , . , .





pathfinding, — , . : , , , , . . Pathfinding . Sense/Think/Act, , Think Act .



Magic: The Gathering. :





, . 1 , «» , , ( ) . - , Forest, «» 1 , Elvish Mystic. ?





— , . , , Swamp. . ? Elvish Mystic, Fugitive Wizard, , Swamp . Forest, Swamp. , , . .



, . , ( pathfinding), . , .



, « , ». , :



1. Swamp (: Swamp )

2. Forest (: Forest )




, . , Swamp — Swamp ( ), Forest ( ). — 1 , . Tap the Swamp, 1 .



1. Swamp (: Swamp )

1.1 «» Swamp (: Swamp «», +1 )

–

2. Forest (: Forest )




, . . Forest, « 1 », — Elvish Mystic.



1. Swamp (: Swamp )

1.1 «» Swamp (: Swamp «», +1 )

–

2. Forest (: Forest )

2.1 «» Forest (: Forest «», +1 )

2.1.1 Elvish Mystic (: Elvish Mystic , -1 )

–




, , .



. , , - . , . 1 3 . Swamp , 1 . Forest → Tap the Forest → Elvish Mystic — 4 .



Magic: The Gathering, . , , . , XCOM . , .





, . Magic: The Gathering: , — . .



— backwards chaining ( ). , . , — . .



1 , « 1 ». :



1. — .

2. — .

3. — .

4. — .



— best-first search ( ). , . . A* — — , .



best-first search Monte Carlo Tree Search. , , , ( ). «» . , , , ( , ).



Goal-Oriented Action Planning GOAP ( ). , , , backwards chaining, . « », , : → → .



, . ( « », ), .





, , . , - . , - . , . , -, . .





耇雑な䟋に移る前に、いく぀かの簡単な枬定を行い、それらを䜿甚しお決定を䞋すこずにより、どこたで進むこずができるかを掚定したす。 たずえば、リアルタむム戊略-プレヌダヌがゲヌムの最初の数分で攻撃を開始できるかどうか、およびこれに察しおどのような防埡策を講じるべきかを刀断するにはどうすればよいでしょうか プレむダヌの過去の経隓を調べお、将来の反応がどうなるかを理解できたす。 そもそも、このような初期デヌタはありたせんが、それらを収集できたす。AIが人ず察戊するたびに、圌は最初の攻撃の時間を蚘録できたす。 数回のセッションの埌、プレむダヌが将来攻撃する平均時間を取埗したす。



平均倀には問題がありたすプレむダヌが20回「決定」し、20回ゆっくりずプレむする堎合、必芁な倀は䞭間のどこかになり、これは䜕も圹に立ちたせん。 1぀の解決策は、入力デヌタを制限するこずです-最埌の20個を怜蚎できたす。



プレむダヌの過去の奜みが将来的に同じであるず仮定しお、特定のアクションの可胜性を評䟡するために同様のアプロヌチが䜿甚されたす。 プレむダヌが火の玉で私たちを5回、皲劻で2回、癜兵戊で1回攻撃するず、圌は火の玉を奜むこずは明らかです。 さたざたな歊噚を䜿甚する確率を掚定したす火の玉= 62.5、皲劻= 25、近接= 12.5。 私たちのゲヌムAIは、防火に備える必芁がありたす。



もう1぀の興味深い方法は、Naive Bayes Classifier単玔ベむズ分類噚を䜿甚しお倧量の入力デヌタを調査し、AIが正しい方法で応答するように状況を分類するこずです。 ベむゞアン分類噚は、電子メヌルスパムフィルタヌを䜿甚するこずで最もよく知られおいたす。 そこで、圌らは単語を調べ、これらの単語が以前に出珟した堎所スパムかどうかず比范し、着信文字に぀いお結論を導きたす。 少ない入力でも同じこずができたす。 AIが芋るすべおの有甚な情報たずえば、どの敵ナニットが䜜成されるか、どのスペルを䜿甚するか、どの技術を探玢したかおよび最終結果戊争たたは平和、「厩壊」たたは防埡などに基づいお-目的のAI動䜜を遞択したす。



これらのトレヌニング方法はすべお十分ですが、テストのデヌタに基づいお䜿甚するこずをお勧めしたす。 AIは、プレむテスタヌが䜿甚したさたざたな戊略に適応するこずを孊習したす。 リリヌス埌にプレヌダヌに適応するAIは、予枬が難しくなりすぎたり、逆に耇雑になりすぎお勝぀こずができない堎合がありたす。



䟡倀ベヌスの適応



ゲヌムの䞖界のコンテンツずルヌルを考慮しお、入力デヌタを䜿甚するだけでなく、意思決定に圱響を䞎える䞀連の倀を倉曎できたす。 これを行いたす





たずえば、゚ヌゞェントには、マップ䞊の䞀人称シュヌティングゲヌムを遞択するための郚屋がいく぀かありたす。 各郚屋には独自の䟡倀があり、蚪れる䟡倀を決定したす。 AIは、valueの倀に基づいお、どの郚屋に行くかをランダムに遞択したす。 次に、゚ヌゞェントはどの郚屋で殺されたかを蚘憶し、その倀圌がそこに戻る確率を枛らしたす。 同様に、逆の状況でも-゚ヌゞェントが倚くの敵を砎壊するず、郚屋の䟡倀が䞊がりたす。



マルコフモデル



収集したデヌタを予枬に䜿甚するずどうなりたすか 䞀定の時間、プレむダヌがいるすべおの郚屋を芚えおいる堎合、プレむダヌがどの郚屋に移動できるかを予枬したす。 郚屋でのプレむダヌの動き倀を远跡しお蚘録するこずで、それらを予枬できたす。



赀、緑、青の3぀の郚屋を取り䞊げたしょう。 ゲヌムセッションを芋おいるずきに蚘録した芳察結果







各郚屋の芳枬数はほが同じです-埅ち䌏せに適した堎所をどこで䜜るべきかはただわかりたせん。 統蚈の収集は、マップ党䜓に均等に衚瀺されるプレむダヌの埩掻によっお耇雑になりたす。 ただし、マップに衚瀺された埌に入力する隣の郚屋のデヌタはすでに有甚です。



緑の郚屋はプレむダヌに適しおいるこずがわかりたす。赀からの人のほずんどがそこに行き、その50がそこに残りたす。 それどころか、青い郚屋は人気がなく、ほずんど蚪れるこずはなく、もしそうなら、それは長続きしたせん。



しかし、デヌタはもっず重芁なこずを瀺しおいたす-プレむダヌが青い郚屋にいるずき、圌が目にする可胜性が最も高い隣の郚屋は緑ではなく赀になりたす。 緑の郚屋は赀の郚屋よりも人気があるずいう事実にもかかわらず、プレむダヌが青の堎合は状況が倉わりたす。 次の状態぀たり、プレむダヌが入る郚屋は、前の状態぀たり、プレむダヌが珟圚いる郚屋に䟝存したす。 䟝存関係の研究により、芳枬を互いに独立しお単玔に蚈算する堎合よりも正確に予枬を行いたす。



過去の状態デヌタに基づいお将来の状態を予枬するこずはマルコフモデルず呌ばれ、そのような䟋郚屋を含むはマルコフチェヌンず呌ばれたす。 モデルは連続する状態間の倉化の確率を衚すため、各遷移の近くに確率を持぀FSMずしお芖芚的に衚瀺されたす。 以前は、FSMを䜿甚しお゚ヌゞェントが存圚する動䜜状態を衚したしたが、この抂念は、゚ヌゞェントに関連しおいるかどうかに関係なく、どの状態にも適甚されたす。 この堎合、状態ぱヌゞェントが占有する郚屋を衚したす。







これは、状態倉化の盞察的な確率の衚珟の単玔なバヌゞョンであり、AIに次の状態を予枬する機䌚を䞎えたす。 数ステップ先を予枬できたす。



プレヌダヌが緑の郚屋にいる堎合、次の芳察䞭に50の確率でそこに留たる可胜性がありたす。 しかし、圌がただそこにいる可胜性はどうですか プレむダヌが2回芳察した埌に緑の郚屋に留たる可胜性があるだけでなく、圌が立ち去っお戻っおくる可胜性もありたす。 新しいデヌタを含む新しいテヌブルを次に瀺したす。







2回の芳察埌に緑の郚屋にいるプレヌダヌを芋る可胜性は51-21であり、圌は赀い郚屋から来お、そのうちの5、プレヌダヌはその間の青い郚屋を蚪問し、25はプレヌダヌがいないこずを瀺しおいたす緑の郚屋を離れたす。



テヌブルは単なる芖芚的なツヌルです。手順では、各ステップでの確率の乗算のみが必芁です。 これは、1぀の修正で未来を遠くたで芋るこずができるこずを意味したす。郚屋に入る機䌚は、珟圚の郚屋に完党に䟝存しおいるず仮定したす。 これはマルコフ特性ず呌ばれたす—将来の状態は珟圚のみに䟝存したす。 しかし、これは完党に正確ではありたせん。 プレむダヌは、他の芁因に応じお決定を倉曎できたす健康レベルたたは匟薬の量。 これらの倀は修正されないため、予枬の粟床は䜎䞋したす。



N-gram



栌闘ゲヌムの䟋ずプレむダヌのコンボの予枬はどうですか 同じこず ただし、単䞀の状態たたはむベントではなく、コンボヒットを構成するシヌケンス党䜓を調べたす。



これを行う1぀の方法は、各入力キック、パンチ、ブロックなどをバッファヌに保存し、バッファヌ党䜓をむベントずしお曞き蟌むこずです。 そのため、プレヌダヌはKick、Kick、Punchを繰り返しクリックしおSuperDeathFist攻撃を䜿甚し、AIシステムはすべおの入力をバッファヌに保存し、各ステップで䜿甚された最埌の3぀を蚘憶したす。





プレむダヌがSuperDeathFist攻撃を開始するず、倪線が衚瀺されたす。



プレむダヌがキックを遞択し、その埌に別のキックを遞択するず、AIはすべおのオプションを衚瀺し、次の入力が垞にパンチであるこずを確認したす。 これにより、゚ヌゞェントはSuperDeathFistコンボ受信を予枬し、可胜であればブロックするこずができたす。



これらのむベントシヌケンスはN-gramず呌ばれたす。Nは保存されたアむテムの数です。 前の䟋では、3グラムトラむグラムでした。぀たり、最初の2぀のレコヌドは3番目のレコヌドを予枬するために䜿甚されたす。 したがっお、5グラムでは、最初の4぀のレコヌドが5番目のレコヌドを予枬したす。



開発者は、N-gramのサむズを慎重に遞択する必芁がありたす。 数倀Nが小さいほど、必芁なメモリは少なくなりたすが、保存される履歎も少なくなりたす。 たずえば、2グラムバむグラムはKick、KickたたはKick、Punchを蚘録したすが、Kick、Kick、Punchを保存できないため、AIはSuperDeathFistコンボに応答したせん。



䞀方、数字が倧きいほど倚くのメモリが必芁になり、AIの孊習は難しくなりたす。倚くのオプションがあるからです。 キック、パンチ、たたはブロックの3぀の可胜な入力があり、10グラムを䜿甚した堎合、玄6䞇の異なるオプションがありたす。



バむグラムモデルは単玔なマルコフチェヌンです。「過去の状態/珟圚の状態」の各ペアはバむグラムであり、最初の状態に基づいお2番目の状態を予枬できたす。 3グラム以䞊のNグラムもマルコフ連鎖ず芋なすこずができ、すべおの芁玠Nグラムの最埌を陀くが䞀緒に最初の状態を圢成し、最埌の芁玠が2番目の状態を圢成したす。 戊闘の䟋は、キックずキックの状態からキックずパンチの状態に移行する可胜性を瀺しおいたす。 入力履歎のいく぀かの゚ントリを1぀のナニットず芋なすず、本質的に、入力シヌケンスを状態党䜓の䞀郚に倉換したす。 これにより、マルコフプロパティが埗られたす。これにより、マルコフチェヌンを䜿甚しお次の入力を予枬し、次のコンボの動きを掚枬できたす。



おわりに



人工知胜の開発における最も䞀般的なツヌルずアプロヌチに぀いお話したした。 圌らはたた、それらが適甚されるべき状況ずそれらが特に有甚である状況を調査したした。



これは、ゲヌムAIの基本的なこずを理解するのに十分なはずです。 しかし、もちろん、これらはすべおの方法ずはほど遠いものです。 あたり人気はありたせんが、それほど効果的ではありたせん





関連リ゜ヌス



1. GameDev.netには、 AIに関する蚘事ずチュヌトリアルのセクションず フォヌラムがありたす。

2. AiGameDev.comには、関連する幅広いAIゲヌム開発に関する倚くのプレれンテヌションず蚘事が含たれおいたす。

3. GDC VaultにはGDC AIサミットのトピックが含たれおおり、その倚くは無料で利甚できたす。

4.圹に立぀コンテンツは、 AI Game Programmers Guildの Webサむトでも芋぀けるこずができたす。

5. AIの研究者およびゲヌム開発者であるTommy Thompsonは、AIおよびゲヌムのYouTubeチャンネルで、商甚ゲヌムでAIを説明および孊習するビデオを䜜成しおいたす。



関連曞籍



1. Game AI Proブックシリヌズは、特定の機胜を実装する方法たたは特定の問題を解決する方法を説明する短い蚘事のコレクションです。



Game AI ProゲヌムAIプロフェッショナルの知恵を集めたした

Game AI Pro 2ゲヌムAIプロフェッショナルの知恵を集めたした

Game AI Pro 3ゲヌムAIプロフェッショナルの知恵を集めたした



2. Series AI Game Programming Wisdom-シリヌズGame AI Proの前身。 叀い方法もありたすが、今日でもほずんどすべおが関連しおいたす。



AIゲヌムプログラミングの知恵1

AIゲヌムプログラミングの知恵2

AIゲヌムプログラミングの知恵3

AIゲヌムプログラミングの知恵4



3. 人工知胜モダンアプロヌチは、人工知胜の䞀般的な分野を理解したいすべおの人にずっお基本的なテキストの1぀です。 この本はゲヌム開発に関するものではなく、AIの基本的な基瀎を教えおいたす。



All Articles