Оюн AI кантип түзүү керек: үйрөнчүктөр үчүн колдонмо

Оюн AI кантип түзүү керек: үйрөнчүктөр үчүн колдонмо

Мен оюндарда жасалма интеллект тууралуу кызыктуу материалдарды таптым. Жөнөкөй мисалдарды колдонуу менен AI жөнүндө негизги нерселерди түшүндүрүү менен, анын ичинде аны ыңгайлуу иштеп чыгуу жана долбоорлоо үчүн көптөгөн пайдалуу куралдар жана ыкмалар бар. Аларды кантип, кайда жана качан колдонуу керектиги да бар.

Мисалдардын көбү псевдокоддо жазылган, ошондуктан эч кандай өркүндөтүлгөн программалоо билими талап кылынбайт. Кесиптин астында сүрөттөр жана gif сүрөттөрү бар 35 барак бар, андыктан даярданыңыз.

UPD. Мен кечирим сурайм, бирок мен Habré боюнча бул макаланы өзүмдүн котормоумду жасадым PatientZero. Анын вариантын окуй аласыз бул жерде, бирок эмнегедир макала мага өтүп кетти (мен издөөнү колдондум, бирок бир нерсе ката кетти). Мен оюнду өнүктүрүүгө арналган блогго жазып жаткандыктан, котормонун версиясын жазылуучуларга калтырууну чечтим (айрым пункттар башкача форматталган, айрымдары иштеп чыгуучулардын кеңеши боюнча атайылап алынып салынган).

AI деген эмне?

Оюн AI объект жайгашкан шарттарга жараша кандай аракеттерди жасоого багытталган. Бул адатта "акылдуу агент" башкаруу деп аталат, мында агент оюнчу мүнөзү, транспорт каражаты, бот же кээде абстракттуу бир нерсе: субъекттердин бүтүндөй тобу же цивилизация. Ар бир учурда ал өзүнүн чөйрөсүн көрүп, анын негизинде чечим чыгарып, ошого жараша иш алып барышы керек болгон нерсе. Бул сезүү/ой жүгүртүү/иш цикли деп аталат:

  • Сезим: Агент өзүнүн чөйрөсүндөгү анын жүрүм-турумуна таасир этиши мүмкүн болгон нерселер жөнүндө маалыматты табат же алат (жакын жердеги коркунучтар, чогулта турган нерселер, изилдөө үчүн кызыктуу жерлер).
  • Ойлонуңуз: Агент кандай реакция кылууну чечет (буюмдарды чогултуу жетиштүү коопсузбу же биринчи согушуу/жашыруу керекпи).
  • Акт: агент мурунку чечимди ишке ашыруу үчүн аракеттерди жасайт (душманга же объектке карай жылып баштайт).
  • ...азыр каармандардын аракетинен улам кырдаал өзгөрдү, ошондуктан цикл жаңы маалыматтар менен кайталанат.

AI циклдин Sense бөлүгүнө басым жасайт. Мисалы, автономдуу унаалар жолду сүрөткө тартып, аларды радар жана лидар маалыматтары менен бириктирип, чечмелешет. Бул, адатта, келген маалыматтарды иштетип, "сенден 20 ярд алдыда дагы бир машине бар" сыяктуу семантикалык маалыматты чыгарып турган машина үйрөнүү аркылуу ишке ашырылат. Бул классификация көйгөйлөрү деп аталат.

Оюндарга маалыматты алуу үчүн татаал системанын кереги жок, анткени маалыматтардын көбү анын ажырагыс бөлүгү болуп саналат. Алдыда душман бар же жок экенин аныктоо үчүн сүрөттү таануу алгоритмдерин иштетүүнүн кереги жок — оюн мурунтан эле билет жана чечим кабыл алуу процессине маалыматты түздөн-түз берет. Ошондуктан, циклдин Сезим бөлүгү көбүнчө "Ойлон жана аракет кыл" бөлүгүнө караганда алда канча жөнөкөй.

Оюндун AI чектөөлөрү

AI сакталышы керек болгон бир катар чектөөлөргө ээ:

  • AI машинаны үйрөнүү алгоритми сыяктуу, алдын ала үйрөтүүнүн кереги жок. Он миңдеген оюнчуларды көзөмөлдөө жана аларга каршы ойноонун эң жакшы жолун үйрөнүү үчүн иштеп чыгуу учурунда нейрон тармагын жазуунун мааниси жок. Неге? Анткени оюн чыга элек жана оюнчулар жок.
  • Оюн кызыктуу жана татаал болушу керек, ошондуктан агенттер адамдарга каршы эң жакшы ыкманы таппашы керек.
  • Оюнчулар чыныгы адамдарга каршы ойноп жаткандай сезилиши үчүн, агенттер реалдуу көрүнүшү керек. AlphaGo программасы адамдардан ашып түштү, бирок тандалган кадамдар оюндун салттуу түшүнүгүнөн абдан алыс болгон. Эгерде оюн адамдын атаандашын окшоштурса, анда бул сезим болбошу керек. Алгоритмди идеалдуу эмес, акылга сыярлык чечимдерди кабыл алуу үчүн өзгөртүү керек.
  • AI реалдуу убакытта иштеши керек. Бул алгоритм чечимдерди кабыл алуу үчүн узак убакытка CPU колдонууну монополия кыла албайт дегенди билдирет. Ал тургай 10 миллисекунд да өтө узун, анткени көпчүлүк оюндарга бардык процесстерди аткарып, кийинки графикалык кадрга өтүү үчүн 16-33 миллисекунд гана керектелет.
  • Идеалында, системанын жок дегенде бир бөлүгү маалыматтарга негизделген болушу керек, андыктан коддоочу эместер өзгөрүүлөрдү киргизип, оңдоолор тезирээк ишке ашат.

Келгиле, Сезим/Ойлон/Аракет циклин толугу менен камтыган AI ыкмаларын карап көрөлү.

Негизги чечимдерди кабыл алуу

Эң жөнөкөй оюндан баштайлы - Понг. Максат: калакты кыймылдатып, топ анын жанынан учуп кетпей, андан секирет. Бул теннис сыяктуу, топту сүзбөсө утулуп каласың. Бул жерде AI салыштырмалуу жеңил милдети бар - платформаны кайсы багытта жылдырууну чечет.

Оюн AI кантип түзүү керек: үйрөнчүктөр үчүн колдонмо

Шарттуу билдирүүлөр

Понгдогу AI үчүн эң айкын чечим - ар дайым платформаны топтун астына коюуга аракет кылуу.

Бул үчүн жөнөкөй алгоритм, псевдокоддо жазылган:

оюн иштеп жатканда ар бир кадр/жаңыртуу:
эгерде топ калактын сол жагында болсо:
калакты солго жылдыруу
эгерде топ калактын оң жагында болсо:
калакты оңго жылдыруу

Эгерде платформа топтун ылдамдыгы менен кыймылдаса, анда бул Понгдогу AI үчүн идеалдуу алгоритм. Эгерде агент үчүн өтө көп маалымат жана мүмкүн болгон аракеттер жок болсо, эч нерсени татаалдаштыруунун кереги жок.

Бул ыкма ушунчалык жөнөкөй болгондуктан, Сезүү/Ойлонуу/Аракет цикли дээрлик байкалбайт. Бирок ал жерде:

  • Сезим бөлүгү эки if билдирүүдөн турат. Оюн топтун жана платформанын кайда экенин билет, андыктан AI бул маалыматты издейт.
  • Ойлоо бөлүгү да эки if билдирүүсүнө кирет. Алар бул учурда бири-бирин жокко чыгарган эки чечимди камтыйт. Натыйжада, үч аракеттин бири тандалды - платформаны солго жылдырыңыз, оңго жылдырыңыз же ал мурунтан эле туура жайгашкан болсо, эч нерсе кылбаңыз.
  • Актынын бөлүгү Калакты Солго жылдыруу жана Калакты Оңго жылдыруу билдирүүлөрүндө кездешет. Оюндун дизайнына жараша алар платформаны дароо же белгилүү бир ылдамдыкта жылдыра алышат.

Мындай ыкмалар реактивдүү деп аталат - дүйнөнүн учурдагы абалына реакция кылган жана чара көрүүчү жөнөкөй эрежелердин жыйындысы (бул учурда коддогу билдирүүлөр) бар.

Чечим дарагы

Понг мисалы чындыгында чечим дарагы деп аталган расмий AI концепциясына барабар. Алгоритм "жалбыракка" жетүү үчүн ал аркылуу өтөт - кандай иш-аракет кылуу керектиги жөнүндө чечим.

Биздин платформанын алгоритми үчүн чечим дарагынын блок диаграммасын түзөлү:

Оюн AI кантип түзүү керек: үйрөнчүктөр үчүн колдонмо

Дарактын ар бир бөлүгү түйүн деп аталат - AI мындай структураларды сүрөттөө үчүн график теориясын колдонот. түйүндөрдүн эки түрү бар:

  • Чечим кабыл алуу түйүндөрү: кандайдыр бир шартты сынап көрүүнүн негизинде эки альтернативанын арасынан тандоо, мында ар бир альтернатива өзүнчө түйүн катары көрсөтүлөт.
  • Аяккы түйүндөр: акыркы чечимди билдирген аткарыла турган иш-аракет.

Алгоритм биринчи түйүндөн (дарактын "тамыры") башталат. Ал же кайсы бала түйүнгө өтүүнү чечет, же түйүндө сакталган аракетти аткарып, чыгат.

