Penyiapan lingkungan

Instalasi Gymnasium dan PyTorch lalu uji asap dengan agen acak.

Daftar isi

Topik ini menyiapkan lingkungan kerja yang akan dipakai sepanjang jalur reinforcement learning: instalasi Gymnasium dan PyTorch, daftar paket yang dipatok versinya, dan uji asap berupa agen acak yang menjalankan satu episode penuh di CartPole-v1. Setelah topik ini selesai, papan kerja siap untuk modul siklus agen-lingkungan, dan keluaran agen acak dapat dijadikan garis dasar untuk membandingkan agen yang dilatih nanti. Tidak ada teori baru di sini, hanya penyiapan mekanis yang harus berjalan.

Instalasi paket utama#

Dua paket inti jalur ini adalah Gymnasium sebagai penyedia lingkungan dan PyTorch sebagai mesin komputasi tensor dan jaringan saraf. Instalasi dilakukan dengan pip, dan PyTorch dipasang varian CPU agar ringan dan dapat berjalan tanpa kartu grafis. Perintah berikut memasang kedua paket beserta dependensinya dari sumber resmi masing-masing.

bash Instalasi Gymnasium dan PyTorch
# tidak-dijalankan
# pasang Gymnasium dari PyPI dan PyTorch varian CPU dari indeks resminya
pip install gymnasium "torch" --index-url https://download.pytorch.org/whl/cpu

Varian CPU dipilih karena seluruh contoh di jalur ini berjalan pada masalah kecil hingga menengah yang tidak memerlukan akselerasi GPU. Bila pembaca memiliki GPU dan ingin memakainya pada modul pelatihan besar, ganti indeks URL sesuai petunjuk pada halaman penginstalan resmi PyTorch. Setelah instalasi selesai, impor kedua paket tidak boleh memunculkan error, dan pemeriksaan versi sudah diperlihatkan pada topik peta prasyarat.

Daftar paket dengan versi dipatok#

Agar lingkungan dapat direproduksi pada mesin lain, versi paket dipatok ke angka tetap. Berkas berikut mencatat seluruh paket yang dipakai sepanjang jalur beserta versinya, dan dapat dipasang sekaligus lewat pip install -r requirements.txt.

text requirements.txt
gymnasium==1.4.0
torch==2.15.0
numpy==2.1.3
matplotlib==3.9.2
scipy==1.14.1

Gymnasium versi 1.4.0 menyediakan API env.reset(seed=...) dan env.step(action) yang mengembalikan lima nilai, yaitu observasi, reward, dua penanda berhenti terminated dan truncated, serta info. Bentuk ini berlaku sejak Gymnasium 0.26 dan menjadi standar di seluruh jalur. NumPy versi 2.1 dan Matplotlib versi 3.9 dipakai untuk perhitungan dan penyajian kurva pembelajaran, sedangkan SciPy dipakai pada operasi numerik pendukung.

Mematok versi seperti ini menjaga agar keluaran contoh di sepanjang jalur dapat direproduksi, sebab perilaku Gymnasium dan NumPy pada keacakan yang di-seed dapat berbeda antar versi minor. Bila satu versi tidak dapat dipasang pada mesin tertentu, versi yang lebih baru umumnya tetap kompatibel, namun keluaran blok yang mengandalkan keacakan mungkin menyimpang dari yang tercetak. Dalam kasus demikian, perbandingan dilakukan terhadap pola umum keluaran, bukan angka persis.

Uji asap dengan agen acak#

Uji asap memastikan bahwa Gymnasium dan PyTorch terpasang dengan benar dan lingkungan CartPole-v1 dapat dijalankan. Agen acak menjalankan satu episode penuh dari reset hingga berhenti, lalu mencetak bentuk observasi akhir, jumlah langkah, dan return total. Episode dianggap selesai bila terminated bernilai benar karena tongkat jatuh atau gerobak keluar lintasan, atau truncated bernilai benar karena batas langkah tercapai.

