Asosiy kontentga o‘tish
AI qo‘llanmalari

Ultimate SFighterAI qo‘llanmasi: PPO yordamida Street Fighter 2 ni yakunlay oladigan agentni o‘qitish

Ushbu qo‘llanmada Ultimate SFighterAIʼni sozlash, oldindan o‘qitilgan NatureCNN modelini ishga tushirish, ketma-ket g‘alaba qozonish qobiliyatini baholash, PPO yordamida qayta o‘qitish yoki o‘qitishni davom ettirish hamda TensorBoard orqali o‘qitish grafiklarini tahlil qilish tushuntiriladi.

Ultimate SFighterAI: PPO yordamida Street Fighter 2 agentini o‘qitish

Loyiha haqida qisqacha

Ultimate SFighterAI — «Street Fighter 2: Champion Edition» uchun mo‘ljallangan chuqur mustahkamlovchi o‘qitish loyihasi. U o‘yinchi qahramoni sifatida Ryudan foydalanadi, PPO algoritmi yordamida NatureCNN modelini o‘qitadi va o‘qitish doirasini barcha 12 ta bosqichga kengaytiradi.

Model qaror qabul qilishda faqat o‘yin ekranining RGB piksellaridan foydalanadi; qahramon joylashuvi, harakat holati yoki sog‘liq ko‘rsatkichlarini bevosita o‘qimaydi. O‘qitish muhiti mukofotni hisoblash va g‘olibni aniqlash uchun xotira o‘zgaruvchilaridagi faqat agent_hp va enemy_hp qiymatlaridan foydalanadi.

Loyiha o‘qitilgan model og‘irliklari va o‘qitish yozuvlarini taqdim etadi. Shu sababli siz AI jangini bevosita tomosha qilishingiz, tajribani takrorlashingiz, parallel muhitlar sonini o‘zgartirishingiz yoki mavjud modelni o‘qitishni davom ettirishingiz mumkin.

Asosiy funksiyalar va amalga oshirish xususiyatlari

  • Barcha 12 ta bosqich qamrab olingan: har bir bosqich alohida simulyatorda ishlaydi va bitta NatureCNN modelini birgalikda o‘qitadi.
  • Sof vizual qarorlar: model qayta ishlangan o‘yin tasviriga asoslanib harakatlanish, hujum va maxsus usullarni tanlaydi.
  • 27 ta diskret harakat: neytral holat, harakatlanish, oddiy hujum, o‘tirib hujum qilish, shuningdek chap va o‘ng yo‘nalishlarga mo‘ljallangan Hadoken, Tatsumaki Senpu-kyaku va Shoryuken kabi harakatlarni o‘z ichiga oladi.
  • PPO mustahkamlovchi o‘qitishi: loyiha Stable-Baselines3 kutubxonasining PPO algoritmi asosida o‘qitiladi.
  • Bir nechta baholash rejimi: saqlangan holatlarni bosqichma-bosqich yuklab test qilish, uch raunddan ikki g‘alaba, bitta KO baholashi va birinchi bosqichdan uzluksiz o‘tish qo‘llab-quvvatlanadi.
  • Oldindan o‘qitilgan model: standart og‘irliklar logs/trained_models/ppo_ryu.zip manzilida joylashgan.
  • O‘qitishni vizuallashtirish: mukofotlar o‘zgarishi va model yangilanishlari yozuvlarini TensorBoard yordamida ko‘rish mumkin.
  • Bir nechta qurilma qo‘llab-quvvatlanadi: o‘qitish va inferens parametrlari auto, cpu, cuda va mps qiymatlarini qo‘llab-quvvatlaydi.

Tasvirni oldindan qayta ishlash

