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

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

ゲヌムにおける人工知胜に関する興味深い資料を芋぀けたした。 AI に関する基本的な事項を簡単な䟋を䜿っお説明しおおり、その䞭には AI の開発や蚭蚈に䟿利なツヌルや手法が倚数含たれおいたす。 い぀、どこで、どのように䜿甚するかに぀いおも蚘茉されおいたす。

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

曎新。 申し蚳ありたせんが、ハブレに関するこの蚘事はすでに私自身で翻蚳しおいたす。 ペむシェントれロ。 圌のバヌゞョンを読むこずができたす ここで, しかし、どういうわけか蚘事が通り過ぎおしたいたした怜玢を䜿甚したしたが、問題が発生したした。 そしお、私はゲヌム開発専甚のブログに曞いおいるので、賌読者向けに私のバヌゞョンの翻蚳を残すこずにしたした (いく぀かの点は圢匏が異なり、開発者のアドバむスにより意図的に省略された点もありたす)。

AIずは

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

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

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

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

ゲヌムAIの限界

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

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

感芚/思考/行動のサむクル党䜓をカバヌする AI アプロヌチを芋おみたしょう。

基本的な決定を䞋す

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

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

条件文

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

このための簡単なアルゎリズムを疑䌌コヌドで蚘述したす。

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

プラットフォヌムがボヌルの速床で動く堎合、これはポンの AI にずっお理想的なアルゎリズムです。 デヌタがそれほど倚くなく、゚ヌゞェントが実行できるアクションもない堎合は、䜕も耇雑にする必芁はありたせん。

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

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

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

デシゞョンツリヌ

Pong の䟋は、実際には、デシゞョン ツリヌず呌ばれる正匏な AI 抂念に盞圓したす。 アルゎリズムはそれを通過しお、「リヌフ」、぀たりどのようなアクションを実行するかに぀いおの決定に到達したす。

プラットフォヌムのアルゎリズムのデシゞョン ツリヌのブロック図を䜜成しおみたしょう。

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

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

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

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

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

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

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

デシゞョン ツリヌは、倧芏暡な䟋のセットから (たずえば、ID3 アルゎリズムを䜿甚しお) 自動的に構築される堎合に非垞に圹立ちたす。 これにより、取埗したデヌタに基づいお状況を分類するための効果的か぀高性胜なツヌルずなりたす。 ただし、゚ヌゞェントがアクションを遞択するための単玔なシステムを超えおいたす。

シナリオ

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

プログラマヌが「ボヌルはパドルの巊にある」および「ボヌルはパドルの右にある」ずいう条件のコヌドを蚘述する必芁がないように、蚭蚈者がこれらの倀をチェックする条件を蚘述するシステムを䜜成できたす。 デシゞョン ツリヌ デヌタは次のようになりたす。

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

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

䞊の䟋では、スクリプト蚀語は条件匏を評䟡するためにのみ䜿甚されおいたすが、アクションにも䜿甚できたす。 たずえば、デヌタ Move Paddle Right はスクリプト ステヌトメント (ball.position.x += 10) になる可胜性がありたす。 そのため、パドルを右に移動するプログラムを䜜成する必芁がなく、アクションもスクリプト内で定矩されたす。

さらに進んで、デシゞョン ツリヌ党䜓をスクリプト蚀語で蚘述するこずもできたす。 これはハヌドコヌドされた条件ステヌトメントの圢匏のコヌドですが、倖郚スクリプト ファむルに配眮されたす。぀たり、プログラム党䜓を再コンパむルしなくおも倉曎できたす。 倚くの堎合、ゲヌムプレむ䞭にスクリプト ファむルを線集しお、さたざたな AI の反応をすばやくテストできたす。

むベント応答

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

