def train(self, core_id, config_data, start_date): start = time.time() cfg = Helpers.prepare_config(config_data) walls, seeker, hiding, width, height = Helpers.prepare_map(cfg) env, step_img_path, fps_batch, render_mode, wins_l = Helpers.create_env( config=cfg, width=width, height=height, walls=walls, seeker=seeker, hiding=hiding, start_date=start_date, core_id=core_id, ) AGENTS = 2 algorithm = Helpers.pick_algorithm(cfg, env=env, agents=AGENTS) algorithm.prepare_model() for i in range(cfg['game']['episodes']): algorithm.before_episode() metadata = Helpers.update_celery_metadata( core_id=core_id, curr=i + 1, total=cfg['game']['episodes'], ep_iter=cfg['game']['duration'], fps=None, itera=0, iter_perc=0, time_elap=round(time.time() - start), img_path=step_img_path, eta=None, rewards=[0, 0], wins=[0, 0], wins_moving=[0, 0], ) self.update_state(state='PROGRESS', meta=metadata) obs_n, reward_n, rewards_ep, done, fps_episode = Helpers.new_ep(env) while True: rewards_ep = [ rewards_ep[0] + reward_n[0], rewards_ep[1] + reward_n[1] ] metadata['status'] = Helpers.update_metadata_status( fps=env.clock.get_fps(), itera=int(cfg['game']['duration']) - env.duration, iter_perc=round( ((int(cfg['game']['duration']) - env.duration) / int(cfg['game']['duration'])) * 100, 2), time_elap=round(time.time() - start), eta=round((env.duration / env.clock.get_fps()) + int(cfg['game']['duration']) / env.clock.get_fps() * (int(cfg['game']['episodes']) - i)) if env.clock.get_fps() else None, img_path=step_img_path[8:], rewards=rewards_ep, wins=[sum(w) for w in wins_l], wins_moving=[sum(w[-10:]) for w in wins_l], ) fps_episode.append(env.clock.get_fps()) algorithm.before_action(obs_n=obs_n) action_n = algorithm.take_action(obs_n=obs_n) obs_old_n = copy.deepcopy(obs_n) algorithm.before_step(action_n=action_n) obs_n, reward_n, done, _ = env.step(action_n) algorithm.after_step(reward_n=reward_n, obs_old_n=obs_old_n, obs_n=obs_n, done=done) Helpers.update_img_status(env, cfg['video']['monitoring'], step_img_path, render_mode) self.update_state(state='PROGRESS', meta=metadata) if done[0]: algorithm.handle_gameover( obs_n=obs_n, reward_n=reward_n, ep_length=int(cfg['game']['duration']) - env.duration, ) Helpers.handle_gameover(done[1], wins_l) break algorithm.after_episode() fps_batch.append(statistics.fmean(fps_episode)) algorithm.before_cleanup() Helpers.cleanup(env, core_id) metadata = {'step': 'read meta file'} self.update_state(state='PLOTTING', meta=metadata) path_to_file = '/opt/app/monitor/' + \ start_date + "/core-" + str(core_id) + '/' raw_stats = read_json(path_to_file) metadata = {'step': 'parse meta file'} self.update_state(state='PLOTTING', meta=metadata) parsed_stats, _ = parse_json_2_dataframe(raw_stats) metadata = { 'step': 'plot seeker', } self.update_state(state='PLOTTING', meta=metadata) seeker_plot = plot_rewards(parsed_stats, 'SEEKER', path_to_file) metadata = { 'step': 'plot hiding', } self.update_state(state='PLOTTING', meta=metadata) hiding_plot = plot_rewards(parsed_stats, 'HIDING', path_to_file) return Helpers.get_celery_success( core_id=core_id, time_elap=round(time.time() - start, 4), fps_batch=fps_batch, wins=[sum(w) for w in wins_l], seeker_plot=seeker_plot, hiding_plot=hiding_plot, )
plugin.notify(_(30100).encode('utf-8')) plugin.open_settings() except exceptions.RequestError: plugin.notify(_(30103).encode('utf-8')) plugin.log.error(sys.stdout.getvalue()) except exceptions.ResourceNotFoundError: plugin.notify(_(30104).encode('utf-8')) plugin.log.error(sys.stdout.getvalue()) except exceptions.ResponseError: plugin.notify(_(30105).encode('utf-8')) plugin.log.error(sys.stdout.getvalue()) except exceptions.StreamingRightsError: plugin.notify(_(30106).encode('utf-8')) plugin.log.error(sys.stdout.getvalue()) except IOError as e: plugin.log.error(sys.stdout.getvalue()) traceback.print_exc() if e.errno == 2 and e.message.endswith('.tmp'): pass except Exception as e: plugin.log.error(sys.stdout.getvalue()) traceback.print_exc() plugin.notify(e) finally: helpers.cleanup() stdout = sys.stdout.getvalue() if len(stdout): for line in stdout.split('\n'): plugin.log.info(line.replace('\r', ''))