当前位置: 首页 > news >正文

强化学习案例复现(1)--- MountainCar基于Q-learning

1 搭建环境

1.1 gym自带

import gym# Create environment
env = gym.make("MountainCar-v0")eposides = 10
for eq in range(eposides):obs = env.reset()done = Falserewards = 0while not done:action = env.action_space.sample()obs, reward, done, action, info = env.step(action)env.render()rewards += rewardprint(rewards)

1.2 自行搭建(建议用该方法)

按照下文搭建MountainCar环境

往期文章:强化学习实践(三)基于gym搭建自己的环境(在gym0.26.2可运行)-CSDN博客

 

2.基于Q-learning的模型训练

import gym
import numpy as npenv = gym.make("GridWorld-v0")# Q-Learning settings
LEARNING_RATE = 0.1 #学习率
DISCOUNT = 0.95  #奖励折扣系数
EPISODES = 100  #迭代次数SHOW_EVERY = 1000# Exploration settings
epsilon = 1  # not a constant, qoing to be decayed
START_EPSILON_DECAYING = 1
END_EPSILON_DECAYING = EPISODES//2
epsilon_decay_value = epsilon/(END_EPSILON_DECAYING - START_EPSILON_DECAYING)DISCRETE_OS_SIZE = [20, 20]
discrete_os_win_size = (env.observation_space.high - env.observation_space.low) / DISCRETE_OS_SIZEprint(discrete_os_win_size)def get_discrete_state(state):discrete_state = (state - env.observation_space.low)/discrete_os_win_size# discrete_state = np.array(state - env.observation_space.low, dtype=float) / discrete_os_win_sizereturn tuple(discrete_state.astype(np.int64))  # we use this tuple to look up the 3 Q values for the available actions in the q-q_table = np.random.uniform(low=-2, high=0, size=(DISCRETE_OS_SIZE + [env.action_space.n]))for episode in range(EPISODES):state = env.reset()discrete_state = get_discrete_state(state)if episode % SHOW_EVERY == 0:render = Trueprint(episode)else:render = Falsedone = Falsewhile not done:if np.random.random() > epsilon:# Get action from Q tableaction = np.argmax(q_table[discrete_state])else:# Get random actionaction = np.random.randint(0, env.action_space.n)new_state, reward, done, _, c = env.step(action)new_discrete_state = get_discrete_state(new_state)# If simulation did not end yet after last step - update Q tableif not done:# Maximum possible Q value in next step (for new state)max_future_q = np.max(q_table[new_discrete_state])# Current Q value (for current state and performed action)current_q = q_table[discrete_state + (action,)]# And here's our equation for a new Q value for current state and actionnew_q = (1 - LEARNING_RATE) * current_q + LEARNING_RATE * (reward + DISCOUNT * max_future_q)# Update Q table with new Q valueq_table[discrete_state + (action,)] = new_q# Simulation ended (for any reson) - if goal position is achived - update Q value with reward directlyelif new_state[0] >= env.goal_position:# q_table[discrete_state + (action,)] = rewardq_table[discrete_state + (action,)] = 0print("we made it on episode {}".format(episode))discrete_state = new_discrete_stateif render:env.render()# Decaying is being done every episode if episode number is within decaying rangeif END_EPSILON_DECAYING >= episode >= START_EPSILON_DECAYING:epsilon -= epsilon_decay_valuenp.save("q_table.npy", arr=q_table)env.close()

3.模型测试

import gym
import numpy as npenv = gym.make("GridWorld-v0")# Q-Learning settings
LEARNING_RATE = 0.1
DISCOUNT = 0.95
EPISODES = 10DISCRETE_OS_SIZE = [20, 20]
discrete_os_win_size = (env.observation_space.high - env.observation_space.low) / DISCRETE_OS_SIZEdef get_discrete_state(state):discrete_state = (state - env.observation_space.low)/discrete_os_win_sizereturn tuple(discrete_state.astype(np.int64))  # we use this tuple to look up the 3 Q values for the available actions in the q-q_table = np.load(file="q_table.npy")for episode in range(EPISODES):state = env.reset()discrete_state = get_discrete_state(state)rewards = 0done = Falsewhile not done:# Get action from Q tableaction = np.argmax(q_table[discrete_state])new_state, reward, done, _, c = env.step(action)new_discrete_state = get_discrete_state(new_state)rewards += reward# If simulation did not end yet after last step - update Q tableif done and new_state[0] >= env.goal_position:print("we made it on episode {}, rewards {}".format(episode, rewards))discrete_state = new_discrete_stateenv.render()env.close()