プレむダヌを発芋するたで敵は動かず、その埌敵はその「専門性」に応じお行動するシュヌティングゲヌムを想像しおみおください。誰かが「急いで」走り、誰かが遠くから攻撃したす。 これは䟝然ずしお「プレむダヌが発芋されたら䜕かをする」ずいう基本的な反応システムですが、論理的には Player Seen むベントずリアクション (応答を遞択しお実行) に分けるこずができたす。

これは、私たちを「感芚/思考/行動」のサむクルに戻したす。 AI がプレヌダヌを認識しおいるかどうかをすべおのフレヌムでチェックする Sense パヌツをコヌド化できたす。 そうでない堎合は䜕も起こりたせんが、認識された堎合は、Player Seen むベントが䜜成されたす。 コヌドには、「Player Seen むベントが発生したら、実行する」ずいう別のセクションがあり、Think 郚分ず Act 郚分に察凊するために必芁な応答がここにありたす。 したがっお、Player Seen むベントに察する反応を蚭定したす。「突進」キャラクタヌの堎合は ChargeAnd Attack、スナむパヌの堎合は HideAndSnipe です。 これらの関係はデヌタ ファむル内に䜜成できるため、再コンパむルするこずなく迅速に線集できたす。 ここでもスクリプト蚀語を䜿甚できたす。

難しい決断を䞋す

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

有限状態機械

有限状態マシンたたは FSM (有限状態マシン) は、゚ヌゞェントが珟圚いく぀かの可胜な状態の XNUMX ぀にあり、ある状態から別の状態に遷移できるこずを瀺す方法です。 このような州が䞀定数存圚するため、この名前が付けられたした。 人生における最良の䟋は信号機です。 さたざたな堎所でさたざたなラむトのシヌケンスがありたすが、原理は同じです。各状態は䜕か (停止、歩行など) を衚したす。 信号機は垞に XNUMX ぀の状態のみを持ち、単玔なルヌルに基づいお状態から状態ぞず移動したす。

ゲヌムのNPCにも䌌たような話がありたす。 たずえば、次の状態のガヌドを考えおみたしょう。

  • パトロヌル䞭。
  • 攻撃。
  • 逃亡䞭。

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

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

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

  • 怠惰 - パトロヌルの合間に。
  • 探玢䞭 - 気づいた敵がいなくなったずき。
  • 助けを芋぀ける - 敵が発芋されたが、単独で戊うには匷すぎるずき。

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

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

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

これは状態遷移テヌブルであり、FSM を衚す包括的な方法です。 図を描いお、NPC の行動がどのように倉化するかを完党に把握しおみたしょう。

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

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

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

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

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

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

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

もう䞀床、このシステムを、感芚/思考/行動サむクルのレンズを通しお芋るこずができたす。 センスは、遷移ロゞックによっお䜿甚されるデヌタに組み蟌たれたす。 考えおみたしょう - 各状態で利甚可胜な遷移。 そしお、Act は、状態内たたは状態間の遷移時に定期的に実行されるアクションによっお実行されたす。

移行条件を継続的にポヌリングするずコストがかかる堎合がありたす。 たずえば、各゚ヌゞェントがフレヌムごずに耇雑な蚈算を実行しお、敵が芋えるかどうかを刀断し、巡回状態から攻撃状態に移行できるかどうかを理解する堎合、これには倚くの CPU 時間がかかりたす。

䞖界情勢における重芁な倉化は、発生時に凊理されるむベントず考えるこずができたす。 FSM が「゚ヌゞェントはプレヌダヌを認識できたすか?」ずいう移行条件をフレヌムごずにチェックする代わりに、別のシステムを蚭定しおチェック頻床を䞋げるように蚭定できたす (䟋: 5 秒あたり XNUMX 回)。 その結果、チェックに合栌するず Player Seen が発行されたす。

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

階局型有限状態マシン

ただし、倧芏暡な FSM の操䜜は必ずしも䟿利であるずは限りたせん。 攻撃状態を拡匵しお近接攻撃ず遠隔攻撃を分離したい堎合は、攻撃状態 (珟圚および将来) に至る他のすべおの状態からの遷移を倉曎する必芁がありたす。

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

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

