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

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

ゲヌムにおける人工知胜に関する興味深い資料を芋぀けたした。 AIに関する基本的な事柄を簡単な䟋を䜿っお解説しおおり、AIの開発や蚭蚈に䟿利なツヌルやメ゜ッドも倚数掲茉されおいたす。どのように、どこで、い぀䜿甚するかも蚘茉されおいたす。

ほずんどの䟋は疑䌌コヌドで曞かれおいるので、深いプログラミング知識は必芁ありたせん。カットの䞋には写真ず GIF を含む 35 ペヌゞのテキストがありたすので、準備しおください。

曎新したした。申し蚳ありたせんが、私はすでにこの蚘事をHabrで翻蚳しおいたす。 ペむシェントれロ。圌のバヌゞョンを読むこずができたす ここで、しかし、䜕らかの理由で、その蚘事を芋逃しおしたいたした怜玢を䜿甚したしたが、䜕か問題が発生したした。私はゲヌム開発に特化したブログを曞いおいるので、賌読者向けに独自の翻蚳バヌゞョンを残すこずにしたした (いく぀かの点は異なる圢匏で衚蚘し、開発者のアドバむスに埓っお意図的に省略した郚分もありたす)。

AIずは

ゲヌム AI は、オブゞェクトが眮かれおいる状況に基づいお、オブゞェクトが実行すべきアクションに重点を眮いおいたす。これは通垞、「むンテリゞェント ゚ヌゞェント」の管理ず呌ばれたす。゚ヌゞェントずは、ゲヌム キャラクタヌ、車䞡、ボット、たたはより抜象的な゚ンティティのグルヌプ党䜓や文明などです。いずれの堎合も、環境を芳察し、それに基づいお刀断し、それに埓っお行動しなければならないものです。これは「感知/思考/行動」サむクルず呌ばれたす。

  • 感芚: ゚ヌゞェントは、その行動に圱響を䞎える可胜性のある環境内の物事 (近くの脅嚁、収集するアむテム、探玢する興味深い堎所) に関する情報を芋぀けたり取埗したりしたす。
  • 考える: ゚ヌゞェントは、どのように反応するかを決定したす (アむテムを収集するのに十分安党かどうか、たたは最初に戊う/隠れるべきかどうかを怜蚎したす)。
  • 実行: ゚ヌゞェントは以前の決定を実行するためのアクションを実行したす (敵たたはオブゞェクトに向かっお移動を開始したす)。
  •  キャラクタヌの行動により状況が倉わったため、新しいデヌタでサむクルが繰り返されたす。

AI は通垞、サむクルの Sense 郚分に重点を眮いおいたす。たずえば、自動運転車は道路の写真を撮圱し、それをレヌダヌやラむダヌのデヌタず組み合わせお解釈したす。これは通垞、機械孊習によっお行われ、受信デヌタを凊理し、「20ダヌド先に別の車がある」などの意味情報を抜出しおデヌタを解釈したす。これらはいわゆる分類問題です。

ゲヌムでは、ほずんどのデヌタがすでにシステムの䞍可欠な郚分になっおいるため、情報を抜出するための耇雑なシステムは必芁ありたせん。前方に敵がいるかどうかを刀断するために画像認識アルゎリズムを実行する必芁はありたせん。ゲヌムはすでにその情報を把握しおおり、意思決定プロセスに盎接䌝えたす。したがっお、サむクルの「感知」の郚分は、「思考」ず「行動」の郚分よりもはるかに単玔であるこずが倚いです。

ゲヌムAIの限界

AI には尊重しなければならない制限がいく぀かありたす。

  • AIは機械孊習アルゎリズムのように事前にトレヌニングする必芁はありたせん。開発䞭にニュヌラル ネットワヌクを䜜成しお、䜕䞇人ものプレむダヌを芳察し、圌らず察戊する最善の方法を孊習するのは意味がありたせん。なぜゲヌムがリリヌスされおおらず、プレむダヌがいないからです。
  • ゲヌムは楜しくお挑戊的なものであるべきなので、゚ヌゞェントは人間に察しお最善のアプロヌチを考え出す必芁はありたせん。
  • プレむダヌが実際の人間ず察戊しおいるように感じられるように、゚ヌゞェントはリアルに芋える必芁がありたす。 AlphaGo プログラムは人間の成瞟を䞊回ったが、その手順はゲヌムに察する埓来の理解ずはかけ離れおいた。ゲヌムが人間の盞手をシミュレヌトする堎合、この感芚は存圚しないはずです。アルゎリズムは、理想的な決定ではなく、もっずもらしい決定を䞋すように倉曎する必芁がありたす。
  • AIはリアルタむムで動䜜する必芁がありたす。これは、アルゎリズムが決定を䞋すためにプロセッサの䜿甚を長時間独占できないこずを意味したす。ほずんどのゲヌムでは、すべおの凊理を実行しお次のグラフィック フレヌムに進むたでに 10  16 ミリ秒かかるため、これには 33 ミリ秒でも長すぎたす。
  • 理想的には、システムの少なくずも䞀郚はデヌタ駆動型であり、コヌディングをしない人でも倉曎を加えるこずができ、調敎がより迅速に行われるようになりたす。

感知/思考/行動サむクル党䜓にわたる AI アプロヌチを芋おみたしょう。

基本的な意思決定

最も簡単なゲヌム「ポン」から始めたしょう。目的は、ボヌルがパドルを通り過ぎずに跳ね返るようにパドルを動かすこずです。テニスず同じで、ボヌルを打たなければ負けおしたいたす。ここで AI が行うタスクは比范的簡単で、プラットフォヌムをどの方向に移動するかを決定するこずです。

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

条件挔算子

Pong の AI にずっお最も明癜な解決策は、垞にプラットフォヌムをボヌルの䞋に配眮しようずするこずです。

擬䌌コヌドで蚘述された、このための簡単なアルゎリズムは次のずおりです。

ゲヌム実行䞭のすべおのフレヌム/曎新:
ボヌルがパドルの巊偎にある堎合:
パドルを巊に動かす
それ以倖の堎合、ボヌルがパドルの右偎にある堎合:
パドルを右に動かす

プラットフォヌムがボヌルの速床で動く堎合、これは Pong の AI に最適なアルゎリズムです。゚ヌゞェントのデヌタや実行可胜なアクションがそれほど倚くない堎合は、耇雑にする必芁はありたせん。

このアプロヌチは非垞にシンプルなので、感知/思考/行動のサむクル党䜓がほずんど目立ちたせん。しかし、それはそこにありたす:

  • Sense 郚分は 2 ぀の if ステヌトメントにありたす。ゲヌムはボヌルがどこにあり、プラットフォヌムがどこにあるかを知っおいるので、AI はこの情報を探したす。
  • 2 ぀の if ステヌトメントには、Think 郚分も含たれおいたす。これらは 2 ぀の゜リュヌションを具䜓化しおいたすが、この堎合は盞互に排他的です。その結果、プラットフォヌムを巊に移動する、右に移動する、たたはすでに正しく配眮されおいる堎合は䜕もしないずいう 3 ぀のアクションのいずれかが遞択されたす。
  • Act 郚分は、Move Paddle Left および Move Paddle Right 挔算子にありたす。ゲヌムのデザむンに応じお、プラットフォヌムを瞬時に移動したり、䞀定の速床で移動したりできたす。

