Я работаю с мелодией , чтобы обучить какую-то модель обучения усилению. Мне нужно использовать пользовательский обратный вызов , который должен быть функцией с одним параметром. Я хотел бы иметь метод из пользовательского класса в качестве обратного вызова, но я не совсем понимаю, как мне передать параметр info без использования self .
Это мой класс прямо сейчас:
import json
from collections import Counter
import termcolor
from ray import tune
class Evaluation:
def configure_callbacks(self,config):
config["callbacks"]["on_episode_step"] = self.on_episode_step
return config
def log(self,msg, color="white"):
termcolor.cprint(msg,color)
@tune.function
def on_episode_step(self,info):
self.log(info)
И я получаю следующую ошибку
ray.exceptions.RayTaskError: /Users/giulia/anaconda3/envs/dmas/bin/python /Users/giulia/Desktop/mas_traffic/FlowMas/simulation.py (pid=25935, host=Giulias-MacBook-Pro.local)
File "/Users/giulia/anaconda3/envs/dmas/lib/python3.6/site-packages/ray-0.7.4-py3.6-macosx-10.7-x86_64.egg/ray/local_mode_manager.py", line 55, in execute
results = function(*copy.deepcopy(args))
File "/Users/giulia/anaconda3/envs/dmas/lib/python3.6/site-packages/ray-0.7.4-py3.6-macosx-10.7-x86_64.egg/ray/rllib/agents/trainer.py", line 415, in train
raise e
File "/Users/giulia/anaconda3/envs/dmas/lib/python3.6/site-packages/ray-0.7.4-py3.6-macosx-10.7-x86_64.egg/ray/rllib/agents/trainer.py", line 401, in train
result = Trainable.train(self)
File "/Users/giulia/anaconda3/envs/dmas/lib/python3.6/site-packages/ray-0.7.4-py3.6-macosx-10.7-x86_64.egg/ray/tune/trainable.py", line 171, in train
result = self._train()
File "/Users/giulia/anaconda3/envs/dmas/lib/python3.6/site-packages/ray-0.7.4-py3.6-macosx-10.7-x86_64.egg/ray/rllib/agents/trainer_template.py", line 129, in _train
fetches = self.optimizer.step()
File "/Users/giulia/anaconda3/envs/dmas/lib/python3.6/site-packages/ray-0.7.4-py3.6-macosx-10.7-x86_64.egg/ray/rllib/optimizers/sync_batch_replay_optimizer.py", line 66, in step
batches = [self.workers.local_worker().sample()]
File "/Users/giulia/anaconda3/envs/dmas/lib/python3.6/site-packages/ray-0.7.4-py3.6-macosx-10.7-x86_64.egg/ray/rllib/evaluation/rollout_worker.py", line 472, in sample
batches = [self.input_reader.next()]
File "/Users/giulia/anaconda3/envs/dmas/lib/python3.6/site-packages/ray-0.7.4-py3.6-macosx-10.7-x86_64.egg/ray/rllib/evaluation/sampler.py", line 56, in next
batches = [self.get_data()]
File "/Users/giulia/anaconda3/envs/dmas/lib/python3.6/site-packages/ray-0.7.4-py3.6-macosx-10.7-x86_64.egg/ray/rllib/evaluation/sampler.py", line 99, in get_data
item = next(self.rollout_provider)
File "/Users/giulia/anaconda3/envs/dmas/lib/python3.6/site-packages/ray-0.7.4-py3.6-macosx-10.7-x86_64.egg/ray/rllib/evaluation/sampler.py", line 319, in _env_runner
soft_horizon, no_done_at_end)
File "/Users/giulia/anaconda3/envs/dmas/lib/python3.6/site-packages/ray-0.7.4-py3.6-macosx-10.7-x86_64.egg/ray/rllib/evaluation/sampler.py", line 364, in _process_observations
episode = active_episodes[env_id]
File "/Users/giulia/anaconda3/envs/dmas/lib/python3.6/site-packages/ray-0.7.4-py3.6-macosx-10.7-x86_64.egg/ray/rllib/evaluation/sampler.py", line 294, in new_episode
"episode": episode,
File "/Users/giulia/anaconda3/envs/dmas/lib/python3.6/site-packages/ray-0.7.4-py3.6-macosx-10.7-x86_64.egg/ray/tune/sample.py", line 45, in __call__
return self.func(*args, **kwargs)
TypeError: on_episode_step() missing 1 required positional argument: 'info'
Что очевидно, поскольку я предполагаю передать два параметра.
Мне бы очень хотелось, чтобы прогресс процесса оценки время от времени обновлял атрибуты класса.
Есть ли обходной путь для этого?