ฟังก์ชันแอ็กชัน-ค่า

Reinforcement Learning with Gymnasium ใน Python

Fouad Trad

Machine Learning Engineer

ฟังก์ชันแอ็กชัน-ค่า (Q-values)

  • ผลตอบแทนที่คาดหวังของ:
    • เริ่มต้นที่สถานะ $s$
    • เลือกแอ็กชัน $a$
    • ปฏิบัติตามนโยบาย
  • ประเมินความเหมาะสมของแอ็กชันในแต่ละสถานะ

ภาพแสดงสูตรคำนวณ q_value สำหรับสถานะและแอ็กชัน โดย Q(s,a) คือผลรวมของรางวัลทันทีที่ได้รับหลังดำเนินแอ็กชัน และค่าที่ลดทอนแล้วของสถานะใหม่ที่คำนวณตามนโยบายที่กำหนด

Reinforcement Learning with Gymnasium ใน Python

Grid world

ภาพแสดงสภาพแวดล้อมแบบกำหนดเองที่มีภูเขา 2 ลูกและเพชร

  • ค่าของสถานะ

ภาพแสดงค่าของสถานะที่คำนวณไว้แล้วสำหรับทุกสถานะ

Reinforcement Learning with Gymnasium ใน Python

Q-values - สถานะ 4

ภาพแสดงเอเจนต์ในสถานะ 4

  • เอเจนต์เริ่มต้นที่สถานะ 4

ภาพแสดงค่าของสถานะที่คำนวณไว้แล้วสำหรับทุกสถานะ

Reinforcement Learning with Gymnasium ใน Python

Q-values - สถานะ 4

ภาพแสดง 4 แอ็กชันที่เอเจนต์ทำได้ในสถานะ 4 พร้อมรางวัลที่ได้รับ

  • เอเจนต์เคลื่อนที่ขึ้น ลง ซ้าย หรือขวาได้

ภาพแสดงค่าของสถานะที่คำนวณไว้แล้วสำหรับทุกสถานะ

Reinforcement Learning with Gymnasium ใน Python

สถานะ 4 - แอ็กชันลง

ภาพแสดงเอเจนต์เคลื่อนที่ลงจากสถานะ 4 ไปยังสถานะ 7

  • รางวัล: -2, ค่าของสถานะ: 5

ภาพแสดงค่าของสถานะที่คำนวณไว้แล้วสำหรับทุกสถานะ

Reinforcement Learning with Gymnasium ใน Python

สถานะ 4 - แอ็กชันลง

ภาพแสดงเอเจนต์เคลื่อนที่ลงจากสถานะ 4 ไปยังสถานะ 7 และค่า q-value ที่ได้คือ 3

  • $Q(4, \text{down}) = -2 + 1 \times 5 = 3$

ภาพแสดงค่าของสถานะที่คำนวณไว้แล้วสำหรับทุกสถานะ

Reinforcement Learning with Gymnasium ใน Python

สถานะ 4 - แอ็กชันซ้าย

ภาพแสดงเอเจนต์เคลื่อนที่ซ้ายจากสถานะ 4 ไปยังสถานะ 3 และค่า q-value ที่ได้คือ 1

  • $Q(4, \text{left}) = -1 + 1 \times 2 = 1$

ภาพแสดงค่าของสถานะที่คำนวณไว้แล้วสำหรับทุกสถานะ

Reinforcement Learning with Gymnasium ใน Python

สถานะ 4 - แอ็กชันขึ้น

ภาพแสดงเอเจนต์เคลื่อนที่ขึ้นจากสถานะ 4 ไปยังสถานะ 1 และค่า q-value ที่ได้คือ 7

  • $Q(4, \text{up}) = -1 + 1 \times 8 = 7$

ภาพแสดงค่าของสถานะที่คำนวณไว้แล้วสำหรับทุกสถานะ

Reinforcement Learning with Gymnasium ใน Python

สถานะ 4 - แอ็กชันขวา

