求助:工业上 RL 强化学习 SAC 应用遇到的问题

10 天前
 jeddida
场景:三根水管并联,且每根都有一个阀门开控制开度,然后三根水管汇集连接一个水压表,水压表另外一侧连接一个随机的用水水管,现在需要动态的调节阀门让水压表稳定在 0.5 (调节阀门后会有一个滞后变化过程)

我先从 dcs 采集数据,然后用 lstm 构建了 env ,用 sb3 sac 开始训练,看日志确实开始收敛奖励也越来越高。

但是效果还是不太好,想问一下大佬们 lstm 建模的问题,我感觉我 lstm 模型有问题,我现在是:采集了三个开度 水压表 和随即用水量,训练的时候用历史 20 步和当前的三个开度+用水量+压力(补零)来预测当前的压力。

求大佬指点一二!万分感谢!
896 次点击
所在节点    程序员
7 条回复
qscasdqwezxc
9 天前
目测不是模型的问题
Rl 不是做这个的
你采集的数据本来就不是收敛的
你可以贴一下你的 reward 怎么算的
jeddida
9 天前
@qscasdqwezxc 我用 sac 训练的话不能直接在线在 dcs 训练,所以我采集了数据通过 lstm 建模,自定义 gym 环境,然后用 sb3 开始训练,目的是水压稳定在 0.5:reward:
error = abs(pressure - self.target_pressure)
if error <= 0.005:
reward = 1.2
elif error <= 0.01:
reward = 1.0 + (0.005 - error) * 40
elif error <= 0.05:
reward = 1.0 - 15 * (error - 0.01)
elif error <= 0.1:
reward = 0.4 - 4 * (error - 0.05)
else:
reward = -5.0 * (error - 0.1)
Sawyerhou
9 天前
不太懂这个,

如果你训练好的 sac 的确能让你的 lstm 稳定在 0.5 ,却不能让真实水压稳在 0.5 ,
那可能的确是 lstm 的问题,否则就不一定是 lstm 的问题,

如果确实是 lstm 的问题,有没有可能在线学习?用水压表直接进行训练,省略环境模型( lstm )
jeddida
9 天前
@Sawyerhou 在线训练太慢了,效果很差。我测试 lstm 环境下可以稳定在 0.5 ,我希望误差可以稳定在 0.02 ,但是实际上有的都在了 0.04 ,我对 lstm 训练不太了解,大佬了解吗?大佬也在做强化学习方面的研究吗?可否留个绿泡泡。
Sawyerhou
9 天前
@jeddida #4 我是做数据测试的,而非算法开发,离得比较远,等等看其他真大佬怎么说。

另外,价值函数可以用 r=max(0, 0.02-e)吗?虽然我觉得并不是这个函数的问题。
zhangeric
8 天前
先找一下算法吧,工业上有很多专用算法,比如 pid 控制.
jeddida
8 天前
@zhangeric 谢谢老哥的建议,目前就是在用 pid 。效果不太好所以打算用 sac ,因为后面会优化很多,所以 pid 吃不消了,而且鲁棒性太差了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1141662

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX