【RL】我的强化学习代理

news2024/9/24 17:13:33
 

一、说明

        强化学习代理是一个自主决策的人工智能智能系统,它通过与环境进行交互,通过试错学习,逐步优化其行为以实现其目标。这种代理能够学习如何在环境中进行行为,以实现预期的目标。代理可以通过尝试不同的行为来评估其对环境的影响,并根据它做出的决策获得奖励或惩罚。

        在强化学习中,代理按照特定的方式选择行动,并从环境中获取反馈(奖励或惩罚)。代理基于获得的反馈来调整其策略,以便在相同的环境下获得更高的奖励。这种学习过程可以持续不断,直到代理的性能达到最优。

        由于强化学习代理具有自主决策的能力,因此它们可以用于各种不同的自主控制环境中,例如自动驾驶汽车、机器人和电力网络控制系统等。

二、介绍

        强化学习专家面临的最大挑战之一是他们无法控制智能体的动作行为。有时让座席收敛并最大化奖励是不够的,你还希望你的座席有平滑的操作。让我们看几个例子:

2.1 交易

        在交易中,对交易者不利的最大力量是交易成本。您更改投资组合的频率越高,产生的交易成本就越高。我的RL交易代理过去常常在某一天建立完全多头头寸,另一天做空。这种双重交易成本吞噬了我所有的回报。可悲吧!

2.2 热交换

        想象一下,您正在控制火力发电厂或建筑物中的蒸汽温度。您构建了一个在保持近乎恒定的温度方面效果很好的代理,但问题是代理在 1 秒或 1 次步长内从 +1(全热输入)跳到 -1(全热输出)。这种不稳定的热流跳跃会损坏您的热流控制系统,或者控制系统甚至可能不支持这种不稳定的跳跃。

2.3 自动驾驶汽车

        强化学习剂广泛应用于自动驾驶汽车案例。想象一下,RL代理将车辆从“全左”转向“全右”。你不想给自己找一辆这样的自动驾驶汽车。

        这个问题在强化学习代理为现实生活中的业务用例部署时是一个大问题。我希望本博客中介绍的解决方案可以解决这个问题,并使 RL 更接近业务用例。

三、解决

        老实说,这是一个研究课题,但有一些非常合理的捷径。我们可以通过稍微调整奖励函数来解决这个问题。本博客主要讨论如何进行这种简单的调整。这是我观察到这个不稳定的动作跳跃问题时尝试的第一件事。

3.1将交易添加到奖励

        这个想法简单而优雅。将“操作更改”或操作增量添加到奖励功能。简单对吧。让我们讨论一个例子并使其具体化。

3.2 热交换问题

        这个博客的想法是解释一种处理不稳定奖励功能的方法。所以环境没有详细描述。环境很简单:

  • 动作:(-1, 1), +1: 最大热量, -1: 最大热量输出之间的连续操作
  • 奖励:越接近目标温度,奖励越高

3.3 无奖励调整的环境代码:

import numpy as np
import random
import matplotlib.pyplot as plt
import time
import gym
from gym import spaces
import numpy as np 


class Room:

    def __init__(self, mC=300, K=20, Q_AC_Max = 1500, simulation_time = 12*60*60, control_step = 300):
        
        self.timestep = control_step 
        self.max_iteration = int(simulation_time/self.timestep)
        self.Q_AC_Max = Q_AC_Max
        self.mC = mC
        self.K = K 

    def reset(self,T_in = 20):
        self.iteration = 0 
        self.schedule()
        self.T_in = T_in


    def schedule(self):
        self.T_set = 25
        self.T_out = np.empty(self.max_iteration)
        self.T_out[:int(self.max_iteration/2)] = 28
        self.T_out[int(self.max_iteration/2):int(self.max_iteration)]= 32

    def update_Tin(self, action):
        self.Q_AC = action*self.Q_AC_Max # 
        self.T_in = self.T_in - 0.001*(self.timestep / self.mC) * (self.K*(self.T_in-self.T_out[self.iteration])+self.Q_AC)
        self.iteration +=1




class GymACRoom(gym.Env):
    metadata = {'render.modes' : ['human']}

    def __init__(self, mC=300, K=20, Q_AC_Max = 1000, simulation_time = 12*60*60, control_step = 300):
        super(GymACRoom, self).__init__()
        
        self.AC_sim = Room(mC=300, K=20, Q_AC_Max = 1000, simulation_time = 12*60*60, control_step = 300)
        self.time_step = control_step
        self.Q_AC_Max = Q_AC_Max
        self.action_space = spaces.Box(low = -1, high = 1, shape=(1,))
        self.observation_space = spaces.Box(low = -100, high = 100, shape =(1,))
        self.observation = np.empty(1)
    
    def reset(self):
        self.AC_sim.reset(T_in = np.random.randint(20, 30))
        self.iter = 0
        self.observation[0] = self.AC_sim.T_in - self.AC_sim.T_set
        self.observation = self.observation
        return self.observation

    def step(self, action):
        self.AC_sim.update_Tin(action=action)
        self.observation[0] = self.AC_sim.T_in - self.AC_sim.T_set
        self.iter += 1
        if self.iter >= self.AC_sim.max_iteration:
            done = True
        else:
            done = False
        self.reward = np.exp(-(abs(10*self.observation)))[0]

        info = {}
        self.observation = self.observation
        return self.observation, self.reward, done, info

    def render(self, mode='human'):
        pass

    def close (self):
        pass

        观察第 68 行中的奖励函数:
        self.reward = np.exp(-(abs(10*self.observation))))[0]
        它基于代理设置温度与目标温度的偏差。