Чечим дарагынын мурунку бөлүмдөгү if билдирүүлөрү сыяктуу эле ишти аткарышынын кандай пайдасы бар? Бул жерде ар бир чечимдин бир гана шарты жана эки мүмкүн болуучу натыйжасы бар жалпы система бар. Бул иштеп чыгуучуга аны катуу коддобостон дарактагы чечимдерди билдирген маалыматтардан AI түзүүгө мүмкүндүк берет. Аны таблица түрүндө берели:

Оюн AI кантип түзүү керек: үйрөнчүктөр үчүн колдонмо

Код тарабында сиз саптарды окуу тутумун аласыз. Алардын ар бири үчүн түйүн түзүңүз, экинчи мамычанын негизинде чечим логикасын жана үчүнчү жана төртүнчү мамычалардын негизинде бала түйүндөрдү туташтырыңыз. Сиз дагы эле шарттарды жана аракеттерди программалоо керек, бирок азыр оюндун түзүмү татаалыраак болот. Бул жерде сиз кошумча чечимдерди жана аракеттерди кошуп, андан кийин дарактын аныктамасынын текст файлын жөн эле түзөтүү менен бүт AIны ыңгайлаштырыңыз. Андан кийин, сиз файлды оюн дизайнерине өткөрүп бересиз, ал оюнду кайра түзбөстөн же кодду өзгөртпөстөн жүрүм-турумун өзгөртө алат.

Чечим дарактары мисалдардын чоң топтомунан автоматтык түрдө курулганда абдан пайдалуу (мисалы, ID3 алгоритмин колдонуу). Бул аларды алынган маалыматтардын негизинде кырдаалдарды классификациялоо үчүн эффективдүү жана жогорку натыйжалуу куралга айлантат. Бирок, биз агенттерге аракеттерди тандоо үчүн жөнөкөй системанын чегинен чыгабыз.

жагдайлар

Биз алдын ала түзүлгөн шарттарды жана аракеттерди колдонгон чечим дарагынын системасын талдап чыктык. AI иштеп жаткан адам даракты каалагандай уюштура алат, бирок ал баары бир программалаган кодерге таянышы керек. Эгерде биз дизайнерге өз шарттарын же аракеттерин түзүү үчүн куралдарды бере алсакчы?

Программист Is Ball Left Of Paddle жана Is Ball Right Of Paddle шарттарына код жазууга милдеттүү болбошу үчүн, ал дизайнер бул маанилерди текшерүү үчүн шарттарды жаза турган системаны түзө алат. Андан кийин чечим дарагынын маалыматтары мындай болот:

Оюн AI кантип түзүү керек: үйрөнчүктөр үчүн колдонмо

Бул биринчи таблицадагыдай эле, бирок чечимдердин өз коду бар, бир аз if операторунун шарттуу бөлүгүнө окшош. Код тарабында бул чечим түйүндөрүнүн экинчи тилкесинде окулат, бирок аткаруу үчүн белгилүү бир шартты издөөнүн ордуна (Is Ball Left Of Paddle), ал шарттуу туюнтманы баалайт жана ошого жараша чын же жалганды кайтарат. Бул Lua же Angelscript скрипт тили аркылуу жасалат. Аларды колдонуу менен иштеп чыгуучу өзүнүн оюнуна объекттерди (топ жана калак) алып, сценарийде жеткиликтүү болгон өзгөрмөлөрдү түзө алат (ball.position). Ошондой эле скрипт тили C++ тилине караганда жөнөкөй. Ал толук компиляция этабын талап кылбайт, ошондуктан ал оюн логикасын тез тууралоо үчүн идеалдуу жана "кодер эместерге" керектүү функцияларды өздөрү түзүүгө мүмкүндүк берет.

Жогорудагы мисалда скрипт тили шарттуу туюнтманы баалоо үчүн гана колдонулат, бирок ал аракеттер үчүн да колдонулушу мүмкүн. Мисалы, Move Paddle Right маалыматы скрипт билдирүүсү болуп калышы мүмкүн (ball.position.x += 10). Ошентип, иш-аракет скриптте да аныкталат, Move Paddle Right программасынын кереги жок.

Сиз андан да ары барып, бүт чечим дарагын скрипт тилинде жаза аласыз. Бул катуу коддолгон шарттуу билдирүүлөр түрүндөгү код болот, бирок алар тышкы скрипт файлдарында жайгашат, башкача айтканда, аларды бүтүндөй программаны кайра компиляциялоосуз эле өзгөртүүгө болот. Ар кандай AI реакцияларын тез сынап көрүү үчүн оюн учурунда скрипт файлын көп өзгөртө аласыз.

Окуяга жооп

Жогорудагы мисалдар Понг үчүн идеалдуу. Алар тынымсыз Сезим/Ойлон/Арак циклин иштетип, дүйнөнүн акыркы абалына таянып иш-аракет кылышат. Ал эми татаал оюндарда сиз жеке окуяларга жооп беришиңиз керек жана бардыгын бир эле учурда баалоо керек эмес. Бул учурда Pong буга чейин эле жаман үлгү болуп саналат. Башкасын тандайлы.

Аткычты элестетип көргүлө, ал жерде душмандар оюнчуну байкамайынча кыймылдабай турушат, андан кийин алар өздөрүнүн “адистигине” жараша аракеттенет: кимдир бирөө “шашууга” чуркайт, бирөө алыстан кол салат. Бул дагы эле негизги реактивдүү система - "эгерде оюнчу байкалса, бир нерсе кыл" - бирок аны логикалык жактан Player Seen окуясына жана Реакцияга бөлсө болот (жоопту тандап, аны аткарыңыз).

Бул бизди Сезим/Ойлонуу/Иш-аракет циклине кайтарат. Биз Sense бөлүгүн коддой алабыз, ал ар бир кадрды AI ойноткучту көрүп жатканын текшерет. Болбосо, эч нерсе болбойт, бирок ал көрүп калса, анда Player Seen окуясы түзүлөт. Коддун өзүнчө бөлүмү болот, анда "Оюнчу көргөн окуясы пайда болгондо, кыл" деген жооп кайда, ойлон жана аракет бөлүктөрүн чечүү керек. Ошентип, сиз Player Seen окуясына реакцияларды орнотосуз: "шашып бараткан" каарман үчүн - ChargeAndAttack жана снайпер үчүн - HideAndSnipe. Бул мамилелерди кайра компиляциялоосуз тез оңдоо үчүн маалымат файлында түзсө болот. Скрипт тилин бул жерде да колдонсо болот.

Оор чечимдерди кабыл алуу

Жөнөкөй реакция системалары абдан күчтүү болгону менен, алар жетишсиз болгон жагдайлар көп. Кээде агент учурда эмне кылып жатканына жараша ар кандай чечимдерди кабыл алышыңыз керек, бирок муну шарт катары элестетүү кыйын. Кээде аларды чечим дарагында же сценарийде натыйжалуу көрсөтүү үчүн өтө көп шарттар бар. Кээде кийинки кадамды чечүүдөн мурун кырдаал кандай өзгөрөрүн алдын ала баалоо керек. Бул көйгөйлөрдү чечүү үчүн дагы татаал ыкмалар керек.

Чектүү абал машинасы

Чектүү мамлекеттик машина же FSM (чектүү мамлекеттик машина) биздин агент учурда бир нече мүмкүн болгон мамлекеттердин биринде жана ал бир абалдан экинчисине өтө алат деп айтуунун бир жолу. Андай штаттардын белгилүү бир саны бар — аты ушундан. Турмуштан эң сонун мисал – жол чырак. Ар кайсы жерлерде жарыктардын ар кандай ырааттуулугу бар, бирок принцип бирдей - ар бир абал бир нерсени билдирет (токтоо, басуу ж.б.). Жол чырак каалаган убакта бир гана абалда болот жана жөнөкөй эрежелердин негизинде биринен экинчисине жылат.

Бул оюндардагы NPCлер менен окшош окуя. Мисалы, төмөнкү мамлекеттер менен кароолду алалы:

  • Патрулдоо.
  • чабуул.
  • качып.

Ал эми анын абалын өзгөртүү үчүн бул шарттар:

  • Кароолчу душманды көрсө, кол салат.
  • Кароолчу чабуулга өтүп, бирок душманды көрбөй калса, кайра күзөткө чыгат.
  • Кароолчу кол салса, бирок катуу жарадар болсо, качып кетет.

Сиз ошондой эле камкорчу абалынын өзгөрмөлүүлүгү жана ар кандай текшерүүлөр менен if-билдирүүлөрүн жазсаңыз болот: жакын жерде душман барбы, NPC ден соолук деңгээли кандай жана башкалар. Дагы бир нече абалды кошолу:

  • Бекерлик - патрулдардын ортосунда.
  • Издөө - байкалган душман жок болгондо.
  • Жардам табуу - душман байкалып, бирок жалгыз күрөшүү үчүн өтө күчтүү болгондо.

Алардын ар бири үчүн тандоо чектелген - мисалы, сакчы ден соолугу начар болсо, жашыруун душманды издеп барбайт.

Анткени, "эгер" дегендердин чоң тизмеси бар. , Ошол "өтө түйшүктүү болуп калышы мүмкүн, ошондуктан биз мамлекеттердин ортосундагы мамлекеттерди жана өткөөлдөрдү эсибизде сактоого мүмкүндүк берген ыкманы расмийлештирүүбүз керек. Бул үчүн биз бардык штаттарды эсепке алып, ар бир штаттын астында башка мамлекеттерге өтүүнүн баарын тизмеге жазып, аларга керектүү шарттарды жазабыз.

