Melatih anjing duduk: Anda tidak menjelaskan fisika bagaimana anjing harus menekuk lutut. Anda hanya memberi hadiah (reward +) saat anjing duduk, dan mengabaikan atau memberi teguran (reward −) saat tidak. Lama-lama anjing belajar sendiri bahwa "duduk = dapat camilan". RL bekerja persis sama: Agent (kontroller) berinteraksi dengan Environment (sistem/pabrik), menerima reward dari setiap tindakan, dan perlahan belajar kebijakan (policy) terbaik — tanpa perlu model matematis sistem sama sekali!
🤖 Agent
Controller / Policy π(a|s)
🏭 Environment
Sistem nyata / Simulator
| Komponen RL | Definisi | Contoh (Kontrol Grid Listrik) |
|---|---|---|
| State s | Observasi kondisi environment saat ini | Deviasi frekuensi Δf, SoC baterai, beban aktif |
| Action a | Keputusan yang diambil agent | Daya discharge baterai, set-point generator |
| Reward r | Sinyal feedback kualitas keputusan | r = −|Δf| − 0.01·u² (hukum deviasi & energi) |
| Policy π | Fungsi pemetaan state → action | π(s) = argmax Q(s,a) dari Q-table atau NN |
| Value V(s) | Expected return jangka panjang dari state s | Seberapa "bagus" kondisi frekuensi saat ini |
Pemain catur ahli tidak hanya melihat papan sekarang — dia mempertimbangkan konsekuensi beberapa langkah ke depan. "Posisi ini bagus karena dalam 3 langkah bisa cek-mat." Persamaan Bellman formalkan intuisi ini: nilai suatu state = reward sekarang + nilai state berikutnya yang diharapkan. Seperti menjumlah reward sekarang dengan "janji reward masa depan".
S = state space, A = action space
P(s'|s,a) = probabilitas transisi
R(s,a) = reward, γ ∈ [0,1) = discount factor
Bellman Optimality Equation:
V*(s) = max_a [R(s,a) + γ · Σ P(s'|s,a) · V*(s')]
Q-value (action-value function):
Q*(s,a) = R(s,a) + γ · Σ P(s'|s,a) · max_{a'} Q*(s',a')
Policy optimal: π*(s) = argmax_a Q*(s,a)
💡 Mengapa γ (Discount Factor) Penting?
- γ = 0: Agent hanya peduli reward sekarang — sangat myopic (tidak ada perencanaan)
- γ → 1: Agent sangat peduli masa depan — berpikir jangka panjang
- Untuk kontrol infrastruktur kritis: γ = 0.95–0.99 — kita peduli stabilitas jangka panjang, bukan hanya keputusan saat ini
Bayangkan Anda sering bepergian dan mencatat di buku: "Dari Stasiun A ambil jalur ke Stasiun B → dapat reward bagus (cepat)", "Dari Stasiun A ambil jalur ke Stasiun C → lambat (reward buruk)". Lama-lama buku catatan menjadi panduan keputusan optimal. Q-table persis seperti itu — tabel besar yang mencatat "di state ini, ambil action ini → expected reward sekian". Q-Learning secara iteratif memperbaiki catatan ini dari setiap pengalaman nyata.
dan pindah ke state s':
TD Error: δ = r + γ·max_{a'} Q(s',a') − Q(s,a)
Update:
Q(s,a) ← Q(s,a) + α · δ
Q(s,a) ← Q(s,a) + α · [r + γ·max Q(s',a') − Q(s,a)]
α = learning rate, γ = discount factor
Off-policy: belajar dari pengalaman tanpa mengikuti policy target secara ketat
Exploration vs Exploitation: Dilema Utama RL
Exploitation = selalu pergi ke restoran favorit yang sudah terbukti enak. Exploration = mencoba restoran baru yang mungkin lebih enak (atau lebih buruk). Strategi ε-greedy menyeimbangkan keduanya: dengan probabilitas ε ambil action random (eksplorasi), dengan probabilitas (1−ε) ambil action terbaik yang diketahui (eksploitasi).
{ argmax_a Q(s,a), dengan prob (1−ε)
Biasanya ε dimulai besar (0.9) lalu diturunkan:
ε(t) = ε_min + (ε_max − ε_min) · e^(−λt)
Q-Learning seperti atlet panah yang memilih dari sekumpulan posisi berdiri yang sudah ditetapkan (action diskret). Policy Gradient seperti atlet yang terus-menerus menyesuaikan sudut lengan, kekuatan tarik, posisi badan (action kontinu) berdasarkan seberapa baik hasil panahnya. Cocok untuk kontrol sistem fisik yang memerlukan keluaran kontinu!
REINFORCE
Policy gradient paling sederhana. Update θ proporsional dengan log π · G(t). Tinggi variance, perlu banyak episode.
Actor-Critic (A2C)
Actor = policy π(a|s,θ). Critic = value function V(s,w). Critic mengurangi variance update actor. Lebih stabil dari REINFORCE.
PPO (Proximal Policy Optimization)
State-of-the-art untuk kontinu. Membatasi seberapa besar policy boleh berubah per update → stabil dan efisien. Dipakai OpenAI, DeepMind.
DDPG / TD3 / SAC
Dirancang khusus untuk action space kontinu. DDPG = DQN + policy gradient. SAC = off-policy + entropy maximization untuk eksplorasi otomatis.
| Aspek | MRAC / STR | Fuzzy / ANFIS | RL |
|---|---|---|---|
| Model sistem diperlukan? | ✅ Reference model / ARX | ❌ Tidak | ❌ Tidak (model-free) |
| Cara belajar | Gradient dari error tracking | Backprop / LSE dari data | Trial & error dari reward |
| Jaminan stabilitas | ✅ Lyapunov formal | ⚠️ Tidak formal | ❌ Sangat sulit dibuktikan |
| Data yang dibutuhkan | Online (langsung) | Training set | Jutaan interaksi (mahal) |
| Multi-objective optimization | ⚠️ Terbatas | ⚠️ Manual rules | ✅ Reward function fleksibel |
| Kesiapan industri | ✅ Sudah terbukti puluhan tahun | ✅ Sudah banyak diterapkan | ⚠️ Masih berkembang, pilot project |
| Interpretabilitas | ✅ Parameter θ bisa diamati | ✅ Rules bisa dibaca | ❌ Black box (jika pakai NN) |
- Safety during exploration: RL perlu "mencoba-coba" termasuk keputusan buruk. Di pembangkit listrik nyata, ini tidak bisa dilakukan! Solusi: training di simulator dulu (sim-to-real transfer).
- Reward shaping: Mendefinisikan reward yang tepat sangat sulit. Reward yang salah bisa menghasilkan policy aneh yang memaksimalkan reward tapi gagal secara teknis.
- Non-stationarity: Sistem infrastruktur terus berubah, tapi policy RL yang sudah dilatih mungkin tidak bisa mengikuti perubahan tersebut.
- Sertifikasi: Hampir tidak mungkin membuktikan keamanan RL secara formal — hambatan besar untuk regulasi keselamatan.
Kampus punya panel surya (PLTS), baterai, dan koneksi ke PLN. Setiap 15 menit, agent RL memutuskan: berapa dari PLTS disimpan ke baterai? Kapan beli dari PLN? Kapan jual ke PLN? Tujuan: minimal tagihan listrik dan minimal emisi CO₂, dengan batasan SoC baterai dan keandalan suplai. RL bisa mengoptimasi multi-objective ini secara simultan!
| Elemen RL | Definisi untuk Microgrid |
|---|---|
| State | [SoC_baterai, P_PLTS, P_beban, harga_PLN, jam_hari] |
| Action | P_charge/discharge baterai, P_beli/jual ke PLN (kontinu) |
| Reward | r = −biaya_listrik − α·emisi + β·reliability_bonus |
| Algoritma | SAC atau TD3 (action kontinu, off-policy) |
| Training | Simulator 1 tahun data historis cuaca & beban UI Depok |
✅ Hasil Penelitian RL untuk Microgrid (Global)
- Penghematan tagihan listrik 15–30% dibanding rule-based control
- Pengurangan emisi CO₂ hingga 20% karena optimasi waktu penggunaan PLTS
- SoC baterai lebih terjaga dalam batas aman karena RL "belajar" menghindari over/under-charge
- DeepMind berhasil mengurangi konsumsi pendingin data center Google sebesar 40% menggunakan RL
import numpy as np import matplotlib.pyplot as plt # ==========================================# Q-LEARNING: KONTROL SUHU SEDERHANA # State: suhu diskret [16..30] °C # Action: {0=AC kuat, 1=AC sedang, 2=AC mati} # Target: jaga suhu di 22°C # ========================================== np.random.seed(42) # === ENVIRONMENT DEFINISI === T_min, T_max = 16, 30 T_target = 22 n_states = T_max - T_min + 1 # 15 state (16°C..30°C) n_actions = 3 # 0=kuat, 1=sedang, 2=mati action_effect = [-1.5, -0.5, 0.8] # ΔT per step tiap aksi def state_to_temp(s): return s + T_min def temp_to_state(T): return int(np.clip(T - T_min, 0, n_states-1)) def step(s, a): T_now = state_to_temp(s) # Dinamika suhu + gangguan acak (panas dari luar) T_next = T_now + action_effect[a] + 0.3*np.random.randn() + 0.1 s_next = temp_to_state(T_next) # Reward: hukum deviasi dari target + hemat energi AC kuat err = abs(T_next - T_target) reward = -err - 0.5*(a == 0) # AC kuat dikurangi reward 0.5 if err < 0.8: reward += 2.0 # bonus berada dekat target return s_next, reward # === Q-TABLE: 15 states × 3 actions === Q = np.zeros((n_states, n_actions)) # === HYPERPARAMETERS === alpha = 0.15 # learning rate gamma = 0.95 # discount factor eps_max = 1.0 eps_min = 0.05 eps_dec = 0.003 n_episodes = 800 steps_per_ep = 100 ep_rewards = [] # === TRAINING LOOP === eps = eps_max for ep in range(n_episodes): s = temp_to_state(28) # mulai dari suhu 28°C (panas) total_r = 0 for _ in range(steps_per_ep): # ε-greedy action selection if np.random.rand() < eps: a = np.random.randint(n_actions) # eksplorasi else: a = np.argmax(Q[s]) # eksploitasi s_next, r = step(s, a) # Q-Learning update (TD Error) td_err = r + gamma*np.max(Q[s_next]) - Q[s, a] Q[s, a] += alpha * td_err s = s_next total_r += r ep_rewards.append(total_r / steps_per_ep) eps = max(eps_min, eps * (1 - eps_dec)) # === TEST POLICY yang sudah dipelajari === s = temp_to_state(28); T_trace = [state_to_temp(s)] a_trace = []; r_trace = [] for _ in range(120): a = np.argmax(Q[s]) # policy greedy (tanpa eksplorasi) s, r = step(s, a) T_trace.append(state_to_temp(s)) a_trace.append(a); r_trace.append(r) # === PLOT === fig, axes = plt.subplots(3, 1, figsize=(12, 9)) # Smooth reward curve smooth = np.convolve(ep_rewards, np.ones(30)/30, mode='valid') axes[0].plot(ep_rewards, alpha=0.3, color='orange') axes[0].plot(smooth, color='orange', lw=2, label='Reward rata-rata (smoothed)') axes[0].set_ylabel('Total Reward / Episode') axes[0].set_title('Q-Learning: Kurva Belajar Agent Kontrol Suhu') axes[0].legend(); axes[0].grid(alpha=0.3) axes[1].plot(T_trace, 'cyan', lw=2, label='Suhu Aktual (°C)') axes[1].axhline(T_target, color='orange', ls='--', lw=2, label=f'Target {T_target}°C') axes[1].fill_between(range(len(T_trace)), T_target-1, T_target+1, alpha=0.1, color='orange', label='Zona ±1°C') axes[1].set_ylabel('Suhu (°C)') axes[1].set_title('Test Policy: Suhu dikendalikan mendekati 22°C') axes[1].legend(fontsize=9); axes[1].grid(alpha=0.3) action_labels = {0:'AC Kuat', 1:'AC Sedang', 2:'AC Mati'} colors_a = {0:'#3b82f6', 1:'#f97316', 2:'#22c55e'} for ai, label in action_labels.items(): idx = [i for i,a in enumerate(a_trace) if a==ai] axes[2].scatter(idx, [ai]*len(idx), c=colors_a[ai], s=30, label=label) axes[2].set_yticks([0,1,2]); axes[2].set_yticklabels(['AC Kuat','AC Sedang','AC Mati']) axes[2].set_xlabel('Langkah') axes[2].set_title('Urutan Aksi Policy RL yang Dipelajari') axes[2].legend(ncol=3, fontsize=9); axes[2].grid(alpha=0.2) plt.tight_layout(); plt.show() print(f"\n📊 Q-Table yang Dipelajari (baris=suhu, kolom=aksi):") for s_i in range(n_states): best = np.argmax(Q[s_i]) T = state_to_temp(s_i) print(f" T={T}°C → best action: {action_labels[best]:10s} | Q={Q[s_i]}")
📊 Interpretasi Hasil
- Plot 1 (Kurva belajar): Reward meningkat seiring episode → agent belajar policy yang lebih baik
- Plot 2 (Suhu): Dari 28°C, agent berhasil menurunkan dan menjaga suhu mendekati 22°C tanpa tahu model termal ruangan
- Plot 3 (Aksi): Pola cerdas muncul: AC kuat saat suhu jauh di atas target, AC sedang/mati saat sudah dekat — otomatis dipelajari!
- Q-Table: Bisa dibaca: di suhu 28°C → AC kuat adalah pilihan terbaik; di 22°C → AC sedang atau mati
🧠 Kuis Pemahaman Sesi 12
1. Apa yang membedakan Reinforcement Learning dari supervised learning (seperti backprop di NN)?
2. Discount factor γ = 0.99 pada kontrol grid listrik berarti?
3. Tantangan terbesar penerapan RL pada infrastruktur kritis seperti pembangkit listrik adalah?