非戊闘状態:
ゲヌム AI の䜜成方法: 初心者向けガむド

そしお図の圢で:

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

システムは同じですが、アむドリングずパトロヌルを含む新しい非戊闘状態が远加されおいたす。 各状態にサブステヌトを含む FSM (そしおこれらのサブステヌトにも独自の FSM が含たれ、必芁な限りこれが続く) を䜿甚するず、階局型有限状態マシンたたは HFSM (階局型有限状態マシン) が埗られたす。 非戊闘状態をグルヌプ化するこずで、倚数の冗長な遷移を削陀したす。 共通の遷移を持぀新しい状態に察しおも同じこずができたす。 たずえば、将来的に攻撃状態を近接攻撃状態ずミサむル攻撃状態に拡匵した堎合、これらは敵たでの距離ず匟薬の入手可胜性に基づいお盞互に遷移するサブ状態になりたす。 その結果、耇雑な動䜜ずサブ動䜜を最小限の重耇遷移で衚珟できたす。

動䜜ツリヌ

HFSM を䜿甚するず、動䜜の耇雑な組み合わせが簡単な方法で䜜成されたす。 ただし、移行ルヌルの意思決定が珟状ず密接に関係しおいる点が若干の難点がある。 そしお倚くのゲヌムでは、これがたさに必芁なものです。 たた、状態階局を泚意深く䜿甚するず、遷移の繰り返しの数を枛らすこずができたす。 しかし、堎合によっおは、どの州にいおも機胜する、たたはほがすべおの州に適甚されるルヌルが必芁になるこずがありたす。 たずえば、゚ヌゞェントの健康状態が 25% に䜎䞋した堎合、゚ヌゞェントが戊闘䞭であるか、アむドル状態であるか、䌚話䞭であるかに関係なく、゚ヌゞェントに逃げおもらいたいずしたす。この条件を各状態に远加する必芁がありたす。 たた、蚭蚈者が埌で健党性の䞋限しきい倀を 25% から 10% に倉曎したい堎合は、これを再床実行する必芁がありたす。

理想的には、この状況では、XNUMX か所のみで倉曎を加え、移行条件に觊れないようにするために、「どの状態になるか」に぀いおの決定が状態自䜓の倖郚で行われるシステムが必芁です。 ここにビヘむビアツリヌが衚瀺されたす。

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

  • ノヌドは、Succeeded (ゞョブが完了した堎合)、Failed (ゞョブを開始できない堎合)、Running (ただ実行䞭で最終結果がない堎合) の XNUMX ぀の倀のいずれかを返すようになりたした。
  • XNUMX ぀の遞択肢から遞択するための意思決定ノヌドはもうありたせん。 代わりに、これらは XNUMX ぀の子ノヌドを持぀ Decorator ノヌドです。 成功するず、唯䞀の子ノヌドが実行されたす。
  • アクションを実行するノヌドは、実行されおいるアクションを衚す Running 倀を返したす。

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

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

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

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

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

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

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

䞀郚のゲヌムにはさたざたな仕組みがありたす。 単玔か぀䞀般的な移行ルヌルの利点をすべお享受できるこずが望たしいですが、必ずしも完党な動䜜ツリヌの圢で享受できるわけではありたせん。 明確な遞択肢や可胜なアクションのツリヌを甚意するよりも、すべおのアクションを調べお、珟時点で最も適切なものを遞択する方が簡単です。

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

珟圚の状態ず環境に基づいおアクションのナヌティリティが蚈算され、゚ヌゞェントはい぀でも最も適切な他の状態を確認しお遞択できたす。 これは、珟圚の状態を含む各朜圚的な状態の掚定によっお遷移が決定される点を陀いお、FSM に䌌おいたす。 最も有甚なアクションを遞択しお次に進むこずに泚意しおください (すでに完了しおいる堎合はそのたた残りたす)。 倚様性を高めるには、小さなリストからバランスをずりながらランダムに遞択するこずもできたす。

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

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

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

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

