马尔可夫决策过程(Markov Decision Process, MDP)是强化学习领域中的核心概念之一,它描述了一个智能体(Agent)在环境中采取行动并接收奖励的过程。本文将聚焦于MDP中的两个重要方面:状态转移概率与策略迭代,通过理论讲解和代码示例,帮助读者深入理解这两个概念。
状态转移概率是MDP中的一个关键要素,它定义了从当前状态采取某个行动后转移到下一状态的概率。具体来说,对于给定的状态$s$和行动$a$,转移到下一个状态$s'$的概率表示为$P(s'|s, a)$。
例如,假设有一个简单的环境,状态集$S = \{s_1, s_2\}$,行动集$A = \{a_1, a_2\}$,状态转移概率可以表示为:
策略迭代是求解MDP的一种有效方法,它分为两个步骤:策略评估(Policy Evaluation)和策略改进(Policy Improvement)。
策略评估的目的是计算给定策略下每个状态的值函数(Value Function)。值函数表示从当前状态开始,按照给定策略行动所期望获得的累计折扣奖励。
值函数的迭代更新公式为:
$V_{k+1}(s) = \sum_{a \in A} \pi(a|s) \sum_{s' \in S} P(s'|s, a) [R(s, a, s') + \gamma V_k(s')]$
其中,$\pi(a|s)$表示在状态$s$下选择行动$a$的概率,$R(s, a, s')$表示从状态$s$采取行动$a$转移到状态$s'$所获得的奖励,$\gamma$是折扣因子。
策略改进的目的是根据当前的值函数找到一个更好的策略。对于每个状态,选择能够最大化期望奖励的行动,形成新的策略。
策略改进的公式为:
$\pi'(a|s) = \begin{cases}
1, & \text{if } a = \arg\max_{a \in A} \sum_{s' \in S} P(s'|s, a) [R(s, a, s') + \gamma V(s')] \\
0, & \text{otherwise}
\end{cases}$
以下是一个简单的Python代码示例,展示了如何使用策略迭代求解MDP:
import numpy as np
def policy_evaluation(P, R, gamma, policy, V, epsilon=0.01):
while True:
delta = 0
for s in range(len(V)):
v = V[s]
V[s] = sum([policy[s][a] * sum([P[s][a][s_prime] * (R[s][a][s_prime] + gamma * V[s_prime])
for s_prime in range(len(P[s][a]))])
for a in range(len(policy[s]))])
delta = max(delta, abs(v - V[s]))
if delta < epsilon:
break
return V
def policy_improvement(P, R, gamma, V):
policy_new = []
for s in range(len(V)):
q_s = []
for a in range(len(P[s])):
q_sa = sum([P[s][a][s_prime] * (R[s][a][s_prime] + gamma * V[s_prime])
for s_prime in range(len(P[s][a]))])
q_s.append(q_sa)
policy_new.append(np.argmax(q_s))
return policy_new
def policy_iteration(P, R, gamma, epsilon=0.01):
policy = [[0] * len(P[0]) for _ in range(len(P))]
V = [0] * len(P)
for s in range(len(P)):
policy[s][0] = 1 # Initial uniform random policy
while True:
V = policy_evaluation(P, R, gamma, policy, V, epsilon)
policy_new = policy_improvement(P, R, gamma, V)
if np.array_equal(policy, policy_new):
break
policy = policy_new
return policy, V
# Example usage
P = [
[[0.7, 0.3], [0.4, 0.6]],
# Add more state-action transition probabilities here
]
R = [
[[1, 0], [2, 1]],
# Add more state-action-next-state rewards here
]
gamma = 0.9
optimal_policy, optimal_value = policy_iteration(P, R, gamma)
print("Optimal Policy:", optimal_policy)
print("Optimal Value Function:", optimal_value)
本文详细介绍了马尔可夫决策过程中的状态转移概率与策略迭代,通过理论讲解和代码示例,展示了如何求解MDP。希望这些内容能够帮助读者更好地理解和应用强化学习的核心概念。