Policy iteration และ value iteration

Reinforcement Learning with Gymnasium ใน Python

Fouad Trad

Machine Learning Engineer

Policy iteration

  • กระบวนการวนซ้ำเพื่อหา optimal policy

ภาพแสดงขั้นตอนแรก: การกำหนดค่าเริ่มต้นให้ policy

Reinforcement Learning with Gymnasium ใน Python

Policy iteration

  • กระบวนการวนซ้ำเพื่อหา optimal policy

ภาพแสดงสองขั้นตอน: การกำหนดค่าเริ่มต้นและการประเมิน policy

Reinforcement Learning with Gymnasium ใน Python

Policy iteration

  • กระบวนการวนซ้ำเพื่อหา optimal policy

ภาพแสดงสามขั้นตอน: การกำหนดค่าเริ่มต้น การประเมิน และการปรับปรุง policy

Reinforcement Learning with Gymnasium ใน Python

Policy iteration

  • กระบวนการวนซ้ำเพื่อหา optimal policy

ภาพแสดงว่าการประเมินและปรับปรุง policy เป็นกระบวนการวนซ้ำที่ดำเนินต่อไปจนกว่า policy จะไม่เปลี่ยนแปลง

Reinforcement Learning with Gymnasium ใน Python

Policy iteration

  • กระบวนการวนซ้ำเพื่อหา optimal policy

ภาพแสดงขั้นตอนของ policy iteration ตั้งแต่การกำหนดค่าเริ่มต้น สลับระหว่างการประเมินและปรับปรุง จนได้ optimal policy

Reinforcement Learning with Gymnasium ใน Python

Grid world

policy = {
    0:1, 1:2, 2:1, 
    3:1, 4:3, 5:1,
    6:2, 7:3
}

ภาพแสดง policy โดยใช้ลูกศรแทนการเคลื่อนที่ในแต่ละ state

Reinforcement Learning with Gymnasium ใน Python

Policy evaluation

def policy_evaluation(policy):

V = {state: compute_state_value(state, policy) for state in range(num_states)}
return V
Reinforcement Learning with Gymnasium ใน Python

Policy improvement

def policy_improvement(policy):

improved_policy = {s: 0 for s in range(num_states-1)}
Q = {(state, action): compute_q_value(state, action, policy) for state in range(num_states) for action in range(num_actions)}
for state in range(num_states-1): max_action = max(range(num_actions), key=lambda action: Q[(state, action)]) improved_policy[state] = max_action
return improved_policy
Reinforcement Learning with Gymnasium ใน Python

Policy iteration

def policy_iteration():

policy = {0:1, 1:2, 2:1, 3:1, 4:3, 5:1, 6:2, 7:3}
while True: V = policy_evaluation(policy) improved_policy = policy_improvement(policy)
if improved_policy == policy: break policy = improved_policy
return policy, V
Reinforcement Learning with Gymnasium ใน Python

Optimal policy

policy, V = policy_iteration()
print(policy, V)
{0: 2, 1: 2, 2: 1, 
 3: 1, 4: 2, 5: 1, 
 6: 2, 7: 2} 

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

optimal.png

Reinforcement Learning with Gymnasium ใน Python

Value iteration

  • รวม policy evaluation และ improvement ไว้ในขั้นตอนเดียว
    • คำนวณ state-value function ที่เหมาะสมที่สุด
    • นำมาสร้าง policy

ภาพแสดงขั้นตอนแรก: กำหนดค่าเริ่มต้นของ V ด้วยศูนย์

Reinforcement Learning with Gymnasium ใน Python

Value iteration

  • รวม policy evaluation และ improvement ไว้ในขั้นตอนเดียว
    • คำนวณ state-value function ที่เหมาะสมที่สุด
    • นำมาสร้าง policy

ภาพแสดงขั้นตอนเพิ่มเติม: คำนวณ Q-values โดยใช้ตาราง V

Reinforcement Learning with Gymnasium ใน Python

Value iteration

  • รวม policy evaluation และ improvement ไว้ในขั้นตอนเดียว
    • คำนวณ state-value function ที่เหมาะสมที่สุด
    • นำมาสร้าง policy

ภาพแสดงขั้นตอนเพิ่มเติม: อัปเดต V โดยเลือก action ที่ดีที่สุดในแต่ละ state

Reinforcement Learning with Gymnasium ใน Python

Value iteration

  • รวม policy evaluation และ improvement ไว้ในขั้นตอนเดียว
    • คำนวณ state-value function ที่เหมาะสมที่สุด
    • นำมาสร้าง policy

ภาพแสดงว่ากระบวนการคำนวณ Q-values จาก V และการอัปเดต V จะวนซ้ำจนกว่า V จะไม่เปลี่ยนแปลง

Reinforcement Learning with Gymnasium ใน Python

Value iteration

  • รวม policy evaluation และ improvement ไว้ในขั้นตอนเดียว
    • คำนวณ state-value function ที่เหมาะสมที่สุด
    • นำมาสร้าง policy

ภาพแสดงว่าเมื่อกระบวนการวนซ้ำเสร็จสิ้น จะได้ optimal policy และ V

Reinforcement Learning with Gymnasium ใน Python

การเขียนโค้ด value iteration

V = {state: 0 for state in range(num_states)}
policy = {state:0 for state in range(num_states-1)}
threshold = 0.001

while True: new_V = {state: 0 for state in range(num_states)}
for state in range(num_states-1): max_action, max_q_value = get_max_action_and_value(state, V)
new_V[state] = max_q_value policy[state] = max_action
if all(abs(new_V[state] - V[state]) < thresh for state in V): break V = new_V
Reinforcement Learning with Gymnasium ใน Python

การหา action และค่าที่เหมาะสมที่สุด

def get_max_action_and_value(state, V):
    Q_values = [compute_q_value(state, action, V) for action in range(num_actions)]

max_action = max(range(num_actions), key=lambda a: Q_values[a])
max_q_value = Q_values[max_action]
return max_action, max_q_value
Reinforcement Learning with Gymnasium ใน Python

การคำนวณ Q-values

def compute_q_value(state, action, V):
    if state == terminal_state:
        return None
    _, next_state, reward, _ = env.P[state][action][0]
    return reward + gamma * V[next_state]
Reinforcement Learning with Gymnasium ใน Python

Optimal policy

print(policy, V)
{0: 2, 1: 2, 2: 1, 
 3: 1, 4: 2, 5: 1, 
 6: 2, 7: 2} 

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

ภาพแสดงค่า state-values ของ optimal policy

Reinforcement Learning with Gymnasium ใน Python

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

Reinforcement Learning with Gymnasium ใน Python

Preparing Video For Download...