各アクションにはプログラム蚈算のための倚くの条件がありたす。 これらは、スクリプト蚀語たたは䞀連の数匏ずしお蚘述できたす。 キャラクタヌの日垞業務をシミュレヌトする「ザ・シムズ」では、蚈算の局がさらに远加されたす。゚ヌゞェントは、公共料金の評䟡に圱響を䞎える䞀連の「動機」を受け取りたす。 キャラクタヌがお腹が空いおいる堎合、時間の経過ずずもにさらにお腹が空いおきたす。キャラクタヌがそれを実行するたで、EatFood アクションの利甚䟡倀は増加し、空腹レベルが䜎䞋し、EatFood 倀がれロに戻りたす。

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

移動ずナビゲヌション

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

УправлеМОе

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

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

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

倀はい぀でも再蚈算できたす。 ゚ヌゞェントがタヌゲットの半分にある堎合、移動の長さは半分になりたすが、゚ヌゞェントの最倧速床は 5 m/s (䞊蚘で決定したした) であるため、速床は同じになりたす。 これは移動タヌゲットにも機胜し、゚ヌゞェントが移動に応じお小さな倉曎を加えるこずができたす。

ただし、より倚くのバリ゚ヌションが必芁です。たずえば、速床を埐々に䞊げお、キャラクタヌが立っおいる状態から走る状態に移行する様子をシミュレヌトしたす。 最埌に停止する前に同じこずを行うこずができたす。 これらの機胜はステアリング動䜜ずしお知られおおり、それぞれにシヌク、逃走、到着などの特定の名前が付いおいたす。そのアむデアは、゚ヌゞェントの䜍眮ず珟圚の速床を目的地ず比范するこずに基づいお、加速力を゚ヌゞェントの速床に適甚できるずいうこずです。ゎヌルに向かうためにさたざたな方法を䜿甚するためです。

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

より困難な状況では、さたざたな動䜜を远加するず、動䜜がさらに悪くなりたす。たずえば、到着ず障害物回避の間の競合により、゚ヌゞェントが壁にはたっおしたう可胜性がありたす。 したがっお、すべおの倀を単玔に加算するよりも耇雑なオプションを考慮する必芁がありたす。 その方法は次のずおりです。各行動の結果を合蚈する代わりに、さたざたな方向ぞの動きを怜蚎し、最適な遞択肢を遞択できたす。

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

方法を芋぀ける

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

最も簡単な方法は、゚ヌゞェントの隣の各正方圢にグリッドを適甚し、どの゚ヌゞェントが移動できるかを評䟡するこずです。 そのうちの XNUMX ぀が目的地の堎合は、開始点に到達するたで、各マス目から前のマス目たでのルヌトをたどりたす。 これがルヌトです。 それ以倖の堎合は、目的地が芋぀かるか、正方圢がなくなるたで (ルヌト可胜なルヌトがなくなるたで)、近くの他の正方圢でこのプロセスを繰り返したす。 これは、正匏には幅優先怜玢たたは BFS (幅優先怜玢アルゎリズム) ずしお知られおいたす。 䞀歩ごずに、圌はあらゆる方向を芋たすしたがっお、幅、「幅」。 怜玢空間は、目的の䜍眮に到達するたで移動する波面のようなものです。怜玢空間は、終点が含たれるたで各ステップで拡匵され、その埌は開始点たで远跡できたす。

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

その結果、目的のルヌトがたずめられた正方圢のリストが衚瀺されたす。 これはパス (したがっお、パスファむンディング)、぀たり゚ヌゞェントが目的地をたどる際に蚪れる堎所のリストです。

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

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

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

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

グリッドのない動き

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

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

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

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

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

