
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,cudanamps.
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 nilogs/trained_models/ppo_ryu.zip.--episodes N: Huainisha idadi ya marudio ya tathmini kwa kila kiwango au majaribio ya kuendelea hadi mwisho, chaguo-msingi ni10.--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 niauto.--speed N: Huongeza kasi ya uonyeshaji kwa kupunguza idadi ya fremu zinazoonyeshwa, chaguo-msingi ni4.
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-sizeau 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 ni700000000.--n-steps N: Idadi ya hatua zinazokusanywa na kila simulator kabla ya sasisho moja, chaguo-msingi ni128.--batch-size N: Ukubwa wa kundi la sasisho la PPO, chaguo-msingi ni8192.--n-epochs N: Idadi ya mizunguko ya mafunzo kwa data ya sampuli ya kila kundi, chaguo-msingi ni3.--learning-rate N: Kiwango cha ujifunzaji, chaguo-msingi ni0.0002.--device auto/cpu/cuda/mps: Huchagua kifaa cha mafunzo, chaguo-msingi nimps.--log-dir PATH: Saraka ya kutoa modeli na grafu za mafunzo, chaguo-msingi nilogs/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
- 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.
- Chagua kifaa kulingana na jukwaa: Kwenye Apple Silicon, unaweza kujaribu
mps; mazingira yenye GPU ya NVIDIA inayooana yanaweza kutumiacuda; vinginevyo tumiacpuauauto. README imethibitishwa kwenye mazingira ya macOS Apple Silicon; majukwaa mengine yanahitaji usanidi kulingana na mahitaji ya PyTorch na Stable-Retro. - 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.
- Tumia tathmini ya kundi bila uonyeshaji: Unapofanya takwimu za mizunguko mingi, ongeza
--no-render; wezesha uonyeshaji unapohitaji kutazama utendaji wa mkakati. - Hifadhi majaribio katika saraka tofauti: Tumia
--log-dirkuunda saraka kwa michanganyiko tofauti ya vigezo, ili kuzuia kumbukumbu za mafunzo kuandikiana na kurahisisha ulinganishaji katika TensorBoard. - 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.
