[PyTorch][chapter 62][强化学习-基本概念]

前言:

   目录: 

  1.    强化学习概念
  2.    马尔科夫决策
  3.    Bellman 方程
  4.     格子世界例子


一 强化学习

       强化学习 必须在尝试之后,才能发现哪些行为会导致奖励的最大化。
当前的行为可能不仅仅会影响即时奖赏,还有影响下一步奖赏和所有奖赏

强化学习五要素如下:

 1.2 强化学习流程

      

         1: 产生轨迹(trajectory)

         2: 策略评估(policy-evaluate)

         3: 策略提升(policy-improve)

     这里重点讲一下 产生轨迹:

      当前处于某个state 下面,

      按照策略选择 action =A_t= \pi(s_t)

     根据新的state 给出 reward:R_{t+1}=f(s_{t+1})

  最后产生了轨迹链


二 马尔科夫决策

  2.1 马尔科夫决策要求:

    1: 能够检测到理想的状态
    2: 可以多次尝试
    3: 系统的下个状态只与当前信息有关,与更早的状态无关。
决策过程中还可和当前采取的动作有关.

 

2.2  马尔科夫决策五要素

     S:  状态集合 states
     A:  动作集合 actions
     P: 状态转移概率 P_{S_t \to s_{t+1}}^a
     R: 奖励函数(reward function) ,agent 采取某个动作后的及时奖励
     r:  折扣系数意味当下的reward 比未来反馈更重要

          \sum_{t=0}^{\infty }r^t R(s_t)

         r \in (0,1]

2.3   主要流程

       1: Agent 处于状态s_0

       2: 按照策略 选择动作 a_0

       3:执行该动作后,有一定的概率转移到新的状态 p_{s_0\rightarrow s_1}^a

2.4  价值函数

       V(s)=E_{\pi}(\sum_{t=1}^{T} r_t|S_0=s)

       当前时刻处于状态s,未来获得期望的累积奖赏

        分为两种: state 价值函数  state-action 价值函数

        最优价值函数:

                   不同策略下, 累积奖赏最大的  v_{*}=max_{\pi}v_{\pi}(x)

  2.5 策略 policy

       当前状态s 下,按照策略,要采用的动作

        action=\pi(s)


三  Bellman 方程

  

   4.1  状态值函数为:

           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]

   4.2 Bellman 方程

         V_{T}^{\pi}(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^{'}))

         证明:

                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^{'}))     

         r折扣奖赏bellman 方程

               V_{\gamma}^{\pi}(x)=\sum_{a \in A}\sum_{x^{'} \in X} P_{x\rightarrow x^{'}}^a(R_{x\rightarrow x^{'}}^a+\gamma V_{r}^{\pi}(x'))


四  格子世界例子

     在某个格子,执行上下左右步骤,其中步骤最短的

为最优路径

5.1:gridword.py

   

import numpy as np#手动输入格子的大小
WORLD_SIZE = 4
START_POS = [0,0]
END_POS = [WORLD_SIZE-1, WORLD_SIZE-1]
prob = 1.0
#折扣因子
DISCOUNT = 0.9
# 动作集={上,下,左,右}
ACTIONS = [np.array([0, -1]),    #leftnp.array([-1, 0]),  # upnp.array([0, 1]),   # rightnp.array([1, 0])]   # downclass GridwordEnv():def action_name(self, action):if action ==0:name = "左"elif action ==1:name = "上"elif action ==2:name = "右"else:name = "上"return namedef __init__(self):self.nA = 4 #action:上下左右self.nS = 16 #state: 16个状态self.S = []for i in range(WORLD_SIZE):for j in range(WORLD_SIZE):state =[i,j]self.S.append(state)def step(self, s, a):action = ACTIONS[a]state = self.S[s]done = Falsereward = 0.0next_state = (np.array(state) + action).tolist()if (next_state == START_POS) or (state == START_POS):next_state =  START_POSdone = Trueelif (next_state == END_POS) or (state == START_POS):next_state =  END_POSdone = Trueelse:x, y = next_state# 判断是否出界if x < 0 or x >= WORLD_SIZE or y < 0 or y >= WORLD_SIZE:reward = -1.0next_state = stateelse:reward = -1.0return prob, next_state, reward,done

5.2 main.py 

# -*- coding: utf-8 -*-
"""
Created on Mon Nov 13 09:39:37 2023@author: chengxf2
"""import numpy as npdef init_state(WORLD_SIZE):S =[]for i in range(WORLD_SIZE):for j in range(WORLD_SIZE):state =[i,j]S.append(state) print(S)# -*- coding: utf-8 -*-
"""
Created on Fri Nov 10 16:48:16 2023@author: chengxf2
"""import numpy as np
import sys
from gym.envs.toy_text import discrete  #环境
from enum import Enum
from gridworld import GridwordEnvclass Agent():def __init__(self,env):self.discount_factor = 1.0 #折扣率self.theta = 1e-3 #最大偏差self.S = []self.env = env#当前处于的位置,V 累积奖赏def one_step_lookahead(self,s, v):R = np.zeros((env.nA)) #不同action的累积奖赏for action in range(env.nA):prob, next_state,reward, done = env.step(s, action) #只有一个next_state_index = self.env.S.index(next_state)#print("\n state",s ,"\t action ",action, "\t new_state ", next_state,"\t next_state_index ", next_state_index,"\t r: ",reward)r=  prob*(reward + self.discount_factor*v[next_state_index])R[action] +=r#print("\n state ",s, "\t",R)        return Rdef value_iteration(self, env, theta= 1e-3, discount_factor =1.0):v = np.zeros((env.nS)) #不同状态下面的累积奖赏,16个状态iterNum = 0while True:delta = 0.0for s in range(env.nS):R = self.one_step_lookahead(s,v)#在4个方向上面得到的累积奖赏best_action_value = np.max(R)#print("\n state ",s, "\t R ",R, "\t best_action_value ",best_action_value)bias = max(delta, np.abs(best_action_value-v[s]))v[s] =best_action_value#if (s+1)%4 == 0:#print("\n -----s ------------",s)iterNum +=1if bias<theta:breakprint("\n 迭代次数 ",iterNum)return vdef learn(self):policy = np.zeros((env.nS,env.nA))v = self.value_iteration(self.env, self.theta, self.discount_factor)for s in range(env.nS):R =  self.one_step_lookahead(s,v)best_action=  np.argmax(R)#print(s,best_action_value )policy[s,best_action] = 1.0return policy,vif __name__ == "__main__":env = GridwordEnv()agent =Agent(env)policy ,v = agent.learn()for s in range(env.nS):action = np.argmax(policy[s])act_name = env.action_name(action)print("\n state ",s, "\t action ",act_name, "\t 累积奖赏 ",v[s])

参考:

【强化学习玩游戏】1小时竟然就学会了强化学习dqn算法原理及实战(人工智能自动驾驶/深度强化学习/强化学习算法/强化学习入门/多智能体强化学习)_哔哩哔哩_bilibili

2-强化学习基本概念_哔哩哔哩_bilibili

3-马尔科夫决策过程_哔哩哔哩_bilibili

4-Bellman方程_哔哩哔哩_bilibili

5-值迭代求解_哔哩哔哩_bilibili

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【移远QuecPython】EC800M物联网开发板的音乐播放(PWM蜂鸣器播放生日快乐歌,Sound模块播放音频)

【移远QuecPython】EC800M物联网开发板的音乐播放&#xff08;PWM蜂鸣器播放生日快乐歌&#xff0c;Sound模块播放音频&#xff09; 效果&#xff1a; 【移远QuecPython】EC800M开发板外置功放重金属和PWM音调&#xff08;BUG调试记录&#xff09; 文章目录 PWM蜂鸣器播放播放…

【运维 监控】Grafana + Prometheus,监控Linux

安装和配置Grafana与Prometheus需要一些步骤&#xff0c;下面是一个简单的指南&#xff1a; 安装 Prometheus&#xff1a; 使用包管理器安装 Prometheus。在 Debian/Ubuntu 上&#xff0c;可以使用以下命令&#xff1a; sudo apt-get update sudo apt-get install prometheus在…

掌握这11点外贸知识,能够给你外贸工作带来很大提升!

01.产品展示 关于产品展示&#xff0c;非常重要也一再提及&#xff0c;一个好的产品必须包括以下几部分&#xff1a; ● 产品标题准确概括产品&#xff1b; ● 产品图片清晰且包括细节图&#xff1b; ● 提供详尽的产品描述&#xff0c;比如型号、尺寸、材质、配件等等。最好…

在 uniapp 中 一键转换单位 (px 转 rpx)

在 uniapp 中 一键转换单位 px 转 rpx Uni-app 官方转换位置利用【px2rpx】插件Ctrl S一键全部转换下载插件修改插件 Uni-app 官方转换位置 首先在App.vue中输入这个&#xff1a; uni.getSystemInfo({success(res) {console.log("屏幕宽度", res.screenWidth) //屏…

Java面向对象(进阶)-- Object类的详细概述

文章目录 一、如何理解根父类二、 Object类的方法&#xff08;1&#xff09;引子&#xff08;2&#xff09;Object类的说明 三、了解的方法&#xff08;1&#xff09;clone( )1、介绍2、举例 &#xff08;2&#xff09;finalize( )1、介绍2、举例 &#xff08;3&#xff09;get…

独立站邮件营销大佬,手把手教你如何做好!

做独立站邮件营销的方式&#xff1f;独立站怎么做邮件营销&#xff1f; 邮件营销&#xff0c;作为独立站营销的重要手段之一&#xff0c;越来越受到卖家的重视。如何才能做好邮件营销呢&#xff1f;蜂邮EDM将手把手教你如何做好独立站邮件营销&#xff0c;让你在电商领域中更上…

【vue】0到1的常规vue3项目起步

创建项目并整理目录 npm init vuelatestjsconfig.json配置别名路径 配置别名路径可以在写代码时联想提示路径 {"compilerOptions" : {"baseUrl" : "./","paths" : {"/*":["src/*"]}} }elementPlus引入 1. 安装e…

mycat2 读写分离

mycat2 读写分离 mycat2 读写分离1.创建两个主从复制的数据库2.mycat2 读写分离3.mycat2读写分离测试 mycat2 读写分离 1.创建两个主从复制的数据库 参考&#xff1a;mysql主从复制 2.mycat2 读写分离 连接到mycat数据库 1.在mycat中创建数据库mydb1 CREATE DATABASE mydb…

MT8788核心板主要参数介绍_联发科MTK安卓核心板智能模块

MT8788核心板是一款功能强大的4G全网通安卓智能模块&#xff0c;具有超高性能和低功耗特点。该模块采用联发科AIOT芯片平台。 MT8788核心板搭载了12nm制程的四个Cortex-A73和四个Cortex-A53处理器&#xff0c;最高主频可达2.0GHZ。它还配备了4GB64GB(2GB16GB、3GB32GB)的内存&a…

ArcGIS实现矢量区域内所有要素的统计计算

1、任务需求&#xff1a;统计全球各国所有一级行政区相关属性的总和。 &#xff08;1&#xff09;有一个全球一级行政区的矢量图&#xff0c;包含以下属性&#xff08;洪灾相关属性 province.shp&#xff09; &#xff08;2&#xff09;需要按照国家来统计各个国家各属性的总值…

数据分析实战 | 多元回归——广告收入数据分析

目录 一、数据及分析对象 二、目的及分析任务 三、方法及工具 四、数据读入 五、数据理解 六、数据准备 七、模型构建 八、模型预测 九、模型评价 一、数据及分析对象 CSV格式的数据文件——“Advertising.csv” 数据集链接&#xff1a;https://download.csdn.net/d…

本地跑项目解决跨域问题

跨域问题&#xff1a; 指的是浏览器不能执行其他网站的脚本&#xff0c;它是由浏览器的同源策略造成的&#xff0c;是浏览器对 javascript 施加的安全限制。 同源策略&#xff1a; 是指协议&#xff08;protocol&#xff09;、域名&#xff08;host&#xff09;、端口号&…

【shardingjdbc】sharding-jdbc分库分表入门demo及原理分析

文章目录 场景配置&#xff1a;概念及原理:代码:思考: 本文中&#xff0c;demo案例涉及场景为sharding jdbc的分库情况。 通俗点说就是由原来的db0_table水平拆分为 db1 t_table &#xff0c;db2.t_table。 demo本身很简单&#xff0c;难点在于分片策略配置到底该怎么写&#x…

智能巡检软件哪个好?中小企业如何提升工作效率与质量?

在当今数字化、智能化的时代&#xff0c;智能巡检软件作为一种高效的工具&#xff0c;已经在各行各业得到了广泛的应用。它利用物联网、大数据、人工智能等技术&#xff0c;为巡检工作提供了全面的解决方案&#xff0c;帮助企业实现数据化、智能化管理&#xff0c;提高工作效率…

copilot 产生 python工具函数并生成单元测试

stock.py 这个文件&#xff0c;我只写了注释&#xff08;的开头&#xff09;&#xff0c;大部分注释内容和函数都是copilot # split a string and extract the environment variable from it # input can be , pathabc, pathabc;pathdef, pathabc;pathdef;pathghi # output i…

Leetcode-104 二叉树的最大深度

递归实现 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

【深度学习】pytorch——常用工具模块

笔记为自我总结整理的学习笔记&#xff0c;若有错误欢迎指出哟~ 深度学习专栏链接&#xff1a; http://t.csdnimg.cn/dscW7 pytorch——常用工具模块 数据处理 torch.utils.data模块DatasetDataLoadersamplertorch.utils.data的使用 计算机视觉工具包 torchvisiontorchvision.d…

浙大恩特客户资源管理系统 fileupload.jsp 任意文件上传

声明 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 一、产品简介 浙大恩特客户资源管理系统是一款针对企业客户资源管理的…

深度学习_12_softmax_图片识别优化版代码

因为图片识别很多代码都包装在d2l库里了&#xff0c;直接调用就行了 完整代码&#xff1a; import torch from torch import nn from d2l import torch as d2l"获取训练集&获取检测集" batch_size 256 train_iter, test_iter d2l.load_data_fashion_mnist(ba…

arcgis--浮点型栅格数据转整型

利用【Spatial Analyst工具】-【数学】-【转为整型】工具&#xff0c;将浮点型数据转为整型。如下&#xff1a; 【转为整型】对话框参数设计如下&#xff1a; 转换结果如下&#xff1a;