Есть ли способ обучить 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, какую бы конфигурацию вы ни передали с конфигурацией по умолчанию.

Другие вопросы по тегам