Sesi 12 dari 16

Reinforcement Learning
untuk Kontrol Adaptif

Kontroller yang belajar dari pengalaman — tanpa model sistem, tanpa data berlabel — hanya dari sinyal reward dan hukuman, seperti melatih anjing dengan hadiah dan teguran.

Paradigma RL MDP & Bellman Q-Learning Policy Gradient RL vs Kontrol Klasik Aplikasi Grid Python Demo
🎮
Topik 12.1
Paradigma Reinforcement Learning
🐕 Analogi — Melatih Anjing dengan Reward & Hukuman

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!

Siklus Interaksi Agent–Environment
🤖 Agent

Controller / Policy π(a|s)

Aksi a(t)
State s(t), Reward r(t)
🏭 Environment

Sistem nyata / Simulator

Tujuan: Maksimalkan cumulative reward   G(t) = Σ γᵏ · r(t+k)
Komponen RLDefinisiContoh (Kontrol Grid Listrik)
State sObservasi kondisi environment saat iniDeviasi frekuensi Δf, SoC baterai, beban aktif
Action aKeputusan yang diambil agentDaya discharge baterai, set-point generator
Reward rSinyal feedback kualitas keputusanr = −|Δ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 sSeberapa "bagus" kondisi frekuensi saat ini
🎲
Topik 12.2
Markov Decision Process & Persamaan Bellman
♟️ Analogi — Catur: Nilai Posisi Ditentukan Masa Depan

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".

📐 Markov Decision Process & Bellman Equation
MDP didefinisikan: (S, A, P, R, γ)
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
📋
Topik 12.3
Q-Learning: Belajar dari Pengalaman
📒 Analogi — Buku Catatan Pengalaman Perjalanan

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.

📐 Q-Learning Update Rule (Temporal Difference)
Setelah mengambil aksi a di state s, mendapat reward r,
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

🍽️ Analogi — Memilih Restoran: Coba Baru vs Langganan

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).

📐 ε-Greedy Policy
π(s) = { random action, dengan prob ε
        { argmax_a Q(s,a), dengan prob (1−ε)

Biasanya ε dimulai besar (0.9) lalu diturunkan:
ε(t) = ε_min + (ε_max − ε_min) · e^(−λt)
📈
Topik 12.4
Policy Gradient & Deep RL untuk Kontrol Kontinu
🎯 Analogi — Atlet yang Menyesuaikan Teknik

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!

KLASIK
REINFORCE

Policy gradient paling sederhana. Update θ proporsional dengan log π · G(t). Tinggi variance, perlu banyak episode.

POPULER
Actor-Critic (A2C)

Actor = policy π(a|s,θ). Critic = value function V(s,w). Critic mengurangi variance update actor. Lebih stabil dari REINFORCE.

INDUSTRI
PPO (Proximal Policy Optimization)

State-of-the-art untuk kontinu. Membatasi seberapa besar policy boleh berubah per update → stabil dan efisien. Dipakai OpenAI, DeepMind.

KONTROL
DDPG / TD3 / SAC

Dirancang khusus untuk action space kontinu. DDPG = DQN + policy gradient. SAC = off-policy + entropy maximization untuk eksplorasi otomatis.

🆚
Topik 12.5
RL vs Kontrol Adaptif Klasik
AspekMRAC / STRFuzzy / ANFISRL
Model sistem diperlukan?✅ Reference model / ARX❌ Tidak❌ Tidak (model-free)
Cara belajarGradient dari error trackingBackprop / LSE dari dataTrial & error dari reward
Jaminan stabilitas✅ Lyapunov formal⚠️ Tidak formal❌ Sangat sulit dibuktikan
Data yang dibutuhkanOnline (langsung)Training setJutaan 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)
🚨 Tantangan RL untuk Infrastruktur Kritis
  • 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.
Topik 12.6
Aplikasi RL: Energy Management Smart Grid
🏙️ Skenario: Manajemen Energi Microgrid Kampus UI Depok

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 RLDefinisi untuk Microgrid
State[SoC_baterai, P_PLTS, P_beban, harga_PLN, jam_hari]
ActionP_charge/discharge baterai, P_beli/jual ke PLN (kontinu)
Rewardr = −biaya_listrik − α·emisi + β·reliability_bonus
AlgoritmaSAC atau TD3 (action kontinu, off-policy)
TrainingSimulator 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
🐍
Topik 12.7
Python: Q-Learning untuk Kontrol Sederhana
Python 🐍 — qlearning_temperature.py
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?