def jobs_parallel_learning_concurrent(context, data_central, id_agent, id_robot, episodes, n, intermediate_reports=True, final_report=True): """ In this way, there are "n" instances of each agent. Each instance sees all logs, but is given a hint using the parallell_hint(i, n) function. The instances are merged using the merge() function. Needs: RM_EPISODE_READY, id_robot, id_episode """ agents = [] contexts = ['learn%02dof%02d' % (i + 1, n) for i in range(n)] for i, (c, progress) in enumerate(iterate_context_names(context, contexts)): for id_episode in episodes: c.needs(RM_EPISODE_READY, id_robot=id_robot, id_episode=id_episode) agent_i = c.subtask(LearnLogNoSaveHint, boot_root=data_central.get_boot_root(), agent=id_agent, robot=id_robot, episodes=episodes, parallel_hint=[i, n], add_job_prefix='') if intermediate_reports: report = c.comp(get_agentstate_report, agent_i, progress, job_id='report') c.add_report(report, 'agent_report_partial', id_agent=id_agent, id_robot=id_robot, progress=progress) agents.append(agent_i) agent_state = jobs_merging_recursive(context, agents) if final_report: report = context.comp(get_agentstate_report, agent_state, 'all', job_id='report') context.add_report(report, 'agent_report', id_agent=id_agent, id_robot=id_robot) save = context.comp(save_state, data_central, id_agent, id_robot, agent_state) return save
def jobs_parallel_learning_concurrent_reps(context, data_central, id_agent, id_robot, episodes, n, max_reps, intermediate_reports=True, final_report=True): """ This one cycles multiple times in the data. """ agents = [] contexts = ['learn%02dof%02d' % (i + 1, n) for i in range(n)] for i, (c, progress) in enumerate(iterate_context_names(context, contexts)): extra_dep = [] for id_episode in episodes: er = c.get_resource(RM_EPISODE_READY, id_robot=id_robot, id_episode=id_episode) extra_dep.append(er) agent_i = c.subtask(LearnLogNoSaveHintRepeated, boot_root=data_central.get_boot_root(), agent=id_agent, robot=id_robot, episodes=episodes, parallel_hint=[i, n], max_reps=max_reps, intermediate_reports=True, add_job_prefix='', extra_dep=extra_dep) if intermediate_reports: report = c.comp(get_agentstate_report, agent_i, progress, job_id='report') c.add_report(report, 'agent_report_partial', id_agent=id_agent, id_robot=id_robot, progress=progress) agents.append(agent_i) agent_state = jobs_merging_recursive(context, agents) if final_report: report = context.comp(get_agentstate_report, agent_state, 'all', job_id='report') context.add_report(report, 'agent_report', id_agent=id_agent, id_robot=id_robot) save = context.comp(save_state, data_central, id_agent, id_robot, agent_state) return save