ภาพแสดงเอเจนต์เคลื่อนที่ขวาจากสถานะ 4 ไปยังสถานะ 5 และค่า q-value ที่ได้คือ 9

  • $Q(4, \text{right}) = -1 + 1 \times 10 = 9$

ภาพแสดงค่าของสถานะที่คำนวณไว้แล้วสำหรับทุกสถานะ

Reinforcement Learning with Gymnasium ใน Python

Q-values ทั้งหมด

ภาพแสดง Q-values ที่คำนวณได้สำหรับทุกคู่สถานะ-แอ็กชัน

Reinforcement Learning with Gymnasium ใน Python

การคำนวณ Q-values

def compute_q_value(state, action):

if state == terminal_state: return None
_, next_state, reward, _ = env.unwrapped.P[state][action][0] return reward + gamma * compute_state_value(next_state)

ภาพแสดงสูตรคำนวณ q_value สำหรับสถานะและแอ็กชัน โดย Q(s,a) คือผลรวมของรางวัลทันทีที่ได้รับหลังดำเนินแอ็กชัน และค่าที่ลดทอนแล้วของสถานะใหม่ที่คำนวณตามนโยบายที่กำหนด

Reinforcement Learning with Gymnasium ใน Python

การคำนวณ Q-values

Q = {(state, action): compute_q_value(state, action)
     for state in range(num_states) 
     for action in range(num_actions)}

print(Q)
Reinforcement Learning with Gymnasium ใน Python

การคำนวณ Q-values

{(0, 0): 0, (0, 1): 1, (0, 2): 7, (0, 3): 0, 
 (1, 0): 0, (1, 1): 5, (1, 2): 8, (1, 3): 7, 
 (2, 0): 7, (2, 1): 9, (2, 2): 8, (2, 3): 8, 
 (3, 0): 1, (3, 1): 2, (3, 2): 5, (3, 3): 0, 
 (4, 0): 1, (4, 1): 3, (4, 2): 9, (4, 3): 7, 
 (5, 0): 5, (5, 1): 10, (5, 2): 9, (5, 3): 8, 
 (6, 0): 2, (6, 1): 2, (6, 2): 3, (6, 3): 1, 
 (7, 0): 2, (7, 1): 3, (7, 2): 10, (7, 3): 5, 
 (8, 0): None, (8, 1): None, (8, 2): None, (8, 3): None}

ภาพแสดง Q-values ที่คำนวณได้สำหรับทุกคู่สถานะ-แอ็กชัน

Reinforcement Learning with Gymnasium ใน Python

การปรับปรุงนโยบาย

ภาพแสดง Q-values ที่คำนวณได้สำหรับทุกคู่สถานะ-แอ็กชัน

Reinforcement Learning with Gymnasium ใน Python

การปรับปรุงนโยบาย

  • เลือกแอ็กชันที่มี Q-value สูงสุดในแต่ละสถานะ

ภาพแสดง Q-values ที่คำนวณได้สำหรับทุกคู่สถานะ-แอ็กชัน โดยวงกลมไว้ที่ Q-value สูงสุดของแต่ละสถานะ

Reinforcement Learning with Gymnasium ใน Python

การปรับปรุงนโยบาย

ภาพแสดงนโยบายเดิมและ Q-values ที่สอดคล้องกัน นโยบายเดิม

ภาพแสดงนโยบายใหม่เมื่อเลือกแอ็กชันที่นำไปสู่ Q-value สูงสุด

Reinforcement Learning with Gymnasium ใน Python

การปรับปรุงนโยบาย

improved_policy = {}


for state in range(num_states-1): max_action = max(range(num_actions), key=lambda action: Q[(state, action)])
improved_policy[state] = max_action
print(improved_policy)
{0: 2, 1: 2, 2: 1, 
 3: 2, 4: 2, 5: 1, 
 6: 2, 7: 2}
Reinforcement Learning with Gymnasium ใน Python

มาฝึกกันเถอะ!

Reinforcement Learning with Gymnasium ใน Python

Preparing Video For Download...