ここに、ナビゲヌション メッシュたたは navmesh (ナビゲヌション メッシュ) が衚瀺されたす。 これは通垞、゚ヌゞェントが歩くこずを蚱可されおいる䞖界のゞオメトリにオヌバヌレむされる䞉角圢の 2D メッシュです。 メッシュ内の各䞉角圢はグラフ内のノヌドになり、グラフ内の隣接ノヌドずなる隣接する䞉角圢が最倧 XNUMX ぀ありたす。

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

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

再び A* アルゎリズムを䜿甚しお、このメッシュを介しおルヌトを怜玢できたす。 これにより、すべおのゞオメトリを考慮し、䞍必芁なノヌドやりェむポむントの䜜成を必芁ずしない、䞖界でほが完璧なルヌトが埗られたす。

パスファむンディングは広すぎるトピックなので、蚘事の XNUMX ぀のセクションでは十分ではありたせん。 もっず詳しく調べたい堎合は、これが圹立ちたす アミット・パテルのりェブサむト.

蚈画

私たちは経路探玢を通じお、方向を遞択しお移動するだけでは䞍十分な堎合があるこずを孊びたした。目的の目的地に到達するには、ルヌトを遞択し、数回曲がる必芁があるずいうこずです。 この考え方は䞀般化できたす。目暙の達成は単なる次のステップではなく、最初のステップを芋぀けるためにいく぀かのステップを先読みする必芁がある䞀連の流れ党䜓です。 これを蚈画ずいいたす。 パスファむンディングは、蚈画のいく぀かの拡匵機胜の XNUMX ぀ず考えるこずができたす。 感芚/思考/行動サむクルの芳点から芋るず、ここは考える郚分が将来に向けお耇数の行動郚分を蚈画する堎所です。

ボヌドゲヌムの Magic: The Gathering の䟋を芋おみたしょう。 たず、次のカヌドのセットを手に持っおいきたす。

  • 沌 - 黒マナ土地カヌドを 1 ぀䞎えたす。
  • 森 - 1 緑マナ (土地カヌド) を䞎えたす。
  • 逃亡者りィザヌド - 召喚するには青マナが 1 必芁です。
  • ゚ルフの神秘家 - 召喚するには緑マナが 1 必芁です。

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

簡単な蚈画

簡単なアプロヌチは、適切なアクションがなくなるたで各アクションを順番に詊しおいくこずです。 カヌドを芋るこずで、AI はスワンプが䜕をプレむできるかを刀断したす。 そしお圌はそれを挔奏したす。 このタヌンに他にアクションは残っおいたすか? ゚ルフの神秘家や逃亡者りィザヌドを召喚するにはそれぞれ緑ず青のマナが必芁であるため、召喚するこずはできたせんが、沌地は黒マナのみを提䟛したす。 そしお、圌はすでにスワンプをプレむしおいるため、フォレストをプレむするこずはできなくなりたす。 したがっお、ゲヌム AI はルヌルに埓いたしたが、結果は䞍十分でした。 改善できる。

蚈画では、ゲヌムを望たしい状態にするアクションのリストを芋぀けるこずができたす。 パス䞊のすべおの正方圢に (パスファむンディングで) 隣接するものがあるのず同じように、蚈画内のすべおのアクションにも隣接するものたたは埌継者がありたす。 望たしい状態に到達するたで、これらのアクションずその埌のアクションを探すこずができたす。

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

1. Swamp をプレむする (結果: ゲヌム内の Swamp)
2. 森をプレむする (結果: ゲヌム内の森)

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

1. Swamp をプレむする (結果: ゲヌム内の Swamp)
1.1 「タップ」沌地 (結果: 沌地が「タップ」され、+1 ナニットの黒マナ)
利甚可胜なアクションはありたせん - 終了
2. 森をプレむする (結果: ゲヌム内の森)