相关文章:

强化学习案例复现(1)--- MountainCar基于Q-learning

1 搭建环境 1.1 gym自带 import gym# Create environment env gym.make("MountainCar-v0")eposides 10 for eq in range(eposides):obs env.reset()done Falserewards 0while not done:action env.action_space.sample()obs, reward, done, action, info env.…...

BUUCTF学习(6): 命令执行ip

1、介绍 2、hackbar安装 BUUCTF学习(四): 文件包含tips-CSDN博客 ?ip127.0.0.1;ag;cat$IFS$9fla$a.php 空格过滤 $IFS$9 检查源代码 结束...

javaweb:mybatis:mapper(sql映射+代理开发+配置文件之设置别名、多环境配置、顺序+注解开发)

1.0版本 sql映射文件实现 流程 首先程序进入启动类MyBatisDemo.java中&#xff0c;读取配置文件mybatis-config.xml 再由mybatis-config的mappers属性 <mappers><mapper resource"UserMapper.xml"></mapper></mappers>找到sql映射文件Use…...

JavaScript基础知识——练习巩固(2)

写一个程序&#xff0c;要求如下 需求1&#xff1a;让用户输入五个有效年龄&#xff08;0-100之间&#xff09;&#xff0c;放入数组中 必须输入五个有效年龄年龄&#xff0c;如果是无效年龄&#xff0c;则不能放入数组中 需求2&#xff1a;打印出所有成年人的年龄 (数组筛选)…...

FutureTask的测试使用和方法执行分析

FutureTask类图如下 java.util.concurrent.FutureTask#run run方法执行逻辑如下 public void run() {if (state ! NEW ||!RUNNER.compareAndSet(this, null, Thread.currentThread()))return;try {Callable<V> c callable;if (c ! null && state NEW) {V res…...

SpringMVC的请求处理

目录 请求映射路径的配置 请求数据的接收 接收Restful风格的数据 什么是Restful风格&#xff1f; 接收上传文件 获取headers头信息和cookie信息 JavaWeb常用对象获取 请求静态资源 注解驱动标签 请求映射路径的配置 请求映射路径的配置主要是通过RequestMapping注解实现…...

260. 只出现一次的数字 III

给你一个整数数组 nums&#xff0c;其中恰好有两个元素只出现一次&#xff0c;其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。 你必须设计并实现线性时间复杂度的算法且仅使用常量额外空间来解决此问题。 示例 1&#xff1a; 输入&…...

家政预约接单系统,家政保洁小程序开发;

家政预约接单系统&#xff0c;家政保洁维修小程序开发&#xff0c;阿姨管理&#xff0c;家政保险&#xff0c;合同管理&#xff0c;资金管理&#xff0c;营销推广等功能&#xff0c;包括&#xff1a;推广、营销、管理、培训、周边服务等等 家政系统详细功能介绍&#xff1a; 家…...

网络安全工程师需要学什么?零基础怎么从入门到精通,看这一篇就够了

网络安全工程师需要学什么&#xff1f;零基础怎么从入门到精通&#xff0c;看这一篇就够了 我发现关于网络安全的学习路线网上有非常多看似高大上却无任何参考意义的回答。大多数的路线都是给了一个大概的框架&#xff0c;告诉你那些东西要考&#xff0c;以及建议了一个学习顺…...

出差学知识No3:ubuntu查询文件大小|文件包大小|磁盘占用情况等

1、查询单个文件占用内存大小2、显示一个目录下所有文件和文件包的大小3、显示ubuntu所有磁盘的占用情况4、查看ubuntu单个包的占用情况 1、查询单个文件占用内存大小 使用指令&#xff1a;ls -lh 文件 2、显示一个目录下所有文件和文件包的大小 指令&#xff1a;du -sh* 3…...

