[PyTorch][chapter 58][强化学习-2-有模型学习]

news2025/2/26 9:48:29

前言: 

     在已知模型的环境里面学习,称为有模型学习(model-based learning).

    此刻,下列参数是已知的:

     p_{x\rightarrow x^{'}}^{a}:   在状态x 下面,执行动作a ,转移到状态 x^{'} 的概率

     R_{x\rightarrow x^{'}}^a: 在状态x 下面,执行动作a ,转移到 x^{'} 的奖赏

     

 有模型强化学习的应用案例
          棋类游戏:有模型强化学习算法(例如MCTS)被广泛应用于棋类游戏,例如围棋、国际象棋等。AlphaGo和AlphaZero就是使用MCTS的典型例子。

          路径规划:有模型强化学习算法(例如动态规划)可以用于路径规划问题,例如机器人导航、无人机路径规划等。

            资源调度:有模型强化学习算法可以用于优化资源调度问题,例如数据中心的任务调度、物流配送的路径规划等


目录:

  1.     策略评估
  2.     Bellman Equation
  3.      基于 T步累积奖赏的策略评估算法 例子       


一  策略评估

            模型已知时,对于任意策略\pi,能估算出该策略带来的期望累积奖赏。

            假设:

            状态值函数:   V^{\pi}(x):    从状态x 出发,使用策略\pi,带来的累积奖赏

            状态-动作值函数 Q^{\pi}(x,a): 从状态x 出发,执行动作a,再使用策略\pi,带来的累积奖赏

          由定义:

         状态值函数为:

           V_{T}^{\pi}(x)=E_{\pi}[\frac{1}{T}\sum_{t=1}^Tr_t|x_0=x]: T 步累积奖赏

           V_{\gamma}^{T}(x)=E_{\pi}[\frac{1}{T}\sum_{t=0}^T \gamma^tr_{t+1}|x_0=x] :\gamma 折扣累积奖赏,\gamma \in (0,1]

   

         状态-动作值函数

         Q_{T}^{\pi}(x,a)=E_{\pi}[\frac{1}{T}\sum_{t=1}^Tr_t|x_0=x,a_0=a] T 步累积奖赏

          Q_{\gamma}^{T}(x,a)=E_{\pi}[\frac{1}{T}\sum_{t=0}^T \gamma^tr_{t+1}|x_0=x,a_0=a] \gamma 折扣累积奖赏

      由于MDP具有马尔可夫性,即现在决定未来,将来和过去无关,我们很容易找到值函数的递归关系(Bellman 等式)

                V_{T}^{\pi}(x)=E_{\pi}[\frac{1}{T}\sum_{t=1}^T r_t|x_0=x]   

                            =E_{\pi}[\frac{1}{T}r_1+\frac{T-1}{T}\frac{1}{T-1}\sum_{t=2}^T r_t|x_0=x]

                           =\sum_{a \in A} \pi(x,a) \sum _{x^{'} \in X}P_{x\rightarrow x^{'}}^a (\frac{1}{T}R_{x\rightarrow x^{'}}^{a}+\frac{T-1}{T}E_{\pi}[\frac{1}{T-1}\sum_{t=1}^{T-1}r_t|x_0=x^{'}])

                          =\sum_{a \in A}\pi (x,a) \sum_{x^{'} \in X} P_{x\rightarrow x^{'}}^a(\frac{1}{T} R_{x \rightarrow x^{'}}^a+\frac{T-1}{T}V_{T-1}^{\pi}(x^{'}))             

  

     2.2  r折扣累积奖赏

   这是一种动态规划方案,从V_{0}^{\pi} 出发,通过一次迭代就能计算出每个状态的单步累积奖赏

V_{1}^{\pi}

  

有了状态值函数V后,可以直接计算出状态-动作值函数:

由于算法可能会迭代很多次,可以设置一个阀值,当执行一次迭代后

函数值小于\delta,停止迭代

    max_{x \in X}|V(x)-V^{'}(x)|<\delta


二   Bellman Equation(贝尔曼方程)

   

      

     

   2.1 Summing all future rewards and discounting them would lead to our return G

         G_t= R_{t+1}+\gamma R_{t+2}+r^2 R_{t+3}+..., \gamma \in (0,1)

   2.2 state-value function

         给定策略 \pi时,基于 state s 的条件期望函数,公式表示为:

         v_{\pi}=E(G_t|S_t=s)

          State-value function can be broken into:

      


三   基于 T步累积奖赏的策略评估算法 例子

    代码里面的行为函数采用的是Stochastic

# -*- coding: utf-8 -*-
"""
Created on Mon Oct 30 15:38:17 2023

@author: chengxf2
"""
import numpy as np
from enum import Enum



class State(Enum):
    #状态空间X    
    shortWater =1 #缺水
    health = 2  #健康
    overflow = 3 #凋亡
    apoptosis = 4 #溢水

class Action(Enum):
    #动作空间A
    water = 1 #浇水
    noWater = 2 #不浇水
    
class Env():
    
    def __init__(self):
        
        #状态空间
        self.X = [State.shortWater, State.health,State.overflow, State.apoptosis]   
        #动作空间
        self.A = [Action.water,Action.noWater]   

 
        self.Q ={}

        #从状态x出发,执行动作a,转移到新的状态x',得到的奖赏 r为已知道
        self.Q[State.shortWater] =[[Action.water,0.5,   State.shortWater,-1],
                                             [Action.water,0.5,   State.health,1],
                                             [Action.noWater,0.4, State.shortWater,1],
                                             [Action.noWater,0.6, State.overflow,-100]]


        self.Q[State.health]      =         [[Action.water,0.6,   State.health,1],
                                              [Action.water,0.4,   State.apoptosis,-1],
                                              [Action.noWater,0.6, State.shortWater,-1],
                                              [Action.noWater,0.4, State.health,1]]


        self.Q[State.overflow] =  [[Action.water,0.6,   State.overflow,-1],
                                   [Action.water,0.4,   State.apoptosis,-100],
                                   [Action.noWater,0.6, State.health,1],
                                   [Action.noWater,0.4, State.overflow,-1]]


        self.Q[State.apoptosis] =[[Action.water,1, State.apoptosis,-100],
                                [Action.noWater,1, State.apoptosis,-100]]
        
    def GetX(self):
        #获取状态空间
        return self.X

    def GetAction(self):
        #获取动作空间
        return self.A
    
    def GetQTabel(self):
        
        return self.Q
    
    

class LearningAgent():
    
    def GetStrategy(self):   
        #策略,处于不同的状态下面,采用不同的action
        stragegy ={}
        stragegy[State.shortWater] = {Action.water:1.0, Action.noWater:0.0}
        stragegy[State.health] =    {Action.water:0.9, Action.noWater:0.1}
        stragegy[State.overflow] = {Action.water:0.1, Action.noWater:0.9}
        stragegy[State.apoptosis] = {Action.water:0.0, Action.noWater:0.0}
        
        return stragegy
    
    def __init__(self):
          
          env = Env()
          self.X = env.GetX()
          self.A = env.GetAction()
          self.QTabel = env.GetQTabel()
          
          self.curV ={} #前面的累积奖赏
          self.V ={} #累积奖赏
          for x in self.X:    
              self.V[x] =0
              self.curV[x]=0
              
    def GetAccRwd(self,state,stragegy,t,V):
        #AccumulatedRewards
        #处于x状态下面,使用策略,带来的累积奖赏
        reward_x  =0.0

        for action in self.A:
            #当前状态处于x,按照策略PI,选择action 的概率,正常为1个,也可以是多个(按照概率选取对应的概率)
            p_xa = stragegy[state][action] # 使用策略选择action 的概率
          
            #任意x' in  X, s下个状态
            QTabel= self.QTabel[state]
            reward =0.0
            #print("\n ---Q----\n",QTabel)
            for Q in QTabel:
                 #print(Q, action)
                 if Q[0] == action:
                     #新的状态x'
                     newstate = Q[2] 
                     #当前状态x,执行动作a,转移到新的状态s的概率
                     p_a_xs =   Q[1]
                     #当前状态x,执行动作a,转移到新的状态s,得到的奖赏
                     r_a_xs = Q[-1]
                     reward += p_a_xs*((1.0/t)*r_a_xs + (1.0-1/t)*V[newstate])
                     
                     #print("\n 当前状态 ",x, "\t 转移状态 ",s, "\t 奖赏 ",r_a_xs,"\t 转移概率 ",p_a_xs ,"\t reward",reward)
           
            reward_x +=p_xa*reward
            
        return reward_x
                     

    def learn(self,T):
        
        stragegy =  self.GetStrategy()
        for  t  in range(1,T+1):
             #获得当前的累积奖赏
             for x in self.X:
                 self.curV[x] = self.GetAccRwd(x,stragegy,t,self.V)
             if (T+1) == t:
                 break
             else:
                 self.V = self.curV
    
        for x in self.X:
            print("\n 状态 ",x, "\t 奖赏 ",self.V[x])


        
        
        
    
    



if __name__ == "__main__":
    T =100
    agent = LearningAgent()
    agent.learn(T)

参考:

https://www.cnblogs.com/CJT-blog/p/10281396.html

1. 有模型强化学习概念理解_哔哩哔哩_bilibili

1.强化学习简介_哔哩哔哩_bilibili

16 强化学习 - 16.3 有模型学习 - 《周志华《机器学习》学习笔记》 - 书栈网 · BookStack

1 强化学习基础-Bellman Equation - 知乎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1158651.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

App渗透测试有哪些测试方法?可进行移动app测试的公司推荐

App渗透测试是当前互联网时代中不可或缺的重要环节。随着智能手机的普及和App应用的广泛使用&#xff0c;App渗透测试帮助企业保障其移动应用的安全性和可靠性&#xff0c;确保用户的隐私和敏感信息不会被黑客窃取。那么&#xff0c;什么是App渗透测试呢?它有哪些测试方法?接…

java实现pdf文件添加水印,下载到浏览器

java实现pdf文件添加水印&#xff0c;下载到浏览器 添加itextpdf依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.8</version> </dependency>文件下载到浏览器和指定路径 …

第四章 数据结构与算法——树与二叉树

一、树的定义 ①&#xff1a;树是一种 非线性 的数据结构&#xff0c;它是由 n &#xff08; n>0 &#xff09;个有限结点组成一个具有层次关系的集合。 ②&#xff1a; 把它叫做树是因 为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的 。 …

BetterDisplay Pro v1.4.15(显示器管理管理软件)

BetterDisplay Pro是一款屏幕显示优化工具&#xff0c;可用于Windows和Mac操作系统。它可以帮助用户调整屏幕的亮度、对比度、色彩等参数&#xff0c;以获得更好的视觉体验。此外&#xff0c;BetterDisplay Pro还提供了一些额外的功能&#xff0c;如屏幕分割、窗口管理、快捷键…

变量的作用域

在javascript中&#xff0c;var定义的变量实际是有作用域的。 1 假设在函数体内声明&#xff0c;但在函数体外不可以使用 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </…

HBase理论与实践-基操与实践

基操 启动&#xff1a; ./bin/start-hbase.sh 连接 ./bin/hbase shell help命令 输入 help 然后 <RETURN> 可以看到一列shell命令。这里的帮助很详细&#xff0c;要注意的是表名&#xff0c;行和列需要加引号。 建表&#xff0c;查看表&#xff0c;插入数据&#…

怎么检测开关电源质量的好坏?测试的方法是什么?

开关电源的工作原理 开关电源(简称SMPS)是常见的一种电源供应器&#xff0c;是高频化的电能转换装置&#xff0c;可以将电压透过不同形式的架构转换为用户端所需求的电压或电流。具有体积小、功耗小、效率高、高可靠性的特点&#xff0c;被广泛应用在工业、军工设备、科研设备、…

SHCTF 未出题目复盘

crypto week1 立正 逆序得到 :V Qook at you~ this is flag: EmxhE8tERKAfYAZ6S636dIWuEK46ZK4yRBdNdK4uRKd4 decode it 中间那串像b64 解码解不出什么 猜测还要rotate Emxh 和 flag编码后的前几位比较接近 考虑大写字母需要继续偏移 对大写字母处理完后得到 :Q Look at you…

当贝PadGO闺蜜机?多的是你不知道的玩法

一、当贝PadGO性能强在哪? 1、金属机身 当贝PadGO独有CD型底盘更有设计风格、后扶手设计更稳,且采用全金属的材质更有质感。并且在配色上还有熊猫白和唱片黑两种可以选择。屏幕采用AG磨砂类纸屏,自带纸张柔和效果,防眩光。并且拥有德国莱茵低蓝光、无频闪双重护眼认证,还可以…

食堂系统登录报错

因为数据库没有任何用户数据&#xff0c;所以会报错&#xff0c;需要添加admin用户 D:\env\jdk1.8.0_341\bin\java.exe -XX:TieredStopAtLevel1 -noverify -Dspring.output.ansi.enabledalways -Dcom.sun.management.jmxremote -Dspring.jmx.enabledtrue -Dspring.liveBeansVie…

“知了杯”网络安全竞赛(南充赛区)圆满落幕

为积极响应网络空间安全人才战略&#xff0c;加快攻防兼备网络创新人才培养步伐&#xff0c;实现以赛促学、以赛促教、以赛促用&#xff0c;推动网络空间安全人才培养和产学研用生态发展&#xff0c;成都知了汇智科技有限公司作为产教融合服务型平台机构&#xff0c;在四川省工…

LeetCode----84. 柱状图中最大的矩形

题目 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例 1: 输入:heights = [2,1,5,6,2,3] 输出:10 解释:最大的矩形为图中红色区域,面积为 10 示例 2: 输入: heights =…

中期科技:智慧公厕打造智能化城市设施,提升公共厕所管理与服务体验

智慧公厕是利用先进的技术和创新的解决方案来改进公厕的设施和管理。借助物联网、互联网、5G/4G通信、人工智能、大数据、云计算等新兴技术的集成&#xff0c;智慧公厕具备了一系列令人惊叹的应用功能。从监测公厕内部人体活动状态、人体存在状态&#xff0c;到空气质量情况、环…

【LVS实战】03 LVS负载均衡-DR模式实验

本文介绍&#xff0c;如何通过ipvsadm配置负载均衡&#xff0c;并且转发模式为DR直接路由模式 一、网络拓扑 如下图&#xff1a; LVS负载均衡的机器&#xff0c;配置了一个VIP&#xff1a;10.1.0.7 二、前置准备 每台机器关闭防火墙 systemctl stop firewalldRS装好nginx…

01【保姆级】-GO语言特点和安装使用和hello

01-GO语言基本概念和安装使用 一、概念1.1 Go语言的诞生1.2 GO语言的特点&#xff1a; 二、安装go2.1 安装2.2 安装环境变量 三、下载&安装goland3.1 官网下载3.2 下载后&#xff0c;进行安装&#xff1a; 四、编写Hello&#xff08;详解&#xff09; 如何学习&#xff1a;…

AI视频监控汇聚平台EasyCVR增加算法功能小tips

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等&#xff0c;能对外…

【原理】循环水系统【组件介绍】

目录 前言一、工作原理二、主要组件2-1、 保温水箱2-2、 热水泵2-3、 电加热器2-4、 管式换热器2-5、 开关阀、流量阀和调节阀2-6、 冷却塔2-7、 冷水泵 总结 前言 循环水系统是一种用于维持恒定温度或温度范围的工业或建筑设施中的热力控制系统。该系统通过循环水来传递热量&a…

智慧公厕:科技赋予公共卫生新生命,提升城市管理品质

在现代化城市中&#xff0c;公共卫生设施的发展与提升一直是对城市管理者和市民的共同期望。然而&#xff0c;传统的公共厕所常常令人困扰&#xff0c;脏乱臭成为难题。为了解决这一难题&#xff0c;广州中期科技科技有限公司全新升级的智慧公厕整体解决方案&#xff0c;补誉为…

配音软件怎么选择?(简单又实用)

随着短视频、自媒体的普及推广越来越好&#xff0c;想必大家都了解到配音软件的重要性了&#xff0c;用对配音软件&#xff0c;借助AI的力量让我们的作品达到事半功倍是效果&#xff0c;目前市面上有很多不同类型的配音软件&#xff0c;从专业的录音室级别的软件到简单易用的家…

Videos

文章目录 Video ClassificationEarly Fusion, Late Fusion, 3D CNN,Recognizing Actions from Motion 从动作中识别行为接下来介绍新技术回顾一下&#xff1a;非常多的video工作 Video Classification Early Fusion, Late Fusion, 3D CNN, Recognizing Actions from Motion 从…