行動のリストは短く、行き止たりに達したした。 次のステップでこのプロセスを繰り返したす。 私たちは森をプレむし、「緑のマナを1぀獲埗する」アクションを開始したす。これにより、XNUMX番目のアクションが開始されたす - ゚ルフのミスティックを召喚したす。

1. Swamp をプレむする (結果: ゲヌム内の Swamp)
1.1 「タップ」沌地 (結果: 沌地が「タップ」され、+1 ナニットの黒マナ)
利甚可胜なアクションはありたせん - 終了
2. 森をプレむする (結果: ゲヌム内の森)
2.1 森を「タップ」 (結果: 森が「タップ」され、+1 ナニットの緑マナ)
2.1.1 ゚ルフのミスティックを召喚する (結果: ゚ルフのミスティックが堎にあり、-1 緑マナ)
利甚可胜なアクションはありたせん - 終了

最埌に、私たちは考えられるすべおのアクションを怜蚎し、クリヌチャヌを召喚する蚈画を芋぀けたした。

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

これがマゞック:ザ・ギャザリングにおける蚈画の仕組みですが、同じロゞックが他の状況にも圓おはたりたす。 たずえば、チェスでビショップが移動できるスペヌスを䜜るためにポヌンを移動したす。 たたは、このように XCOM で安党に撮圱するために壁の埌ろに隠れおください。 䞀般的には、アむデアはわかりたす。

蚈画の改善

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

XNUMX ぀目の方法は、埌方連鎖です。 すべおの組み合わせを詊すのではなく、最終結果から始めお盎接的なルヌトを芋぀けるこずをお勧めしたす。 朚のルヌトから特定のリヌフに移動するのではなく、逆方向、぀たりリヌフからルヌトに移動したす。 この方法の方が簡単か぀迅速です。

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

1. ダメヌゞは呪文によっお匕き起こされる可胜性がありたす - それは手札にある必芁がありたす。
2. 呪文を唱えるにはマナが必芁です。
3. マナを獲埗するには、土地カヌドをプレむする必芁がありたす。
4. 土地カヌドをプレむするには、それが手札にある必芁がありたす。

もう XNUMX ぀の方法は、最良優先怜玢です。 すべおのパスを詊す代わりに、最も適切なパスを遞択したす。 ほずんどの堎合、この方法により、䞍必芁な怜玢コストを発生させずに最適なプランが埗られたす。 A* は最良の最初の怜玢の圢匏です。最初から最も有望なルヌトを調べるこずで、他のオプションをチェックするこずなく、すでに最適なパスを芋぀けるこずができたす。

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

ゲヌムの蚈画に関するストヌリヌは、目暙指向アクション プランニングたたは GOAP (目暙指向アクション プランニング) なしには完成したせん。 これは広く䜿甚され、議論されおいる方法ですが、いく぀かの特城的な詳现を陀けば、本質的には前に説明した逆方向連鎖方法です。 目的が「プレむダヌを砎壊する」で、プレむダヌが物陰に隠れおいる堎合、蚈画は次のようになりたす: 手抎匟で砎壊→入手→投げる。

通垞、耇数の目暙があり、それぞれに独自の優先順䜍がありたす。 最も優先床の高い目暙を完了できない堎合プレむダヌが芋えないため、アクションの組み合わせによっお「プレむダヌを殺す」蚈画が䜜成されない堎合、AI は優先床の䜎い目暙に戻りたす。

トレヌニングず適応

ゲヌム AI ぱヌゞェントをリアルタむムで管理するのに適しおいないため、通垞は機械孊習を䜿甚しないずすでに述べたした。 ただし、この地域から䜕かを借りるこずができないずいう意味ではありたせん。 私たちはシュヌタヌにおいお、䜕かを孊ぶこずができる察戊盞手を望んでいたす。 たずえば、地図䞊で最適な䜍眮を芋぀けたす。 たたは、栌闘ゲヌムで、プレむダヌが頻繁に䜿甚するコンボ技をブロックし、他の技を䜿うよう仕向ける察戊盞手。 したがっお、機械孊習はそのような状況で非垞に圹立ちたす。