これらのアプロヌチはリアクティブず呌ばれ、珟圚の䞖界の状態に反応しおアクションを実行する単玔な䞀連のルヌル (この堎合は、コヌド内の if ステヌトメント) がありたす。

決定朚

Pong の䟋は、実際には決定朚ず呌ばれる正匏な AI 抂念に盞圓したす。アルゎリズムはそれを調べお「葉」に到達し、どのようなアクションを取るかを決定したす。

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

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

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

  • 決定ノヌド: 䜕らかの条件のテストに基づいお 2 ぀の遞択肢から遞択し、各遞択肢は個別のノヌドずしお衚されたす。
  • 終了ノヌド: 最終的な決定を衚す実行するアクション。

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

前のセクションの if ステヌトメントず同じ機胜を決定朚で実行するこずの利点は䜕ですか?ここでは、各決定に 1 ぀の条件ず 2 ぀の可胜な結果のみがある䞀般的なシステムが存圚したす。これにより、開発者はハヌドコヌドするこずなく、ツリヌ内の決定を衚すデヌタから AI を䜜成できたす。これを衚の圢で瀺しおみたしょう。

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

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

決定朚は、倧量の䟋から自動的に構築される堎合たずえば、ID3 アルゎリズムを䜿甚に非垞に䟿利です。これにより、受信したデヌタに基づいお状況を分類するための効率的で高性胜なツヌルになりたす。ただし、゚ヌゞェントがアクションを遞択するための単玔なシステムを超えおいたす。

シナリオ

事前に定矩された条件ずアクションを䜿甚する意思決定ツリヌ システムを怜蚎したした。 AI を蚭蚈する人はツリヌを奜きなように配眮できたすが、それでもすべおをプログラムしたコヌダヌに頌る必芁がありたす。デザむナヌに独自の条件やアクションを䜜成するツヌルを提䟛できたらどうなるでしょうか?

プログラマヌが「ボヌルはパドルの巊偎にあるか」および「ボヌルはパドルの右偎にあるか」の条件のコヌドを蚘述しなくおも枈むように、蚭蚈者がこれらの倀をチェックする条件を蚘述するシステムを䜜成できたす。するず、決定朚デヌタは次のようになりたす。

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

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

この䟋では、スクリプト蚀語は条件匏の評䟡にのみ䜿甚されおいたすが、アクションにも䜿甚できたす。たずえば、「Move Paddle Right」デヌタはスクリプト ステヌトメント (ball.position.x += 10) になりたす。これにより、Move Paddle Right をプログラムする必芁なく、アクションもスクリプトで定矩されたす。

さらに進んで、決定朚党䜓をスクリプト蚀語で蚘述するこずもできたす。これはハヌドコヌドされた条件文の圢匏のコヌドですが、倖郚スクリプト ファむル内にあるため、プログラム党䜓を再コンパむルせずに倉曎できたす。倚くの堎合、プレむ䞭にスクリプト ファむルを倉曎しお、さたざたな AI の反応をすばやくテストできたす。

出来事ぞの反応

䞊蚘の䟋は Pong にぎったり圓おはたりたす。圌らは、感知・思考・行動のサむクルを継続的に実行し、䞖界の最新の状況に基づいお行動したす。しかし、より耇雑なゲヌムでは、すべおを䞀床に評䟡するのではなく、個々のむベントに反応する必芁がありたす。その堎合、Pong はすでに悪い䟋です。別のものを遞びたしょう。

敵がプレむダヌを芋぀けるたでは動かず、その埌は「専門分野」に応じお行動するシュヌティングゲヌムを想像しおください。敵の䞭には走っお「突進」するものもいれば、遠くから攻撃するものもいたす。これは䟝然ずしお基本的な反応システム (「プレむダヌが芋られたら䜕かする」) ですが、論理的には「プレむダヌが芋られた堎合」むベントず反応 (応答を遞択しお実行する) に分割できたす。

ここでSense/Think/Actルヌプに戻りたす。AIがプレむダヌを芖認しおいるかどうかを毎フレヌム確認するSenseパヌトをコヌディングできたす。芖認しおいない堎合は䜕も起こりたせんが、芖認しおいる堎合はPlayer Seenむベントを発生させたす。コヌドには「Player Seenむベントが発生したら、実行する」ずいう独立したセクションがあり、そこにThinkパヌトずActパヌトを呌び出すための答えが蚘述されたす。぀たり、Player Seenむベントに察する反応を蚭定したす。突進するキャラクタヌの堎合はChargeAndAttack、スナむパヌの堎合はHideAndSnipeです。これらの接続はデヌタファむルで䜜成できるため、再コンパむルせずに簡単に線集できたす。たた、ここでスクリプト蚀語を䜿甚するこずもできたす。

難しい決断を䞋す

単玔な反応システムは非垞に効果的ですが、それだけでは䞍十分な状況も数倚くありたす。゚ヌゞェントが珟圚行っおいるこずに応じお異なる決定を䞋さなければならない堎合もありたすが、それを条件ずしお想像するのは難しいです。堎合によっおは、条件が倚すぎお、決定朚やスクリプトで効果的に衚珟できないこずがありたす。次のステップを決定する前に、状況がどのように倉化するかを事前に評䟡する必芁がある堎合がありたす。これらの問題を解決するには、より掗緎されたアプロヌチが必芁です。

有限状態機械

有限状態マシン (FSM) は、゚ヌゞェントが珟圚耇数の可胜な状態のうちの 1 ぀にあり、ある状態から別の状態に遷移できるこずを瀺す方法です。そのような状態が䞀定数存圚するため、この名前が付けられおいたす。人生における最良の䟋は信号機です。堎所によっお信号の順序は異なりたすが、原則は同じです。぀たり、それぞれの状態は䜕かを衚したす (停止、進むなど)。信号機は、ある時点では 1 ぀の状態のみにあり、単玔なルヌルに基づいお状態が切り替わりたす。

ゲヌム内の NPC でも同様です。䟋ずしお、次の状態を持぀ガヌドを芋おみたしょう。

  • パトロヌル䞭。
  • 攻撃。
  • 逃げる。

状態を倉曎するための条件は次のずおりです。

  • 譊備員は敵を芋぀けるず攻撃したす。
  • 譊備員が攻撃しおも敵が芋えなくなった堎合は、巡回に戻りたす。
  • 譊備員が攻撃しお重傷を負った堎合、逃げたす。

たた、ガヌディアン状態倉数ずさたざたなチェック (近くに敵がいるかどうか、NPC のヘルス レベルはどれくらいかなど) を䜿甚しお if 文を蚘述するこずもできたす。さらにいく぀かの状態を远加しおみたしょう。

  • 怠惰 - パトロヌルの合間。
  • 捜玢䞭 - 発芋した敵が消えたずき。
  • 助けを求める - 敵を発芋したが、単独で戊うには匷すぎる堎合。

それぞれの遞択肢は限られおいたす。たずえば、䜓力が䜎い堎合、譊備員は隠れた敵を探しに行きたせん。

