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框架接口 是照着那个小车单摆来写的(比如下面这个例子)

   

 

202272011: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

   

   

 

202272111:09:43

昨天晚上跑了一晚上都没跑完!!!

认真想了一下可以用备忘录啊!!!

我只要输入的alphabeta参数一定,那ns3得到的网络模拟性能也可能是一定的!!!

所以可以用备忘录!!!

   

   

 

202272111:32:14

有关输出的网络性能---即环境 不能简单的直接乘除到个位数!!!

应该按照标准 量级缩放的方法来进行!!!

这就需要我们先做一定的预训练来看看怎么量级缩放了!!!

   

posted @ 2022-08-31 11:22  atomxing  阅读(110)  评论(0编辑  收藏  举报