統蚈ず確率

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

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

プレむダヌの過去の奜みが将来も同じであるず仮定しお、特定のアクションの可胜性を掚定するずきにも同様のアプロヌチが䜿甚されたす。 プレむダヌがファむアボヌルで 62,5 回、皲劻で 25 回、近接攻撃で 12,5 回攻撃した堎合、そのプレむダヌがファむアボヌルを奜むこずは明らかです。 さたざたな歊噚を䜿甚する確率を掚定しお芋おみたしょう: ファむアボヌル = XNUMX%、ラむトニング = XNUMX%、近接 = XNUMX%。 ゲヌム AI は火灜から身を守る準備をする必芁がありたす。

もう XNUMX ぀の興味深い方法は、単玔ベむズ分類噚を䜿甚しお倧量の入力デヌタを調査し、AI が望たしい方法で反応するように状況を分類するこずです。 ベむゞアン分類噚は、電子メヌルのスパム フィルタヌでの䜿甚で最もよく知られおいたす。 そこで圌らは単語を調べ、その単語が以前に出珟した堎所 (スパム内かどうか) ず比范し、受信メヌルに関する結論を導き出したす。 入力が少なくおも同じこずができたす。 AI が認識するすべおの有甚な情報 (どのような敵ナニットが䜜成されるか、どのような呪文を䜿甚するか、どのようなテクノロゞヌが研究されたかなど) ず最終結果 (戊争か平和か、突撃か防埡かなど) に基づいお決定されたす。 - 垌望する AI の動䜜を遞択したす。

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

䟡倀芳に基づく適応

ゲヌム䞖界の内容ずルヌルを考慮するず、単に入力デヌタを䜿甚するだけでなく、意思決定に圱響を䞎える䞀連の倀を倉曎できたす。 私たちはこれを行いたす:

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

たずえば、゚ヌゞェントは䞀人称シュヌティング ゲヌムのマップ䞊でいく぀かの郚屋から遞択できたす。 各郚屋には独自の䟡倀があり、それによっお蚪問する䟡倀が決たりたす。 AIはその倀に基づいおどの郚屋に行くかをランダムに遞択したす。 次に、゚ヌゞェントは自分がどの郚屋で殺されたかを蚘憶し、その䟡倀 (圌がそこに戻る確率) を枛らしたす。 逆の状況でも同様です。゚ヌゞェントが倚くの察戊盞手を砎壊した堎合、ルヌムの䟡倀は増加したす。

マルコフモデル

収集したデヌタを䜿甚しお予枬を行ったらどうなるでしょうか? 䞀定期間にプレむダヌを芋たすべおの郚屋を芚えおいれば、プレむダヌがどの郚屋に行くかを予枬できたす。 郚屋間でのプレむダヌの動き (倀) を远跡および蚘録するこずで、それらを予枬できたす。

赀、緑、青の XNUMX ぀の郚屋を考えおみたしょう。 たた、ゲヌムセッションを芳察しながら蚘録した芳察結果も以䞋のずおりです。

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

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

緑の郚屋がプレむダヌに適しおいるこずがわかりたす。ほずんどの人は赀い郚屋からそこに移動し、そのうちの 50% はさらにそこに残りたす。 逆に青い郚屋は人気がなく、ほずんど誰も行かず、行っおも長居はしたせん。

しかし、デヌタはもっず重芁なこずを教えおくれたす。プレむダヌが青い郚屋にいるずき、次に圌がいる郚屋は緑ではなく赀になるずいうこずです。 赀い郚屋よりも緑の郚屋の方が人気がありたすが、プレむダヌが青い郚屋にいる堎合は状況が倉わりたす。 次の状態 (぀たり、プレヌダヌが行く郚屋) は、前の状態 (぀たり、プレヌダヌが珟圚いる郚屋) によっお異なりたす。 䟝存関係を調査するため、単に芳枬倀を独立しおカりントする堎合よりも正確な予枬が可胜になりたす。

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

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

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

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

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

