首页 > 编程语言 >【Python】Q-Learning处理CartPole-v1

【Python】Q-Learning处理CartPole-v1

时间:2024-04-29 21:25:32浏览次数:28  
标签:CartPole Python bound action state Num Learning digital np

上一篇配置成功gym环境后,就可以利用该环境做强化学习仿真了。

这里首先用之前学习过的qlearning来处理CartPole-v1模型。

CartPole-v1是一个倒立摆模型,目标是通过左右移动滑块保证倒立杆能够尽可能长时间倒立,最长步骤为500步。

模型控制量是左0、右1两个。

模型状态量为下面四个:

Num Observation Min Max
0 Cart Position -4.8 4.8
1 Cart Velocity -Inf Inf
2 Pole Angle -0.418rad 0.418rad
3 Pole Angular Velocity -Inf Inf

由于要用qtable,但是状态量是连续的,所以我们要先对状态做离散化处理,对应state_dig函数。

然后就是按照qlearning公式迭代即可。

这里在选控制量的时候用了ε-greedy策略,即根据迭代次数,逐步更相信模型的结果而不是随机的结果。

qlearning走迷宫当时的策略是有10%的概率用随机的控制量,ε-greedy策略相对更合理一些。

代码如下:

import gym
import random
import numpy as np

Num = 10
rate = 0.5
factor = 0.9

p_bound = np.linspace(-2.4,2.4,Num-1)
v_bound = np.linspace(-3,3,Num-1)
ang_bound = np.linspace(-0.5,0.5,Num-1)
angv_bound = np.linspace(-2.0,2.0,Num-1)

def state_dig(state):                   #离散化
    p,v,ang,angv = state
    digital_state = (np.digitize(p, p_bound),
            np.digitize(v, v_bound),
            np.digitize(ang, ang_bound), 
            np.digitize(angv, angv_bound))
    return digital_state

if __name__ == '__main__':

    env = gym.make('CartPole-v1')

    action_space_dim = env.action_space.n  
    q_table = np.zeros((Num,Num,Num,Num, action_space_dim))

    for i in range(3000):
        state = env.reset()
        digital_state = state_dig(state)
                
        step = 0
        while True:
            if i%10==0:
                env.render()
            
            step +=1
            epsi = 1.0 / (i + 1)
            if random.random() < epsi:
                action = random.randrange(action_space_dim)
            else:
                action = np.argmax(q_table[digital_state])

            next_state, reward, done, _ = env.step(action)
            next_digital_state = state_dig(next_state)
  
            if done: 
                if step < 400:
                    reward = -1  
                else:   
                    reward = 1
            else:
                reward = 0

            current_q = q_table[digital_state][action]      #根据公式更新qtable
            q_table[digital_state][action] += rate * (reward + factor * max(q_table[next_digital_state])  - current_q) 

            digital_state = next_digital_state

            if done:
                print(step)
                break

最终结果基本都能维持到500步左右,不过即使到500后,随着模型迭代,状态也可能不稳定。

标签:CartPole,Python,bound,action,state,Num,Learning,digital,np
From: https://www.cnblogs.com/tiandsp/p/18165142

相关文章

  • 深入理解Python多进程:从基础到实战
    title:深入理解Python多进程:从基础到实战date:2024/4/2920:49:41updated:2024/4/2920:49:41categories:后端开发tags:并发编程多进程管理错误处理资源调度性能优化异步编程Python并发库引言在Python编程中,多进程是一种重要的并发编程方式,可以让我们充分......
  • Python 编程
    第1章什么是Python?#Python——编程新手最好的选择第2章为Python做好准备#单行注释打印出单词"HelloWorld"print("HelloWorld")'''多行注释这是一条注释这也是一条注释'''print("HelloPython")第3章变量和操作符的世界3.......
  • Python: download file
     defgetLink(url:str):""":paramurl::return:"""headers={'Accept-Language':'zh-CN,zh;q=0.9,en-CN;q=0.8,en;q=0.7,zh-TW;q=0.6','Cookie':'......
  • [Python急救站]基于Transformer Models模型完成GPT2的学生AIGC学习训练模型
    为了AIGC的学习,我做了一个基于TransformerModels模型完成GPT2的学生AIGC学习训练模型,指在训练模型中学习编程AI。在编程之前需要准备一些文件:首先,先win+R打开运行框,输入:PowerShell后输入:pipinstall-Uhuggingface_hub下载完成后,指定我们的环境变量:$env:HF_ENDPOINT="ht......
  • 马斯克突击访华;谷歌 Python 基础团队全数被裁;丨 RTE 开发者日报 Vol.195
      开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(RealTimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑......
  • Window 安装 Python 失败 0x80070643,发生严重错误
    问题现象用安装包在window安装python,会遇到没有安装成功,卸载后,再次双击安装包安装的时候,直接无法安装了。这个问题在githubissue中有提到,但是都是2022年的时,代码修复,但是在2024年,安装的时候还是遇到了这个问题。测试下来:python3.7,3.8没有这个问题,如果着急,就先安......
  • python使用langchain调用本地大模型
    参考https://www.cnblogs.com/scarecrow-blog/p/17875127.html模型下载之前说过一次https://www.cnblogs.com/qcy-blog/p/18165717也可直接去官网,把所有文件都点一遍fromlangchainimportPromptTemplate,LLMChainimporttorchfromtransformersimportAutoTokenizer,A......
  • PYTHON 用几何布朗运动模型和蒙特卡罗MONTE CARLO随机过程模拟股票价格可视化分析耐克
    原文链接:http://tecdat.cn/?p=27099最近我们被客户要求撰写关于蒙特卡罗的研究报告,包括一些图形和统计输出。金融资产/证券已使用多种技术进行建模。该项目的主要目标是使用几何布朗运动模型和蒙特卡罗模拟来模拟股票价格。该模型基于受乘性噪声影响的随机(与确定性相反)变量该项......
  • PYTHON用时变马尔可夫区制转换(MARKOV REGIME SWITCHING)自回归模型分析经济时间序列|附
    全文下载链接:http://tecdat.cn/?p=22617最近我们被客户要求撰写关于MRS的研究报告,包括一些图形和统计输出。本文提供了一个在统计模型中使用马可夫转换模型模型的例子,来复现Kim和Nelson(1999)中提出的一些结果。它应用了Hamilton(1989)的滤波器和Kim(1994)的平滑器  %matplot......
  • 《最新出炉》系列入门篇-Python+Playwright自动化测试-41-录制视频
    1.简介上一篇讲解和分享了录制自动生成脚本,索性连带录制视频也一股脑的在这里就讲解和分享了。今天我们将学习如何使用Playwright和Python来录制浏览器操作的视频,以便在需要时进行回放和分析。2.录制视频语法录制视频介绍官方API的文档地址:https://playwright.dev/python/docs/......