Есть ли способ обучить PPOTrainer в одной среде, а затем завершить обучение в немного измененной среде?
Я пытаюсь сначала обучить 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()
Однако при втором обучении по-прежнему используется исходная конфигурация среды. Любая помощь в выяснении того, как это исправить, будет принята с благодарностью!
1 ответ
Я бы предложил один из двух подходов
Создайте новый экземпляр Trainer и восстановите его с первого
ray.init()
env_config["meas_quant"] = 1 # Assuming env_config is set
config = {"env_config": env_config}
trainer = ppo.PPOTrainer(config=config, env=qsd.QSDEnv)
for i in range(250):
result = trainer.train()
checkpoint = trainer.save_to_object()
env_config['meas_quant'] = 2
config["env_config"] = env_config
trainer2 = ppo.PPOTrainer(config=config, env=qsd.QSDEnv)
trainer2.restore_from_object(checkpoint)
# Do whathever is needed ...
Изменяйте среду непосредственно для каждого рабочего
Может потребоваться изменение среды, чтобы установить параметр, который вы хотите изменить.
# After the first training loop
trainer.workers.foreach_worker(
lambda w: w.foreach_env(lambda e: e.meas_quant = 2)
)
# Do your stuff ...
В стороне, я бы избегал использования DEFAULT_CONFIG.copy
поскольку он создает только поверхностную копию словаря, поэтому изменения вложенных конфигурационных dicts могут изменить исходную конфигурацию по умолчанию. Плюс, RLlib'sTrainer
уже deepmerges, какую бы конфигурацию вы ни передали с конфигурацией по умолчанию.