예제 #1
0
    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)
예제 #2
0
    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
예제 #3
0
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
예제 #4
0
    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)
예제 #5
0
    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
예제 #6
0
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'])
예제 #7
0
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)
예제 #8
0
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)
예제 #9
0
    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
예제 #10
0
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
예제 #11
0
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
예제 #12
0
    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'])
예제 #13
0
    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
예제 #14
0
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
예제 #15
0
    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,
        )