Оюн AI кантип түзүү керек: үйрөнчүктөр үчүн колдонмо

Бул мамлекеттик өткөөл стол - FSM өкүлү үчүн комплекстүү жолу. Келгиле, диаграмманы сызып, NPC жүрүм-туруму кандайча өзгөрөрүн толук карап көрөлү.

Оюн AI кантип түзүү керек: үйрөнчүктөр үчүн колдонмо

Диаграмма учурдагы кырдаалдын негизинде бул агент үчүн чечим кабыл алуунун маңызын чагылдырат. Андан тышкары, ар бир жебе, эгерде анын жанындагы шарт чын болсо, мамлекеттердин ортосундагы өтүүнү көрсөтөт.

Ар бир жаңыртуу биз агенттин учурдагы абалын текшерип, өткөөлдөрдүн тизмесин карап чыгабыз жана өтүү шарттары аткарылса, ал жаңы абалды кабыл алат. Мисалы, ар бир кадр 10 секунддук таймердин мөөнөтү бүткөнүн текшерет, эгерде ошондой болсо, анда күзөт Бош абалдан Патрулдукка өтөт. Ошол сыяктуу эле, Чабуулчу мамлекет агенттин ден соолугун текшерет - эгерде ал төмөн болсо, анда ал Качуучу абалга өтөт.

Бул мамлекеттердин ортосундагы өткөөлдөрдү жөнгө салуу, бирок мамлекеттердин өздөрү менен байланышкан жүрүм-турум жөнүндө эмне айтууга болот? Белгилүү бир мамлекет үчүн иш жүзүндөгү жүрүм-турумду ишке ашыруу жагынан, адатта, FSMге иш-аракеттерди тапшырган "илмектин" эки түрү бар:

  • Учурдагы абал үчүн мезгил-мезгили менен аткарып турган иш-аракеттер.
  • Бир абалдан экинчи абалга өткөндө жасаган иш-аракеттерибиз.

Биринчи түрү үчүн мисалдар. Патрулдук мамлекет агентти патрулдук маршрут боюнча ар бир кадрга жылдырат. Чабуулчу мамлекет ар бир кадрда чабуулду баштоого аракет кылат же бул мүмкүн болгон абалга өтөт.

Экинчи түрү үчүн, өтүүнү карап көрөлү "эгер душман көрүнсө жана душман өтө күчтүү болсо, анда жардам табуу абалына өтүңүз. Агент жардам үчүн кайда барарын тандап, бул маалыматты сактоого тийиш, ошондо Жардамды табуу абалы кайда барарын билет. Жардам табылгандан кийин, агент чабуулчу абалга кайтып келет. Бул учурда, ал союздашына коркунуч жөнүндө айткысы келет, андыктан NotifyFriendOfThreat аракети пайда болушу мүмкүн.

Дагы бир жолу, биз бул системаны Сезим/Ойлон/Аракет циклинин линзасы аркылуу карай алабыз. Сезим өтүү логикасы колдонгон маалыматтарда камтылган. Ойлонуу - ар бир штатта бар өтүү. Ал эми Акт мезгил-мезгили менен мамлекеттин ичинде же мамлекеттердин ортосундагы өткөөл мезгилде аткарылуучу иш-аракеттер менен ишке ашырылат.

Кээде үзгүлтүксүз шайлоо өткөрүү шарттары кымбат болушу мүмкүн. Мисалы, эгерде ар бир агент душмандарды көрө алабы же жокпу аныктоо үчүн ар бир кадр татаал эсептөөлөрдү жүргүзсө жана Патрулдоо абалынан Чабуул абалына өтө алабы же жокпу түшүнсө, бул процессордун көп убактысын талап кылат.

Дүйнөнүн абалындагы маанилүү өзгөрүүлөрдү, алар болуп өткөн сайын иштетиле турган окуялар катары кароого болот. FSM өткөөл шартын текшерүүнүн ордуна "менин агентим оюнчуну көрө алабы?" Ар бир кадр, өзүнчө системаны азыраак текшерүү үчүн конфигурациялоого болот (мисалы, секундасына 5 жолу). Натыйжада, текшерүү өткөндө Player Seen чыгарылат.

Бул FSMге өткөрүлүп берилет, ал эми Player Seen окуясынын кабыл алынган шартына барып, ошого жараша жооп бериши керек. Натыйжадагы жүрүм-турум жооп бергенге чейин дээрлик байкалбаган кечигүүнү эске албаганда, бирдей. Бирок Sense бөлүгүн программанын өзүнчө бөлүгүнө бөлүүнүн натыйжасында аткаруу жакшырды.

Иерархиялык чектүү абал машинасы

Бирок, чоң FSMs менен иштөө дайыма эле ыңгайлуу боло бербейт. Эгерде биз MeleeAttacking жана RangedAttackingди бөлүү үчүн чабуул абалын кеңейтүүнү кааласак, анда биз башка бардык мамлекеттерден Atacking абалына (учурдагы жана келечектеги) алып баруучу өткөөлдөрдү өзгөртүүгө туура келет.

Биздин мисалда кайталанма өтүүлөр көп экенин байкасаңыз керек. Бош турган абалдагы өткөөлдөрдүн көбү Патрулдук абалындагы өтүүлөргө окшош. Айрыкча дагы окшош мамлекеттерди кошсок, кайталанбай эле койсок жакшы болмок. Бош жүрүү жана Патрулдукту "согуштук эмес" деген жалпы белгинин астында топтоо мааниси бар, мында согуштук мамлекеттерге өтүүнүн бир гана жалпы жыйындысы бар. Эгерде биз бул белгини мамлекет деп ойлосок, анда Бош жүрүү жана Патрулдоо субстанцияга айланат. Жаңы согуштук эмес субстанция үчүн өзүнчө өткөөл таблицаны колдонуунун мисалы:

Негизги мамлекеттер:
Оюн AI кантип түзүү керек: үйрөнчүктөр үчүн колдонмо

Согуштан тышкары абалы:
Оюн AI кантип түзүү керек: үйрөнчүктөр үчүн колдонмо

Ал эми диаграмма түрүндө:

Оюн AI кантип түзүү керек: үйрөнчүктөр үчүн колдонмо

