强化学习实战——Q learning 实现倒立摆

倒立摆参数以及数学模型

 

 

首先是写一个倒立摆的AGENT模型

pendulum_env.py

import numpy as np
import matplotlib.pyplot as plt
# import matplotlib
import matplotlib.animation as animation
# import IPython


class Pendulum:
    """
    构建一个倒立摆环境
    """

    def __init__(self):
        """
        初始化
        """
        # 倒立摆系统参数
        self._m = 0.055  # 转子重量
        self._g = 9.81  # 重力加速度
        self._l = 0.042  # 重心到转子距离
        self._J = 1.91e-4  # 转动惯量
        self._b = 3e-6  # 粘滞阻尼
        self._K = 0.0536  # 转矩常数
        self._R = 9.5  # 转子电阻

        # 状态维度 2维 角度angle和角速度angular
        self.state_dims = 2
        # 采样时间
        self.Ts = 0.005

        # 取值范围
        self.max_anger = np.pi  # 最大角度
        self.max_angular = 15 * np.pi  # 最大角速度
        self.max_voltage = 3  # 最大电压

    def get_delta_angular(self, x, u):
        """
        获取倒立摆角加速度
        :param x: 该时刻输入状态 [角度,角速度]
        :param u: 该时刻输入电压
        :return: 该时刻角加速度
        """
        temp = self._m * self._g * self._l * np.sin(x[0])
        _temp = (temp - self._b * x[1] - (self._K ** 2) * x[1] / self._R + self._K * u / self._R)
        return _temp / self._J

    def get_next_state(self, x, u):
        """
        根据离散时间动力学模型获得下次状态
        :param x: 该时刻输入状态 [角度,角速度]
        :param u: 该时刻输入电压
        :return: 下一时刻的新状态 [角度,角速度]
        """
        alpha = x[0] + self.Ts * x[1]
        d_alpha = x[1] + self.Ts * self.get_delta_angular(x, u)
   
  • 4
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值