详解cv2.copyMakeBorder函数【OpenCV图像边界填充Python版本】

文章目录 简介函数原型代码示例参考资料 简介 做深度学习图像数据集时&#xff0c;有时候需要调整一张图片的长和宽。如果直接使用cv2.resize函数会造成图像扭曲失真&#xff0c;因此我们可以采取填充图像短边的方法解决这个问题。cv2.copyMakeBorder函数提供了相关操作。本篇…...

前端技术-并发请求

并发请求 代码解释 定义了一个函数 concurRequest&#xff0c;用于并发请求多个 URL 并返回它们的响应结果。 function concurRequest(urls, maxNum) {return new Promise((resolve, reject) > {if (urls.length 0) {resolve([]);return;}const results [];let index …...

面试题-React(十三):React中获取Refs的几种方式

一、Refs的基本概念 Refs是React提供的一种访问DOM元素或组件实例的方式。通过Refs&#xff0c;我们可以在React中获取到底层的DOM节点或组件实例&#xff0c;并进行一些操作。Refs的使用场景包括但不限于&#xff1a;访问DOM属性、调用组件方法、获取输入框的值等。 二、获取…...

Linux CentOS 7升级curl8.4.0使用编译安装方式

1、查看当前版本 # curl --version curl 7.29.0 (x86_64-redhat-linux-gnu) libcurl/7.29.0 NSS/3.19.1 Basic ECC zlib/1.2.7 libidn/1.28 libssh2/1.4.3 Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps tel…...

探寻JWT的本质:它是什么?它有什么作用?

JWT&#xff08;JSON Web Token&#xff09;是一种基于 JSON 格式的轻量级令牌&#xff08;token&#xff09;协议&#xff0c;它被广泛应用于网络应用程序的身份验证和授权。相较于传统的 session-based 认证机制&#xff0c;JWT 具有更好的扩展性和互操作性&#xff0c;同时也…...

关于雅思听力答案限定字数的解释。

1. No more than three words and/or a number&#xff1a;31&#xff0c;可以填3/2/1个单词&#xff1b;1个数字&#xff1b;3/2/1个单词1个数字 2. No more than three words and/or numbers&#xff1a;3n&#xff0c;可以填3/2/1个单词&#xff1b;n个数字&#xff1b;3/2…...

化工python | CSTR连续搅拌反应器系统

绝热连续搅拌釜反应器 (CSTR) 是过程工业中常见的化学系统。 容器中发生单个一级放热且不可逆的反应 A → B,假定容器始终完全混合。 试剂 A 的入口流以恒定的体积速率进入罐。 产物流B以相同的体积速率连续排出,液体密度恒定。 因此,反应液体的体积是恒定的。 在反应器中发…...

交通物流模型 | 基于自监督学习的交通流预测模型

交通物流模型 | 基于自监督学习的交通流预测模型 在智能交通系统中,准确预测不同时间段的城市交通流量是至关重要的。现有的方法存在两个关键的局限性:1、大多数模型集中预测所有区域的交通流量,而没有考虑空间异质性,即不同区域的交通流量分布可能存在偏差;2、现有模型无…...

343. 整数拆分 96.不同的二叉搜索树

343. 整数拆分 设dp[i]表示拆分 数字i 出来的正整数相乘值最大的值 (i - j) * j,和dp[i - j] * j是获得dp[i]的两种乘法&#xff0c;在里面求最大值可以得到当前dp[i]的最大值&#xff0c;但是这一次的得出的最大值如果赋值给dp[i]&#xff0c;可能没有没赋值的dp[i]大&#…...

Vue3理解(9)

侦听器 1.计算属性允许我们声明性地计算衍生值,而在有些情况下&#xff0c;我们需要状态变化时执行一些方法例如修改DOM。 2.侦测数据源类型&#xff0c;watch的第一个参数可以市不同形式的‘数据源’&#xff0c;它可以市一个ref(包括计算属性)&#xff0c;一个响应式对象&…...

避坑指南:Pixhawk+OpenMV精准降落常见的5个硬件连接问题(附杜邦线焊接方案)

