Ruka hadi maudhui makuu
Mafunzo ya AI

Mafunzo ya Ultimate SFighterAI: Kumfundisha wakala kwa PPO kumaliza Street Fighter 2

Mafunzo haya yanaeleza jinsi ya kusanidi Ultimate SFighterAI, kuendesha modeli iliyofunzwa awali ya NatureCNN, kutathmini uwezo wa kumaliza mchezo mfululizo, kutumia PPO kuifundisha upya au kuendeleza mafunzo, na kuchanganua mikondo ya mafunzo kupitia TensorBoard.

Mafunzo ya Ultimate SFighterAI: Kumfundisha wakala kwa PPO kumaliza Street Fighter 2

Muhtasari wa Mradi

Ultimate SFighterAI ni mradi wa ujifunzaji wa kuimarisha kwa kina unaolenga Street Fighter 2: Champion Edition. Unatumia Ryu kama mhusika wa mchezaji, hufunza modeli ya NatureCNN kwa kutumia algoriti ya PPO, na hueneza mafunzo kwenye viwango vyote 12 vya mchezo.

Ingizo la maamuzi ya modeli linatokana kabisa na pikseli za RGB za picha ya mchezo; haisomi moja kwa moja nafasi ya mhusika, hali ya vitendo au afya. Mazingira ya mafunzo hutumia tu vigezo vya kumbukumbu agent_hp na enemy_hp kukokotoa zawadi na kuamua mshindi.

Mradi unatoa uzito wa modeli iliyofunzwa na rekodi za mafunzo, hivyo unaweza kutazama pambano la AI moja kwa moja, kurudia jaribio, kurekebisha ukubwa wa utekelezaji sambamba, au kuendelea kufunza kwa kutumia modeli iliyopo.

Vipengele Vikuu na Sifa za Utekelezaji

  • Viwango vyote 12: Kila kiwango kinaweza kuendeshwa katika kiigaji huru, huku vyote vikifunza modeli moja ya NatureCNN.
  • Maamuzi ya kuona pekee: Modeli huchagua kusogea, kushambulia na kutumia mbinu maalum kulingana na picha ya mchezo iliyochakatwa.
  • Vitendo 27 tofauti: Vinajumuisha kutofanya chochote, kusogea, mashambulizi ya kawaida, mashambulizi ya kujikunyata, pamoja na Hadoken, Tatsumaki Senpuukyaku na Shoryuken zinazoelekezwa kushoto au kulia.
  • Ujifunzaji wa kuimarisha wa PPO: Mradi hutumia algoriti ya PPO kutoka Stable-Baselines3 kwa mafunzo.
  • Mbinu mbalimbali za tathmini: Inaauni majaribio kwa kupakia hifadhi za kila kiwango, kushinda mapambano mawili kati ya matatu, tathmini ya KO moja, na kuendelea kutoka kiwango cha kwanza hadi mwisho.
  • Modeli iliyofunzwa awali: Uzito chaguo-msingi uko katika logs/trained_models/ppo_ryu.zip.
  • Uonyeshaji wa mafunzo: Unaweza kutumia TensorBoard kutazama mabadiliko ya zawadi na rekodi za masasisho ya modeli.
  • Usaidizi wa vifaa mbalimbali: Vigezo vya mafunzo na uendeshaji vinaunga mkono auto, cpu, cuda na mps.

Uchakataji wa Picha

Picha ghafi ya mchezo hukatwa katikati, hutenganishwa ili kutoa mandharinyuma ya mwendo, kisha hupunguzwa ukubwa na kuwa ingizo la modeli la 84×84×3. Utoaji wa mandharinyuma ya mwendo hutumia tofauti za kijivu za nyakati t-16, t-8 na t, huzidisha mwangaza wa mandharinyuma kwa 0.35, kisha kuunganisha njia tatu za R, G na B. Uchakataji huu huisaidia modeli kutambua mwendo na mashambulizi ya wahusika.

Mbinu ya Zawadi

Zawadi huundwa hasa na mabadiliko ya afya ya pande zote mbili, matokeo ya kumwangusha mpinzani na gharama ya muda. Zawadi ya uharibifu hukokotolewa hivi:

0.01 × (3 × afya iliyopotezwa na mpinzani − afya yako iliyopotea)

Zawadi ya kumwangusha mpinzani ni:

0.01 × (176 + afya yako iliyobaki)

Adhabu ya kuangushwa ni:

0.01 × (176 + afya ya mpinzani iliyobaki)