Бул ошол эле система, бирок Бош жүрүү жана Патрулдукту камтыган жаңы согуштук эмес абал менен. Субстанциялары бар FSM камтыган ар бир штат менен (жана бул субстанциялар өз кезегинде өз FSM'лерин камтыган - жана сиз керек болгон убакытка чейин) биз Иерархиялык Чектүү Мамлекет Машинасын же HFSM (иерархиялык чектүү мамлекеттик машина) алабыз. Согуштук эмес абалды топтоо менен биз ашыкча өткөөлдөрдүн бир тобун кесип салдык. Биз жалпы өткөөлдөрү бар ар кандай жаңы мамлекеттер үчүн ушундай кыла алабыз. Мисалы, келечекте биз Чабуулчу мамлекетти Melee Attacking жана Missile Attacking мамлекеттерине кеңейтсек, алар душманга чейинки аралыкка жана ок-дарылардын болушуна жараша бири-бирине өтүүчү субстанциялар болот. Натыйжада, татаал жүрүм-турум жана суб-жүрүм-турум кайталанма өтүүлөрдүн минималдуу менен көрсөтүлүшү мүмкүн.

Жүрүм-турум дарагы

HFSM менен жүрүм-турумдун татаал айкалыштары жөнөкөй жол менен түзүлөт. Бирок, өткөөл эрежелер түрүндө чечим кабыл алуу азыркы абал менен тыгыз байланышта болгон бир аз кыйынчылык бар. Жана көптөгөн оюндарда дал ушул нерсе керек. Ал эми мамлекеттик иерархияны кылдат колдонуу өткөөл кайталоолордун санын азайтышы мүмкүн. Бирок кээде сизге кайсы штатта болсоңуз да иштей турган же дээрлик бардык штаттарда колдонула турган эрежелер керек болот. Мисалы, эгерде агенттин ден соолугу 25% га төмөндөсө, анын согушта, бош жүргөнүнө же сүйлөп жатканына карабастан качып кетишин каалайсыз - бул шартты ар бир штатка кошууга туура келет. Ал эми кийинчерээк дизайнериңиз ден-соолуктун төмөн чегин 25% дан 10% га чейин өзгөрткүсү келсе, анда бул дагы бир жолу жасалышы керек.

Идеалында, бул кырдаал бир жерде гана өзгөртүү киргизүү жана өткөөл шарттарына тийбеш үчүн, "кандай абалда болуу" жөнүндө чечимдер штаттардан тышкары болгон системаны талап кылат. Бул жерде жүрүм-турум дарактары пайда болот.

Аларды ишке ашыруунун бир нече жолдору бар, бирок маңызы бардыгы үчүн болжол менен бирдей жана чечим дарагына окшош: алгоритм “тамыр” түйүнүнөн башталат, ал эми дарактын курамында чечимдерди же аракеттерди билдирген түйүндөр бар. Бирок, бир нече негизги айырмачылыктар бар:

  • Түйүндөр эми үч маанинин бирин кайтарат: Ийгиликтүү (эгер жумуш бүтсө), Ийгиликсиз (эгерде аны баштоо мүмкүн болбосо) же Иштеп жатат (эгерде ал дагы эле иштеп жатса жана акыркы жыйынтык жок болсо).
  • Эки альтернативанын ортосунда тандоо үчүн чечим түйүндөрү жок. Анын ордуна, алар бир бала түйүнү бар Decorator түйүндөрү. Эгер алар ийгиликке жетсе, алар жалгыз бала түйүнүн аткарышат.
  • Аракеттерди аткарган түйүндөр аткарылып жаткан аракеттерди көрсөтүү үчүн Running маанисин кайтарат.

Бул кичинекей түйүндөр комплекси көп сандагы татаал жүрүм-турумду түзүү үчүн бириктирилиши мүмкүн. Келгиле, мурунку мисалдагы HFSM күзөтчүсүн жүрүм-турум дарагы катары элестетип көрөлү:

Оюн AI кантип түзүү керек: үйрөнчүктөр үчүн колдонмо

Бул түзүм менен Бош / Патрулдук мамлекеттерден Кол салууга же башка мамлекеттерге ачык өтүү болбошу керек. Эгер душман көрүнсө жана каармандын ден соолугу начар болсо, аткаруу мурда кайсы түйүндөн аткарылганына карабастан - Качуучу түйүндө токтойт - Патрулдоо, Бош жүрүү, Чабуулдоо же башка.

Оюн AI кантип түзүү керек: үйрөнчүктөр үчүн колдонмо

Жүрүм-турум дарактары татаал - аларды түзүүнүн көптөгөн жолдору бар жана жасалгалоочулар менен татаал түйүндөрдүн туура айкалышын табуу кыйынга турушу мүмкүн. Даракты канчалык тез-тез текшерип туруу керек деген суроолор да бар - биз анын ар бир бөлүгүн карап көргүбүз келеби же шарттардын бири өзгөргөндө ганабы? Түйүндөргө тиешелүү абалды кантип сактайбыз - 10 секунд бою иштебей турганыбызды кайдан билебиз же ырааттуулукту туура иштетүү үчүн акыркы жолу кайсы түйүндөр аткарылганын кантип билебиз?

Ошондуктан көптөгөн ишке ашыруулар бар. Мисалы, кээ бир системалар декоратор түйүндөрүн саптагы жасалгалоочулар менен алмаштырышкан. Декоратордун шарттары өзгөргөндө алар даракты кайра баалайт, түйүндөрдү бириктирүүгө жардам беришет жана мезгил-мезгили менен жаңыртып турушат.

Утилитага негизделген система

Кээ бир оюндар көп түрдүү механика бар. Жөнөкөй жана жалпы өтүү эрежелеринин бардык артыкчылыктарын алганы жакшы, бирок сөзсүз түрдө жүрүм-турумдун толук дарагы түрүндө эмес. Так тандоолордун же мүмкүн болуучу аракеттердин дарагынын ордуна, бардык аракеттерди карап чыгып, учурда эң ылайыктуусун тандоо оңой.

Утилита негизделген система ушуга жардам берет. Бул агенттин ар кандай аракеттери бар жана ар биринин салыштырмалуу пайдалуулугуна жараша кайсынысын аткарууну тандаган система. Бул жерде пайдалуулук агент үчүн бул иш-аракетти аткаруу канчалык маанилүү же каалаарлык деген ыктыярдуу өлчөм болуп саналат.

Учурдагы абалга жана чөйрөгө негизделген аракеттин эсептелген пайдалуулугу, агент каалаган убакта башка эң ылайыктуу абалды текшерип, тандай алат. Бул өткөөл ар бир потенциалдуу абалга, анын ичинде учурдагы абалга баа берүү менен аныкталбаган учурларды кошпогондо, FSMге окшош. Көңүл буруңуз, биз улантуу үчүн эң пайдалуу аракетти тандайбыз (же бүтүргөн болсок, калыңыз). Көбүрөөк ар түрдүүлүк үчүн, бул кичинекей тизмеден тең салмактуу, бирок кокус тандоо болушу мүмкүн.

Система пайдалуу маанилердин ыктыярдуу диапазонун дайындайт — мисалы, 0дөн (толугу менен жагымсыз) 100гө чейин (толугу менен каалаган). Ар бир аракет бул маанини эсептөөгө таасир этүүчү бир катар параметрлерге ээ. Биздин камкорчу мисалга кайрылып:

Оюн AI кантип түзүү керек: үйрөнчүктөр үчүн колдонмо

Иш-аракеттердин ортосундагы өтүүлөр эки ача болуп саналат - ар бир мамлекет башкасын ээрчий алат. Иш-аракеттердин артыкчылыктары кайтарылган утилита маанилеринде табылган. Эгер душман көрүнсө жана ал душман күчтүү болсо жана каармандын ден соолугу начар болсо, анда Fleeing жана FindingHelp экөө тең нөл эмес жогорку маанилерди кайтарышат. Бул учурда, FindingHelp ар дайым жогору болот. Ошо сыяктуу эле, согуштук эмес иш-аракеттер эч качан 50дөн ашык эмес, ошондуктан алар ар дайым согуштук аракеттерден төмөн болот. Иш-аракеттерди түзүүдө жана алардын пайдалуулугун эсептөөдө муну эске алуу керек.

Биздин мисалда, иш-аракеттер туруктуу туруктуу маанини же эки туруктуу маанинин бирин кайтарат. Чыныгыраак система баалардын үзгүлтүксүз диапазонунан баа берет. Мисалы, Качуу аракети агенттин ден соолугу начар болсо, жогорку пайдалуу маанилерди кайтарат, ал эми душман өтө күчтүү болсо, чабуул аракети төмөнкү пайдалуу маанилерди кайтарат. Ушундан улам, агент душманды жеңүүгө ден-соолугу жетишсиз деп ойлогон бардык кырдаалда, Качуу аракети чабуулга караганда артыкчылыкка ээ болот. Бул иш-аракеттерди ар кандай критерийлердин негизинде артыкчылыктуу болууга мүмкүндүк берет, бул ыкманы жүрүм-турум дарагына же FSMге караганда ийкемдүү жана өзгөрмөлүү кылат.

Ар бир аракетте программаны эсептөө үчүн көптөгөн шарттар бар. Алар скрипт тилинде же бир катар математикалык формулалар катары жазылышы мүмкүн. Каармандын күнүмдүк тартибин окшоштурган Sims кошумча эсептөө катмарын кошот - агент пайдалуу кызматтардын рейтингине таасир этүүчү бир катар "мотивацияларды" алат. Эгерде каарман ачка болсо, убакыттын өтүшү менен алар дагы ачка болуп калышат жана EatFood аракетинин пайдалуулук мааниси каарман аны аткарганга чейин жогорулап, ачкачылыктын деңгээлин төмөндөтүп, EatFood маанисин нөлгө кайтарат.

Рейтинг системасынын негизинде иш-аракеттерди тандоо идеясы абдан жөнөкөй, ошондуктан Utility-негизделген система аларды толук алмаштыруу катары эмес, AI чечимдерди кабыл алуу процесстеринин бир бөлүгү катары колдонулушу мүмкүн. Чечим дарагы эки кошумча түйүндөрдүн пайдалуулук рейтингин сурап, жогорураакын тандашы мүмкүн. Ошо сыяктуу эле, жүрүм-турум дарагында кайсы баланы аткарууну чечүүдө иш-аракеттердин пайдалуулугун баалоо үчүн композиттик Utility түйүнү болушу мүмкүн.

Кыймыл жана навигация

Мурунку мисалдарда биз солго же оңго жылган платформабыз жана күзөтчү же кол салган күзөтчүбүз болчу. Бирок биз агент кыймылын кайсы бир убакыттын ичинде так кантип чечебиз? Кантип ылдамдыкты орнотобуз, тоскоолдуктардан кантип качабыз жана көздөгөн жерге жетүү түз сызык менен жүрүүдөн кыйыныраак болгондо, кантип маршрутту пландайбыз? Келгиле, муну карап көрөлү.

жетекчилик

Баштапкы этапта биз ар бир агенттин ылдамдык мааниси бар деп ойлойбуз, ал канчалык ылдам жана кайсы багытта жылып жатканын камтыйт. Аны секундасына метр, саатына километр, секундасына пиксел, ж.б. менен ченесе болот. Сезим/Ойлон/Арак циклин эстеп, биз ойлонуу бөлүгү ылдамдыкты тандайт деп элестете алабыз, ал эми Act бөлүгү ошол ылдамдыкты агентке колдонот. Адатта оюндарда физика системасы бар, ал сиз үчүн бул тапшырманы аткарып, ар бир объекттин ылдамдыгын билип, аны тууралайт. Ошондуктан, сиз AIны бир тапшырма менен калтырсаңыз болот - агент кандай ылдамдыкта болушу керек экенин чечүү. Эгерде сиз агенттин кайсы жерде болушу керектигин билсеңиз, анда аны белгиленген ылдамдыкта туура багытта жылдыруу керек. Өтө маанилүү теңдеме:

каалаган_саякат = көздөгөн_позиция – агент_позициясы

2D дүйнөсүн элестетиңиз. Агент (-2,-2) чекитинде, көздөгөн жер түндүк-чыгышта (30, 20) чекитте жана агент ал жакка жетүү үчүн талап кылынган жол (32, 22). Келгиле, бул позициялар метр менен өлчөнөт дейли – эгерде агенттин ылдамдыгын секундасына 5 метр деп алсак, анда биз жылышуу векторубузду масштабдап, болжол менен (4.12, 2.83) ылдамдыкка ээ болобуз. Бул параметрлер менен агент көздөгөн жерине дээрлик 8 секундда жетет.

Сиз каалаган убакта баалуулуктарды кайра эсептей аласыз. Эгерде агент бутага жарым жолдо болсо, кыймыл жарым узундукта болмок, бирок агенттин максималдуу ылдамдыгы 5 м/сек болгондуктан (жогоруда муну чечтик), ылдамдык бирдей болот. Бул ошондой эле кыймылдуу буталар үчүн иштейт, алар кыймылдап жатканда агентке кичине өзгөртүүлөрдү киргизүүгө мүмкүндүк берет.

Бирок биз көбүрөөк вариацияны каалайбыз - мисалы, тургандан чуркоого өтүп бараткан каарманды имитациялоо үчүн ылдамдыкты акырындык менен жогорулатуу. Ошол эле токтогонго чейин аягында кылса болот. Бул өзгөчөлүктөр башкаруу жүрүм-туруму катары белгилүү, алардын ар биринин өзгөчө аталышы бар: Издөө, Качуу, Келүү ж.б. максатка жылыш үчүн ар кандай ыкмаларды колдонуу үчүн.

Ар бир жүрүм-турум бир аз башкача максатка ээ. Издөө жана келүү агентти көздөгөн жерге жылдыруунун жолдору. Тоскоолдуктан качуу жана бөлүү агенттин кыймылын максатка жетүү жолунда тоскоолдуктарды болтурбоо үчүн тууралайт. Тегиздөө жана Когезия агенттердин чогуу кыймылын камсыздайт. Бардык факторлорду эсепке алуу менен бир жол векторун өндүрүү үчүн ар кандай сандагы ар кандай башкаруу жүрүм-турумун кошууга болот. Дубалдардан жана башка агенттерден алыс болуу үчүн келүү, бөлүү жана тоскоолдуктардан качуу жүрүм-турумун колдонгон агент. Бул ыкма ашыкча деталдары жок ачык жерлерде жакшы иштейт.

Кыйыныраак шарттарда, ар кандай жүрүм-турумду кошуу начарыраак иштейт - мисалы, келүү жана тоскоолдуктардан качуу ортосундагы конфликттен улам агент дубалга тыгылып калышы мүмкүн. Ошондуктан, сиз жөн гана бардык баалуулуктарды кошууга караганда татаалыраак варианттарды карап чыгышыңыз керек. Жол мындай: ар бир жүрүм-турумдун жыйынтыгын кошуунун ордуна, сиз ар кандай багыттагы кыймылдарды карап, эң жакшы вариантты тандай аласыз.

Бирок, туюк жана кайсы жолду тандоо керектиги бар татаал чөйрөдө бизге андан да өнүккөн нерсе керек болот.

Жол табуу

Рулдун жүрүм-туруму ачык жерде (футбол талаасында же аренада) жөнөкөй кыймыл үчүн эң сонун, мында Адан Бга чейин түз жол, тоскоолдуктарды айланып өтүү менен гана. Татаал каттамдар үчүн бизге дүйнөнү изилдөөнүн жана ал аркылуу өтүүчү жолду аныктоонун жолу болгон жолду издөө керек.

Эң жөнөкөйү - агенттин жанындагы ар бир квадратка торду колдонуу жана алардын кайсынысын жылдырууга уруксат берилгендигин баалоо. Алардын бири көздөгөн жер болсо, анда башталгычка жеткенче ар бир аянттан мурункуга чейинки маршрутту ээрчиңиз. Бул маршрут. Болбосо, бара турган жериңизди тапканга чейин же квадраттарыңыз түгөнгөнгө чейин (мүмкүн болгон маршрут жок дегенди билдирет) процессти жакын жердеги башка квадраттар менен кайталаңыз. Бул расмий түрдө Breadth-First Search же BFS (кеңдик-биринчи издөө алгоритми) деп аталат. Ар бир кадам сайын ал ар тарапты карайт (демек, кеңдик, "эн"). Издөө мейкиндиги, ал каалаган жерге жеткенге чейин кыймылдаган толкун фронтуна окшош - издөө мейкиндиги акыркы чекит киргизилгенге чейин ар бир кадам сайын кеңейет, андан кийин аны башынан байкоого болот.

Оюн AI кантип түзүү керек: үйрөнчүктөр үчүн колдонмо

Натыйжада, сиз каалаган маршрут түзүлө турган аянттардын тизмесин аласыз. Бул жол (демек, жол табуу) - агент көздөгөн жерди ээрчип бара турган жерлердин тизмеси.

Дүйнөдөгү ар бир квадраттын ордун биле турганыбызды эске алсак, жолду бойлото жүрүү үчүн башкаруу жүрүм-турумун колдоно алабыз - 1 түйүндөн 2 түйүнгө, андан кийин 2 түйүндөн 3 түйүнгө ж.б. Эң жөнөкөй вариант - кийинки квадраттын борборун көздөй багыт алуу, бирок андан да жакшыраак вариант - учурдагы квадрат менен кийинкинин ортосундагы четтин ортосунда токтоп калуу. Ушундан улам агент курч бурулуштарда бурчтарды кесип алат.

BFS алгоритминин кемчиликтери да бар - ал "туура" багытта кандай болсо, ошончо квадратты "туура эмес" багытта изилдейт. Бул жерде A* (Жылдыз) деп аталган татаалыраак алгоритм ишке кирет. Ал ушундай эле иштейт, бирок кошуна квадраттарды сокур карап көрүүнүн ордуна (андан кийин кошуналардын кошуналары, андан кийин кошуналардын кошуналары ж. эң кыска жолго алып баруучу бири. Түйүндөр эки нерсени эске алган эвристиканын негизинде иргелет — гипотетикалык маршруттун каалаган квадратка чейинки «баасы» (анын ичинде саякат чыгымдары) жана ал квадрат бара турган жерден канчалык алыс экенине баа берүү (баракчадагы издөөнү бир тараптуу кылуу) туура багыт).

Оюн AI кантип түзүү керек: үйрөнчүктөр үчүн колдонмо

Бул мисал агенттин бирден бир квадратты изилдеп, ар бир жолу эң келечектүү болгон чектеш аянтты тандаарын көрсөтүп турат. Натыйжадагы жол BFS менен бирдей, бирок процессте азыраак квадраттар каралган - бул оюндун натыйжалуулугуна чоң таасирин тийгизет.

Сеткасыз кыймыл

Бирок көпчүлүк оюндар тордо жайгаштырылбайт жана реализмди бузбастан муну жасоо көбүнчө мүмкүн эмес. Компромисстер керек. Квадраттардын өлчөмү кандай болушу керек? Өтө чоң жана алар кичинекей коридорлорду же бурулуштарды туура көрсөтө алышпайт, өтө кичинекей жана издөө үчүн квадраттар өтө көп болот, бул акыры көп убакытты талап кылат.

Биринчи түшүнө турган нерсе, тор бизге туташкан түйүндөрдүн графигин берет. A* жана BFS алгоритмдери чындыгында графиктерде иштейт жана биздин торубузга таптакыр маани бербейт. Биз түйүндөрдү оюн дүйнөсүнүн каалаган жерине койсок болот: эки туташкан түйүндөр, ошондой эле башталгыч жана аяккы чекиттер жана жок дегенде түйүндөрдүн бири ортосунда байланыш бар болсо, алгоритм мурункудай эле иштейт. Бул көбүнчө жол чекит системасы деп аталат, анткени ар бир түйүн дүйнөдөгү маанилүү позицияны билдирет, ал ар кандай гипотетикалык жолдордун бир бөлүгү боло алат.

Оюн AI кантип түзүү керек: үйрөнчүктөр үчүн колдонмо
1-мисал: ар бир квадратта түйүн. Издөө агент жайгашкан түйүндөн башталып, керектүү квадраттын түйүнүндө аяктайт.

Оюн AI кантип түзүү керек: үйрөнчүктөр үчүн колдонмо
2-мисал: түйүндөрдүн кичирээк топтому (жол чекиттери). Издөө агенттин аянтынан башталып, керектүү сандагы түйүндөрдөн өтүп, андан соң көздөгөн жерине чейин уланат.

Бул толугу менен ийкемдүү жана күчтүү система. Бирок жол пунктун каякка жана кантип коюуну чечүүдө бир аз кылдаттык керек, антпесе агенттер эң жакынкы чекитти көрө албай, жолду баштай албай калышы мүмкүн. Дүйнөнүн геометриясынын негизинде жол чекиттерин автоматтык түрдө жайгаштырсак, жеңил болмок.

Бул жерде навигациялык тор же navmesh (навигациялык тор) пайда болот. Бул, адатта, дүйнөнүн геометриясында капталган үч бурчтуктардын 2D тору - агентке кайда жүрүүгө уруксат болбосун. Тордогу үч бурчтуктун ар бири графиктин түйүнүнө айланат жана графикте чектеш түйүндөргө айланган үчкө чейин чектеш үч бурчтуктар бар.

Бул сүрөт Unity кыймылдаткычынын үлгүсү болуп саналат - ал дүйнөдөгү геометрияны анализдеп, навмеш түздү (скриншотто ачык көк түстө). Навмештеги ар бир көп бурчтук - бул агент турган же бир көп бурчтуктан башка көп бурчтукка жыла турган аймак. Бул мисалда, көп бурчтуктар алар жайгашкан кабаттарга караганда кичине - бул анын номиналдык абалынан чыгып кете турган агенттин өлчөмүн эске алуу үчүн жасалат.

Оюн AI кантип түзүү керек: үйрөнчүктөр үчүн колдонмо

Биз кайрадан A* алгоритмин колдонуп, бул тор аркылуу маршрутту издей алабыз. Бул бизге дүйнөдөгү дээрлик идеалдуу маршрутту берет, ал бардык геометрияны эске алат жана керексиз түйүндөрдү жана жол чекиттерин түзүүнү талап кылбайт.

Pathfinding - макаланын бир бөлүмү жетишсиз болгон өтө кенен тема. Эгер сиз аны тереңирээк изилдегиңиз келсе, анда бул жардам берет Amit Patel сайты.

пландаштыруу

Кээде жөн гана багытты тандап, жылып калуу жетишсиз экенине жол табуу менен үйрөндүк - каалаган жерибизге жетүү үчүн маршрутту тандап, бир нече бурулуш жасоо керек. Бул идеяны жалпылап айтсак болот: максатка жетүү - бул кийинки кадам эмес, бүтүндөй ырааттуулук, анда кээде биринчиси кандай болушу керектигин билүү үчүн бир нече кадамдарды алдыга карап чыгуу керек. Бул пландаштыруу деп аталат. Pathfinding пландоо үчүн бир нече кеңейтүүлөрдүн бири катары каралышы мүмкүн. Биздин Сезим/Ойлон/Арак циклибиз боюнча, бул жерде ойлонуу бөлүгү келечектеги Актынын бир нече бөлүктөрүн пландаштырат.

Келгиле, Magic: The Gathering стол оюнунун мисалын карап көрөлү. Биз колубузда төмөнкү карталар топтому менен биринчи барабыз:

  • Саз - 1 кара мана берет (жер картасы).
  • Токой - 1 жашыл мана (жер картасы) берет.
  • Качкын сыйкырчы - чакыруу үчүн 1 көк мананы талап кылат.
  • Elvish Mystic - Чакыруу үчүн 1 жашыл мана талап кылынат.

Калган үч картаны жеңилдетүү үчүн көңүл бурбайбыз. Эрежелерге ылайык, оюнчуга ар бир кезеги боюнча 1 жер картасын ойноого уруксат берилет, ал бул картаны андан мананы алуу үчүн "таптап" алат, андан кийин мананын суммасына жараша сыйкыр жасай алат (анын ичинде жандыкты чакырат). Бул кырдаалда адам оюнчусу Токойду ойноп, 1 жашыл мананы таптап, анан Elvish Mystic чакырууну билет. Бирок AI оюну муну кантип аныктай алат?

Оңой пландаштыруу

Ар бир аракетти өз кезегинде ылайыктуулары калмайынча аракет кылуу керек. Карталарды карап, AI Swamp эмнени ойной аларын көрөт. Жана ал ойнойт. Бул кезекте башка аракеттер калдыбы? Ал Elvish Mystic же Fugitive Wizard чакыра албайт, анткени аларды чакыруу үчүн жашыл жана көк мана талап кылынат, ал эми Swamp кара мананы гана камсыз кылат. Жана ал мындан ары Токойду ойной албайт, анткени ал буга чейин Swamp ойногон. Ошентип, оюн AI эрежелерге баш ийди, бирок аны начар аткарды. Жакшыртса болот.

Пландоо оюнду керектүү абалга келтирүүчү иш-аракеттердин тизмесин таба алат. Жолдогу ар бир аянттын кошуналары (жол табууда) болгон сыяктуу, пландагы ар бир аракеттин да кошуналары же мураскерлери болот. Биз каалаган абалга жеткенге чейин бул аракеттерди жана андан кийинки аракеттерди издей алабыз.

Биздин мисалда, каалаган натыйжа "мүмкүн болсо, бир жандыкты чакыр". Бурулуштун башында биз оюндун эрежелери уруксат берген эки гана мүмкүн болгон аракетти көрөбүз:

1. Swamp ойноо (натыйжа: оюндагы саз)
2. Токойду ойноңуз (натыйжа: оюндагы токой)

Ар бир жасалган иш-аракет оюндун эрежелерине жараша, кийинки аракеттерге алып келиши мүмкүн жана башкалар жабылышы мүмкүн. Элестеткиле, биз Swamp ойнодук – бул кийинки кадам катары Swampти алып салат (биз аны мурун эле ойнодук) жана бул Токойду да жок кылат (анткени эрежелерге ылайык сиз бир кезекте бир жер картасын ойной аласыз). Андан кийин, AI кийинки кадам катары 1 кара мананы кошот, анткени башка варианттар жок. Эгерде ал алдыга чыгып, Tap the Swamp тандаса, ал 1 бирдик кара мананы алат жана аны менен эч нерсе кыла албайт.

1. Swamp ойноо (натыйжа: оюндагы саз)
1.1 "Тап" сазы (натыйжа: Саз "тапталды", +1 бирдик кара мана)
Эч кандай аракеттер жок - END
2. Токойду ойноңуз (натыйжа: оюндагы токой)

Акциялардын тизмеси кыска болду, туюкка жеттик. Кийинки кадам үчүн процессти кайталайбыз. Биз Forest ойнойбуз, "1 жашыл мана алуу" акциясын ачабыз, ал өз кезегинде үчүнчү акцияны ачат - Elvish Mystic чакыр.

1. Swamp ойноо (натыйжа: оюндагы саз)
1.1 "Тап" сазы (натыйжа: Саз "тапталды", +1 бирдик кара мана)
Эч кандай аракеттер жок - END
2. Токойду ойноңуз (натыйжа: оюндагы токой)
2.1 "Тап" Токой (натыйжа: Токой "тапталды", +1 жашыл мана бирдиги)
2.1.1 Elvish Mystic чакырыңыз (натыйжа: Elvish Mystic оюнда, -1 жашыл мана)
Эч кандай аракеттер жок - END

Акыры, биз бардык мүмкүн болгон аракеттерди изилдеп, жандыкты чакырган планды таптык.

Бул абдан жөнөкөйлөштүрүлгөн мисал. Кээ бир критерийлерге жооп берген ар кандай планды эмес, мүмкүн болгон эң жакшы планды тандоо максатка ылайыктуу. Потенциалдуу пландарды аларды ишке ашыруунун натыйжасына же жалпы пайдасына карап баалоого болот. Сиз жер картасын ойногонуңуз үчүн 1 упай жана жандыкты чакырганыңыз үчүн 3 упай ала аласыз. Swamp ойноо 1 упай план болмок. Ал эми Токой → Токойду таптап ойноо → Elvish Mystic чакырыңыз дароо 4 упай берет.

Magic: The Gathering программасында пландоо ушундайча иштейт, бирок ошол эле логика башка кырдаалдарда да колдонулат. Мисалы, шахматта епископко орун бошотуш үчүн пешканы жылдыруу. Же болбосо, XCOMдо аман-эсен атуу үчүн дубалдын артына жаап алыңыз. Жалпысынан алганда, сиз идеяны түшүнөсүз.

Жакшыртылган пландаштыруу

Кээде ар бир мүмкүн болгон вариантты карап чыгуу үчүн өтө көп потенциалдуу аракеттер бар. Magic: The Gathering менен мисалга кайтуу: оюнда жана колуңузда бир нече жер жана жандык карталары бар дейли - кыймылдардын мүмкүн болгон комбинацияларынын саны ондогон болушу мүмкүн. Маселени чечүүнүн бир нече жолу бар.

Биринчи ыкма - артка чынжырлоо. Бардык комбинацияларды сынап көрүүнүн ордуна, акыркы натыйжадан баштап, түз жолду табууга аракет кылуу жакшы. Дарактын тамырынан белгилүү бир жалбыракка өтүүнүн ордуна, биз карама-каршы багытта - жалбырактан тамырга карай жылабыз. Бул ыкма оңой жана тезирээк.

Эгер душманда 1 ден соолук болсо, "1 же андан көп зыян келтирүү" планын таба аласыз. Буга жетишүү үчүн бир катар шарттар аткарылышы керек:

1. Зыян сыйкырдан келип чыгышы мүмкүн - ал колунда болушу керек.
2. Дуба кылуу үчүн мана керек.
3. Мананы алуу үчүн жер картасын ойнош керек.
4. Жер картасын ойноо үчүн аны колуңузда болушу керек.

Дагы бир жолу - эң биринчи издөө. Бардык жолдорду сынап көрүүнүн ордуна, биз эң ылайыктуусун тандайбыз. Көбүнчө, бул ыкма ашыкча издөө чыгымдары жок оптималдуу планды берет. A* эң мыкты биринчи издөөнүн бир түрү – эң келечектүү маршруттарды башынан эле карап чыгуу менен, ал башка варианттарды текшербестен эле эң жакшы жолду таба алат.

Кызыктуу жана барган сайын популярдуу болгон эң биринчи издөө варианты - Монте-Карло дарагынан издөө. Ар бир кийинки аракетти тандоодо кайсы пландар башкаларга караганда жакшыраак экенин болжолдоонун ордуна, алгоритм аягына жеткенге чейин (план жеңишке же жеңилүүгө алып келгенде) ар бир кадамда кокустук улантуучуларды тандайт. Акыркы натыйжа андан кийин мурунку варианттардын салмагын көбөйтүү же азайтуу үчүн колдонулат. Бул процессти катары менен бир нече жолу кайталоо менен, алгоритм кырдаал өзгөрсө да (эгерде душман оюнчуга тоскоолдук кылуу үчүн чара көрсө) кийинки эң жакшы кадам кандай болорун жакшы баалайт.

Максатка багытталган иш-аракеттерди пландаштыруу же GOAP (максатка багытталган иш-аракеттерди пландаштыруу) болмоюнча оюндардагы пландоо жөнүндө эч бир окуя толук болбойт. Бул кеңири колдонулган жана талкууланган ыкма, бирок бир нече айырмалоочу деталдардан башка, бул, негизинен, биз мурда сөз кылган артка чынжырлоо ыкмасы. Эгер максат "оюнчуну жок кылуу" болсо жана оюнчу калка артында болсо, план мындай болушу мүмкүн: граната менен жок кылуу → аны алуу → ыргытуу.

Адатта, ар биринин өз артыкчылыктары бар бир нече максаттар бар. Эгерде эң жогорку артыкчылыктуу максат аткарылбаса (иш-аракеттердин эч кандай айкалышы оюнчу көрүнбөгөндүктөн "оюнчуну өлтүрүү" планын түзбөсө), AI төмөнкү артыкчылыктуу максаттарга кайтып келет.

Тренинг жана адаптация

Биз буга чейин айтканбыз, AI оюну адатта машина үйрөнүүнү колдонбойт, анткени ал агенттерди реалдуу убакытта башкарууга ылайыктуу эмес. Бирок бул сиз бул аймактан бир нерсе ала албайсыз дегенди билдирбейт. Биз аткычта бир нерсе үйрөнө турган атаандаш болгубуз келет. Мисалы, картадагы эң жакшы позициялар жөнүндө билип алыңыз. Же мушташ оюнундагы атаандаш, оюнчунун көп колдонулган комбо кыймылдарына бөгөт коюп, аны башкаларга колдонууга түрткү берет. Ошентип, машина үйрөнүү мындай кырдаалдарда абдан пайдалуу болушу мүмкүн.

Статистика жана ыктымалдыктар

Татаал мисалдарга кирүүдөн мурун, келгиле, бир нече жөнөкөй өлчөөлөрдү алып, аларды чечим кабыл алуу үчүн колдонуу менен канчалык деңгээлде бара аларыбызды карап көрөлү. Мисалы, реалдуу убакыт стратегиясы - оюнчу оюндун алгачкы мүнөттөрүндө чабуул жасай алабы же жокпу жана буга каршы кандай коргонуу даярдалышы керек экенин кантип аныктайбыз? Келечектеги реакциялар кандай болорун түшүнүү үчүн биз оюнчунун мурунку тажрыйбасын изилдей алабыз. Баштоо үчүн, бизде андай чийки маалыматтар жок, бирок биз аны чогулта алабыз - AI адамга каршы ойногон сайын, ал биринчи чабуулдун убактысын жазып алат. Бир нече сеанстардан кийин, оюнчу келечекте чабуул жасоого кетчү убакыттын орточо эсебин алабыз.

Орточо баалуулуктар менен да көйгөй бар: эгерде оюнчу 20 жолу шашып, 20 жолу жай ойносо, анда талап кылынган баалуулуктар ортодо болот жана бул бизге пайдалуу эч нерсе бербейт. Бир чечим киргизүү маалыматтарды чектөө болуп саналат - акыркы 20 даана эске алынышы мүмкүн.

Окшош ыкма оюнчунун мурунку каалоолору келечекте бирдей болот деп болжолдоо менен белгилүү бир аракеттердин ыктымалдыгын баалоодо колдонулат. Эгерде оюнчу бизге беш жолу оттуу топ менен, эки жолу чагылган менен жана бир жолу мушташуу менен кол салса, ал оттуу топту жактырары көрүнүп турат. Келгиле, ар кандай куралдарды колдонуу ыктымалдыгын экстраполяциялап көрөлү: оттуу шар = 62,5%, чагылган = 25% жана мушташуу = 12,5%. Биздин оюн AI өзүн өрттөн коргоого даярданышы керек.

Дагы бир кызыктуу ыкма - Naive Bayes классификаторун чоң көлөмдөгү киргизилген маалыматтарды изилдөө жана AI каалагандай реакция кылуу үчүн кырдаалды классификациялоо үчүн колдонуу. Байес классификаторлору электрондук почта спам чыпкаларында колдонулушу менен белгилүү. Ал жерде алар сөздөрдү изилдеп, аларды ошол сөздөр мурда пайда болгон жерде (спамда же жок) салыштырып, келген каттар боюнча жыйынтык чыгарышат. Биз азыраак киргизүү менен да ошол эле нерсени кыла алабыз. AI көргөн бардык пайдалуу маалыматтын негизинде (мисалы, душмандын кандай бөлүктөрү түзүлгөн, же алар кандай дубаларды колдонушкан, же кандай технологияларды изилдешкен) жана акыркы натыйжа (согуш же тынчтык, шашылыш же коргонуу ж.б.) - биз каалаган AI жүрүм-турумун тандайбыз.

Бул окутуу ыкмаларынын бардыгы жетиштүү, бирок аларды тестирлөөнүн маалыматтарынын негизинде колдонуу максатка ылайыктуу. AI сиздин оюнчуларыңыз колдонгон ар кандай стратегияларга ылайыкташканды үйрөнөт. Чыгарылгандан кийин оюнчуга ыңгайлашкан AI өтө алдын ала айтууга же жеңүү өтө кыйын болуп калышы мүмкүн.

Баалуулукка негизделген адаптация

Биздин оюн дүйнөсүнүн мазмунун жана эрежелерин эске алып, биз жөн гана киргизилген маалыматтарды колдонуунун ордуна, чечим кабыл алууга таасир этүүчү баалуулуктардын топтомун өзгөртө алабыз. Биз муну жасайбыз:

  • AI дүйнөнүн абалы жана оюн учурундагы негизги окуялар жөнүндө маалыматтарды чогултсун (жогоруда айтылгандай).
  • Бул маалыматтардын негизинде бир нече маанилүү баалуулуктарды өзгөртөлү.
  • Биз чечимдерибизди ушул баалуулуктарды иштетүү же баалоо негизинде ишке ашырабыз.

Мисалы, агентте биринчи адам атуу картасынан тандоо үчүн бир нече бөлмө бар. Ар бир бөлмөнүн өзүнүн баалуулугу бар, ал зыярат кылуу канчалык жагымдуу экенин аныктайт. AI баасына жараша кайсы бөлмөгө барууну кокусунан тандайт. Андан кийин агент кайсы бөлмөдө өлтүрүлгөнүн эстеп, анын баасын төмөндөтөт (ал жакка кайтып келүү ыктымалдыгы). Ошол сыяктуу эле тескери жагдай үчүн - агент көптөгөн оппоненттерин жок кылса, анда бөлмөнүн баасы жогорулайт.

Марковдун модели

Эгер биз алдын ала болжолдоо үчүн чогултулган маалыматтарды колдонсок эмне болот? Белгилүү бир убакыт ичинде биз оюнчуну көргөн ар бир бөлмөнү эстесек, оюнчу кайсы бөлмөгө бараарын алдын ала айтабыз. Бөлмөлөр (баалар) боюнча оюнчунун кыймылдарына көз салуу жана жазуу менен биз аларды алдын ала айта алабыз.

Үч бөлмөнү алалы: кызыл, жашыл жана көк. Ошондой эле оюндун сеансын көрүп жатып жазган байкоолорубуз:

Оюн AI кантип түзүү керек: үйрөнчүктөр үчүн колдонмо

Ар бир бөлмөдө байкоолордун саны дээрлик бирдей - биз дагы эле буктурма үчүн жакшы жерди каяктан жасоону билбейбиз. Статистиканы чогултуу, ошондой эле картада бирдей пайда болгон оюнчулардын кайра жаралышы менен татаалдашат. Бирок алар картада пайда болгондон кийин кирген кийинки бөлмө жөнүндө маалыматтар буга чейин эле пайдалуу.

Жашыл бөлмө оюнчуларга ылайыктуу экенин көрүүгө болот - көпчүлүк адамдар кызыл бөлмөдөн ага көчүшөт, алардын 50% андан ары ошол жерде калышат. Көк бөлмө, тескерисинче, популярдуу эмес, дээрлик эч ким ага барбайт, эгер барса, көпкө турбайт.

Бирок маалыматтар бизге маанилүүрөөк нерсени айтат - оюнчу көк бөлмөдө болгондо, биз аны көргөн кийинки бөлмө жашыл эмес, кызыл болот. Жашыл бөлмө кызыл бөлмөгө караганда популярдуу болсо да, оюнчу көк бөлмөдө болсо, абал өзгөрөт. Кийинки абал (б.а. оюнчу бара турган бөлмө) мурунку абалына (б.а. оюнчу учурда жаткан бөлмөгө) көз каранды. Биз көз карандылыкты изилдегендиктен, байкоолорду өз алдынча санаганга караганда, так божомолдорду жасайбыз.

Өткөн абалдын маалыматтарынын негизинде келечектеги абалды болжолдоо Марков модели деп аталат, ал эми мындай мисалдар (бөлмөлөр менен) Марков чынжырлары деп аталат. Үлгүлөр ырааттуу мамлекеттердин ортосундагы өзгөрүүлөрдүн ыктымалдыгын билдиргендиктен, алар ар бир өткөөлдүн тегерегинде ыктымалдуулук менен FSM катары визуалдык түрдө көрсөтүлөт. Мурда биз FSMди агенттин жүрүм-турум абалын көрсөтүү үчүн колдончубуз, бирок бул түшүнүк агент менен байланышканбы же жокпу, бардык абалга жайылтылат. Бул учурда, мамлекеттер агент ээлеген бөлмөнү билдирет:

Оюн AI кантип түзүү керек: үйрөнчүктөр үчүн колдонмо

Бул абалдын өзгөрүшүнүн салыштырмалуу ыктымалдыгын көрсөтүүнүн жөнөкөй жолу, AI кийинки абалды алдын ала айтууга мүмкүнчүлүк берет. Сиз алдыда бир нече кадамдарды алдын ала көрө аласыз.

Эгерде оюнчу жашыл бөлмөдө болсо, кийинки жолу байкалганда ал ошол жерде калуу мүмкүнчүлүгү 50% болот. Бирок анын андан кийин дагы ошол жерде болушуна кандай мүмкүнчүлүктөр бар? Оюнчу эки байкоодон кийин жашыл бөлмөдө калуу мүмкүнчүлүгү гана эмес, анын кетип, кайра кайтуу мүмкүнчүлүгү да бар. Бул жерде жаңы маалыматтарды эске алуу менен жаңы таблица:

Оюн AI кантип түзүү керек: үйрөнчүктөр үчүн колдонмо

Бул эки байкоодон кийин оюнчуну жашыл бөлмөдө көрүү мүмкүнчүлүгү 51% - 21%, ал кызыл бөлмөдөн, 5% оюнчу алардын ортосундагы көк бөлмөгө барат деп көрсөтөт. 25% оюнчу жашыл бөлмөдөн чыкпайт.

Таблица жөн гана визуалдык курал - процедура ар бир кадамда ыктымалдыктарды көбөйтүүнү гана талап кылат. Бул бир эскертүү менен келечекке көз чаптырсаңыз болот дегенди билдирет: биз бөлмөгө кирүү мүмкүнчүлүгү толугу менен учурдагы бөлмөгө көз каранды деп ойлойбуз. Бул Марковдун мүлкү деп аталат - келечектеги абал азыркыдан гана көз каранды. Бирок бул XNUMX% так эмес. Оюнчулар чечимдерди башка факторлорго жараша өзгөртө алышат: ден соолук деңгээли же ок-дарылардын саны. Биз бул баалуулуктарды жаздырбагандыктан, биздин божомолдорубуз так эмес.

N-Grams

Мушташ оюнунун мисалы жана оюнчунун комбо кыймылдарын алдын ала айтуу жөнүндө эмне айтууга болот? Ошол эле! Бирок бир абалдын же окуянын ордуна, биз айкалыштырылган соккуну түзгөн бардык ырааттуулуктарды карап чыгабыз.

Мунун бир жолу ар бир киргизүүнү (мисалы, Kick, Punch же Block) буферге сактоо жана бүт буферди окуя катары жазуу. Ошентип, оюнчу SuperDeathFist чабуулун колдонуу үчүн Kick, Kick, Punch баскычтарын кайра-кайра басат, AI системасы бардык киргизүүлөрдү буферде сактайт жана ар бир кадамда колдонулган акыркы үчөөнү эстейт.

Оюн AI кантип түзүү керек: үйрөнчүктөр үчүн колдонмо
(Калуу менен жазылган саптар оюнчу SuperDeathFist чабуулун баштаганда.)

Оюнчу Кикти, андан кийин дагы бир кикти тандаганда AI бардык варианттарды көрөт, андан кийин кийинки киргизүү дайыма Punch экенин байкайт. Бул агентке SuperDeathFistтин комбо кыймылын алдын ала айтууга жана мүмкүн болсо бөгөт коюуга мүмкүндүк берет.

Окуялардын бул ырааттуулугу N-грамм деп аталат, мында N - сакталган элементтердин саны. Мурунку мисалда ал 3 грамм (триграмма) болгон, бул: биринчи эки жазуу үчүнчүнү алдын ала айтуу үчүн колдонулат. Демек, 5-граммда, биринчи төрт жазуу бешинчи жана башкаларды болжолдойт.

Дизайнер кылдаттык менен N-граммдын өлчөмүн тандоо керек. Кичирээк N азыраак эстутумду талап кылат, бирок тарыхты азыраак сактайт. Мисалы, 2 граммдык (биграмм) Kick, Kick же Kick, Punch жаздырат, бирок Kick, Kick, Punch сактай албайт, ошондуктан AI SuperDeathFist комбосуна жооп бербейт.

Башка жагынан алганда, чоңураак сандар көбүрөөк эстутумду талап кылат жана AI үйрөтүү кыйыныраак болот, анткени дагы көптөгөн варианттар болот. Эгер сизде Kick, Punch же Block үч мүмкүн болгон кириши болсо жана биз 10 граммды колдонсок, бул болжол менен 60 миң түрдүү вариант болмок.

Биграмм модели жөнөкөй Марков чынжырчасы - ар бир өткөн абал/учурдагы абал жуптары биграмм болуп саналат жана биринчиге таянып экинчи абалды алдын ала айта аласыз. 3 грамм жана андан чоңураак N-граммдарды Марков чынжырлары катары да кароого болот, мында бардык элементтер (N-граммдагы акыркысынан башкасы) чогуу биринчи абалды жана акыркы элемент экинчини түзөт. Мушташ оюнунун мисалы Кик жана Кик абалынан Kick and Punch абалына өтүү мүмкүнчүлүгүн көрсөтөт. Киргизүү таржымалынын бир нече жазууларын бирдиктүү бирдик катары кароо менен, биз негизинен киргизүү ырааттуулугун бүт мамлекеттин бир бөлүгүнө айландырып жатабыз. Бул бизге Марковдун касиетин берет, ал бизге Марков чынжырларын колдонууга, кийинки киргизүүнү алдын ала айтууга жана кийинки комбо кыймылы кандай болорун болжолдоого мүмкүндүк берет.

жыйынтыктоо

Биз жасалма интеллектти өнүктүрүүдөгү эң кеңири таралган инструменттер жана ыкмалар жөнүндө сүйлөштүк. Биз ошондой эле аларды колдонуу керек болгон жана өзгөчө пайдалуу болгон жагдайларды карап чыктык.

Бул оюн AI негиздерин түшүнүү үчүн жетиштүү болушу керек. Бирок, албетте, бул бардык ыкмалар эмес. Азыраак таанымал, бирок андан кем эмес натыйжалуу болуп төмөнкүлөр саналат:

  • оптималдаштыруу алгоритмдери, анын ичинде дөбөгө чыгуу, градиенттик түшүү жана генетикалык алгоритмдер
  • атаандаштык издөө/график алгоритмдери (минимакс жана альфа-бета кыркуу)
  • классификация ыкмалары (перцептрондор, нейрон тармактары жана колдоочу вектордук машиналар)
  • агенттердин кабылдоосун жана эс тутумун иштетүү үчүн системалар
  • AIга архитектуралык мамиле (гибриддик системалар, субсихитектуралар жана AI системаларын жабуунун башка жолдору)
  • анимация куралдары (пландоо жана кыймылды координациялоо)
  • аткаруу факторлору (деталдуулуктун деңгээли, каалаган убакта жана убакыт бөлүү алгоритмдери)

Тема боюнча онлайн ресурстар:

1. GameDev.net бар AI боюнча макалалар жана окуу куралдары бар бөлүм, дагы Суперстан.
2. AiGameDev.com оюн AI өнүктүрүүгө байланыштуу темалардын кенен спектри боюнча көптөгөн презентацияларды жана макалаларды камтыйт.
3. GDC Vault GDC AI саммитинин темаларын камтыйт, алардын көбү акысыз.
4. Пайдалуу материалдарды сайттан да тапса болот AI Оюн программисттеринин Гильдиясы.
5. Томми Томпсон, AI изилдөөчүсү жана оюн иштеп чыгуучу, YouTube'да видеолорду тартат AI жана оюндар коммерциялык оюндарда AIды түшүндүрүү жана изилдөө менен.

Тема боюнча китептер:

1. Game AI Pro китеп сериясы - бул конкреттүү функцияларды кантип ишке ашырууну же конкреттүү маселелерди чечүү жолдорун түшүндүргөн кыска макалалардын жыйындысы.

Game AI Pro: Оюндун AI адистеринин чогултулган акылмандыгы
Оюн AI Pro 2: Оюндун AI адистеринин чогултулган акылмандыгы
Оюн AI Pro 3: Оюндун AI адистеринин чогултулган акылмандыгы

2. AI Game Programming Wisdom сериясы Game AI Pro сериясынын представи болуп саналат. Ал эски ыкмаларды камтыйт, бирок дээрлик бардыгы бүгүнкү күндө да актуалдуу.

AI оюнун программалоо акылмандыгы 1
AI оюнун программалоо акылмандыгы 2
AI оюнун программалоо акылмандыгы 3
AI оюнун программалоо акылмандыгы 4

3. Жасалма интеллект: заманбап мамиле жасалма интеллекттин жалпы тармагын түшүнгүсү келген ар бир адам үчүн негизги тексттердин бири болуп саналат. Бул оюн өнүктүрүү жөнүндө китеп эмес - ал AI негиздерин үйрөтөт.

Source: www.habr.com

Комментарий кошуу