Cart-pole: PID vs REINFORCE vs PPO
Masalahnya
Sebuah kereta bisa didorong ke kiri atau ke kanan sepanjang rel. Di atasnya ada tiang yang berengsel bebas. Jaga tiang tetap tegak (miring kurang dari 12°) tanpa kereta menabrak ujung rel, selama 500 langkah (10 detik).
Agen tidak tahu fisikanya. Ia hanya melihat 5 angka (posisi dan kecepatan kereta, sin dan cos sudut tiang, kecepatan sudut), memilih kiri atau kanan, dan menerima reward.
Model 3D rig ini berasal dari ProtoTwin RLExamples (lisensi MIT). Fisikanya ditulis ulang dengan NumPy di
minirl.envs.CartPoledan berjalan langsung di browser.
Cara kerja lab
reward.pymenentukan apa yang dianggap “baik”. Kembalikan dict berisi beberapa suku: debugger menampilkan kontribusi tiap suku.agent.pymemilih algoritma dan melatihnya. Training berjalan di latar belakang, jauh lebih cepat dari waktu nyata.- Setiap beberapa update, satu episode direkam dan diputar di 3D. Pilih episode lama dan baru di timeline, atau tampilkan episode lama sebagai bayangan biru untuk membandingkan.
- Tab Debugger: geser timeline ke detik mana pun untuk melihat apa yang dilihat agen, peluang tiap aksi , perkiraan nilai , dan reward per suku. Klik tiang atau kereta di 3D untuk menyorot nilai yang terkait.
PPO dalam satu paragraf
Kebijakan adalah jaringan saraf kecil yang mengeluarkan peluang kiri/kanan. PPO mengumpulkan 2048 langkah, menghitung advantage (seberapa lebih baik sebuah aksi dibanding perkiraan , dengan GAE), lalu menaikkan peluang aksi ber-advantage positif. Rasio dipotong di sehingga satu update tidak bisa mengubah kebijakan terlalu jauh. Itulah yang membuat PPO stabil.
Coba
- Latih dengan PPO bawaan. Biasanya tiang bisa seimbang dalam 20–40 detik. Bandingkan episode pertama dengan yang terakhir sebagai bayangan.
- Muat Baseline PID. Pengendali linear 4 angka ini langsung berhasil tanpa belajar. Ubah
k_thetamenjadi10: kapan ia gagal? - Muat REINFORCE. Lebih lambat dan lebih berisik dari PPO? Lihat grafik
return. - Muat Reward bocor lalu latih PPO lagi. Semua suku reward bernilai negatif, jadi… lihat apa yang dilakukan agen di 3D. Ini contoh reward hacking: agen memaksimalkan reward yang kamu tulis, bukan yang kamu maksud.
- Di
reward.pybawaan, aktifkan baris"tengah". Apakah kereta lebih betah di tengah rel?