强化学习圣经-GridWorld实现

2023-11-03

import numpy as np
import matplotlib.pyplot as plt

grid_size = 5
posA = [0,1]
primeA = [4,1]
posB = [0,3]
primeB = [2,3]
discount = 0.9
actions = ['L', 'U', 'R', 'D']
actionProb = [[dict({'L':0.25, 'U':0.25, 'R':0.25, 'D':0.25})] * grid_size] * grid_size

#environment
NextState = []
actionReward = []

for i in range(grid_size):
    NextState.append([])
    actionReward.append([])
    for j in range(grid_size):
        next = dict()
        reward = dict()
        if i == 0:
            next['U'] = [i, j]
            reward['U'] = -1.0
        else:
            next['U'] = [i - 1, j]
            reward['U'] = 0.0
        if i == grid_size - 1:
            next['D'] = [i, j]
            reward['D'] = -1.0
        else:
            next['D'] = [i + 1, j]
            reward['D'] = 0.0
        if j == 0:
            next['L'] = [i, j]
            reward['L'] = -1.0
        else:
            next['L'] = [i, j - 1]
            reward['L'] = 0.0
        if j == grid_size - 1:
            next['R'] = [i, j]
            reward['R'] = -1.0
        else:
            next['R'] = [i, j + 1]
            reward['R'] = 0.0
        if [i, j] == posA:
            next['L'] = next['R'] = next['D'] = next['U'] = primeA
            reward['L'] = reward['R'] = reward['D'] = reward['U'] = 10.0
        if [i, j] == posB:
            next['L'] = next['R'] = next['D'] = next['U'] = primeB
            reward['L'] = reward['R'] = reward['D'] = reward['U'] = 5.0

        NextState[i].append(next)
        actionReward[i].append(reward)

#iteration       
choose = ['v(s):' ,'opt_v(s):']

for sel in choose:
    stateValue = np.zeros((grid_size, grid_size))
    while True:
        newStateValue = np.zeros((grid_size, grid_size))
        for i in range(grid_size):
            for j in range(grid_size):
                v_s, opt_v_s = [], []
                for action in actions:
                    newPosition = NextState[i][j][action]
                    v_s.append(actionProb[i][j][action] * (actionReward[i][j][action] + discount * stateValue[newPosition[0], newPosition[1]]))
                    opt_v_s.append(actionReward[i][j][action] + discount * stateValue[newPosition[0], newPosition[1]])
                if sel == 'v(s):':
                    newStateValue[i][j] = np.sum(v_s)
                else:
                    newStateValue[i][j] = np.max(opt_v_s)
        #print(newStateValue)
        if np.sum(np.abs(stateValue - newStateValue)) < 1e-4:
            print(sel)
            print(newStateValue)
            break
        stateValue = newStateValue
  
    plt.matshow(newStateValue, cmap=plt.cm.Greys)
    plt.colorbar()
    plt.title(sel)
    plt.show()

         

注:https://www.quantinfo.com/Article/View/725/%E5%9F%BA%E4%BA%8E%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0%E7%9A%84GridWorld%EF%BC%88%E4%BB%A3%E7%A0%81+%E6%80%9D%E8%B7%AF%EF%BC%89.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