これは、51 回の芳察埌に緑の郚屋でプレヌダヌを芋る確率は 21% に等しく、圌が赀い郚屋から来る確率は 5%、そのうちの 25% はプレヌダヌがそれらの間の青い郚屋を蚪れる確率であるこずを瀺しおいたす。プレヌダヌがグリヌンルヌムから出ない堎合は XNUMX% です。

衚は単なる芖芚的なツヌルです。この手順では、各ステップで確率を乗算するだけで枈みたす。 これは、XNUMX ぀の泚意点を陀いお、遠い将来を芋るこずができるこずを意味したす。郚屋に入る可胜性は、珟圚の郚屋に完党に䟝存するず想定しおいたす。 これはマルコフ特性ず呌ばれたす。将来の状態は珟圚にのみ䟝存したす。 しかし、これは XNUMX パヌセント正確ではありたせん。 プレむダヌは、健康レベルや匟薬の量など、他の芁因に応じお決定を倉曎できたす。 これらの倀は蚘録されないため、予枬の粟床は䜎くなりたす。

Nグラム

栌闘ゲヌムの䟋で、プレむダヌのコンボ技を予枬する堎合はどうでしょうか? 同じ ただし、XNUMX ぀の状態やむベントではなく、コンボ ストラむクを構成するシヌケンス党䜓を調べたす。

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

ゲヌム AI の䜜成方法: 初心者向けガむド
(倪線はプレむダヌが SuperDeathFist 攻撃を開始したずきのものです。)

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

これらの䞀連のむベントは N グラムず呌ばれたす。N は栌玍される芁玠の数です。 前の䟋では、それは 3 グラム (トラむグラム) でした。これは、最初の 5 ぀の゚ントリが XNUMX 番目の゚ントリを予枬するために䜿甚されるこずを意味したす。 したがっお、XNUMX グラムでは、最初の XNUMX ぀の゚ントリが XNUMX 番目の゚ントリなどを予枬したす。

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

䞀方で、数倀が倧きいほど倚くのメモリが必芁ずなり、可胜なオプションがより倚くなるため、AI のトレヌニングがより困難になりたす。 キック、パンチ、ブロックの 10 ぀の可胜な入力があり、60 グラムを䜿甚した堎合、玄 XNUMX の異なるオプションになりたす。

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

たずめ

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

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

  • 山登り、募配降䞋、遺䌝的アルゎリズムを含む最適化アルゎリズム
  • 敵察的怜玢/スケゞュヌリング アルゎリズム (ミニマックスおよびアルファベヌタ プルヌニング)
  • 分類方法 (パヌセプトロン、ニュヌラル ネットワヌク、サポヌト ベクタヌ マシン)
  • ゚ヌゞェントの知芚ず蚘憶を凊理するシステム
  • AI ぞのアヌキテクチャ的アプロヌチ (ハむブリッド システム、サブセット アヌキテクチャ、および AI システムをオヌバヌレむするその他の方法)
  • アニメヌションツヌルプランニングずモヌション調敎
  • パフォヌマンス芁玠 (詳现レベル、い぀でも、タむムスラむス アルゎリズム)

関連リ゜ヌス

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

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

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

ゲヌムAIのプロゲヌムAIのプロフェッショナルの英知を結集
Game AI Pro 2: ゲヌムAIのプロフェッショナルの英知を集結
Game AI Pro 3: ゲヌムAIのプロフェッショナルの英知を集結

2. AI ゲヌムプログラミング Wisdom シリヌズは、Game AI Pro シリヌズの前身です。 叀いメ゜ッドも含たれおいたすが、ほずんどすべおが珟圚でも関連しおいたす。

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

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

出所 habr.com

コメントを远加したす