PixhawkOpenMV精准降落硬件连接避坑实战手册 当你的无人机在离地两米处突然失控摇摆&#xff0c;而地面站的MavLink消息窗口疯狂弹出"LANDING_TARGET LOST"警告时&#xff0c;99%的硬件问题都源于那几根看似无害的杜邦线。这不是危言耸听——我们团队在过去三年测试中…...

AI生成内容版权到底归谁?一文讲透法律边界与避坑方法

AI生成内容的版权归属问题AI生成内容的版权归属目前在全球范围内尚无统一标准&#xff0c;不同国家和地区的法律体系存在差异。核心争议点在于&#xff1a;版权法通常要求作品必须由人类创作&#xff0c;而AI作为工具是否具备“作者”资格。美国版权局2023年明确表示&#xff0…...

利用快马平台ai能力,五分钟快速生成springboot项目原型

作为一个Java开发者&#xff0c;每次启动新项目时最头疼的就是搭建基础框架。最近发现InsCode(快马)平台的AI生成功能&#xff0c;居然能五分钟搞定SpringBoot项目原型&#xff0c;简直打开了新世界的大门。 需求描述阶段 只需要在平台对话框输入"创建SpringBoot Web项目&…...

暗黑3操作效率提升方案:从机械重复到智能辅助的转型指南

暗黑3操作效率提升方案&#xff1a;从机械重复到智能辅助的转型指南 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面&#xff0c;可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 在暗黑破坏神3的冒险旅程中&…...

如何判断重庆SEO优化公司的实力_重庆SEO优化服务有哪些特点

如何判断重庆SEO优化公司的实力_重庆SEO优化服务有哪些特点 在当前数字化营销的时代&#xff0c;一个企业的在线表现直接影响到其市场竞争力。而在重庆这个经济发展迅速的城市&#xff0c;SEO优化服务显得尤为重要。如何判断一家重庆SEO优化公司的实力&#xff0c;又有哪些特点…...

ParsecVDisplay:Windows虚拟显示器驱动技术深度解析

ParsecVDisplay&#xff1a;Windows虚拟显示器驱动技术深度解析 【免费下载链接】parsec-vdd ✨ Perfect virtual display for game streaming 项目地址: https://gitcode.com/gh_mirrors/pa/parsec-vdd 在远程协作、游戏串流和多屏工作流日益普及的今天&#xff0c;物理…...

给Java/Go开发者的T24 JBase Basic快速上手指南:从Hello World到读写数据库

给Java/Go开发者的T24 JBase Basic快速上手指南&#xff1a;从Hello World到读写数据库 当你第一次接触T24核心银行系统的JBase Basic语言时&#xff0c;可能会感到既熟悉又陌生。作为一名有Java或Go开发经验的程序员&#xff0c;你会发现这门语言既有Basic的基因&#xff0c;又…...

MedGemma-X作品集:涵盖正常胸片、肺炎、肺结核、肺癌、心衰五类典型报告

MedGemma-X作品集&#xff1a;涵盖正常胸片、肺炎、肺结核、肺癌、心衰五类典型报告 1. 重新定义智能影像诊断的新标杆 MedGemma-X代表了医学影像分析领域的一次重大突破。这不仅仅是一个简单的工具&#xff0c;而是一套深度融合了先进多模态大模型技术的智能影像认知解决方案…...

OpenClaw办公自动化:千问3.5-9B处理邮件与会议纪要

OpenClaw办公自动化&#xff1a;千问3.5-9B处理邮件与会议纪要 1. 为什么选择OpenClaw处理办公杂务 上个月我统计了自己在邮件和会议纪要上花费的时间——平均每天2.3小时。这些重复性工作不仅消耗精力&#xff0c;还经常打断深度思考状态。尝试过各种办公自动化工具后&#…...

OFA模型与Dify平台结合:无代码AI应用开发

OFA模型与Dify平台结合&#xff1a;无代码AI应用开发 无需编写代码&#xff0c;用Dify快速构建图像语义分析应用 1. 引言&#xff1a;当OFA遇上Dify 想象一下这样的场景&#xff1a;电商平台每天需要处理成千上万的商品图片和描述&#xff0c;人工检查图片与文字是否匹配不仅耗…...