马尔可夫决策过程(MDP)精讲:状态转移概率与策略迭代

马尔可夫决策过程(Markov Decision Process, MDP)是强化学习领域中的核心概念之一,它描述了一个智能体(Agent)在环境中采取行动并接收奖励的过程。本文将聚焦于MDP中的两个重要方面:状态转移概率与策略迭代,通过理论讲解和代码示例,帮助读者深入理解这两个概念。

状态转移概率

状态转移概率是MDP中的一个关键要素,它定义了从当前状态采取某个行动后转移到下一状态的概率。具体来说,对于给定的状态$s$和行动$a$,转移到下一个状态$s'$的概率表示为$P(s'|s, a)$。

例如,假设有一个简单的环境,状态集$S = \{s_1, s_2\}$,行动集$A = \{a_1, a_2\}$,状态转移概率可以表示为:

  • $P(s_1|s_1, a_1) = 0.7, P(s_2|s_1, a_1) = 0.3$
  • $P(s_1|s_1, a_2) = 0.4, P(s_2|s_1, a_2) = 0.6$
  • ...

策略迭代

策略迭代是求解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。希望这些内容能够帮助读者更好地理解和应用强化学习的核心概念。