Zaidi ya hayo, kila kitendo kinachotekelezwa hukatwa adhabu ya muda, ambayo chaguo-msingi ni 0.0005.

Maelezo ya Muundo wa Mradi

  • data/: Huhifadhi hifadhi za mwanzo za viwango 12, ufafanuzi wa vigezo vya kumbukumbu ya mchezo na usanidi wa mandhari.
  • main/train.py: Husimamia mafunzo sambamba ya viwango vyote na kuendelea kwa mafunzo.
  • main/test.py: Husimamia majaribio ya kila kiwango na tathmini ya kuendelea hadi mwisho.
  • main/env_utils.py: Hushughulikia usanidi wa ROM na ujenzi wa mazingira.
  • main/custom_wrappers.py: Hutekeleza uchakataji wa picha, uchoraji wa vitendo na ukokotoaji wa zawadi.
  • logs/trained_models/ppo_ryu.zip: Modeli iliyofunzwa inayotolewa na mradi.
  • logs/: Ina rekodi za TensorBoard za mchakato wa mafunzo.
  • requirements.txt: Orodha ya utegemezi wa Python.

Usakinishaji na Usanidi wa Mazingira

Hatua ya Kwanza: Andaa Mazingira ya Python

Mradi unapendekeza kutumia Python 3.10. Mazingira yaliyothibitishwa katika README ni macOS, Apple Silicon na Python 3.10.20, pamoja na njia za CPU na Apple MPS. Kwa mifumo mingine, soma maagizo rasmi ya usakinishaji ya Stable-Retro na PyTorch.

Unda na uwashe mazingira pepe katika saraka kuu ya mradi, kisha sakinisha utegemezi:

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

Watumiaji wa Windows wanaweza kutumia amri ifuatayo kuamilisha mazingira pepe:

.venv\Scripts\activate

Unaweza pia kutumia Anaconda kuunda mazingira ya Python 3.10, kisha kusakinisha utegemezi ulio katika requirements.txt. Mradi hutegemea hasa Gymnasium, Stable-Retro na Stable-Baselines3.

Hatua ya Pili: Andaa ROM ya Mchezo

Stable-Retro haitoi ROM za michezo, na mradi huu pia haujumuishi ROM. Tafuta kwa njia halali ROM inayoungwa mkono ya toleo la Marekani la Street Fighter 2: Champion Edition.

Baada ya kupata ROM, unaweza kutoa njia yake kamili kwa kutumia kigezo cha mazingira. Kwenye macOS au Linux tumia:

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

Kwenye Windows PowerShell tumia:

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

Njia nyingine ni kuweka ROM katika eneo chaguo-msingi la mradi:

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

Programu za mafunzo na majaribio zitaingiza ROM kiotomatiki. Ikiwa Stable-Retro ya mazingira ya sasa ya Python tayari imeingiza ROM hiyo, unaweza kuendesha programu moja kwa moja.

Hatua ya Tatu: Thibitisha Data ya Viwango

Faili 12 za .state katika saraka ya data/ huhifadhi hali za mwanzo za viwango vya 1 hadi 12. data.json na scenario_full_frame.json hufafanua vigezo vya kumbukumbu ya mchezo na usanidi wa mandhari. Programu husoma faili hizi moja kwa moja; hakuna haja ya kuzinakili kwenye saraka ya usakinishaji ya Stable-Retro.

Kuendesha Modeli Iliyofunzwa Awali

Kujaribu Viwango Vyote 12

Baada ya kukamilisha usanidi wa mazingira, tumia amri hii katika saraka kuu ya mradi:

python -m main.test --episodes 1

Programu itapakia kwa mfuatano hifadhi za mwanzo za viwango vya 1 hadi 12, huku kila kiwango kikitumia chaguo-msingi la kushinda mapambano mawili kati ya matatu. --episodes 1 inamaanisha tathmini kamili ya raundi moja; ukiacha kigezo hiki, chaguo-msingi ni raundi 10.

Baada ya kushindwa kiwango fulani, programu itaendelea kujaribu viwango vinavyofuata. Kituo kitaonyesha ushindi na kushindwa kwa kila kiwango, zawadi, kiwango cha ushindi kwa kiwango, pamoja na asilimia ya raundi za tathmini ambazo viwango vyote 12 vilishindwa.

Zima Picha ili Kuzingatia Matokeo ya Tathmini

Ikiwa huhitaji kutazama mapambano, unaweza kuzima uonyeshaji na kutumia CPU kwa uendeshaji:

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