O‘yinning dastlabki tasviri markazdan qirqish, harakatlanuvchi old fonni ajratish va o‘lchamni o‘zgartirish bosqichlaridan o‘tadi. Natijada model uchun 84×84×3 o‘lchamli kirish hosil bo‘ladi. Harakatlanuvchi old fonni ajratishda t-16, t-8 va t vaqtidagi kulrang tasvirlar farqidan foydalaniladi, fon yorqinligi 0.35 ga ko‘paytiriladi, so‘ng R, G, B uchta kanal birlashtiriladi. Bu qayta ishlash modelga qahramonning harakatlanishi va hujumlarini sezishga yordam beradi.

Mukofot mexanizmi

Mukofot asosan ikkala tomon sog‘lig‘idagi o‘zgarish, yiqitish natijasi va vaqt xarajatidan tashkil topadi. Zarar uchun mukofot quyidagicha hisoblanadi:

0.01 × (3 × raqib yo‘qotgan sog‘liq − o‘zingiz yo‘qotgan sog‘liq)

Raqib yiqitilgandagi mukofot:

0.01 × (176 + o‘zingizda qolgan sog‘liq)

O‘zingiz yiqitilgandagi jarima:

0.01 × (176 + raqibda qolgan sog‘liq)

Bundan tashqari, har bir amalda bajarilgan harakat uchun vaqt jarimasi yechiladi. Standart qiymat 0.0005.

Loyiha kataloglari haqida

  • data/: 12 ta bosqichning boshlang‘ich saqlangan holatlari, o‘yin xotirasi o‘zgaruvchilari ta’riflari va sahna konfiguratsiyalarini saqlaydi.
  • main/train.py: barcha bosqichlarni parallel o‘qitish va davomiy o‘qitish uchun javob beradi.
  • main/test.py: bosqichma-bosqich test qilish va uzluksiz o‘tishni baholash uchun javob beradi.
  • main/env_utils.py: ROM konfiguratsiyasi va muhitni yaratishni boshqaradi.
  • main/custom_wrappers.py: tasvirni qayta ishlash, harakatlarni moslashtirish va mukofotni hisoblashni amalga oshiradi.
  • logs/trained_models/ppo_ryu.zip: loyiha taqdim etadigan o‘qitilgan model.
  • logs/: o‘qitish jarayonining TensorBoard yozuvlarini o‘z ichiga oladi.
  • requirements.txt: Python bog‘liqliklari ro‘yxati.

O‘rnatish va muhitni sozlash

1-qadam: Python muhitini tayyorlash

Loyiha Python 3.10 dan foydalanishni tavsiya qiladi. README faylida qayd etilgan tasdiqlangan muhit macOS, Apple Silicon va Python 3.10.20 dan iborat; CPU hamda Apple MPS yo‘llari ham tekshirilgan. Boshqa platformalarda Stable-Retro va PyTorch rasmiy o‘rnatish ko‘rsatmalariga murojaat qiling.

Loyiha ildiz katalogida virtual muhit yarating va uni faollashtiring, so‘ng bog‘liqliklarni o‘rnating:

python3.10 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt

Windows foydalanuvchilari virtual muhitni quyidagi buyruq bilan faollashtirishi mumkin:

.venv\Scripts\activate

Shuningdek, Anaconda yordamida Python 3.10 muhitini yaratib, keyin requirements.txt dagi bog‘liqliklarni o‘rnatishingiz mumkin. Loyiha asosan Gymnasium, Stable-Retro va Stable-Baselines3 ga tayanadi.

2-qadam: O‘yin ROM faylini tayyorlash

Stable-Retro o‘yin ROM fayllarini taqdim etmaydi, ushbu loyiha ham ROM faylini o‘z ichiga olmaydi. «Street Fighter 2: Champion Edition» o‘yinining qo‘llab-quvvatlanadigan AQSh versiyasi ROM faylini qonuniy yo‘l bilan oling.

ROM faylini olganingizdan so‘ng, uning mutlaq yo‘lini muhit o‘zgaruvchisi orqali ko‘rsatishingiz mumkin. macOS yoki Linux tizimlarida:

export SF2_ROM_PATH="/absolute/path/to/your/rom.md"

Windows PowerShell uchun:

$env:SF2_ROM_PATH = "C:\path\to\your\rom.md"

Yana bir usul — ROM faylini loyihadagi standart manzilga joylashtirish:

data/street-fighter-ii-special-champion-edition-usa.md

O‘qitish va test dasturlari ROM faylini avtomatik import qiladi. Agar joriy Python muhitining Stable-Retro dasturida ushbu ROM allaqachon import qilingan bo‘lsa, uni bevosita ishga tushirish mumkin.

3-qadam: Bosqich ma’lumotlarini tekshirish

data/ katalogidagi 12 ta .state fayl mos ravishda 1-dan 12-gacha bo‘lgan bosqichlarning boshlang‘ich holatini saqlaydi. data.json va scenario_full_frame.json o‘yin xotirasi o‘zgaruvchilari hamda sahna konfiguratsiyasini belgilaydi. Dastur ushbu fayllarni bevosita o‘qiydi; ularni Stable-Retro o‘rnatilgan katalogga nusxalash shart emas.

Oldindan o‘qitilgan modelni ishga tushirish

Barcha 12 ta bosqichni bosqichma-bosqich test qilish

Muhitni sozlaganingizdan so‘ng, loyiha ildiz katalogida quyidagini bajaring:

python -m main.test --episodes 1

Dastur 1-dan 12-gacha bo‘lgan bosqichlarning boshlang‘ich saqlangan holatlarini navbatma-navbat yuklaydi. Har bir bosqichda standart bo‘yicha uch raunddan ikki g‘alaba qoidasidan foydalaniladi. --episodes 1 bitta to‘liq baholash davrini bildiradi; ushbu parametr ko‘rsatilmasa, standart bo‘yicha 10 ta davr test qilinadi.

Biror bosqichda mag‘lubiyat yuz bersa ham, dastur keyingi bosqichlarni test qilishda davom etadi. Terminalda har bir bosqichdagi g‘alaba va mag‘lubiyatlar, mukofot, bosqichdagi g‘alaba ulushi hamda bitta baholash davrida barcha 12 bosqichda g‘alaba qozonish ulushi chiqariladi.

Baholash natijalariga e’tibor qaratish uchun tasvirni o‘chirish

Janglarni tomosha qilish shart bo‘lmasa, renderlashni o‘chirib, CPU inferensidan foydalanishni aniq ko‘rsatishingiz mumkin:

python -m main.test --episodes 1 --no-render --device cpu

Renderlashni o‘chirish ommaviy baholash uchun qulay bo‘lib, tasvir chiqarish bilan bog‘liq qo‘shimcha xarajatlarni kamaytiradi.

Birinchi bosqichdan uzluksiz o‘tish

AI o‘yin jarayonining o‘ziga muvofiq keyingi raqibga qarshi kurashishini kuzatish uchun quyidagini ishga tushiring:

python -m main.test --episodes 1 --no-load-level-saves

Bu rejimda faqat birinchi bosqichning boshlang‘ich saqlangan holati yuklanadi, keyin bosqichlar o‘yin tomonidan odatdagi tartibda davom ettiriladi; mag‘lubiyat yuz bergan zahoti ushbu urinish yakunlanadi. Dastur o‘tilgan bosqichlardagi g‘alaba ulushi va barcha bosqichlarni to‘liq yakunlash ulushini chiqaradi.

Bosqichma-bosqich testdagi “barchasida g‘alaba” model 12 ta mustaqil bosqich saqlangan holatining barchasidan o‘tganini bildiradi; “to‘liq o‘tish ulushi” esa model bitta uzluksiz jarayonda barcha 12 bosqichni yakunlashini talab qiladi. Bu ikki ko‘rsatkichning ma’nosi turlicha.

