Neural network 有没有一种方法可以在一个环境中培训PPOTrainer,然后在稍微修改的环境中完成培训?

Neural network 有没有一种方法可以在一个环境中培训PPOTrainer,然后在稍微修改的环境中完成培训?,neural-network,ray,rllib,Neural Network,Ray,Rllib,我试图首先在一个简单的环境中训练一个PPOTrainer进行250次迭代,然后在一个修改过的环境中完成训练。(环境之间的唯一区别是其中一个环境配置参数的更改) 到目前为止,我已尝试实施以下内容: ray.init() config = ppo.DEFAULT_CONFIG.copy() config["env_config"] = defaultconfig trainer = ppo.PPOTrainer(config=config, env=qsd.QSDEnv) trainer.confi

我试图首先在一个简单的环境中训练一个PPOTrainer进行250次迭代,然后在一个修改过的环境中完成训练。(环境之间的唯一区别是其中一个环境配置参数的更改)

到目前为止,我已尝试实施以下内容:

ray.init()
config = ppo.DEFAULT_CONFIG.copy()
config["env_config"] = defaultconfig
trainer = ppo.PPOTrainer(config=config, env=qsd.QSDEnv)
trainer.config['env_config']['meas_quant']=1
for i in range(250):
    result = trainer.train()

#attempt to change the parameter 'meas_quant' from 1 to 2
trainer.config['env_config']['meas_quant'] = 2
trainer.workers.local_worker().env.meas_quant = 2

for i in range(250):
    result = trainer.train()

但是,第二次培训仍然使用初始环境配置。如果您能帮助我们解决这个问题,我们将不胜感激

我建议两种方法中的一种

创建一个新的Trainer实例并从第一个实例恢复
ray.init()
环境配置[“测量数量”]=1#假设设置了环境配置
config={“env_config”:env_config}
trainer=ppo.PPOTrainer(config=config,env=qsd.QSDEnv)
对于范围(250)内的i:
结果=培训师培训()
检查点=培训师。将\u保存到\u对象()
环境配置['meas_quant']=2
配置[“环境配置”]=环境配置
trainer2=ppo.PPOTrainer(config=config,env=qsd.QSDEnv)
trainer2.从\u对象(检查点)还原\u
#做任何需要做的事。。。
直接为每个工人改变环境 可能需要修改环境以设置要更改的参数

#在第一个训练循环之后
培训师、工人、工人(
λw:w.foreach_env(λe:e.meas_quant=2)
)
#做你的事。。。


另外,我会避免使用
DEFAULT\u CONFIG.copy
,因为它只创建字典的浅拷贝,所以对嵌套配置dict的更改可能会改变原始的默认配置。另外,RLlib的
培训师
已经将您传递给它的wathever配置指令与默认配置进行了深度合并。

我建议两种方法之一

创建一个新的Trainer实例并从第一个实例恢复
ray.init()
环境配置[“测量数量”]=1#假设设置了环境配置
config={“env_config”:env_config}
trainer=ppo.PPOTrainer(config=config,env=qsd.QSDEnv)
对于范围(250)内的i:
结果=培训师培训()
检查点=培训师。将\u保存到\u对象()
环境配置['meas_quant']=2
配置[“环境配置”]=环境配置
trainer2=ppo.PPOTrainer(config=config,env=qsd.QSDEnv)
trainer2.从\u对象(检查点)还原\u
#做任何需要做的事。。。
直接为每个工人改变环境 可能需要修改环境以设置要更改的参数

#在第一个训练循环之后
培训师、工人、工人(
λw:w.foreach_env(λe:e.meas_quant=2)
)
#做你的事。。。

另外,我会避免使用
DEFAULT\u CONFIG.copy
,因为它只创建字典的浅拷贝,所以对嵌套配置dict的更改可能会改变原始的默认配置。另外,RLlib的
Trainer
已经将您传递给它的wathever config dict与默认配置进行了深度合并