RL-策略迭代算法

首先需要构建环境 env。环境应完整描述马尔可夫决策过程(MDP)的基本要素,包括状态集合 S 以及状态转移函数 step(即在给定状态与动作下返回下一状态与奖励)。

随后对策略进行初始化。策略用于表示在各状态下选择各动作的概率分布。为简化计算,初始时可设定各状态下动作概率为相同值(或统一初始值)。

策略迭代算法由两个交替执行的阶段组成:策略评估(Policy Evaluation) 与 策略改进(Policy Improvement)。

策略评估(Policy Evaluation)

策略评估阶段用于计算在当前策略下各状态的价值函数。由于状态价值依赖于后继状态(相邻状态)的价值,而后继状态的价值又依赖于更远未来的状态,因此初始计算得到的仅为估计值。随着相邻状态价值的更新,当前状态价值也会发生变化,因此必须通过迭代更新直至收敛,才能得到与当前策略一致的稳定价值函数。

其实现如下:

def policy_evaluation(policy, V):
    while True:
        delta = 0
        for s in range(env.n_states):
            v = 0
            for a in range(env.n_actions):
                prob = policy[s][a]
                next_state, reward = env.step(s, a)
                v += prob * (reward + gamma * V[next_state])
            delta = max(delta, abs(v - V[s]))
            V[s] = v
        if delta < theta:
            break
    return V

该过程通过反复迭代,使价值函数逐步逼近满足当前策略的贝尔曼方程的解。

策略改进(Policy Improvement)

在策略改进阶段,基于当前价值函数采用贪婪准则更新策略。对于每个状态,分别计算执行各个动作后的状态价值,并将价值最大的动作概率设为 1,其余动作概率设为 0,从而完成一轮策略更新。

终止条件

策略评估与策略改进交替执行。当某一轮策略改进后,新旧策略完全一致(在离散动作情况下,即所有状态所选择的动作均不再发生变化)时,认为策略已达到稳定状态,算法终止,此时输出最终策略

posted @ 2026-02-15 19:55  lencyy  阅读(2)  评论(1)    收藏  举报