强化学习圣经-GridWorld实现 的相关文章

  • 读取和写入文本文件

    读取和写入文本文件 Read a Text File 的这篇文章部分描述如何使用 StreamReader 类来读取文本的文件 Write a Text File Example 1 和 Write a Text File Example
  • 上传图片到七牛云

    1 首先我们需要先创建七牛云账号 并完成认证 七牛云 一站式场景化智能视频云 2 创建自己的存储空间 第一步 点击对象存储kodo 2 进入后点击空间管理 3 创建自己的存储空间 需要注意访问控制要选择公开 4 进入个人中心 gt 密钥管理
  • ImportError: cannot import name ‘XXXA‘ from ‘XXXB‘

    ImportError cannot import name XXXA from XXXB 废话不多说直接看问题 废话不多说直接看问题 ImportError cannot import name XXXa from XXXB 当你排除拼写
  • 四阶行列式直接展开_01行列式的定义上海交大

    本文文字和图片非原创 来源如下 强烈推荐原视频 作者 上海交通大学 知名教授 蒋启芬 高云 崔振等 平台 网易公开课 内容 线性代数 第一讲 行列式的定义 序言 对二元一次方程组 几何意义 平面上的两条动直线 通过加减消元可以变形到下边这种
  • 如何将本地项目上传至Gitee仓库(详细教程)

    码云 Gitee 简单介绍 Git 是一个开源的分布式版本控制系统 用于敏捷高效地处理任何或小或大的项目 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件 Git 与常用的版本控
  • C++-函数模板特化如何避免重复定义

    我正在用一个基于模板的库源代码 该库包含一些针对特定类型的模板函数特化 类模板 函数模板和模板函数特化都在头文件中 我在我的 cpp文件中 include 头文件并编译链接工程 但是为了在整个工程中使用该库 我将头文件包含在 stdafx
  • Linux——线程安全

    概念 线程安全就是在多线程运行的时候 不论线程的调度顺序怎样 最终的结果都是一样的 正确的 那么就说这些线程是安全的 要保证线程安全需要做到 对线程同步 保证同一时刻只有一个线程访问临界资源 在多线程中使用线程安全的函数 可重入函数 所谓线
  • sql语句多表查询

    问题及描述 1 学生表 Student S Sname Sage Ssex S 学生编号 Sname 学生姓名 Sage 出生年月 Ssex 学生性别 2 课程表 Course C Cname T C 课程编号 Cname 课程名称 T 教
  • 微信小程序客服功能接入指南

    一 功能介绍 1 客服消息会话入口有两个 1 小程序内 开发者在小程序内添加客服消息按钮组件 用户可在小程序内唤起客服会话页面 给小程序发消息 2 已使用过的小程序客服消息会聚合显示在微信会话 小程序客服消息 内 用户可以在小程序外查看历史
  • Windows 10 安装wsl(linux子系统)

    目录 1 简介 2 检查windows 系统版本 是否符合要求 3 安装wsl2 2中方式 3 1手动安装 3 2 应用商店安装 4 资料参考 1 简介 wsl是适用于windows环境linux子系统 支持windows 10 11和wi
  • 软件测试基础理论详解

    1 软件测试定义 软件测试 Software Testing 在规定的条件下对程序进行操作 以发现程序错误 衡量软件质量 并对其是否能满足设计要求进行评估的过程 2 软件测试工程师的素质 良好的沟通和表达能力 具有怀疑与破坏的精神 扎实的软
  • Unity实现异步加载场景

    一 创建UGUI 首先我们在LoginCanvas登入面板下面创建一个Panel 取名为LoadScreen 再在loadScreen下面创建一个Image组件 放置背景图片 然后我们再在lpadScreen下面继续创建一个Slider 这