3.4 使用稳定基线训练代理

        让我们使用稳定基线来训练代理并绘制代理的操作配置文件。

from stable_baselines3 import DQN, A2C, PPO, DDPG
env = GymACRoom()
model = A2C(policy = 'MlpPolicy', env=env, verbose=0, learning_rate=0.001)
model.learn(total_timesteps = 10000)


done = False
env = GymACRoom()
obs = env.reset()
c = 0
action_profile = []
reward_profile = []
temperatue_set = []
temperature_achieved =[]
while not done:
    act = model.predict(obs)
    obs_, reward, done, info = env.step(act[0])
    obs = obs_
    action_profile.append(act[0][0])
    reward_profile.append(env.observation[0])
    temperature_achieved.append(env.AC_sim.T_in[0] )
    temperatue_set.append(env.AC_sim.T_set )

3.5、没有奖励调整的代理绩效

        药剂可以将温度保持在设定温度附近。所以代理成功了。

代理性能

3.6 没有奖励调整的代理行为

        查看操作,代理正在从 +1 操作跳到 -1 操作。这使得代理不惜一切代价都无法使用。

现在让我们介绍奖励调整并重新审视代理的表现

3.7 将交易添加到奖励

        我从设计的奖励中减去交易成本(delta:action-last_action)。奖励函数中的此增量组件会惩罚代理采取不稳定的操作。

  def step(self, action):
        delta = np.abs(action[0] -self.last_action)
        self.AC_sim.update_Tin(action=action)
        self.observation[0] = self.AC_sim.T_in - self.AC_sim.T_set
        self.iter += 1
        if self.iter >= self.AC_sim.max_iteration:
            done = True
        else:
            done = False
        self.reward = np.exp(-(abs(10*self.observation)))[0] - delta*0.1

        info = {}
        self.observation = self.observation
        self.last_action = action[0]
        return self.observation, self.reward, done, info

3.8 代理的表现与奖励调整

        该药剂再次成功地保持了温度,但不如以前那么好。但是现在的动作配置文件更流畅了。操作增量现在主要包含。

3.9 代理的操作配置文件比较

        您可以清楚地观察到,基于交易的奖励调整增加了操作配置文件的流畅性。

四、结论

        我们学习了如何平滑 RL 代理的操作。我希望这篇博客将有助于弥合强化学习范围内部署和研究之间的差距。

参考资料:

Kowshik chilamkurthy
数据驱动投资者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/817577.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1.2.2最长上升子序列模型(二)

1.拦截导弹 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。 但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。 某天,雷达捕捉到敌国的导弹来袭。 由…

最全的3D动画软件介绍来了!良心总结9款3D动画制作必备软件

现在,市面上流行着的3D动画软件如此之多,以至于很难敲定到底哪一款更适合自己或自己的团队。本篇文章带来了一些热门的、被视为行业标准的3D动画软件的介绍,帮助您更好地做出选择。 不仅如此,您还能从文章中了解到在数字内容创建…

移动应用项目架构设计

一、项目整体架构设计 按照分层的架构思想,从下到上分为ShareLib(共享库)层、Core(核心功能)层、Business(业务逻辑)层、App(应用展示)层。 架构优势: 严格控制各层的职责范围,使得底层库实现工程间复用且无缝替换,上层业务无感知…

垃圾焚烧设备PLC数据采集远程监控系统解决方案

PLC可以应用于各种污染废物处理设备的自动化控制,如污水处理、垃圾焚烧、空气处理等。例如,通过对垃圾焚烧PLC设备的数据采集,可以实现对垃圾焚烧的温度、时间、氧气流量等数据的远程监控和实时预警,有效提高垃圾焚烧效率和环保效…

使用机器学习进行疾病预测 -- 机器学习项目基础篇(3)

本文旨在实现一个强大的机器学习模型,可以根据他/她所拥有的症状有效地预测人类的疾病。让我们看看如何解决这个机器学习问题: 方法: 收集数据:数据准备是任何机器学习问题的主要步骤。我们将使用来自Kaggle的数据集来解决这个问…

C语言——静态库和动态库的创建和使用

使用库函数是源码的一种保护 库函数其实不是新鲜的东西,我们一直都在用,比如C库。我们执行pringf() 这个函数的时候,就是调用C库的函数. 下面记录静态库和动态库的生成和使用. 静态库:libxxx.a 动态库:libxxx.so 静态库: 在程序编译的时候,将库编译进可执行程序中, 运行的…

【Unity学习笔记】生命周期