結局のずころ、「もし」のリストは膚倧にある、 それ「」は非垞に煩雑になる可胜性があるため、状態ず状態間の遷移を念頭に眮くこずができる方法を圢匏化する必芁がありたす。これを行うには、すべおの状態を考慮し、各状態の䞋に、他の状態ぞのすべおの遷移ず、それらに必芁な条件をリストに曞き留めたす。

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

これは状態遷移衚であり、FSM を衚珟する耇雑な方法です。図を描いお、NPC の動䜜がどのように倉化するかを完党に把握しおみたしょう。

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

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

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

これは状態間の遷移を凊理したすが、状態自䜓に関連付けられた動䜜に぀いおはどうでしょうか?特定の状態に察する実際の動䜜を実装する堎合、通垞、FSM にアクションを割り圓おる「フック」には 2 皮類ありたす。

  • 珟圚の状態に察しお定期的に実行するアクション。
  • ある状態から別の状態に移行するずきに実行するアクション。

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

2 番目のタむプに぀いおは、「敵が芋えおいお、敵が匷すぎる堎合は、Finding Help 状態に移行する」ずいう遷移を怜蚎しおください。゚ヌゞェントは、どこに助けを求めるかを遞択し、その情報を保存しお、Finding Help 状態がどこに行くべきかを認識できるようにする必芁がありたす。助けが芋぀かるず、゚ヌゞェントは Attacking 状態に戻りたす。この時点で、゚ヌゞェントは味方に脅嚁に぀いお䌝えたいので、NotifyFriendOfThreat アクションが発生する可胜性がありたす。

もう䞀床、このシステムを「感知/思考/行動」サむクルの芳点から芋おみたしょう。センスは、遷移ロゞックによっお䜿甚されるデヌタに具䜓化されたす。考えおみたしょう — 各状態で利甚可胜な遷移。そしお、Act は、状態内たたは状態間の遷移時に定期的に実行されるアクションによっお実行されたす。

遷移条件の継続的なポヌリングはコストがかかる堎合がありたす。たずえば、各゚ヌゞェントが敵を芋るこずができるかどうか、パトロヌルから攻撃に移行できるかどうかを刀断するためにフレヌムごずに耇雑な蚈算を実行するず、CPU 時間が倧量にかかりたす。

䞖界の状態における重芁な倉化は、発生するずすぐに凊理されるむベントず考えるこずができたす。 FSM に「゚ヌゞェントはプレヌダヌを芋るこずができたすか?」ず確認させる代わりに、フレヌムごずに遷移条件をチェックするのではなく、別のシステムを蚭定しお、より䜎い頻床たずえば、5 秒あたり XNUMX 回でチェックするこずもできたす。チェックに合栌したら、Player Seen を結果ずしお返したす。

これは FSM に枡され、FSM は Player Seen むベント受信条件にゞャンプし、それに応じお反応するはずです。結果の動䜜は、応答前にほずんど感知できない遅延があるこずを陀いお同じです。ただし、Sense 郚分をプログラムの別の郚分に分離した結果、パフォヌマンスが向䞊したした。

階局型有限状態マシン

ただし、倧芏暡な FSM での䜜業は必ずしも䟿利ではありたせん。攻撃状態を拡匵しお MeleeAttacking ず RangedAttacking を別々にしたい堎合は、攻撃状態に぀ながる他のすべおの状態 (珟圚および将来) からの遷移を倉曎する必芁がありたす。

この䟋では、重耇した遷移が倚数あるこずに気付いたかもしれたせん。アむドリング状態のほずんどの遷移は、パトロヌル状態の遷移ず同䞀です。特に、同様の状態をさらに远加する堎合は、同じこずを繰り返さない方がよいでしょう。アむドリングずパトロヌルを「非戊闘」ずいう䞀般的なラベルの䞋にグルヌプ化するのは理にかなっおいたす。戊闘状態ぞの移行には共通のセットが 1 ぀だけありたす。このラベルを状態ず考えるず、Idling ず Patrolling がサブ状態になりたす。新しい非戊闘サブステヌトに別の遷移テヌブルを䜿甚する䟋:

䞻な州:
ゲヌム AI の䜜成方法: 初心者向けガむド

戊闘倖のステヌタス:
ゲヌム AI の䜜成方法: 初心者向けガむド

図で衚すず次のようになりたす。

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

同じシステムですが、アむドリングやパトロヌルを含む新しい非戊闘状態が远加されおいたす。各状態にサブ状態を持぀ FSM が含たれ (さらにこれらのサブ状態には独自の FSM が含たれるなど、必芁に応じおこれも同様)、階局型有限状態マシン (HFSM) が埗られたす。非戊闘状態をグルヌプ化するこずで、冗長な遷移を倚数削枛したした。共通の遷移を持぀新しい状態に察しおも同じこずを行うこずができたす。たずえば、将来的に Attacking 状態を MeleeAttacking 状態ず MissileAttacking 状態に拡匵するず、それらは敵たでの距離ず匟薬の有無に基づいお盞互に遷移するサブ状態になりたす。その結果、最小限の重耇した遷移で耇雑な動䜜モデルず動䜜のサブモデルを衚珟できるようになりたす。

行動ツリヌ

HFSM を䜿甚するず、耇雑な動䜜の組み合わせが簡単な方法で䜜成されたす。ただし、遷移ルヌル​​の圢での意思決定は、珟圚の状態ず密接に関係しおいるずいう若干の難しさがありたす。そしお倚くのゲヌムでは、たさにそれが必芁なのです。たた、状態階局を慎重に䜿甚するこずで、遷移䞭の繰り返しの量を枛らすこずができたす。しかし、時には、どの州にいおも機胜するルヌル、たたはほがすべおの州に適甚されるルヌルが必芁になるこずがありたす。たずえば、゚ヌゞェントの䜓力が 25% たで䜎䞋した堎合、゚ヌゞェントが戊闘䞭、アむドル状態、たたは䌚話䞭であるかどうかに関係なく、゚ヌゞェントが逃げるようにしたいずしたす。この条件を各状態に远加する必芁がありたす。そしお、デザむナヌが埌から䜎䜓力しきい倀を 25% から 10% に倉曎したい堎合、すべおをやり盎す必芁がありたす。

理想的には、この状況では、「どの状態になるか」に関する決定が状態自䜓の倖郚で行われ、倉曎は 1 か所でのみ行う必芁があり、遷移条件に圱響を䞎えないシステムが必芁です。ここで動䜜ツリヌが登堎したす。

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

  • ノヌドは、成功 (䜜業が完了した堎合)、倱敗 (実行できない堎合)、実行䞭 (ただ実行䞭で最終結果がない堎合) の 3 ぀の倀のいずれかを返すようになりたした。
  • 2 ぀の遞択肢から遞択するための決定ノヌドはなくなりたした。代わりに、1 ぀の子ノヌドを持぀ Decorator ノヌドがありたす。成功した堎合、唯䞀の子ノヌドを実行したす。
  • アクションを実行するノヌドは、実行䞭のアクションを衚す実行倀を返したす。

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

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

この構造では、アむドル/パトロヌルから攻撃たたはその他の状態ぞの明らかな移行は発生したせん。敵が芋えおいお、キャラクタヌの䜓力が䜎い堎合、パトロヌル、アむドリング、攻撃など、以前にどのノヌドを実行しおいたかに関係なく、実行は逃走ノヌドで停止したす。

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

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

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

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

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

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

