222怎么写一个自己的gym环境
首先 我按照遗传算法纯python写好了强化学习算法
只要把这个移植到gym框架就好
主要看了这两个网址
https://blog.csdn.net/weixin_44597347/article/details/124301620 ---主要是这个!!!
https://xueqiu.com/1164950442/173500190
(这个等其他的也可以看看 https://blog.csdn.net/qq_33446100/article/details/117845119)
然后是注册:
https://blog.csdn.net/qq_43589538/article/details/125015799
pip3 install -e.
一定要理解清楚各个文件里写的名字的含义
比较容易忽略的是gym具体实现的那个python文件的类名字很重要!!!
olsr_rl.py |
class OlsrRlEnv(gym.Env): def __init__(self): |
OlsrRlEnv这个类的名字是下面文件里的import
gym_olsr/envs/__init__.py |
from gym_olsr.envs.olsr_rl import OlsrRlEnv |
其他的按照上面教程仔细对应就问题不大
除了照着这个 https://blog.csdn.net/weixin_44597347/article/details/124301620 写
然后还有很多细节是按照百度的那个飞浆教程来写的
D:\RL\PARL\tutorials\parl2_dygraph\lesson3\dqn |
具体的gym框架接口 是照着那个小车单摆来写的(比如下面这个例子)
2022年7月20日11:37:58
我的问题在于:
下棋,最终是为了取得胜利,就结束了。马里奥,最终到了终点就结束了。
小车单摆,最终单摆掉下来 或者 小车超出了运动的边界,就结束了。
但是我的网络模拟什么时候终止呢?(养猪,什么时候算养完了呢)
我这里先简单的想一下什么时候网络模拟终止---比如运行小30轮或者更多轮后结束
!!!有关到底要多少小轮的问题讨论和思考 马里奥很简单就可以判断---通关或者生命为0 但是我们一步step就是一个ns3模拟,那一轮要多少小轮(多少次ns3模拟呢?) 王天星认为:至少要能把所有可能的空间探索完才行 我一开始也是这么想的:比如我的网络模拟权重,alpha beta 取值都是0-1之间,然后颗粒度0.1(一般就够了),那一个小轮要10*10=100次模拟 但是回过头细想-一次马里奥,也没说要把所有的前后跳动作都做完,才算一个小轮结束啊!!!
总结:一个小轮不需要探索所有的可能(探索所有的可能是多次大轮做的),只要能获取足够多的数据就行 这里大致推测50-200小轮之间,具体得跑实验看 |
(养猪,养了一年成年了就终止了)
这也是为什么自定义的gym环境里,step最终要有一个done的判断!!!
/usr/local/lib/python3.8/dist-packages/gym/envs/classic_control/cartpole.py |
done = bool( x < -self.x_threshold or x > self.x_threshold or theta < -self.theta_threshold_radians or theta > self.theta_threshold_radians ) |
我的实现:比如 运行30小轮或者更多小轮后结束
/home/ylx/gym_olsr/gym_olsr/envs/olsr_rl.py |
# 代表一次模拟结束!!! # 一次马里奥游戏,最终通关 或 生命为零时 结束 # 小车单摆,最终单摆掉下来 或者 小车超出了运动的边界,就结束了。 # 养猪,养了一年成年了就终止了 # 网络模拟 运行30小轮或者更多小轮后结束 (30是因为ns2书中说一般至少要30轮取平均---这里就类似搞30看看效果) if self.steps_beyond_done >= 50: done = True else: done = False |
2022年7月21日11:09:43
昨天晚上跑了一晚上都没跑完!!!
认真想了一下可以用备忘录啊!!! 我只要输入的alpha和beta参数一定,那ns3得到的网络模拟性能也可能是一定的!!! 所以可以用备忘录!!! |
2022年7月21日11:32:14
有关输出的网络性能---即环境 不能简单的直接乘除到个位数!!!
应该按照标准 量级缩放的方法来进行!!!
这就需要我们先做一定的预训练来看看怎么量级缩放了!!!