文章目录 脚本的生命周期初始化更新顺序动画更新循环各类事件结束阶段 阶段分析协程返回 总结 官方文档:事件函数的执行顺序 脚本的生命周期 如图: 脚本的生命周期主要经历以下几个阶段: 初始化 初始化阶段,(包括初…

RISC-V 指令集介绍

1. 背景介绍 指令集从本质上可以分为复杂指令集(Complex Instruction Set Computer,CISC)和精简指令集(Reduced Instruction Set Computer,RISC)两种。复杂指令集的特点是能够在一条指令内完成很多事情。 指…

1400*A. Factory

Examples input 1 5 output No input 3 6 output Yes 题意: a 和 m,a 不断加 a%m ,如果 a 有一次能够被 m 整除,则打印 Yes,如果一直循环永远不可能被 m 整除,则打印 No 解析: 可以观…

BUU CODE REVIEW 1

BUU CODE REVIEW 1 考点&#xff1a;PHP变量引用 源码直接给了 <?phphighlight_file(__FILE__);class BUU {public $correct "";public $input "";public function __destruct() {try {$this->correct base64_encode(uniqid());if($this->c…

数据库中RIGHT_TYPE=3和RIGHT_TYPE=“3“的区别

G_USERINFO表归档条件SQL错误&#xff0c; RIGHT_RIGHT_TYPE3应改为RIGHT_TYPE"3"&#xff0c; 该字段为字符类型 在Oracle中&#xff0c;类型&#xff08;type&#xff09;通常是指数据库中的表、视图、索引、存储过程、函数等对象的的数据类型或结构。在比较类型&a…

解决:h5的<video>在移动端浏览器无法自动播放

并不是所有的移动端浏览器都无法自动播放&#xff0c;下载谷歌、火狐、edge等都可以正常播放&#xff0c;目前发现夸克浏览器无法自动播放。即autoplay属性失效。 <video autoplay"autoplay"></video> 可能移动端有移动端的策略&#xff0c;但解决夸克…

C++标识符的作用域与可见性

标识符是一个由程序员定义的名称&#xff0c;为标识区别变量、函数和数据类型等&#xff0c;代表程序的某些元素&#xff0c;变量名就是标识符的一个展现。 作用域讨论的是标识符的有效范围&#xff0c;可见性讨论的是标识符是否可以被引用。在一个函数中声明的变量就只能在这个…

vue中使用代码编辑器 vue2-ace-editor

npm install --save-dev vue2-ace-editor// 全局引入 main.jsimport Editor from vue2-ace-editor; Vue.use(Editor)//组件中引入import Editor from vue2-ace-editor; components: {Editor, },<template><div class"codeEditBox"><editorv-model&qu…

2353. 设计食物评分系统;1895. 最大的幻方;842. 将数组拆分成斐波那契序列

2353. 设计食物评分系统 核心思想&#xff1a;首先明确我们有哪些功能&#xff0c;首先是修改某种食物分数的功能&#xff0c;然后第二点是能够每次弹出分数高字典序小的食物名字。由这两个我们想到了a 食物[分数],b 烹饪方式[分数&#xff0c;食物名字] 然后有一点经验的感…

小程序基础笔记

一、小程序与普通网页开发的区别 1、运行环境不同 网页运行在浏览器环境中小程序运行在微信环境中 2、API 不同 由于运行环境的不同&#xff0c;所以小程序中&#xff0c;无法调用 DOM 和 BOM 的 API。但是&#xff0c;小程序中可以调用微信环境提供的各种 API&#xff0c;例如…

初识低代码开发平台

2019年开始&#xff0c;低代码爆火&#xff0c;有人唱衰有人捧&#xff0c;反对的人认为对于那些真正的程序员来说&#xff0c;简直就是毒瘤&#xff0c;只是炒作概念而已&#xff0c;等尘埃落地&#xff0c;肯定一地鸡毛。 但是对于那些缺技术、缺人才&#xff0c;又需要数字…

ERROR:No tf data. Actual error: Fixed Frame [map] does not exist 解决办法

问题场景&#xff1a; 使用rviz时&#xff0c;出现warning&#xff0c;并且地图无法加载&#xff0c;如下所示&#xff1a; 原因分析&#xff1a; 之所以地图无法加载出来&#xff0c;其主要原因是tf树中没有world坐标系&#xff0c;解决方法就是让rviz知道world坐标系在哪…

短视频平台视频怎么去掉水印?

短视频怎么去水印&#xff0c;困扰很多人&#xff0c;例如&#xff0c;有些logo水印&#xff0c;动态水印等等&#xff0c;分享操作经验&#xff1a; 抖音作为中国最受欢迎的社交娱乐应用程序之一&#xff0c;已成为许多人日常生活中不可或缺的一部分。在使用抖音过程中&#x…

《TCP IP网络编程》第十四章

第 14 章 多播与广播 14.1 多播 多播&#xff08;Multicast&#xff09;方式的数据传输是基于 UDP 完成的。因此 &#xff0c;与 UDP 服务器端/客户端的实现方式非常接近。区别在于&#xff0c;UDP 数据传输以单一目标进行&#xff0c;而多播数据同时传递到加入&#xff08;注…