゚ヌゞェントは珟圚の状態ず環境に基づいおアクションの有甚性を蚈算し、い぀でも最も適切な他の状態をチェックしお遞択できたす。これは FSM に䌌おいたすが、珟圚の状態を含む各朜圚的な状態の評䟡によっお遷移が決定される点が異なりたす。次に進むたたは、すでに完了しおいる堎合はそのたた進む最も有甚なアクションを遞択するこずに泚意しおください。より倚様性を持たせるには、小さなリストから慎重にランダムに遞択するこずもできたす。

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

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

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

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

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

評䟡システムに基づいおアクションを遞択するずいうアむデアは非垞にシンプルなので、ナヌティリティベヌスのシステムは、AI の意思決定プロセスを完党に眮き換えるのではなく、その䞀郚ずしお䜿甚できたす。決定朚は、2 ぀の子ノヌドからナヌティリティ スコアを芁求し、より高いスコアを遞択する堎合がありたす。同様に、動䜜ツリヌには、アクションのナヌティリティを評䟡しおどの子を実行するかを決定するナヌティリティ耇合ノヌドが含たれる堎合がありたす。

移動ずナビゲヌション

前の䟋では、巊たたは右に移動するプラットフォヌムず、巡回たたは攻撃する譊備員がありたした。しかし、䞀定期間にわたる゚ヌゞェントの動きを具䜓的にどのように凊理するのでしょうか?目的地にたどり着くのが単玔に盎線で移動するよりも難しい堎合、どのように速床を蚭定し、どのように障害物を回避し、どのようにルヌトを蚈画するのでしょうか。これを芋おみたしょう。

УправлеМОе

初期段階では、各゚ヌゞェントには速床倀゚ヌゞェントの移動速床ず移動方向を含むがあるず想定したす。これは、メヌトル/秒、キロメヌトル/時、ピクセル/秒などで枬定できたす。感知/思考/行動のサむクルを思い出すず、思考郚分が速床を遞択し、行動郚分がその速床を゚ヌゞェントに適甚するこずが想像できたす。通垞、ゲヌムには、各オブゞェクトの速床倀を孊習し、それに応じお調敎するこずによっおこれを実行する物理システムがありたす。したがっお、゚ヌゞェントが持぀べき速床を決定するずいう 1 ぀のタスクを AI に任せるこずができたす。゚ヌゞェントがどこにいるべきかわかっおいる堎合は、蚭定された速床で正しい方向に゚ヌゞェントを移動する必芁がありたす。非垞に単玔な方皋匏:

垌望する旅行先 = 目的地の䜍眮 – ゚ヌゞェントの䜍眮

2D の䞖界を想像しおください。゚ヌゞェントはポむント (-2,-2) におり、目的地は北東のどこかのポむント (30, 20) にあり、゚ヌゞェントがそこに到達するために必芁なパスは (32, 22) です。これらの䜍眮がメヌトル単䜍で枬定されおいるずしたす。゚ヌゞェントの速床を毎秒 5 メヌトルずするず、移動ベクトルをスケヌリングしお、およそ (4.12, 2.83) の速床が埗られたす。これらのパラメヌタを䜿甚するず、゚ヌゞェントは玄 8 秒で目的地に到着したす。

い぀でも倀を再蚈算できたす。゚ヌゞェントがゎヌルの半分たで来た堎合、移動距離は半分になりたすが、゚ヌゞェントの最倧速床は 5 m/s なので (これは䞊で決定したした)、速床は同じになりたす。これは移動するタヌゲットにも機胜し、゚ヌゞェントは移動しながら小さな調敎を行うこずができたす。

しかし、もっずバリ゚ヌションが欲しいです。䟋えば、ゆっくりず速床を䞊げお、キャラクタヌが立った状態から走る状態に移行する様子をシミュレヌトしたいのです。停止する前に同じこずを最埌に実行できたす。これらの機胜はステアリング動䜜ず呌ばれ、それぞれに特定の名前が付けられおいたす: 探玢、逃走、到着など。゚ヌゞェントの䜍眮ず珟圚の速床を目的地ず比范し、加速力を゚ヌゞェントの速床に適甚しお、目暙に向かっお移動するさたざたな方法を䜿甚するずいう考え方です。

それぞれの動䜜には若干異なる目的がありたす。シヌクず到着は、゚ヌゞェントが目的地たで移動する方法です。障害物回避ず分離は、゚ヌゞェントの動きを調敎しお、ゎヌルに向かう途䞭で障害物を回避したす。配眮ず結合により、゚ヌゞェントは移動時に䞀緒に保たれたす。任意の数の異なるステアリング動䜜を合蚈しお、すべおの芁玠を考慮した単䞀のパス ベクトルを生成できたす。壁や他の゚ヌゞェントから離れるために、到着、分離、障害物回避の動䜜を䜿甚する゚ヌゞェント。このアプロヌチは、䞍芁な詳现のないオヌプンな堎所でうたく機胜したす。

より困難な状況では、異なる動䜜の組み合わせはうたく機胜したせん。たずえば、゚ヌゞェントは、到着ず障害物回避の競合により壁に匕っかかっおしたう可胜性がありたす。したがっお、すべおの倀を単玔に合蚈するよりも耇雑なオプションを考慮する必芁がありたす。その方法は、各動䜜の結果を合蚈するのではなく、さたざたな方向の動きを考慮しお、最適なオプションを遞択するこずです。

しかし、行き止たりがあり、進むべき道の遞択肢がある耇雑な環境では、さらに高床なものが必芁になりたす。

方法を芋぀ける

ステアリング動䜜は、障害物を回避しながらほずんど逞脱するこずなく、A 地点から B 地点たで盎線で移動できるオヌプン ゚リア (サッカヌ堎やアリヌナ) での単玔な移動に最適です。耇雑なルヌトの堎合、䞖界を探玢し、そのルヌトを決定する方法であるパスファむンディングが必芁です。

最も単玔な方法は、゚ヌゞェントの近くの各マスにグリッドを配眮し、どの゚ヌゞェントが移動できるかを掚定するこずです。いずれかのマスが目的地である堎合は、各マスから前のマスたでのルヌトをたどっおスタヌト地点に到達したす。これがルヌトです。それ以倖の堎合は、目的地が芋぀かるか、マス目がなくなる぀たり、可胜なルヌトがないたで、最も近い他のマス目でこのプロセスを繰り返したす。これは正匏には幅優先探玢たたは BFS (幅優先探玢アルゎリズム) ずしお知られおいたす。圌は䞀歩ごずにあらゆる方向を芋おいたすしたがっお、幅は「広さ」です。怜玢空間は、目的の堎所に到達するたで移動する波面のようなものです。怜玢領域は各ステップで拡倧し、終点に到達したら、開始点に戻る経路をたどるこずができたす。

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

その結果、必芁なルヌトが䜜成される正方圢のリストが衚瀺されたす。これはパス぀たりパスファむンディングであり、゚ヌゞェントが目的地に向かう途䞭で蚪れる堎所のリストです。

䞖界䞭のすべおの正方圢の䜍眮がわかっおいるので、ステアリング動䜜を䜿甚しお、ノヌド 1 からノヌド 2、ノヌド 2 からノヌド 3 ずいうようにパスに沿っお移動できたす。最も簡単な遞択肢は次の正方圢の䞭心に向かうこずですが、珟圚の正方圢ず次の正方圢の間の端の真ん䞭で停止するずさらに良いでしょう。これにより、゚ヌゞェントは急カヌブを曲がるずきにコヌナヌを曲がるこずができたす。

BFS アルゎリズムにも欠点がありたす。぀たり、「正しい」方向ず同じ数の正方圢を「間違った」方向で探玢するのです。ここで、A* (A スタヌ) ず呌ばれるより耇雑なアルゎリズムが登堎したす。これは同じように動䜜したすが、隣接するマス (次に隣接するマスの隣接マス、次に隣接するマスの隣接マスの隣接マスなど) を盲目的に探玢するのではなく、ノヌドをリストに収集しお䞊べ替え、次に探玢されるノヌドが垞に最短ルヌトに぀ながるノヌドになるようにしたす。ノヌドは、目的の正方圢たでの仮想ルヌトの「コスト」移動コストを含むず、その正方圢が目的地からどのくらい離れおいるかの掚定倀怜玢を正しい方向に偏らせるずいう 2 ぀の芁玠を考慮したヒュヌリスティックに基づいお゜ヌトされたす。

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

この䟋では、゚ヌゞェントが䞀床に 1 ぀のマス目を探玢し、そのたびに最も有望な隣接するマス目を遞択するこずを瀺しおいたす。結果ずしお埗られるパスは BFS ず同じですが、プロセスで考慮される正方圢の数が少なくなり、ゲヌムのパフォヌマンスに倧きな圱響を䞎えたす。

グリッドのない動き

しかし、ほずんどのゲヌムはグリッド䞊にレむアりトされおおらず、リアリズムを犠牲にするこずなくグリッド䞊にレむアりトするこずは䞍可胜であるこずが倚いです。劥協が必芁だ。正方圢のサむズはどのくらいにすべきでしょうか?倧きすぎるず、狭い廊䞋や曲がり角を適切に衚珟できず、小さすぎるず怜玢するマス目が倚すぎお、結局倚くの時間がかかっおしたいたす。

最初に理解すべきこずは、グリッドは接続されたノヌドのグラフを提䟛するずいう点です。 A* アルゎリズムず BFS アルゎリズムは実際にはグラフ䞊で動䜜し、グリッドに぀いおはたったく考慮したせん。ノヌドはゲヌム䞖界のどこにでも配眮できたす。接続された 2 ぀のノヌド間、および開始点ず終了点ず少なくずも 1 ぀のノヌド間に接続があれば、アルゎリズムは以前ず同じように機胜したす。各ノヌドは、任意の数の仮想パスの䞀郚ずなる可胜性のある䞖界内の重芁な䜍眮を衚すため、これはしばしばりェむポむント システムず呌ばれたす。

ゲヌム AI の䜜成方法: 初心者向けガむド
䟋 1: 各正方圢に結び目がありたす。怜玢ぱヌゞェントが配眮されおいるノヌドから始たり、目的のマス目のノヌドで終了したす。

ゲヌム AI の䜜成方法: 初心者向けガむド
䟋 2: より小さなノヌド (りェむポむント) のセット。怜玢ぱヌゞェントのマス目から始たり、必芁な数のノヌドを通過しお目的地たで続きたす。

非垞に柔軟か぀匷力なシステムです。しかし、りェむポむントをどこにどのように配眮するかを決める際には泚意が必芁です。そうしないず、゚ヌゞェントが最も近いりェむポむントを芋るこずができず、移動を開始できなくなる可胜性がありたす。䞖界の圢状に基づいおりェむポむントを自動的に配眮できれば、もっず簡単になりたす。

ここで、ナビゲヌション メッシュたたは navmesh が登堎したす。これは通垞、゚ヌゞェントが歩行できる堎所であればどこでも、ワヌルド ゞオメトリに重ねられる䞉角圢の 2D グリッドです。グリッド内の各䞉角圢はグラフ内のノヌドになり、最倧 XNUMX ぀の隣接する䞉角圢があり、グラフ内の隣接ノヌドになりたす。

この画像は Unity ゚ンゞンからの䟋です。この゚ンゞンは、ワヌルド内のゞオメトリを分析し、ナビメッシュ (スクリヌンショットでは氎色) を䜜成したした。ナビメッシュ内の各ポリゎンは、゚ヌゞェントが立ったり、あるポリゎンから別のポリゎンに移動したりできる領域です。この䟋では、ポリゎンは配眮されおいるフロアよりも小さくなっおいたす。これは、゚ヌゞェントのサむズが公称䜍眮を超えお拡匵されるこずを考慮しお行われたす。

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

A* アルゎリズムを再床䜿甚しお、このグリッドを通るルヌトを芋぀けるこずができたす。これにより、すべおのゞオメトリを考慮し、䞍芁なノヌドやりェむポむントを必芁ずしない、䞖界䞭でほが完璧なルヌトが埗られたす。

パスファむンディングは、蚘事の 1 ぀のセクションだけでカバヌするには広すぎるトピックです。もっず詳しく勉匷したいなら、これが圹に立぀でしょう アミット・パテルのりェブサむト.

蚈画

パスファむンディングでは、方向を遞択しお移動するだけでは十分ではない堎合があるこずがわかりたした。目的地に到達するには、ルヌトを遞択しお数回曲がる必芁がありたす。この考え方を䞀般化するこずができたす。目暙を達成するこずは、次のステップだけではなく、䞀連の流れ党䜓であり、最初のステップが䜕であるかを刀断するために、いく぀かのステップを先読みする必芁がある堎合もありたす。それは蚈画ず呌ばれたす。パスファむンディングは、いく぀かの蚈画アドオンの 1 ぀ず考えるこずができたす。 Sense/Think/Act サむクルの芳点から蚀えば、これは Think 郚分が将来に向けお耇数の Act 郚分を蚈画する堎所です。

ボヌドゲヌム「マゞックザ・ギャザリング」の䟋を芋おみたしょう。私たちは最初に以䞋のカヌドセットを手にしお行動したす:

  • 沌 - 黒マナ 1 点 (土地カヌド) を䞎えたす。
  • 森 - 緑マナ 1 点 (土地カヌド) を䞎えたす。
  • 逃亡魔法䜿い - 召喚するには青マナが 1 個必芁です。
  • ゚ルフの神秘家 - 召喚するには緑マナが 1 個必芁です。

簡単にするために、残りの 1 枚のカヌドは無芖したす。ルヌルによれば、プレむダヌはタヌンごずに土地カヌドを 1 枚プレむでき、このカヌドを「タップ」しおマナを抜出し、マナの量に応じお呪文 (クリヌチャヌの召喚を含む) を唱えるこずができたす。この状況では、人間のプレむダヌは森をプレむし、緑マナを XNUMX 個タップし、゚ルフの神秘家を召喚するこずを知っおいたす。しかし、ゲヌム AI はこれをどうやっお理解できるのでしょうか?

シンプルな蚈画

単玔なアプロヌチは、適切なアクションがなくなるたで各アクションを順番に詊すこずです。 AIはカヌドを芋お、Swampがプレむできるず認識したす。そしおそれを挔奏したす。このタヌンに他に䜕かアクションは残っおいたすか?圌は《゚ルフの神秘家》や《逃亡者の魔術垫》を召喚するこずができたせん。召喚するにはそれぞれ緑ず青のマナが必芁ですが、《沌》は黒マナしか提䟛しないからです。そしお、圌はすでに沌をプレむしおいるので、もう森をプレむするこずはできたせん。぀たり、ゲヌム AI はルヌルに埓いたしたが、うたく実行できたせんでした。改善の䜙地あり。

蚈画により、ゲヌムを望たしい状態にするためのアクションのリストを芋぀けるこずができたす。パス䞊のすべおのマス目に隣接するマス目があるのず同様に (パスファむンディングにおいお)、プラン内のすべおのアクションにも隣接するマス目たたは埌続のマス目がありたす。目的の状態に到達するたで、これらのアクションず埌続のアクションを怜玢できたす。

この䟋では、望たしい結果は「可胜であればクリヌチャヌを召喚する」です。タヌンの開始時には、ゲヌムのルヌルで蚱可されおいる 2 ぀のアクションのみが衚瀺されたす。

1. 沌をプレむする結果沌がプレむ䞭
2. Forest をプレむ (結果: Forest がプレむ䞭)

実行される各アクションは、ゲヌムのルヌルに応じお、さらなるアクションに぀ながり、他のアクションを終了する可胜性がありたす。沌をプレむしたず想像しおください。これにより、次のステップずしお沌が陀去されたす (すでにプレむ枈みです)。たた、森も陀去されたす (ルヌルにより、1 タヌンに 1 枚の土地カヌドをプレむできるため)。その埌、他に遞択肢がないので、AI は黒マナを XNUMX 個埗るずいう次のステップを远加したす。圌が先に進んで「沌のタップ」を遞択した堎合、圌は黒マナを XNUMX 点埗るこずになりたすが、それを䜿っお䜕もするこずはできたせん。

1. 沌をプレむする結果沌がプレむ䞭
1.1 沌を「タップ」する (結果: 沌は「タップ」され、黒マナ +1)
利甚可胜なアクションはありたせん - 終了
2. Forest をプレむ (結果: Forest がプレむ䞭)

行動のリストが短かったため、行き詰たりに陥りたした。次のアクションのためにこのプロセスを繰り返したす。私たちは Forest をプレむし、「緑マナを 1 個埗る」アクションを開始したす。これにより、XNUMX 番目のアクションである「゚ルフの神秘家を召喚する」アクションが開始されたす。

1. 沌をプレむする結果沌がプレむ䞭
1.1 沌を「タップ」する (結果: 沌は「タップ」され、黒マナ +1)
利甚可胜なアクションはありたせん - 終了
2. Forest をプレむ (結果: Forest がプレむ䞭)
2.1 森を「タップ」する (結果: 森は「タップ」され、緑マナ +1)
2.1.1 ゚ルフの神秘家を召喚する (結果: ゚ルフの神秘家が堎に出る、緑マナ -1)
利甚可胜なアクションはありたせん - 終了

最終的に、私たちはすべおの可胜なアクションを怜蚎し、クリヌチャヌを召喚する蚈画を芋぀けたした。

これは非垞に単玔化された䟋です。䜕らかの基準を満たすプランではなく、可胜な限り最適なプランを遞択するこずをお勧めしたす。通垞、朜圚的な蚈画は、最終結果たたはそれらを実装するこずによる党䜓的な利益に基づいお評䟡できたす。土地カヌドをプレむするず 1 ポむント、クリヌチャヌを召喚するず 3 ポむントを獲埗できたす。スワンプをプレむするのは 1 ポむントのプランになりたす。そしお、森をプレむ→森をタップ→゚ルフの神秘家を召喚するず、すぐに 4 ポむントが埗られたす。

これがマゞックザ・ギャザリングでの蚈画の仕組みですが、同じロゞックが他の状況にも圓おはたりたす。たずえば、チェスでポヌンを動かしおビショップを動かすスペヌスを䜜るこずなどです。たたは、このように壁の埌ろに隠れお、XCOM を安党に撃぀こずもできたす。ずにかく、その考えは理解できるでしょう。

蚈画の改善

堎合によっおは、考えられるすべおのオプションを怜蚎するには、実行可胜なアクションが倚すぎるこずがありたす。マゞック:ザ・ギャザリングの䟋に戻りたす。ゲヌム䞭に、手札に土地カヌドずクリヌチャヌ カヌドが耇数あるずしたす。可胜な動きの組み合わせの数は数十になりたす。この問題にはいく぀かの解決策がありたす。

最初の方法は埌方連鎖です。すべおの組み合わせを詊すのではなく、最終結果から始めお盎接的なルヌトを芋぀ける方がよいでしょう。朚の根元から特定の葉ぞ進むのではなく、反察方向、぀たり葉から根元ぞ進みたす。この方法はより簡単か぀高速です。

敵の䜓力が1の堎合、「1以䞊のダメヌゞを䞎える」ずいうプランを芋぀けるこずができたす。これを実珟するには、いく぀かの条件を満たす必芁がありたす。

1. ダメヌゞは呪文によっお䞎えるこずができたす。呪文は手札になければなりたせん。
2. 呪文を唱えるにはマナが必芁です。
3. マナを埗るには、土地カヌドをプレむする必芁がありたす。
4. 土地カヌドをプレむするには、そのカヌドを手札に持っおいる必芁がありたす。

もう䞀぀の方法は、最良優先怜玢です。すべおのパスを詊すのではなく、最も適切なパスを遞択したす。ほずんどの堎合、この方法は䞍必芁な怜玢コストをかけずに最適なプランを提䟛したす。 A* は最良優先探玢の䞀皮です。最初から最も有望なルヌトを探玢するこずで、他のオプションを確認しなくおも最適なパスを芋぀けるこずができたす。

興味深く、たすたす人気が高たっおいるベストファヌスト怜玢オプションは、モンテカルロ朚探玢です。埌続の各アクションを遞択するずきにどのプランが他よりも優れおいるかを掚枬する代わりに、アルゎリズムは、最埌プランが勝利たたは敗北に終わったずきに到達するたで、各ステップでランダムに埌続プランを遞択したす。最終結果は、前のオプションの「重み」を増枛するために䜿甚されたす。このプロセスを数回続けお繰り返すこずで、状況が倉わった堎合でも (察戊盞手がプレむダヌを劚害する行動をずった堎合)、アルゎリズムは最適な次の動きを正確に掚定したす。

ゲヌムの蚈画に関する議論は、目暙指向アクション蚈画 (GOAP) なしでは完結したせん。これは広く䜿甚され、議論されおいる方法ですが、いく぀かの特城的な詳现を陀けば、基本的には先ほど説明した埌方連鎖法ず同じです。目的が「プレむダヌを殺す」こずであり、プレむダヌがカバヌの埌ろにいる堎合、蚈画は「手抎匟で殺す → 手抎匟を手に入れる → 手抎匟を投げる」ずなるかもしれたせん。

通垞、耇数の目暙があり、それぞれに優先順䜍が付けられおいたす。最も優先床の高いタヌゲットを完了できない堎合 (プレむダヌが芋えないため、アクションの組み合わせで「プレむダヌを殺す」蚈画が䜜成されない)、AI は優先床の䜎いタヌゲットにフォヌルバックしたす。

トレヌニングず適応

すでに述べたように、ゲヌム AI では、゚ヌゞェントをリアルタむムで制埡するのに適しおいないため、通垞は機械孊習は䜿甚されたせん。しかし、これはこの地域から䜕かを借りるこずができないずいう意味ではありたせん。シュヌティングゲヌムでは、䜕かを孊べる盞手が欲しいです。たずえば、地図䞊の最適な䜍眮を調べたす。あるいは、栌闘ゲヌムでプレむダヌが頻繁に䜿甚するコンボ技をブロックし、他の技を䜿甚するように動機付ける察戊盞手もいたす。したがっお、このような状況では機械孊習が非垞に圹立ちたす。

統蚈ず確率

耇雑な䟋に入る前に、いく぀かの簡単な枬定を行い、それを䜿甚しお意思決定を行うこずで、どこたでできるかを芋おみたしょう。たずえば、リアルタむム戊略ゲヌムでは、プレむダヌがゲヌム開始から数分以内に攻撃を開始できるかどうか、たたそれに察しおどのような防埡を準備すればよいかをどのように刀断できるでしょうか。プレむダヌの過去の経隓を研究するこずで、将来の反応がどうなるかを理解するこずができたす。たず、そのような初期デヌタはありたせんが、収集するこずはできたす。AI が人間ず察戊するたびに、最初の攻撃の時間を蚘録できたす。数回のセッションを経お、プレむダヌが将来攻撃するたでにかかる時間の平均倀が埗られたす。

平均倀にも問題がありたす。プレヌダヌが 20 回急いでプレむし、20 回ゆっくりプレむした堎合、望たしい倀は䞭間のどこかになり、これでは䜕も圹に立ちたせん。 20 ぀の解決策は、入力デヌタを制限するこずです。最埌の XNUMX 個を考慮に入れるこずができたす。

プレむダヌの過去の奜みが将来も同じであるず仮定しお、特定のアクションの可胜性を評䟡するずきにも同様のアプロヌチが䜿甚されたす。プレむダヌが火の玉で 62,5 回、雷で 25 回、近接攻撃で 12,5 回攻撃した堎合、そのプレむダヌが火の玉を奜むのは明らかです。さたざたな歊噚を䜿甚する確率を掚枬しおみたしょう: 火の玉 = XNUMX%、皲劻 = XNUMX%、近接攻撃 = XNUMX%。私たちのゲヌム AI は火灜防埡に備える必芁がありたす。

もうひず぀の興味深い方法は、倧量の入力デヌタを芋お状況を分類し、AI が適切に察応できるようにする、単玔ベむズ分類噚を䜿うこずです。ベむズ分類噚は、電子メヌルのスパム フィルタヌでの䜿甚で最もよく知られおいたす。そこで、単語を調べ、それらの単語が以前に出珟した堎所スパムかどうかにかかわらずず比范し、受信メヌルに関する結論を導き出したす。入力デヌタが少ない堎合でも、同じこずを行うこずができたす。 AI が芋るすべおの有甚な情報 (䜜成された敵ナニット、䜿甚する呪文、研究した技術など) ず最終結果 (戊争か平和か、突撃か防埡かなど) に基づいお、望たしい AI の動䜜を遞択したす。

これらの孊習方法はどれも十分ですが、テストデヌタに基づいお䜿甚するこずをお勧めしたす。 AI は、プレむテスタヌが䜿甚したさたざたな戊略に適応するこずを孊習したす。リリヌス埌にプレむダヌに適応する AI は、予枬可胜になりすぎたり、勝぀のが難しくなったりする可胜性がありたす。

䟡倀に基づく適応

ゲヌムの䞖界の内容ずルヌルを考慮するず、入力デヌタを䜿甚するだけでなく、決定に圱響を䞎える倀のセットを倉曎できたす。次のようにしおみたしょう:

  • AI にゲヌム䞭の䞖界の状態ず重芁なむベントに関するデヌタを収集させたす (䞊蚘のずおり)。
  • このデヌタに基づいおいく぀かの重芁な倀を倉曎しおみたしょう。
  • 私たちはこれらの倀の凊理たたは評䟡に基づいお決定を実行したす。

たずえば、゚ヌゞェントは䞀人称芖点のシュヌティング マップ䞊で耇数の郚屋から遞択できたす。各郚屋には独自の䟡倀があり、それによっお蚪問する䟡倀が決たりたす。 AIは倀に基づいおどの郚屋に行くかをランダムに遞択したす。゚ヌゞェントは自分がどの郚屋で殺されたかを蚘憶し、その郚屋の䟡倀自分がそこに戻る可胜性を枛らしたす。逆の状況でも同様です。゚ヌゞェントが倚くの敵を倒すず、郚屋の䟡倀が高たりたす。

マルコフモデル

収集したデヌタを䜿甚しお予枬を行うずどうなるでしょうか?䞀定期間にわたっおプレむダヌがいるすべおの郚屋を蚘憶しおおけば、プレむダヌがどの郚屋に移動するかを予枬できたす。郚屋倀間でのプレむダヌの動きを远跡しお蚘録するこずで、それを予枬するこずができたす。

赀、緑、青の 3 ぀の郚屋を芋おみたしょう。たた、ゲヌムセッションを芳戊しながら蚘録した芳察事項は次のずおりです。

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

各郚屋の芳察数はほが同じです。埅ち䌏せに適した堎所をどこにするかはただわかりたせん。マップ党䜓に均等に出珟するプレむダヌがリスポヌンするため、統蚈の収集も耇雑になりたす。しかし、マップ䞊に珟れた埌に次に入る郚屋に関するデヌタはすでに圹立っおいたす。

グリヌン ルヌムがプレむダヌに適しおいるこずは明らかです。レッド ルヌムのほずんどの人がグリヌン ルヌムに移動し、そのうち 50% がそこに留たりたす。察照的に、青い郚屋は人気がありたせん。そこに行く人はほずんどいたせんし、行ったずしおも長く滞圚するこずはありたせん。

しかし、デヌタはより重芁なこずを教えおくれたす。プレむダヌが青い郚屋にいる堎合、次にそのプレむダヌがいる郚屋は緑ではなく赀である可胜性が高いのです。緑の郚屋は赀の郚屋よりも人気がありたすが、プレむダヌが青の郚屋にいる堎合は状況が倉わりたす。次の状態 (぀たり、プレむダヌが移動する郚屋) は、前の状態 (぀たり、プレむダヌが珟圚いる郚屋) によっお決たりたす。䟝存関係を調べるこずで、芳枬倀を単玔に個別にカりントする堎合よりも正確な予枬が可胜になりたす。

過去の状態デヌタに基づいお将来の状態を予枬するこずをマルコフモデルず呌び、そのような䟋 (郚屋を含む) はマルコフ連鎖ず呌ばれたす。モデルは連続する状態間の倉化の確率を衚すため、各遷移の呚囲の確率を持぀ FSM ずしお芖芚的に衚珟されたす。これたで、゚ヌゞェントの動䜜状態を衚すために FSM を䜿甚しおいたしたが、この抂念は、゚ヌゞェントに関連付けられおいるかどうかに関係なく、あらゆる状態に拡匵されたす。この堎合、状態ぱヌゞェントが占める郚屋を衚したす。

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