Kuzima uonyeshaji kunafaa kwa tathmini za kundi na hupunguza gharama ya ziada ya kuonyesha picha.

Kuendelea kutoka Kiwango cha Kwanza

Ukitaka kuona AI ikimfuata mpinzani anayefuata kulingana na mtiririko wa kawaida wa mchezo, tumia:

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

Hali hii hupakia hifadhi ya kiwango cha kwanza mwanzoni pekee, kisha mchezo huendelea kwa kawaida kupitia viwango. Jaribio huishia mara moja baada ya kushindwa. Programu itaonyesha kiwango cha ushindi cha viwango vilivyojaribiwa na kiwango cha kukamilisha mchezo mzima.

Katika majaribio ya kila kiwango, “ushindi wote” inamaanisha modeli ilifaulu tathmini katika hifadhi zote 12 huru za viwango; “kiwango cha kukamilisha mchezo mzima” kinahitaji modeli ipitie viwango vyote 12 katika mtiririko mmoja unaoendelea. Maana hizi mbili ni tofauti.

Vigezo vya Kawaida vya Majaribio

  • --model-path PATH: Hubainisha modeli ya PPO, chaguo-msingi ni logs/trained_models/ppo_ryu.zip.
  • --episodes N: Huainisha idadi ya marudio ya tathmini kwa kila kiwango au majaribio ya kuendelea hadi mwisho, chaguo-msingi ni 10.
  • --no-render: Huzima picha ya mchezo.
  • --no-load-level-saves: Haipakii hifadhi za kila kiwango; badala yake huanza kutoka kiwango cha kwanza na kuendelea.
  • --reset-round: Katika majaribio ya kila kiwango, hutumia KO moja kama kitengo cha tathmini badala ya kushinda mapambano mawili kati ya matatu.
  • --device auto/cpu/cuda/mps: Huchagua kifaa cha uendeshaji wa modeli, chaguo-msingi ni auto.
  • --speed N: Huongeza kasi ya uonyeshaji kwa kupunguza idadi ya fremu zinazoonyeshwa, chaguo-msingi ni 4.

Kufunza Modeli Yako

Anza na Usanidi Mdogo

Mahitaji ya rasilimali ya usanidi chaguo-msingi wa mafunzo ni makubwa sana. Unapoendesha kwa mara ya kwanza, inapendekezwa kuanzisha kiigaji kimoja tu kwa kila kiwango na kutumia kundi dogo:

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

Kwa kuwa mradi una viwango 12, --envs-per-level 1 inamaanisha jumla ya viigaji 12 vinavyoendesha sambamba. Kwanza thibitisha kuwa ROM, ujenzi wa mazingira, kifaa na utoaji wa kumbukumbu vinafanya kazi ipasavyo, kisha ongeza idadi ya utekelezaji sambamba hatua kwa hatua.

Kuelewa Ukubwa wa Chaguo-msingi wa Mafunzo

Unapoendesha moja kwa moja python -m main.train, kila kiwango huanzisha viigaji 64 kwa chaguo-msingi, jumla ya mazingira 768 yanayoendesha sambamba. Kwa n-steps=128 ya chaguo-msingi, sasisho moja la PPO hukusanya sampuli 98,304, huku lengo kamili la mafunzo likiwa hatua milioni 700.

Usanidi chaguo-msingi unahitaji CPU na kumbukumbu za kutosha, na haufai kuwa jaribio la kwanza kwenye kompyuta ya kawaida. Punguza --envs-per-level, --batch-size au jumla ya hatua za mafunzo kulingana na vifaa ulivyo navyo.

Vigezo vya Kawaida vya Mafunzo

  • --envs-per-level N: Idadi ya mazingira yanayoendeshwa kwa wakati mmoja kwa kila ngazi; isipobainishwa, ni mazingira 64 kwa kila ngazi.
  • --total-timesteps N: Jumla ya hatua za mafunzo kwa kipindi hiki; wakati wa kuendelea na mafunzo, huwakilisha hatua za ziada, na thamani chaguo-msingi ni 700000000.
  • --n-steps N: Idadi ya hatua zinazokusanywa na kila simulator kabla ya sasisho moja, chaguo-msingi ni 128.
  • --batch-size N: Ukubwa wa kundi la sasisho la PPO, chaguo-msingi ni 8192.
  • --n-epochs N: Idadi ya mizunguko ya mafunzo kwa data ya sampuli ya kila kundi, chaguo-msingi ni 3.
  • --learning-rate N: Kiwango cha ujifunzaji, chaguo-msingi ni 0.0002.
  • --device auto/cpu/cuda/mps: Huchagua kifaa cha mafunzo, chaguo-msingi ni mps.
  • --log-dir PATH: Saraka ya kutoa modeli na grafu za mafunzo, chaguo-msingi ni logs/ALL_MOTION_SIMULTANEOUS.

Kuendelea na mafunzo kwa kutumia uzani uliotangulia kufunzwa

Mradi huu unaauni kuendelea na mafunzo kuanzia uzani wa PPO uliotolewa. Amri ifuatayo huongeza hatua milioni 1 za mafunzo na kuandika matokeo kwenye saraka mpya:

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

Wakati wa kuendelea na mafunzo, --total-timesteps huwakilisha idadi ya hatua za ziada za mafunzo kwa kipindi hiki, wala si lengo la jumla linalojumuisha kiasi cha mafunzo ya modeli ya zamani.

Kutumia TensorBoard kutazama grafu za mafunzo

Mradi huu una kumbukumbu za mafunzo zilizojengewa ndani. Anzisha TensorBoard:

tensorboard --logdir=logs

Kisha fungua http://localhost:6006/ kwenye kivinjari ili kutazama mabadiliko ya zawadi na grafu zinazohusiana na masasisho ya modeli.

Ikiwa ungependa kutazama kumbukumbu zilizotengenezwa na mafunzo yako, badilisha tu saraka:

tensorboard --logdir=runs/ryu

Mapendekezo ya matumizi ya hali ya juu

  1. Thibitisha kwanza kabla ya kupanua: Anza kwa kutumia mazingira moja kwa kila ngazi na kufanya mafunzo ya muda mfupi. Thibitisha kuwa uingizaji wa ROM, usomaji wa hifadhi na uandishi wa kumbukumbu vinafanya kazi ipasavyo kabla ya kuongeza idadi ya simulators zinazoendeshwa sambamba.
  2. Chagua kifaa kulingana na jukwaa: Kwenye Apple Silicon, unaweza kujaribu mps; mazingira yenye GPU ya NVIDIA inayooana yanaweza kutumia cuda; vinginevyo tumia cpu au auto. README imethibitishwa kwenye mazingira ya macOS Apple Silicon; majukwaa mengine yanahitaji usanidi kulingana na mahitaji ya PyTorch na Stable-Retro.
  3. Tenganisha aina mbili za tathmini: Jaribio la hifadhi kwa kila ngazi linafaa kwa kuchanganua utendaji dhidi ya kila mpinzani, ilhali kuendelea kupita ngazi zote kunakaribia zaidi mtiririko kamili wa mchezo. Unaporipoti matokeo, taja hali iliyotumika.
  4. Tumia tathmini ya kundi bila uonyeshaji: Unapofanya takwimu za mizunguko mingi, ongeza --no-render; wezesha uonyeshaji unapohitaji kutazama utendaji wa mkakati.
  5. Hifadhi majaribio katika saraka tofauti: Tumia --log-dir kuunda saraka kwa michanganyiko tofauti ya vigezo, ili kuzuia kumbukumbu za mafunzo kuandikiana na kurahisisha ulinganishaji katika TensorBoard.
  6. Angalia chaguo zote za amri: Hati za mafunzo na majaribio zote hutoa maelezo ya usaidizi.
python -m main.train --help
python -m main.test --help

Pamoja na kutumia moduli, mradi huu pia unaauni uendeshaji wa hati moja kwa moja:

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

Hitimisho

Ultimate SFighterAI inaonyesha jinsi ya kuunganisha ingizo la pikseli, upangaji wa vitendo, uundaji wa zawadi, PPO na mazingira sambamba ya ngazi nyingi ili kuunda wakala kamili wa akili bandia wa mchezo wa mapigano. Njia thabiti zaidi ya kuanza ni kusanidi ROM na kuendesha modeli iliyofunzwa awali, kisha kuiga mafunzo kwa kiwango kidogo cha uendeshaji sambamba, na mwishowe kupanua ukubwa wa majaribio hatua kwa hatua kupitia kuendelea na mafunzo, kuchagua kifaa na kuchanganua kwa TensorBoard.

Mradi huu umetolewa chini ya Apache License 2.0 na unatumia vipengele huria kama vile Gymnasium, Stable-Retro na Stable-Baselines3.