随机推荐

  • jdbc C3P0容错和自动重连

    1 C3P0容错和自动重连与以下配置参数有关 breakAfterAcquireFailure true表示pool向数据库请求连接失败后标记整个pool为block并close 就算后端数据库恢复正常也不进行重连 客户端对pool的请求都
  • CentOS8基础篇14:使用源代码安装FTP软件

    一 TAR包管理工具简介 TAR Tape Archive TAR 是Linux下的包管理工具 利用tar命令可以将要备份保存的数据打包成一个扩展名为 tar的文件 以便文件的保存 需要使用时再利用tar命名进行释放即可 使用tar命令对文
  • Java面向对象编程

    下面有关JVM内存 说法错误的是 A 程序计数器是一个比较小的内存区域 用于指示当前线程所执行的字节码执行到了第几行 是线程隔离的 B Java方法执行内存模型 用于存储局部变量 操作数栈 动态链接 方法出口等信息 是线程隔离的 C 方法区
  • 自己组装电脑配置清单2022 自己组装电脑需要哪些配件

    自己组装电脑需要主板 CPU处理器 CPU散热器 内存条 显卡 硬盘 鼠标 键盘 声卡 耳机 音箱 机箱 显示器 电源等等 组装电脑怎么搭配更合适这些点很重要 http www adiannao cn du 3500左右性价比游戏型组装电脑
  • 【RPA】机器人流程自动化(RPA)概念、原理与实践

    多数人每天都会使用到一些机器人流程自动化工具 例如读取邮件和系统 计算 生成文件和报告 而在未来 那些你不想做的枯燥的工作 也许真的可以不做了 重复化 标准化的工作都可以让机器人帮你完成 本期推文特邀陈剑独家原创阐述RPA的概念 原理与实践
  • Kubernetes 的控制器模型

    文章目录 控制器模式 控制循环 控制器的配置和定义 Deployment 控制器详解 水平扩展 收缩 滚动更新 版本控制 控制器模式 本篇文章我们来看看 编排 这个 Kubernetes 项目最核心的功能吧 经过上篇文章的介绍后 你可能已经
  • redis主从-哨兵模式(windows下搭建)

    一 下载 由于redis官方并不支持windows操作系统 所以官网上是下不到的 需要到gitlab上下载 下载地址如下 https github com MicrosoftArchive redis releases 二 解压安装 将下载
  • webpack4---模块化打包工具(一)

    一 webpack4初识 1 首先先了解几个规范 ES规范 导出 export default Header 导入 import Header from header js CommonJS规范 导出 module exports Head
  • 如何快速安装和配置Node.js环境

    Node js是一种可以简化Web应用程序开发的平台 它使用JavaScript编写 并使用Chrome V8 JavaScript引擎 本文将介绍如何快速安装和配置Node js环境 为读者打开了Node js的大门 并提供了背景信息 一
  • 有趣的数据结构算法11——实现中缀表达式到后缀表达式的转换

    有趣的数据结构算法11 实现中缀表达式到后缀表达式的转换 解题思路 实现代码 GITHUB下载连接 这是学习栈的最后一篇blog了 在上一篇博客里 讲述了如何利用栈计算后缀表达式的结果 但是谁会无缘无故用后缀表达式写一个式子在那里计算呢 这
  • Quartz 之 JobExecutionContext 解读

    项目地址 https github com yuleiqq quartz example tree master quartz study 查看源码注释可以得知 JobExecutionContext 是一个包含了各种上下文信息的句柄 指向
  • 软件工程-分离原理

    分离原理是建立企业管理信息系统分析方法体系的基础分离原理与组合原理的关系定义分离原理 将研究对象中符合相同设计方法的同类项进行分离 归集 这种分离方式为在软件工程中建立具有普遍意义的分析与设计模型奠定了基础 作用将企业的运行体系进行拆分 在
  • [QT编程系列-13]:QT快速学习 - 1- 初识

    目录 第1章 QT的介绍 1 1 QT VS MFC 1 2 QT历史 1 3 QT的应用 1 4 QT学习方法 1 5 QT对象树 1 6 2 8定律 1 7 QT优势 1 8 QT支持的平台 第2章 QT UI是各种控件对象的堆积 第3
  • 【2021版本】软件测试的分类

    按测试阶段分类 单元测试 对软件中最小可充实单元进行检查和验证 单元测试的原则 尽可能保证各个测试用例是相互独立的 一般由代码的开发人员来实施 用以检验所开发的代码功能符合自己的设计要求 单元测试的益处 能尽早发现缺陷 有利于重构 简化集成
  • 决策树的典型案例

    小王是一家著名高尔夫俱乐部的经理 但是他被雇员数量问题搞得心情十分不好 某些天好像所有人都來玩高尔夫 以至于所有员工都忙的团团转还是应付不过来 而有些天不知道什么原因却一个人也不来 俱乐部为雇员数量浪费了不少资金 小王的目的是通过下周天气预
  • CentOS7 升级Python2.x到3.x

    CentOS 7 中默认安装了 Python 版本比较低 2 7 5 为了使用新版 3 x 需要对旧版本进行升级 由于很多基本的命令 软件包都依赖旧版本 比如 yum 所以 在更新 Python 时 建议不要删除旧版本 新旧版本可以共存 一
  • 临时标识--免登陆uuid

    一 什么是临时标识 就是一个字符串 可以让用户查看购物车等需要注册登录的信息 通常用uuid就可以创建这个字符串 临时标识 在请求拦截器中加 存储在vuex中的state userTempId 二 正式开始 1 下载创建uuid 并且生成用
  • 安卓隐藏输入法键盘以及去除光标方法

    在开发中遇到一个需求 点击屏幕非编辑区以及点击键盘回车键后要隐藏输入法以及光标要关闭 因此向各位分享一下做法 一 点击屏幕处于非edittext时让键盘消失以及清除edittext光标方法 1 在Activity中使用如下代码 重写事件分发
  • Android Jetpack新成员Compose尝鲜

    前言 Compose的alpha版已经出来有段时间了 前不久的GDG上郭神介绍了Hilt 没曾想居然没有Compose和4 2版本的studio介绍 Compose是google今年在jetpack里新增的一位成员 想着能越过传统的xml
  • 强化学习圣经-GridWorld实现

    import numpy as np import matplotlib pyplot as plt grid size 5 posA 0 1 primeA 4 1 posB 0 3 primeB 2 3 discount 0 9 acti