Есть ли способ обучить 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()

Однако при втором обучении по-прежнему используется исходная конфигурация среды. Любая помощь в выяснении того, как это исправить, будет принята с благодарностью!


person sbrand    schedule 12.06.2020    source источник


Ответы (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 могут изменить исходную конфигурацию по умолчанию. Кроме того, Trainer RLlib уже выполняет глубокое слияние, независимо от того, какую конфигурацию вы передаете ему с конфигурацией по умолчанию.

person aaglovatto    schedule 10.07.2020