python Uji asap agen acak di CartPole-v1
import warnings
warnings.filterwarnings("ignore")
import numpy as np
np.random.seed(0)
import gymnasium as gym
env = gym.make("CartPole-v1")
obs, info = env.reset(seed=0)
env.action_space.seed(0)
return_total = 0.0
langkah = 0
selesai = False
while not selesai:
    action = env.action_space.sample()
    obs, reward, terminated, truncated, info = env.step(action)
    return_total += reward
    langkah += 1
    selesai = terminated or truncated
print(f"bentuk observasi: {np.array2string(np.asarray(obs), precision=4)}")
print(f"jumlah langkah: {langkah}")
print(f"return total: {return_total:.4f}")
env.close()
text Keluaran
bentuk observasi: [ 0.0675  1.1702 -0.2305 -2.3517]
jumlah langkah: 18
return total: 18.0000

Keluaran memperlihatkan bahwa lingkungan berjalan dengan benar dan agen acak bertahan delapan belas langkah sebelum tongkat jatuh. Observasi akhir berupa deret empat nilai yang merepresentasikan posisi dan kecepatan gerobak serta sudut dan kecepatan sudut tongkat. Angka return total delapan belas sama dengan jumlah langkah karena setiap langkah memberi reward satu, sehingga return total pada CartPole-v1 selalu setara dengan panjang episode. Nilai ini menjadi garis dasar: agen yang dilatih pada modul berikutnya akan diukur terhadap bilangan ini, dan kemajuan dianggap terjadi bila panjang episode bertambah.

Panjang maksimum sebuah episode pada CartPole-v1 adalah 500 langkah, sehingga delapan belas langkah dari agen acak jauh dari batas atas tersebut. Jarak antara garis dasar acak dan batas atas inilah yang menjadi ruang kerja seluruh jalur. Agen yang dilatih dengan baik pada modul pembelajaran temporal-difference atau DQN mampu mendekati atau mencapai 500, dan selisih antara kedua angka itu mengukur seberapa jauh kebijakan yang dipelajari melampaui pilihan acak. Karena itu, angka delapan belas di atas bukan sekadar keluaran teknis, melainkan titik acuan yang akan dirujuk ulang ketika agen pertama yang dilatih muncul di modul selanjutnya.

Kesalahan umum#

Menjalankan agen tanpa menetapkan seed adalah kesalahan paling sering dalam penyiapan. Tanpa env.reset(seed=0) dan env.action_space.seed(0), panjang episode berubah setiap kali dijalankan, sehingga garis dasar tidak stabil dan perbandingan antar agen menjadi tidak adil. Pada seluruh topik di jalur ini, seed ditetapkan pada awal setiap blok yang mengandalkan keacakan, dan pembaca dianjurkan meniru kebiasaan tersebut pada kode sendiri.

Kesalahan kedua adalah mengabaikan perbedaan terminated dan truncated. terminated bernilai benar ketika episode berakhir karena kegagalan tugas, sedangkan truncated bernilai benar ketika episode dipotong oleh batas waktu. Mencampur keduanya, misalnya hanya memeriksa terminated, menyebabkan episode yang dipotong terus berjalan hingga memunculkan error atau perilaku yang tidak terduga. Cara aman adalah menganggap episode selesai bila salah satu bernilai benar, sebagaimana diperlihatkan pada blok uji asap di atas.

Ringkasan#

  • Gymnasium dan PyTorch varian CPU dipasang dari sumber resmi, dengan versi dipatok lewat requirements.txt agar lingkungan dapat direproduksi.
  • API Gymnasium 1.4 mengembalikan lima nilai dari env.step, dan episode dianggap selesai bila terminated atau truncated bernilai benar.
  • Agen acak pada CartPole-v1 bertahan delapan belas langkah dan menghasilkan return total delapan belas, sebuah angka yang menjadi garis dasar untuk modul selanjutnya.

Referensi#