Status proyek: Tidak lagi dipertahankan!
Sayangnya, saya tidak lagi dapat mengembangkan atau memberikan dukungan lebih lanjut terhadap proyek ini.
Reaver adalah kerangka pembelajaran penguatan mendalam modular dengan fokus pada berbagai tugas berbasis StarCraft II, mengikuti jejak DeepMind yang mendorong bidang tercanggih melalui lensa bermain video game modern dengan antarmuka mirip manusia dan keterbatasan. Hal ini termasuk mengamati fitur visual yang serupa (walaupun tidak identik) dengan apa yang dilihat oleh pemain manusia dan memilih tindakan dari kumpulan opsi serupa yang mungkin dimiliki oleh pemain manusia. Lihat artikel StarCraft II: Tantangan Baru untuk Pembelajaran Penguatan untuk lebih jelasnya.
Meskipun pengembangannya didorong oleh penelitian, filosofi di balik Reaver API mirip dengan game StarCraft II itu sendiri - game ini menawarkan sesuatu untuk pemula dan ahli di bidangnya. Untuk pemrogram penghobi, Reaver menawarkan semua alat yang diperlukan untuk melatih agen DRL dengan memodifikasi hanya sebagian kecil dan terisolasi dari agen (misalnya hyperparameter). Untuk peneliti veteran, Reaver menawarkan basis kode yang sederhana namun berkinerja optimal dengan arsitektur modular: agen, model, dan lingkungan dipisahkan dan dapat ditukar sesuka hati.
Meskipun fokus Reaver adalah pada StarCraft II, Reaver juga memiliki dukungan penuh untuk lingkungan populer lainnya, terutama Atari dan MuJoCo. Algoritma agen reaver divalidasi terhadap hasil referensi, misalnya agen PPO mampu mencocokkan Algoritma Optimasi Kebijakan Proksimal. Silakan lihat di bawah untuk lebih jelasnya.
Cara termudah untuk menginstal Reaver adalah melalui manajer paket PIP
:
pip install reaver
Anda juga dapat memasang tambahan tambahan (misalnya dukungan gym
) melalui bendera pembantu:
pip install reaver[gym,atari,mujoco]
Jika Anda berencana untuk memodifikasi basis kode Reaver
Anda dapat mempertahankan fungsionalitas modulnya dengan menginstal dari sumber:
$ git clone https://github.com/inoryy/reaver-pysc2
$ pip install -e reaver-pysc2/
Dengan menginstal dengan -e
flag, Python
sekarang akan mencari reaver
di folder yang ditentukan, bukan penyimpanan site-packages
.
Silakan lihat halaman wiki untuk petunjuk rinci tentang pengaturan Reaver di Windows.
Namun, jika memungkinkan, harap pertimbangkan untuk menggunakan Linux OS
- karena pertimbangan kinerja dan stabilitas. Jika Anda ingin melihat agen Anda bekerja dengan grafis penuh yang diaktifkan, Anda dapat menyimpan tayangan ulang agen di Linux dan membukanya di Windows. Beginilah rekaman video di bawah ini dibuat.
Jika Anda ingin menggunakan Reaver dengan lingkungan lain yang didukung, Anda juga harus menginstal paket yang relevan:
Anda dapat melatih agen DRL dengan beberapa lingkungan StarCraft II yang berjalan secara paralel hanya dengan empat baris kode!
import reaver as rvr
env = rvr . envs . SC2Env ( map_name = 'MoveToBeacon' )
agent = rvr . agents . A2C ( env . obs_spec (), env . act_spec (), rvr . models . build_fully_conv , rvr . models . SC2MultiPolicy , n_envs = 4 )
agent . run ( env )
Selain itu, Reaver hadir dengan alat baris perintah yang sangat dapat dikonfigurasi, sehingga tugas ini dapat disederhanakan menjadi satu kalimat singkat!
python -m reaver.run --env MoveToBeacon --agent a2c --n_envs 4 2> stderr.log
Dengan baris di atas Reaver akan menginisialisasi prosedur pelatihan dengan serangkaian hyperparameter yang telah ditentukan sebelumnya, dioptimalkan secara khusus untuk lingkungan dan agen tertentu. Setelah beberapa saat Anda akan mulai melihat log dengan berbagai statistik berguna di layar terminal Anda.
| T 118 | Fr 51200 | Ep 212 | Up 100 | RMe 0.14 | RSd 0.49 | RMa 3.00 | RMi 0.00 | Pl 0.017 | Vl 0.008 | El 0.0225 | Gr 3.493 | Fps 433 |
| T 238 | Fr 102400 | Ep 424 | Up 200 | RMe 0.92 | RSd 0.97 | RMa 4.00 | RMi 0.00 | Pl -0.196 | Vl 0.012 | El 0.0249 | Gr 1.791 | Fps 430 |
| T 359 | Fr 153600 | Ep 640 | Up 300 | RMe 1.80 | RSd 1.30 | RMa 6.00 | RMi 0.00 | Pl -0.035 | Vl 0.041 | El 0.0253 | Gr 1.832 | Fps 427 |
...
| T 1578 | Fr 665600 | Ep 2772 | Up 1300 | RMe 24.26 | RSd 3.19 | RMa 29.00 | RMi 0.00 | Pl 0.050 | Vl 1.242 | El 0.0174 | Gr 4.814 | Fps 421 |
| T 1695 | Fr 716800 | Ep 2984 | Up 1400 | RMe 24.31 | RSd 2.55 | RMa 30.00 | RMi 16.00 | Pl 0.005 | Vl 0.202 | El 0.0178 | Gr 56.385 | Fps 422 |
| T 1812 | Fr 768000 | Ep 3200 | Up 1500 | RMe 24.97 | RSd 1.89 | RMa 31.00 | RMi 21.00 | Pl -0.075 | Vl 1.385 | El 0.0176 | Gr 17.619 | Fps 423 |
Reaver akan segera menyatu ke sekitar 25-26 RMe
(hadiah episode rata-rata), yang cocok dengan hasil DeepMind untuk lingkungan ini. Waktu pelatihan spesifik bergantung pada perangkat keras Anda. Log di atas dibuat pada laptop dengan CPU Intel i5-7300HQ (4 core) dan GPU GTX 1050, pelatihannya memakan waktu sekitar 30 menit.
Setelah Reaver menyelesaikan pelatihan, Anda dapat melihat kinerjanya dengan menambahkan tanda --test
dan --render
ke satu baris.
python -m reaver.run --env MoveToBeacon --agent a2c --test --render 2> stderr.log
Notebook notebook Google Colab pendamping tersedia untuk mencoba Reaver online.
Banyak algoritme DRL modern mengandalkan eksekusi di beberapa lingkungan sekaligus secara paralel. Karena Python memiliki GIL, fitur ini harus diimplementasikan melalui multiprosesing. Mayoritas implementasi open source menyelesaikan tugas ini dengan pendekatan berbasis pesan (misalnya Python multiprocessing.Pipe
atau MPI
), di mana masing-masing proses berkomunikasi dengan mengirimkan data melalui IPC. Ini adalah pendekatan yang valid dan kemungkinan besar merupakan satu-satunya pendekatan yang masuk akal untuk pendekatan terdistribusi skala besar yang dioperasikan oleh perusahaan seperti DeepMind dan openAI.
Namun, bagi peneliti atau penghobi pada umumnya, skenario yang jauh lebih umum adalah memiliki akses hanya ke satu lingkungan mesin, baik itu laptop atau node pada cluster HPC. Reaver dioptimalkan secara khusus untuk kasus ini dengan memanfaatkan memori bersama tanpa kunci. Pendekatan ini menghasilkan peningkatan kinerja yang signifikan hingga 1,5x percepatan pada laju pengambilan sampel StarCraft II (dan percepatan hingga 100x pada kasus umum), yang terhambat hampir secara eksklusif oleh pipeline input/output GPU.
Tiga modul inti Reaver - envs
, models
, dan agents
hampir sepenuhnya terpisah satu sama lain. Hal ini memastikan bahwa perluasan fungsionalitas dalam satu modul terintegrasi secara mulus ke modul lainnya.
Semua konfigurasi ditangani melalui gin-config dan dapat dengan mudah dibagikan sebagai file .gin
. Ini mencakup semua hyperparameter, argumen lingkungan, dan definisi model.
Saat bereksperimen dengan ide-ide baru, penting untuk mendapatkan umpan balik dengan cepat, yang seringkali tidak realistis dalam lingkungan kompleks seperti StarCraft II. Karena Reaver dibangun dengan arsitektur modular, implementasi agennya sebenarnya tidak terikat dengan StarCraft II sama sekali. Anda dapat melakukan penggantian langsung untuk banyak lingkungan game populer (misalnya openAI gym
) dan memverifikasi implementasi yang berfungsi dengan lingkungan tersebut terlebih dahulu:
python -m reaver.run --env CartPole-v0 --agent a2c 2> stderr.log
import reaver as rvr
env = rvr . envs . GymEnv ( 'CartPole-v0' )
agent = rvr . agents . A2C ( env . obs_spec (), env . act_spec ())
agent . run ( env )
Saat ini lingkungan berikut didukung oleh Reaver:
CartPole-v0
)PongNoFrameskip-v0
)InvertedPendulum-v2
dan HalfCheetah-v2
) Peta | Reaver (A2C) | DeepMind SC2LE | DeepMind ReDRL | Pakar Manusia |
---|---|---|---|---|
PindahToBeacon | 26.3 (1.8) [21, 31] | 26 | 27 | 28 |
KumpulkanPecahan Mineral | 102,8 (10,8) [81, 135] | 103 | 196 | 177 |
Kalahkan Kecoak | 72,5 (43,5) [21, 283] | 100 | 303 | 215 |
Temukan Dan Kalahkan Zerglings | 22.1 (3.6) [12, 40] | 45 | 62 | 61 |
Kalahkan Zerglings dan Banelings | 56,8 (20,8) [21, 154] | 62 | 736 | 727 |
KumpulkanMineralDanGas | 2267,5 (488,8) [0, 3320] | 3.978 | 5.055 | 7.566 |
Membangun Marinir | -- | 3 | 123 | 133 |
Human Expert
dikumpulkan oleh DeepMind dari pemain level GrandMaster.DeepMind ReDRL
mengacu pada hasil terkini, yang dijelaskan dalam artikel Pembelajaran Penguatan Mendalam Relasional.DeepMind SC2LE
adalah hasil yang dipublikasikan dalam artikel StarCraft II: Tantangan Baru untuk Pembelajaran Penguatan.Reaver (A2C)
adalah hasil yang dikumpulkan dengan melatih agen reaver.agents.A2C
, mereplikasi arsitektur SC2LE
sedekat mungkin pada perangkat keras yang tersedia. Hasil dikumpulkan dengan menjalankan agen terlatih dalam mode --test
selama 100
episode, menghitung total hadiah episode. Yang tercantum adalah mean, deviasi standar (dalam tanda kurung), dan min & maks (dalam tanda kurung siku).Peta | Sampel | Episode | Kira-kira. Waktu (jam) |
---|---|---|---|
PindahToBeacon | 563.200 | 2.304 | 0,5 |
KumpulkanPecahan Mineral | 74.752.000 | 311.426 | 50 |
Kalahkan Kecoak | 172.800.000 | 1.609.211 | 150 |
Temukan Dan Kalahkan Zerglings | 29.760.000 | 89.654 | 20 |
Kalahkan Zerglings dan Banelings | 10.496.000 | 273.463 | 15 |
KumpulkanMineralDanGas | 16.864.000 | 20.544 | 10 |
Membangun Marinir | - | - | - |
Samples
mengacu pada jumlah total observe -> step -> reward
dalam satu lingkungan.Episodes
mengacu pada jumlah total tanda StepType.LAST
yang dikembalikan oleh PySC2.Approx. Time
adalah perkiraan waktu pelatihan pada laptop
dengan CPU Intel i5-7300HQ
(4 core) dan GPU GTX 1050
. Perhatikan bahwa saya tidak menghabiskan banyak waktu untuk melakukan penyetelan hyperparameter, dengan fokus utama pada verifikasi bahwa agen mampu belajar daripada memaksimalkan efisiensi sampel. Misalnya, percobaan pertama yang naif di MoveToBeacon
memerlukan sekitar 4 juta sampel, namun setelah beberapa kali bermain-main, saya dapat menguranginya hingga 102.000 (~40x pengurangan) dengan agen PPO.
Berarti hadiah episode dengan std.dev diisi di antaranya. Klik untuk memperbesar.
Rekaman video agen yang tampil di keenam minigame tersedia online di: https://youtu.be/gEyBzcPU5-w. Dalam video di sebelah kiri adalah agen yang bertindak dengan bobot yang diinisialisasi secara acak dan tanpa pelatihan, sedangkan di sebelah kanan dia dilatih untuk menargetkan skor.
Masalah reproduktifitas penelitian baru-baru ini menjadi subyek perdebatan dalam sains secara umum, dan Reinforcement Learning tidak terkecuali. Salah satu tujuan Reaver sebagai proyek ilmiah adalah membantu memfasilitasi penelitian yang dapat direproduksi. Untuk tujuan ini Reaver dilengkapi dengan berbagai alat yang menyederhanakan proses:
Untuk memimpin dalam reproduktifitas, Reaver dilengkapi dengan beban terlatih dan log ringkasan Tensorboard lengkap untuk keenam minigame. Cukup unduh arsip eksperimen dari tab rilis dan unzip ke direktori results/
.
Anda dapat menggunakan beban yang telah dilatih sebelumnya dengan menambahkan tanda --experiment
ke perintah reaver.run
:
python reaver.run --map <map_name> --experiment <map_name>_reaver --test 2> stderr.log
Log Tensorboard tersedia jika Anda meluncurkan tensorboard --logidr=results/summaries
.
Anda juga dapat melihatnya langsung secara online melalui Aughie Boards.
Reaver adalah unit Protoss yang sangat spesial dan lucu secara subyektif di dunia game StarCraft. Dalam versi game StarCraft: Brood War, Reaver terkenal lambat, kikuk, dan sering kali tidak berguna jika dibiarkan sendiri karena AI dalam game yang bermasalah. Namun, di tangan pemain berdedikasi yang menginvestasikan waktu untuk menguasai unit, Reaver menjadi salah satu aset paling kuat dalam game, sering kali memainkan peran kunci dalam memenangkan turnamen.
Pendahulu Reaver, bernama sederhana pysc2-rl-agent
, dikembangkan sebagai bagian praktis dari tesis sarjana di Universitas Tartu di bawah pengawasan Ilya Kuzovkin dan Tambet Matiisen. Anda masih dapat mengaksesnya di cabang v1.0.
Jika Anda mengalami masalah terkait basis kode, silakan buka tiket di GitHub dan jelaskan sedetail mungkin. Jika Anda memiliki pertanyaan yang lebih umum atau sekadar mencari saran, silakan kirimkan saya email.
Saya juga bangga menjadi anggota komunitas online SC2AI yang aktif dan ramah, kami kebanyakan menggunakan Discord untuk komunikasi. Orang-orang dari semua latar belakang dan tingkat keahlian dipersilakan untuk bergabung!
Jika Anda merasa Reaver berguna dalam penelitian Anda, mohon pertimbangkan untuk mengutipnya dengan bibtex berikut:
@misc{reaver,
author = {Ring, Roman},
title = {Reaver: Modular Deep Reinforcement Learning Framework},
year = {2018},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/inoryy/reaver}},
}