これは、状態倉化の盞察的な確率を衚す簡単な方法であり、AI に次の状態を予枬する胜力を䞎えたす。数歩先たで予枬するこずが可胜です。

プレヌダヌがグリヌンルヌムにいる堎合、次の芳察時にそこに留たる可胜性は 50% です。しかし、その埌も圌がそこにいる可胜性はどれくらいあるでしょうか? XNUMX 回の芳察埌もプレヌダヌがグリヌン ルヌムに残っおいた可胜性だけでなく、䞀床出お戻っおきた可胜性もありたす。新しいデヌタを考慮した新しい衚を以䞋に瀺したす。

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

これは、51 回の芳察埌にプレむダヌがグリヌン ルヌムにいるのを目にする確率が 21% になるこずを瀺しおいたす。そのうち 5% はプレむダヌがレッド ルヌムから来おおり、そのうち 25% はプレむダヌがその間にブルヌ ルヌムを蚪れ、XNUMX% はプレむダヌがグリヌン ルヌムからたったく出ないこずを瀺しおいたす。

衚は単なる芖芚的なツヌルであり、手順では各ステップで確率を掛け合わせるだけです。これは、1 ぀の泚意点を陀けば、遠い未来を予枬できるこずを意味したす。぀たり、郚屋に入る可胜性は珟圚の郚屋に完党に䟝存するず想定したす。これはマルコフ特性ず呌ばれ、将来の状態は珟圚のみに䟝存したす。しかし、これは100%正確ではありたせん。プレむダヌは、䜓力レベルや匟薬レベルなどの他の芁因に基づいお決定を倉曎する堎合がありたす。これらの倀は蚘録されないため、予枬の粟床は䜎くなりたす。

Nグラム

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

これを行う 1 ぀の方法は、各入力 (キック、パンチ、ブロックなど) をバッファヌに保存し、バッファヌ党䜓をむベントずしお蚘録するこずです。プレむダヌがキック、キック、パンチを繰り返し抌しおスヌパヌデスフィスト攻撃を䜿甚するず、AI システムはすべおの入力をバッファヌに保存し、各ステップで最埌に䜿甚した 3 ぀を蚘憶したす。

ゲヌム AI の䜜成方法: 初心者向けガむド
(倪字郚分はプレむダヌがスヌパヌデスフィスト攻撃を発動したずきのセリフです。)

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

これらのむベントのシヌケンスは N グラムず呌ばれ、N は保存される芁玠の数です。前の䟋では、3 グラム (トラむグラム) でした。぀たり、最初の 5 ぀の゚ントリが XNUMX 番目の゚ントリを予枬するために䜿甚されたす。したがっお、XNUMX グラムでは、最初の XNUMX ぀の゚ントリが XNUMX 番目の゚ントリを予枬し、以䞋同様に続きたす。

開発者は N-gram のサむズを慎重に遞択する必芁がありたす。 N が小さいほど必芁なメモリは少なくなりたすが、保存される履歎も少なくなりたす。たずえば、2グラムバむグラムは、キック、キックたたはキック、パンチを蚘録したすが、キック、キック、パンチは保存できないため、AIはスヌパヌデスフィストのコンボに反応したせん。

䞀方、数字が倧きくなるほど倚くのメモリが必芁ずなり、遞択肢が増えるため AI の孊習が難しくなりたす。キック、パンチ、ブロックの 10 ぀の入力が可胜で、60 グラムを䜿甚した堎合、玄 XNUMX 通りのオプションが存圚するこずになりたす。

バむグラム モデルは単玔なマルコフ連鎖です。過去の状態ず珟圚の状態の各ペアはバむグラムであり、最初の状態に基づいお 3 番目の状態を予枬できたす。 XNUMX グラム以䞊の N グラムは、マルコフ連鎖ずしお芋るこずもできたす。マルコフ連鎖では、すべおの芁玠 (N グラムの最埌の芁玠を陀く) が䞀緒に最初の状態を圢成し、最埌の芁玠が XNUMX 番目の状態を圢成したす。栌闘ゲヌムの䟋では、キックずキックの状態からキックずパンチの状態に移行する可胜性を瀺しおいたす。耇数の入力履歎レコヌドを単䞀のナニットずしお扱うこずで、本質的には入力シヌケンスを党䜓の状態の䞀郚に倉換したす。これにより、マルコフ特性が埗られ、マルコフ連鎖を䜿甚しお次の入力を予枬し、次にどのようなコンボ動䜜が行われるかを掚枬できるようになりたす。

たずめ

人工知胜の開発においお最も䞀般的なツヌルずアプロヌチに぀いお話し合いたした。たた、それらを䜿甚すべき状況ず、特に圹立぀状況に぀いおも怜蚎したした。

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

  • ヒルクラむミング、募配降䞋法、遺䌝的アルゎリズムなどの最適化アルゎリズム
  • 競合怜玢/蚈画アルゎリズムミニマックスずアルファベヌタプルヌニング
  • 分類方法パヌセプトロン、ニュヌラルネットワヌク、サポヌトベクタヌマシン
  • ゚ヌゞェントの知芚ず蚘憶を凊理するシステム
  • AIぞのアヌキテクチャ的アプロヌチハむブリッドシステム、サブセットアヌキテクチャ、AIシステムを階局化するその他の方法
  • アニメヌションツヌルモヌションプランニングず調敎
  • パフォヌマンス芁因詳现レベル、い぀でもアルゎリズム、タむムスラむス

関連リ゜ヌス

1. GameDev.netは AIに関する蚘事やチュヌトリアルのセクションず фПруЌ.
2. 翻蚳元 ゲヌム AI 開発に関連する幅広いトピックに関する倚数のプレれンテヌションず蚘事が含たれおいたす。
3. GDC の金庫 GDC AI サミットのトピックが含たれおおり、その倚くは無料で利甚できたす。
4. 圹に立぀資料はりェブサむトでもご芧いただけたす AI ゲヌムプログラマヌギルド.
5. AI研究者兌ゲヌム開発者のトミヌ・トンプ゜ンはYouTubeで動画を制䜜しおいる AIずゲヌム 商甚ゲヌムにおける AI の説明ず研究。

このテヌマに関する曞籍:

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

ゲヌム AI プロ: ゲヌム AI プロフェッショナルの知恵の集倧成
ゲヌム AI プロ 2: ゲヌム AI プロフェッショナルの知恵の集倧成
ゲヌム AI プロ 3: ゲヌム AI プロフェッショナルの知恵の集倧成

2. AI Game Programming Wisdom シリヌズは、Game AI Pro シリヌズの前身です。叀い方法も含たれおいたすが、そのほずんどは今日でも有効です。

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

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

出所 habr.com

DDoS 保護機胜を備えた信頌性の高いサむト甚ホスティング、VPS VDS サヌバヌを賌入する 🔥 DDoS攻撃察策付きの信頌性の高いりェブサむトホスティング、VPS/VDSサヌバヌを賌入したしょう | ProHoster