Ko‘p ishlatiladigan test parametrlari

  • --model-path PATH: PPO modelini ko‘rsatadi, standart qiymat logs/trained_models/ppo_ryu.zip.
  • --episodes N: bosqichma-bosqich baholash davrlari yoki uzluksiz o‘tish urinishlari sonini belgilaydi, standart qiymat 10.
  • --no-render: o‘yin tasvirini o‘chiradi.
  • --no-load-level-saves: saqlangan holatlarni bosqichma-bosqich yuklamaydi, birinchi bosqichdan uzluksiz o‘tishni boshlaydi.
  • --reset-round: bosqichma-bosqich testda standart uch raunddan ikki g‘alaba o‘rniga bitta KO ni baholash birligi sifatida ishlatadi.
  • --device auto/cpu/cuda/mps: model inferensi qurilmasini tanlaydi, standart qiymat auto.
  • --speed N: ko‘rsatiladigan kadrlar sonini kamaytirib vizuallashtirishni tezlashtiradi, standart qiymat 4.

O‘z modelingizni o‘qitish

Kichik konfiguratsiyadan boshlash

Standart o‘qitish konfiguratsiyasi juda katta resurslarni talab qiladi. Birinchi ishga tushirishda har bir bosqich uchun faqat bitta simulyatorni ishga tushirish va kichikroq paketdan foydalanish tavsiya etiladi:

python -m main.train --envs-per-level 1 --batch-size 256 --log-dir runs/ryu

Loyiha 12 ta bosqichni o‘z ichiga olgani sababli, --envs-per-level 1 jami 12 ta parallel simulyator ishga tushirilishini anglatadi. Parallel muhitlar sonini bosqichma-bosqich oshirishdan oldin ROM, muhit yaratish, qurilma va jurnal chiqishi to‘g‘ri ishlayotganini tekshiring.

Standart o‘qitish ko‘lamini tushunish

python -m main.train buyrug‘i bevosita ishga tushirilganda, har bir bosqich uchun standart bo‘yicha 64 ta simulyator, jami 768 ta parallel muhit ishga tushadi. Standart n-steps=128 qiymati bilan bir PPO yangilanishi 98,304 ta namuna to‘playdi, to‘liq o‘qitish maqsadi esa 7 milliard qadamdan iborat.

Standart konfiguratsiya yetarli CPU va xotirani talab qiladi hamda oddiy kompyuterda birinchi test sifatida mos kelmaydi. Amaldagi qurilmaga qarab --envs-per-level, --batch-size yoki umumiy o‘qitish qadamlarini kamaytirish kerak.

Ko‘p ishlatiladigan o‘qitish parametrlari

  • --envs-per-level N: har bir bosqichdagi parallel muhitlar soni; ko‘rsatilmasa, har bir bosqich uchun 64 ta.
  • --total-timesteps N: ushbu treningning umumiy qadamlar soni; davom ettiriladigan treningda qo‘shiladigan qadamlar sonini bildiradi, standart qiymat 700000000.
  • --n-steps N: har bir simulyator bir yangilanishdan oldin to‘playdigan qadamlar soni, standart qiymat 128.
  • --batch-size N: PPO yangilanishlaridagi batch hajmi, standart qiymat 8192.
  • --n-epochs N: har bir namunalar to‘plami uchun trening davrlari soni, standart qiymat 3.
  • --learning-rate N: o‘rganish tezligi, standart qiymat 0.0002.
  • --device auto/cpu/cuda/mps: trening qurilmasini tanlash, standart qiymat mps.
  • --log-dir PATH: model va trening grafiklari saqlanadigan katalog, standart qiymat logs/ALL_MOTION_SIMULTANEOUS.

Oldindan o‘rgatilgan og‘irliklar asosida treningni davom ettirish

Loyiha taqdim etilgan PPO og‘irliklaridan foydalanib treningni davom ettirishni qo‘llab-quvvatlaydi. Quyidagi buyruq yana 1 million qadam trening bajaradi va natijalarni yangi katalogga yozadi:

python -m main.train \
  --resume-model logs/trained_models/ppo_ryu.zip \
  --envs-per-level 1 --batch-size 256 \
  --total-timesteps 1000000 --log-dir runs/ryu-resume

Trening davom ettirilganda, --total-timesteps eski modelda bajarilgan trening hajmini o‘z ichiga olgan jami maqsadni emas, ushbu safar qo‘shimcha bajariladigan trening qadamlarini bildiradi.

Trening grafiklarini TensorBoard yordamida ko‘rish

Loyiha trening yozuvlarini avtomatik saqlaydi. TensorBoard'ni ishga tushiring:

tensorboard --logdir=logs

Keyin brauzerda http://localhost:6006/ manzilini ochib, mukofotlar o‘zgarishi va model yangilanishlariga oid grafiklarni ko‘rishingiz mumkin.

O‘zingiz bajargan trening natijasida yaratilgan loglarni ko‘rish uchun katalogni almashtirish kifoya:

tensorboard --logdir=runs/ryu

Ilg‘or foydalanish bo‘yicha tavsiyalar

  1. Avval tekshiring, keyin kengaytiring: dastlab har bir bosqich uchun bitta muhitdan foydalanib, qisqa trening o‘tkazing. ROM importi, saqlangan holatlarni o‘qish va loglarni yozish to‘g‘ri ishlashiga ishonch hosil qilgach, parallel simulyatorlar sonini oshiring.
  2. Platformaga mos qurilmani belgilang: Apple Silicon uchun mps ni sinab ko‘rish mumkin, NVIDIA GPU bilan mos muhitlarda cuda ni tanlang, aks holda cpu yoki auto dan foydalaning. README macOS Apple Silicon muhitida tekshirilgan; boshqa platformalarda PyTorch va Stable-Retro talablari asosida sozlash kerak.
  3. Ikki xil baholashni farqlang: bosqichlarni alohida saqlangan holatlardan test qilish har bir raqib ko‘rsatkichini tahlil qilish uchun mos, uzluksiz bosqichlardan o‘tish esa to‘liq o‘yin jarayoniga yaqinroq. Hisobotda qaysi rejimdan foydalanilganini ko‘rsating.
  4. Renderingsiz ommaviy baholashdan foydalaning: bir nechta statistik sinov o‘tkazishda --no-render ni qo‘shing, strategiya ishlashini kuzatishda esa tasvirni yoqing.
  5. Tajribalarni alohida kataloglarda saqlang: turli parametr kombinatsiyalari uchun --log-dir orqali alohida kataloglar yarating. Bu trening yozuvlarining bir-birini bosib ketishining oldini oladi va TensorBoard'da taqqoslashni osonlashtiradi.
  6. Barcha buyruq parametrlarini ko‘ring: trening va test skriptlarida yordam ma’lumotlari mavjud.
python -m main.train --help
python -m main.test --help

Modul usulidan tashqari, loyiha skriptlarni bevosita ishga tushirishni ham qo‘llab-quvvatlaydi:

python main/train.py
python main/test.py

Xulosa

Ultimate SFighterAI piksel kiritish ma’lumotlari, harakatlarni moslashtirish, mukofotni shakllantirish, PPO va bir nechta bosqichlardagi parallel muhitlarni birlashtirib, to‘liq jangovar o‘yin agentini yaratish usulini namoyish etadi. Ishni boshlashning eng ishonchli yo‘li avval ROM'ni sozlash va oldindan o‘rgatilgan modelni ishga tushirish, keyin parallel muhitlar sonini kam saqlagan holda treningni takrorlash, so‘ng treningni davom ettirish, qurilmani tanlash va TensorBoard tahlili orqali tajriba ko‘lamini bosqichma-bosqich kengaytirishdir.

Loyiha Apache License 2.0 asosida tarqatiladi hamda Gymnasium, Stable-Retro va Stable-Baselines3 kabi ochiq manbali komponentlardan foydalanadi.