def load_reward_data_scatter(study_agent, relayout_data_store, rew_figure, cumrew_figure, ref_agent, scenario, agent_study_ts, relayoutStoreMacro_ts): """Compute and create figure with instant and cumulated rewards of the study and ref agent""" rew_layout = rew_figure["layout"] cumrew_layout = cumrew_figure["layout"] if agent_study_ts is not None and relayoutStoreMacro_ts is not None: condition = (relayout_data_store is not None and relayout_data_store["relayout_data"] and relayoutStoreMacro_ts > agent_study_ts) else: condition = (relayout_data_store is not None and relayout_data_store["relayout_data"]) if condition: relayout_data = relayout_data_store["relayout_data"] rew_new_axis_layout = get_axis_relayout(rew_figure, relayout_data) cumrew_new_axis_layout = get_axis_relayout(cumrew_figure, relayout_data) if rew_new_axis_layout is not None or cumrew_new_axis_layout is not None: if rew_new_axis_layout is not None: rew_layout.update(rew_new_axis_layout) if cumrew_new_axis_layout is not None: cumrew_layout.update(cumrew_new_axis_layout) return rew_figure, cumrew_figure return make_rewards_ts(study_agent, ref_agent, scenario, rew_layout, cumrew_layout)
def load_reward_ts(relayout_data_store, window, selected_timestamp, rew_figure, cumrew_figure, study_agent, agent_ref, scenario): rew_layout = rew_figure["layout"] cumrew_layout = cumrew_figure["layout"] condition = (relayout_data_store is not None and relayout_data_store["relayout_data"]) if condition: relayout_data = relayout_data_store["relayout_data"] rew_new_axis_layout = get_axis_relayout(rew_figure, relayout_data) cumrew_new_axis_layout = get_axis_relayout(cumrew_figure, relayout_data) if rew_new_axis_layout is not None or cumrew_new_axis_layout is not None: if rew_new_axis_layout is not None: rew_layout.update(rew_new_axis_layout) if cumrew_new_axis_layout is not None: cumrew_layout.update(cumrew_new_axis_layout) return rew_figure, cumrew_figure rew_figure, cumrew_figure = common_graph.make_rewards_ts(study_agent, agent_ref, scenario, rew_layout, cumrew_layout) if window is not None: rew_figure["layout"].update( xaxis=dict(range=window, autorange=False) ) cumrew_figure["layout"].update( xaxis=dict(range=window, autorange=False) ) return rew_figure, cumrew_figure
def load_environments_ts(equipments, relayout_data_store, figure, kind, scenario): """ Load selected kind of environment for chosen equipments in a scenario. Triggered when user click on a equipment displayed in the input_assets_selector in the overview layout. """ if relayout_data_store is not None and relayout_data_store['relayout_data']: relayout_data = relayout_data_store["relayout_data"] layout = figure["layout"] new_axis_layout = get_axis_relayout(figure, relayout_data) if new_axis_layout is not None: layout.update(new_axis_layout) return figure if kind is None: return figure if isinstance(equipments, str): equipments = [equipments] # to make pd.series.isin() work figure['data'] = common_graph.environment_ts_data( kind, make_episode(best_agents[scenario]['agent'], scenario), equipments ) return figure
def update_agent_ref_graph( relayout_data_store, window, figure_overflow, figure_usage, study_agent, scenario, ): if relayout_data_store is not None and relayout_data_store[ "relayout_data"]: relayout_data = relayout_data_store["relayout_data"] layout_usage = figure_usage["layout"] new_axis_layout = get_axis_relayout(figure_usage, relayout_data) if new_axis_layout is not None: layout_usage.update(new_axis_layout) figure_overflow["layout"].update(new_axis_layout) return figure_overflow, figure_usage if window is not None: figure_overflow["layout"].update( xaxis=dict(range=window, autorange=False)) figure_usage["layout"].update( xaxis=dict(range=window, autorange=False)) return common_graph.agent_overflow_usage_rate_trace( make_episode(study_agent, scenario), figure_overflow, figure_usage)
def load_flow_voltage_graph( selected_objects, choice, relayout_data_store, window, figure, study_agent, scenario, ): if relayout_data_store is not None and relayout_data_store[ "relayout_data"]: relayout_data = relayout_data_store["relayout_data"] layout = figure["layout"] new_axis_layout = get_axis_relayout(figure, relayout_data) if new_axis_layout is not None: layout.update(new_axis_layout) return figure new_episode = make_episode(study_agent, scenario) if selected_objects is not None: if choice == "voltage": figure["data"] = load_voltage_for_lines( selected_objects, new_episode) if "flow" in choice: figure["data"] = load_flows_for_lines(selected_objects, new_episode) if "redispatch" in choice: figure["data"] = load_redispatch(selected_objects, new_episode) if window is not None: figure["layout"].update(xaxis=dict(range=window, autorange=False)) return figure
def update_actions_graph(study_agent, relayout_data_store, figure, agent_ref, scenario): if relayout_data_store is not None and relayout_data_store["relayout_data"]: relayout_data = relayout_data_store["relayout_data"] layout = figure["layout"] new_axis_layout = get_axis_relayout(figure, relayout_data) if new_axis_layout is not None: layout.update(new_axis_layout) return figure return make_action_ts(study_agent, agent_ref, scenario, figure['layout'])
def load_reward_data_scatter(study_agent, relayout_data_store, figure, ref_agent, scenario): """Compute and create figure with instant and cumulated rewards of the study and ref agent""" layout = figure["layout"] if relayout_data_store is not None and relayout_data_store["relayout_data"]: relayout_data = relayout_data_store["relayout_data"] new_axis_layout = get_axis_relayout(figure, relayout_data) if new_axis_layout is not None: layout.update(new_axis_layout) return figure return make_rewards_ts(study_agent, ref_agent, scenario, layout)
def update_agent_ref_graph(ref_agent, scenario, relayout_data_store, figure_overflow, figure_usage): if relayout_data_store is not None and relayout_data_store["relayout_data"]: relayout_data = relayout_data_store["relayout_data"] layout_usage = figure_usage["layout"] new_axis_layout = get_axis_relayout(figure_usage, relayout_data) if new_axis_layout is not None: layout_usage.update(new_axis_layout) figure_overflow["layout"].update(new_axis_layout) return figure_overflow, figure_usage return common_graph.agent_overflow_usage_rate_trace( make_episode(ref_agent, scenario), figure_overflow, figure_usage)
def load_ts( relayout_data_store, window, study_agent, rew_figure, cumrew_figure, actions_figure, agent_ref, scenario, ): figures = [rew_figure, cumrew_figure, actions_figure] condition = (relayout_data_store is not None and relayout_data_store["relayout_data"]) if condition: relayout_data = relayout_data_store["relayout_data"] relayouted = False for figure in figures: axis_layout = get_axis_relayout(figure, relayout_data) if axis_layout is not None: figure["layout"].update(axis_layout) relayouted = True if relayouted: return figures rew_figure, cumrew_figure = common_graph.make_rewards_ts( study_agent, agent_ref, scenario, rew_figure, cumrew_figure) actions_figure = common_graph.make_action_ts(study_agent, agent_ref, scenario, actions_figure["layout"]) figures = [rew_figure, cumrew_figure, actions_figure] if window is not None: start_datetime = dt.datetime.strptime(window[0], "%Y-%m-%dT%H:%M:%S") end_datetime = dt.datetime.strptime(window[-1], "%Y-%m-%dT%H:%M:%S") for figure in figures: figure["layout"].update(xaxis=dict( range=[start_datetime, end_datetime], autorange=False)) return figures
def update_agent_log_graph(study_agent, relayout_data_store, figure_overflow, figure_usage, scenario): if relayout_data_store is not None and relayout_data_store["relayout_data"]: relayout_data = relayout_data_store["relayout_data"] layout_usage = figure_usage["layout"] new_axis_layout = get_axis_relayout(figure_usage, relayout_data) if new_axis_layout is not None: layout_usage.update(new_axis_layout) figure_overflow["layout"].update(new_axis_layout) return figure_overflow, figure_usage new_episode = make_episode(study_agent, scenario) figure_overflow["data"] = new_episode.total_overflow_trace maintenance_trace = EpisodeTrace.get_maintenance_trace( new_episode, ["total"])[0] maintenance_trace.update({"name": "Nb of maintenances"}) figure_overflow["data"].append(maintenance_trace) figure_usage["data"] = new_episode.usage_rate_trace return figure_overflow, figure_usage
def load_reward_ts(relayout_data_store, window, selected_timestamp, figure, study_agent, agent_ref, scenario): layout = figure["layout"] if relayout_data_store is not None and relayout_data_store["relayout_data"]: relayout_data = relayout_data_store["relayout_data"] new_axis_layout = get_axis_relayout(figure, relayout_data) if new_axis_layout is not None: layout.update(new_axis_layout) return figure figure = common_graph.make_rewards_ts(study_agent, agent_ref, scenario, layout) if window is not None: figure["layout"].update(xaxis=dict(range=window, autorange=False)) return figure
def update_actions_graph(study_agent, relayout_data_store, figure, agent_ref, scenario, agent_study_ts, relayoutStoreMacro_ts): if agent_study_ts is not None and relayoutStoreMacro_ts is not None: condition = (relayout_data_store is not None and relayout_data_store["relayout_data"] and relayoutStoreMacro_ts > agent_study_ts) else: condition = (relayout_data_store is not None and relayout_data_store["relayout_data"]) if condition: relayout_data = relayout_data_store["relayout_data"] layout = figure["layout"] new_axis_layout = get_axis_relayout(figure, relayout_data) if new_axis_layout is not None: layout.update(new_axis_layout) return figure return make_action_ts(study_agent, agent_ref, scenario, figure['layout'])
def update_agent_log_graph(study_agent, relayout_data_store, figure_overflow, figure_usage, scenario, agent_study_ts, relayoutStoreMacro_ts): if agent_study_ts is not None and relayoutStoreMacro_ts is not None: condition = (relayout_data_store is not None and relayout_data_store["relayout_data"] and relayoutStoreMacro_ts > agent_study_ts) else: condition = (relayout_data_store is not None and relayout_data_store["relayout_data"]) if condition: relayout_data = relayout_data_store["relayout_data"] layout_usage = figure_usage["layout"] new_axis_layout = get_axis_relayout(figure_usage, relayout_data) if new_axis_layout is not None: layout_usage.update(new_axis_layout) figure_overflow["layout"].update(new_axis_layout) return figure_overflow, figure_usage new_episode = make_episode(study_agent, scenario) figure_overflow["data"] = new_episode.total_overflow_trace.copy() maintenance_traces = EpisodeTrace.get_maintenance_trace( new_episode, ["total"]) if len(maintenance_traces) != 0: maintenance_traces[0].update({"name": "Nb of maintenances"}) figure_overflow["data"].append(maintenance_traces[0]) hazard_traces = EpisodeTrace.get_hazard_trace(new_episode, ["total"]).copy() if len(hazard_traces) != 0: hazard_traces[0].update({"name": "Nb of hazards"}) figure_overflow["data"].append(hazard_traces[0]) attacks_trace = EpisodeTrace.get_attacks_trace(new_episode).copy() if len(attacks_trace) != 0: attacks_trace[0].update({"name": "Attacks"}) figure_overflow["data"].append(attacks_trace[0]) figure_usage["data"] = new_episode.usage_rate_trace return figure_overflow, figure_usage
def load_context_data(equipments, relayout_data_store, window, figure, kind, scenario, agent_study): if relayout_data_store is not None and relayout_data_store["relayout_data"]: relayout_data = relayout_data_store["relayout_data"] layout = figure["layout"] new_axis_layout = get_axis_relayout(figure, relayout_data) if new_axis_layout is not None: layout.update(new_axis_layout) return figure if kind is None: return figure if isinstance(equipments, str): equipments = [equipments] # to make pd.series.isin() work episode = make_episode(agent_study, scenario) figure['data'] = common_graph.environment_ts_data(kind, episode, equipments) if window is not None: figure["layout"].update(xaxis=dict(range=window, autorange=False)) return figure
def update_synchronized_figures( agent_study_ts, ref_agent, relayout_data_store, rew_figure, cumrew_figure, overflow_figure, usage_rate_figure, actions_figure, scenario, study_agent, relayoutStoreMacro_ts, ): figures = [ rew_figure, cumrew_figure, overflow_figure, usage_rate_figure, actions_figure, ] episode = make_episode(study_agent, scenario) if agent_study_ts is not None and relayoutStoreMacro_ts is not None: condition = (relayout_data_store is not None and relayout_data_store["relayout_data"] and relayoutStoreMacro_ts > agent_study_ts) else: condition = (relayout_data_store is not None and relayout_data_store["relayout_data"]) if condition: relayout_data = relayout_data_store["relayout_data"] relayouted = False for figure in figures: axis_layout = get_axis_relayout(figure, relayout_data) if axis_layout is not None: figure["layout"].update(axis_layout) relayouted = True if relayouted: return figures new_reward_fig, new_cumreward_fig = make_rewards_ts( study_agent, ref_agent, scenario, rew_figure, cumrew_figure) overflow_figure["data"] = episode.total_overflow_trace.copy() for event in ["maintenance", "hazard", "attacks"]: func = getattr(EpisodeTrace, f"get_{event}_trace") traces = func(episode, ["total"]) if len(traces) > 0: traces[0].update({"name": event.capitalize()}) overflow_figure["data"].append(traces[0]) usage_rate_figure["data"] = episode.usage_rate_trace new_action_fig = make_action_ts(study_agent, ref_agent, scenario, actions_figure["layout"]) return ( new_reward_fig, new_cumreward_fig, overflow_figure, usage_rate_figure, new_action_fig, )