强化学习 gridworld P77 模拟

2023-10-31

import numpy as numpy
from tabulate import tabulate

class State: # class for each unit on the game
    def __init__(self, _id):
        if _id != 0:
            self.value = 0
        elif _id == 0:
            self.value = 0
        self.id = _id
        self.left_bound = max(1, (self.id // 4) * 4)  # save the left border
        self.right_bound =  min(14, (self.id // 4) * 4 + 3) # save the right border
        self.nextS = [self.move('L'), self.move('R'), self.move('U'), self.move('D')]


    def move(self, u):  # get next S
        if u == 'L':  # move left
            if self.id - 1 >= self.left_bound:
                return self.id - 1
            elif self.id - 1 == 0:
                return 0
            else:
                return self.id
        if u == 'R':  # move right
            if self.id + 1 <= self.right_bound:
                return self.id + 1
            elif self.id + 1 == 15:
                return 0
            else:
                return self.id
        if u == 'U':  # move up
            if self.id - 4 >= 1:
                return self.id - 4
            elif self.id - 4 == 0:
                return 0
            else:
                return self.id
        if u == 'D':  # move down
            if self.id + 4 <= 14:
                return self.id + 4
            elif self.id + 4 == 15:
                return 0
            else:
                return self.id

    def update(self, S):  # S is the whole set of the States.
        V = 0
        for i in range(0, 4):
            V += S[self.nextS[i]].value
        # print("update id " + str(self.id))
        # print("for the " + str(self.nextS[i]))
        # print("old value" + str(self.value))
        # print("new value" + str(S[self.nextS[i]].value))
        self.value = -1+0.25 * V

def train(k=10):
    V  = []
    S_T = State(0)
    S = {0: S_T}
    for j in range(1, 15):
        S[j] = State(j)
    for loop in range(k):
        if loop>=1000 and loop%1000 == 0:
            print("Training "+str(loop)+"'s loop.......Remaining: "+str(k-loop)+ " loops")
        n = numpy.random.random()
        if n > 0.5:
            for j in range(1, 15):
                S[j].update(S)
        else:
            for j in range(14, 0, -1):
                S[j].update(S)
    for t in range(0,16):
        if t == 0 or t == 15:
            V.append("0")
        else:
            V.append(S[t].value)
    draw(V)


def draw(valueArray):
    for i in range(4):
        print("----------------------")
#         print("| "+str(int(valueArray[i*4]))+" | "+str(int(valueArray[i*4+1])) +" | "+str(int(valueArray[i*4+2])) +" | "+str(int(valueArray[i*4+3])) +" |")
#         print("| %.1f | %.1f | %.1f | %.1f |" % float(valueArray[i*4]),valueArray[i*4+1],valueArray[i*4+2],valueArray[i*4+3])
#         print("| %.1f | %.1f | %.1f | %.1f |" % float(valueArray[i*4]),float(valueArray[i*4+1]),float(valueArray[i*4+2]),float(valueArray[i*4+3]))
        print("| %.1f | %.1f | %.1f | %.1f " % (float(valueArray[i*4]),float(valueArray[i*4+1]),float(valueArray[i*4+2]),float(valueArray[i*4+3])))
    print("----------------------")
    print("Accurate State Values List:")
    for i in range(1,8):
        print("State "+str(2*i-1)+": "+str(valueArray[2*i-1])+ "          State "+str(2*i)+": "+str(valueArray[2*i]))

if __name__ == '__main__':
    k = input("Specify the desired training loop count(0-10000):")
    train(int(k))

增加一个节点 exercise 4.3


import numpy as numpy
from tabulate import tabulate

class State: # class for each unit on the game
    def __init__(self, _id):
        if _id != 0:
            self.value = 0
        elif _id == 0:
            self.value = 0
        self.id = _id
        self.left_bound = max(1, (self.id // 4) * 4)  # save the left border
        self.right_bound =  min(14, (self.id // 4) * 4 + 3) # save the right border
        self.nextS = [self.move('L'), self.move('R'), self.move('U'), self.move('D')]


    def move(self, u):  # get next S
        if self.id==17:
            if u=='L':
                return 12
            if u=='R':
                return 14
            if u=='U':
                return 13
            if u=='D':
                return 17
        if self.id==13 and u=='D':
                return 17
        if u == 'L':  # move left
            if self.id - 1 >= self.left_bound:
                return self.id - 1
            elif self.id - 1 == 0:
                return 0
            else:
                return self.id
        if u == 'R':  # move right
            if self.id + 1 <= self.right_bound:
                return self.id + 1
            elif self.id + 1 == 15:
                return 0
            else:
                return self.id
        if u == 'U':  # move up
            if self.id - 4 >= 1:
                return self.id - 4
            elif self.id - 4 == 0:
                return 0
            else:
                return self.id
        if u == 'D':  # move down
            if self.id + 4 <= 14:
                return self.id + 4
            elif self.id + 4 == 15:
                return 0
            else:
                return self.id

    def update(self, S):  # S is the whole set of the States.
        V = 0
        for i in range(0, 4):
            V += S[self.nextS[i]].value
        # print("update id " + str(self.id))
        # print("for the " + str(self.nextS[i]))
        # print("old value" + str(self.value))
        # print("new value" + str(S[self.nextS[i]].value))
        self.value = -1+0.25 * V

def train(k=10):
    V  = []
    S_T = State(0)
    S = {0: S_T}
    for j in range(1, 15):
        S[j] = State(j)
    S[17] = State(17)
    for loop in range(k):
        if loop>=1000 and loop%1000 == 0:
            print("Training "+str(loop)+"'s loop.......Remaining: "+str(k-loop)+ " loops")
        n = numpy.random.random()
        if n > 0.5:
            for j in range(1, 15):
                S[j].update(S)
            S[17].update(S)
        else:
            S[17].update(S)
            for j in range(14, 0, -1):
                S[j].update(S)
    for t in range(0,16):
        if t == 0 or t == 15:
            V.append("0")
        else:
            V.append(S[t].value)
    V.append(S[17].value)
    draw(V)


def draw(valueArray):
    for i in range(4):
        print("----------------------")
#         print("| "+str(int(valueArray[i*4]))+" | "+str(int(valueArray[i*4+1])) +" | "+str(int(valueArray[i*4+2])) +" | "+str(int(valueArray[i*4+3])) +" |")
#         print("| %.1f | %.1f | %.1f | %.1f |" % float(valueArray[i*4]),valueArray[i*4+1],valueArray[i*4+2],valueArray[i*4+3])
#         print("| %.1f | %.1f | %.1f | %.1f |" % float(valueArray[i*4]),float(valueArray[i*4+1]),float(valueArray[i*4+2]),float(valueArray[i*4+3]))
        print("| %.1f | %.1f | %.1f | %.1f " % (float(valueArray[i*4]),float(valueArray[i*4+1]),float(valueArray[i*4+2]),float(valueArray[i*4+3])))
    print(float(valueArray[16]))
    print("----------------------")
    print("Accurate State Values List:")
    for i in range(1,8):
        print("State "+str(2*i-1)+": "+str(valueArray[2*i-1])+ "          State "+str(2*i)+": "+str(valueArray[2*i]))

if __name__ == '__main__':
    k = input("Specify the desired training loop count(0-10000):")
    train(int(k))

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

强化学习 gridworld P77 模拟 的相关文章

  • GitChat·前端

    GitChat 作者 韩亦乐 前言 我们都知道 大学几乎是没有 Web 前端课的 以我所在的大学为例 唯一引导我们了解 JavaScript 的也只是 人机界面 和 Web应用开发 选修课 再者 由于这些选修课的课时短 面向的主要群体是大部
  • webpack5教程

    目录 简介 创建webpack项目 webpack核心配置文件config的使用 webpack打包多入口 多出口 如何配置webpack dev server 1 了解webpack dev server 2 安装webpack dev
  • python爬虫出现 json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

    1 运行python爬虫出现如下图所示bug 2 解决办法 跟更新下最新的网站请求头request headers 和检查下请求链接是否还是一样 requests url 应该是就长时间没登陆 要跟新最新的cookies 登陆成功 200
  • Microsoft Office2021下载安装教程(非常详细)从零基础入门到精通,看完这一篇就够了

    软件下载 软件 Office 版本 2021 语言 简体中文 大小 4 57G 系统要求 Win10及以上版本 64位操作系统 硬件要求 CPU 2 0GHz 内存 4G 或更高 下载通道 百度网盘丨64位下载链接 https pan ba
  • lnmp下搭建TP5一些小问题

    1 安装lnmp 不多BB 拿到了新的阿里云ECS主机 一键安装lnmp命令 wget http soft vpser net lnmp lnmp1 5 tar gz cO lnmp1 5 tar gz tar zxf lnmp1 5 ta
  • Zotero搭建笔记

    目录 一 官网下载客户端和浏览器插件Zotero translator 二 客户端登录or注册 三 安装插件 3 1 茉莉花 3 2 Zotfile 3 3 抓取网页文件 知网 知乎 微信等 3 4 翻译器 3 5 提取doi号 sci h
  • 嵌入式 程序中的text段、data段和bss段

    一般情况 一个程序本质上都是由 bss段 data段 text段三个段组成 这是计算机程序设计中重要的基本概念 而且在嵌入式系统的设计中也非常重要 牵涉到嵌入式系统运行时的内存大小分配 存储单元占用空间大小的问题 在采用段式内存管理的架构中
  • Java 获取当前日期时间字符串速度测试2306221507

    Java 获取当前日期时间字符串速度测试2306221507 测试代码 import java text SimpleDateFormat import java time import java time format DateTimeF
  • 微众银行区块链张开翔:数字时代的身份基础设施建设

    6月24日 中钞区块链技术研究院 飞天诚信科技股份有限公司 微众银行等17家单位共同发起成立分布式数字身份产业联盟 DID Alliance 简称DIDA 共建分布式数字身份基础设施 打造可信开放数字新生态 本文系微众银行区块链首席架构师张
  • vaspkit使用_vaspkit.014安装使用说明 -

    vaspkit 0 14 修正版发布 安装下载指南 1 下载网址 http www pudn com downloads221 sourcecode unix linux detail1038949 html 免费的 2 利用xshell将
  • 微信小程序之间的参数传递、获取

    一 获取当前页面参数 js onLoad async function options var pages getCurrentPages 获取加载的页面 var currentPage pages pages length 1 获取当前页
  • 记·Linux挖矿病毒应急响应

    一 前言 朋友说他的机器被用来挖矿了 叫我帮他处理一下 正好锻炼锻炼应急响应能力 二 处置 top查看cup发现占用300 确实是被用来挖矿了 查看异常进程9926的pid端口 发现为空查找不到连接情况 怎么回事 查看全部端口网络连接 发现
  • javaAPI(五):比较器Comparable和Comparator

    前言 java中的对象 正常情况下 只能进行比较 或 不能使用 gt 或 lt 的 但是再开发场景中 我们需要对多个对象进行排序 言外之意 就需要比较对象的大小 如何实现 使用两个接口中的一个 Comparable 自然排序 1 像Stri
  • 区块链架构有哪些?

    本文将整理汇总目前常见的区块链各种架构 通过汇总分析 区块链的架构基本都大同小异 前面详细介绍几个 后面的就不重复介绍了 个人技术公众号 解决方案工程师 欢迎同领域的朋友关注 相互交流 一 区块链原理架构 技术层面 区块链的结构如下图所示
  • python中使用numpy.load()读取npz文件遇到的一个小问题

    import numpy as np np load data npz 报错 OSError Errno 22 Invalid argument 之后发现问题 我将 npz文件下载之后修改了名字 如果代码中指定了特定的文件名 例如 xxx
  • Webservice实践(五)基于CXF的服务端开发

    本节将实践目前最流行的第二种web service 发布和调试框架 CXF Apache CXF 是一个开放源代码框架 提供了用于方便地构建和开发 Web 服务的可靠基础架构 它允许创建高性能和可扩展的服务 您可以将这样的服务部署在 Tom
  • 我的世界如何开直连服务器,我的世界服务器如何连接 连接服务器教程

    我的世界分单人模式和多人模式 在游戏中我们一般是玩单人模式的 可是在偌大的世界中室友你一个人 你是否会觉得寂寞呢 下面小编就来介绍下如何进入多人模式 希望大家喜欢 多人模式服务器可以自己创建 也可以加入他人的服务器 那么怎么加入服务器呢 下
  • Python之列表

    标题 列表 什么是列表 列表的创建 列表的删除 列表的访问 列表的常用方法 append insert extend pop remove clear count index list filter reduce lambda 列表支持的运
  • Tomcat:eclipse首选项中没有tomcat?

    为eclipse添加tomcat插件 近期因为兴趣 找了一个javaweb的纯SSM的项目 但是发现我的eclipse4 7版本的 首选项中竟然没有tomcat 所以在网上找了很多方法 终于找到一个很有用的博客 有俩种方法 方法一 一 下载
  • 【OpenCV学习笔记】【函数学习】四(origin+imageData+cvcopy()函数+CvMemStorage 类型+CvPoint类型)

    1 origin 在使用opencv显示图像时会出现图像倒立的情况 这与IplImage的origin属性有关系 origin为0表示顶左结构 即图像的原点是左上角 如果为1为左下角 一般从硬盘读入的图片或者通过cvCreateImage方

随机推荐

  • 289. 生命游戏(Java)

    题目描述 根据 百度百科 生命游戏 简称为生命 是英国数学家约翰 何顿 康威在 1970 年发明的细胞自动机 给定一个包含 m n 个格子的面板 每一个格子都可以看成是一个细胞 每个细胞都具有一个初始状态 1 即为活细胞 live 或 0
  • Python期末实训,爬虫实验报告

    Python爬取豆瓣电影 版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net qq 45774645 article details 11
  • 华为手机微信聊天记录删除怎么恢复?基于华为电脑助手备份的恢复方法

    华为手机最新的微信记录恢复方法 简单有效 HiSuite是华为手机官方的手机电脑助手管理软件 可以把手机设备上的数据备份至电脑 支持联系人 短信 应用程序等的备份 同样HiSuite也可以把微信库文件完整地备份到电脑上 这样就可以扫描微信库
  • 如何编写REST API

    编写REST API REST API规范 编写REST API 实际上就是编写处理HTTP请求的async函数 不过 REST请求和普通的HTTP请求有几个特殊的地方 REST请求仍然是标准的HTTP请求 但是 除了GET请求外 POST
  • Oracle 动态sql 实现方式

    1 2 Sample Program 10 Dynamic SQL Method 4 3 4 This program connects you to ORACLE using your username and 5 password th
  • 后端接口判断字段必填_ERP系统会计凭证中的那些必填项

    作者 Jelly 声明 本文章仅代表原作者观点 仅用于SAP软件的应用与学习 不代表SAP公司 01 凭证日期 凭证日期是必填的 凭证日期填写原始单据的日期 02 过账日期 过账日期是必填的 凭证正式过账到系统的日期 系统默认凭证记账当日
  • 微信小程序webview(H5页面)调用微信小程序支付

    1 业务描述 微信小程序商城入口进入的页面是商城H5页面 在H5页面进行微信支付如何实现 2 微信小程序 webview访问H5页面 必须使用微信小程序支付 如何实现以及实现方式以及支付后页面返回功能 商品详情 h5页面 gt 商品确认页
  • 人工智能不断发展扫码升级刷脸是必然趋势

    人工智能技术的不断发展 刷码升级成刷脸也是必然趋势 刷脸技术落地以后 迎合5G浪潮 将会提供更精准 更完善 更丰富化的服务 它的全面应用将会为企业带去智能化体验 也会引发新一轮的行业变革 起到真正的赋能作用 支付宝 微信支付 银联的三大巨头
  • Go Code Review Comments 译文

    持续更新中 原文最新链接https github com golang go wiki CodeReviewComments 5a40ba36d388ff1b8b2dd4c1c3fe820b8313152f Github译文链接https
  • Keil5添加.c文件与.h文件的方法-导入支持库-新大陆物联网竞赛-Lora模块&NBIOT模块例程-添加导入文件

    一 概述 在某些情况下 我们使用现用的物联网开发例程 例如新大陆物联网的Lora与NBIOT的例程 我们对其例程内目前所有的库不满意 不足以实现开发需要的功能 我们需要在原有工程上添加我们自己的库 以满足开发需要 二 操作步骤 首先 打开文
  • 【NodeJs-5天学习】第一天篇④ ——了解NodeJs回调函数和事件驱动机制

    NodeJs 5天学习 第一天篇 NodeJs回调函数和事件处理机制 1 Node js 中的回调 Callback 函数 2 Nodejs事件循环模型 2 1 浅析事件驱动 2 2 深入NodeJs事件驱动 3 总结 面向读者群体 电子物
  • logback 配置详解(二)——appender

    1 appender
  • solidworks 2020小金球_solidworks2020如何开启小金球RealView

    solidworks2020如何开启小金球RealView 如何查看sw否开启小金球RealView 只有在建模环境下依次点击 视图 显示 RealView图形 就可以看见小金球RealView是否开启 像图片中的呈现灰色 则表示小金球Re
  • 今天使用模板特化所遇到的问题

    template lt class T gt void test const T t cout lt lt void test const T t lt lt endl template lt gt void test lt int gt
  • Ubuntu中deb包详解及打包教程

    一 deb包详解 1 gt deb 包的文件结构 deb 软件包里面的结构 它具有DEBIAN和软件具体安装目录 如etc usr opt tmp等 deb包本身有三部分组成 组成 详细 数据包 包含实际安装的程序数据 文件名为 data
  • C# 中的Dispose()用法

    Dispose 在向大家详细介绍C 调用Dispose 方法之前 首先让大家了解下Dispose 方法 然后全面介绍C 调用Dispose 方法 我们已经知道了处置那些占用非受控 unmanaged 资源的对象的重要性 现在应该编写资源管理
  • 反射——通过工厂类来完成获取接口示例

    反射可实现程序中无new关键字 实现真正的解耦合 import java lang reflect InvocationTargetException import java lang reflect Member 只要是获取接口示例 都应
  • python离线安装第三方库

    python离线安装第三方库 安装包下载 cmd实现离线安装 zip文件包下载安装 whl文件下载安装 由于内外网的物理隔离 导致很多python的第三方库无法在线安装 只能选择离线安装了 离线安装具体如下 安装包下载 python除了本身
  • 职场年度最励志文章:纽约华人女教师直指人心的23条金句

    多年的工作经历让我深刻理解这23句职场的肺腑之言 也许对于一个初出茅庐的大学毕业生 这些内容显得高屋建瓴 并不能被深刻理解 推荐这篇文章 不在于要你记住多少 而是希望透过别人经验的这面镜子 审视自己 如果有什么忠告 只有一句话 去经历 你就
  • 强化学习 gridworld P77 模拟

    import numpy as numpy from tabulate import tabulate class State class for each unit on the game def init self id if id 0