强化学习7——价值迭代算法在强化学习中的应用

价值迭代算法

价值迭代算法相对于策略迭代更加直接,它直接根据以下公式来迭代更新。
    V ∗ ( s ) = max ⁡ a ∈ A { r ( s , a ) + γ ∑ s ′ ∈ S P ( s ′ ∣ s , a ) V ∗ ( s ′ ) }    V^*(s)=\max_{a\in\mathcal{A}}\{r(s,a)+\gamma\sum_{s'\in\mathcal{S}}P(s'|s,a)V^*(s')\}    V(s)=aAmax{r(s,a)+γsSP(ss,a)V(s)} 
之后使用下面的公式找到最优策略即可。
π ( s ) = arg ⁡ max ⁡ a { r ( s , a ) + γ ∑ s ′ p ( s ′ ∣ s , a ) V k + 1 ( s ′ ) } \pi(s)=\arg\max_{a}\{r(s,a)+\gamma\sum_{s^{\prime}}p(s^{\prime}|s,a)V^{k+1}(s^{\prime})\} π(s)=argamax{r(s,a)+γsp(ss,a)Vk+1(s)}
image.png

策略迭代是更新完状态价值函数后,更新策略,之后再更新状态价值函数;而价值迭代,先不断迭代状态价值函数,一次性得到贪心最优策略。但是策略迭代过程中,是由V1直接到了V2,会跳过过程中的一些点,但是在价值迭代时候,需要从 V 1 → V 12 ′ → V 12 ′ ′ V_1 \to V_{12}' \to V_{12}'' V1V12V12′′ 这些点,比较费时间。

流程如下所示:

  • 随机初始化 V ( s ) V(s) V(s)
  • w h i l e Δ > θ d o : while \Delta > \theta do: whileΔ>θdo
    • Δ ← 0 \Delta \gets 0 Δ0
    • 对于每一个状态 s ∈ S s\in S sS:
      • v ← V ( s ) v\gets V(s) vV(s)
      • V ( s ) ← max ⁡ a r ( s , a ) + γ ∑ s ′ P ( s ′ ∣ s , a ) V ( s ′ ) V(s)\leftarrow\max_ar(s,a)+\gamma\sum_{s^{\prime}}P(s^{\prime}|s,a)V(s^{\prime}) V(s)maxar(s,a)+γsP(ss,a)V(s)
      • Δ ← m a x ( Δ , ∣ v − V ( s ) ∣ ) \Delta \gets max(\Delta , |v-V(s)|) Δmax(Δ,vV(s))
  • end while
  • 返回一个确定的策略 π ( s ) = arg ⁡ max ⁡ a { r ( s , a ) + γ ∑ s ′ P ( s ′ ∣ s , a ) V ( s ′ ) } \pi(s)=\arg\max_a\{r(s,a)+\gamma\sum_{s^{\prime}}P(s^{\prime}|s,a)V(s^{\prime})\} π(s)=argmaxa{r(s,a)+γsP(ss,a)V(s)}

价值迭代的代码如下所示:

class ValueIteration():
    def __init__(self,env,theta,gamma):
        self.env=env
        self.v=[0]*env.ncol*env.nrow # 初始化价值为0
        self.theta=theta
        self.gamma=gamma
        # 价值迭代结束后得到的策略
        self.pi=[None for i in range(self.env.ncol*self.env.nrow)]
        
    def valueIteration(self):
        cnt =0
        while 1:
            maxDiff=0
            newV=[0]*self.env.ncol*self.env.nrow
            for s in range(self.env.ncol*self.env.nrow):
                qsaList=[]
                for a in range(4):
                    qsa=0
                    for transition in self.env.P[s][a]:
                        p,nextState,r,done=transition
                        qsa+=p*(r+self.gamma*self.v[nextState]*(1-done))
                    qsaList.append(qsa)
                newV[s]=max(qsaList)
                maxDiff=max(maxDiff,abs(newV[s]-self.v[s]))
            self.v=newV
            if maxDiff<self.theta: break
            cnt+=1
        print("价值迭代一共进行%d轮" % cnt)
        self.getPolicy()
        
    def getPolicy(self):
        # 根据价值函数导出一个贪婪策略
        for s in range(self.env.ncol*self.env.nrow):
            qsaList=[]
            for a in range(4):
                qsa=0
                for transition in self.env.P[s][a]:
                    p,nextState,r,done=transition
                    qsa+=p*(r+self.gamma*self.v[nextState]*(1-done))
                qsaList.append(qsa)
            maxq=max(qsaList)
            cntq=qsaList.count(maxq)
            self.pi[s]=[1/cntq if q==maxq else 0 for q in qsaList]
            
env = CliffWalkingEnv()
action_meaning = ['^', 'v', '<', '>']
theta = 0.001
gamma = 0.9
agent = ValueIteration(env, theta, gamma)
agent.valueIteration()
价值迭代一共进行14轮
状态价值:
-7.712 -7.458 -7.176 -6.862 -6.513 -6.126 -5.695 -5.217 -4.686 -4.095 -3.439 -2.710
-7.458 -7.176 -6.862 -6.513 -6.126 -5.695 -5.217 -4.686 -4.095 -3.439 -2.710 -1.900
-7.176 -6.862 -6.513 -6.126 -5.695 -5.217 -4.686 -4.095 -3.439 -2.710 -1.900 -1.000
-7.458  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000  0.000
策略:
ovo> ovo> ovo> ovo> ovo> ovo> ovo> ovo> ovo> ovo> ovo> ovoo
ovo> ovo> ovo> ovo> ovo> ovo> ovo> ovo> ovo> ovo> ovo> ovoo
ooo> ooo> ooo> ooo> ooo> ooo> ooo> ooo> ooo> ooo> ooo> ovoo
^ooo **** **** **** **** **** **** **** **** **** **** EEEE
  • 27
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
强化学习是一种基于试错学习的算法,已经在机器人自动路径规划得到广泛应用。下面深入讲解强化学习算法在机器人自动路径规划应用: 1. 强化学习算法的基本思想是通过智能体与环境的交互进行学习,通过不断试错来优化智能体的策略。在机器人自动路径规划,智能体可以是机器人,环境可以是机器人所处的物理环境。 2. 强化学习算法有一个关键的概念是奖励函数,它用来评价智能体的行为。在机器人自动路径规划,奖励函数可以根据机器人的任务和环境特点进行设计,例如奖励机器人尽快到达目标点,避免碰撞等。 3. 常用的强化学习算法有Q-learning、DQN、Actor-Critic等。在机器人自动路径规划,这些算法可以用来优化机器人的路径规划策略,通过不断试错来寻找最优路径。 4. 一种常用的基于强化学习的路径规划方法是基于价值迭代的方法。该方法通过将机器人的路径规划问题转化为一个马尔可夫决策过程,然后利用价值迭代算法来求解最优策略。 5. 另一种常用的基于强化学习的路径规划方法是基于策略梯度的方法。该方法通过直接学习机器人的路径规划策略,通过不断试错来优化策略参数,从而得到最优路径。 总之,强化学习算法已经成为机器人自动路径规划的重要技术,可以通过不断试错来优化机器人的路径规划策略,适应不同的任务和环境特点。未来随着强化学习算法的不断发展,机器人自动路径规划的效果也将得到进一步提升。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值