diff --git a/README.md b/README.md index ff525969..4f9394b1 100644 --- a/README.md +++ b/README.md @@ -68,20 +68,40 @@ Below are the steps to start all services. For other methods, please consult the ### Running All Services (Dev Mode) -1. **Set-up environement variables** - +1. **Set-up environment variables** -`VITE_POWERGRID_SIMU`, `VITE_RAILWAY_SIMU` , `VITE_ATM_SIMU` are the simulators' endpoints. -Put for each UC the corresponding IP address. - -Examples: +Configuration is read from a gitignored `.secrets` file that `docker-compose.sh` sources. +Copy the template and fill in your values: ```sh -export VITE_POWERGRID_SIMU=http://[Service url]:[Service port] -export VITE_RAILWAY_SIMU=http://[Service url]:[Service port] -export VITE_ATM_SIMU=http://[Service url]:[Service port] +cd config/dev/cab-standalone +cp .secrets.example .secrets +# then edit .secrets ``` -> **_NOTE:_** For this step, you should already have a running simulator. If not, you can use the simulator we provided as an example. For this, please follow the tutorial provided in InteractiveAI/usecases_examples/PowerGrid/ then set the VITE_POWERGRID_SIMU variable to http://YOUR_SERVER_ADDRESS:5100/ + +Key variables (see `.secrets.example` for all options and per-environment values): + +- `VITE_POWERGRID_SIMU` — the frontend's simulator endpoint. Use the same-origin proxy + value `/powergrid-simu` (avoids CORS); set it to `false` to disable the PowerGrid UI. + `VITE_RAILWAY_SIMU` / `VITE_ATM_SIMU` are the equivalents for the other use cases. +- `POWERGRID_SIMU_UPSTREAM` — where nginx actually forwards `/powergrid-simu/`. This is the + only value that changes per environment: + - Local dev : `http://host.docker.internal:5122/` (simulator container on the host) + - LAN : `http://192.168.208.61:5100/` + - Public/k8s: handled by `nginx-kubernetes.conf` via the helm chart (not this variable) +- `RL_AGENT_API_URL` / `RL_AGENT_API_TOKEN` — the deep expert agent that powers PowerGrid + recommendations (see [The PowerGrid expert agent API](#the-powergrid-expert-agent-api) below to + install it). A token is required in every mode: + - Local dev : `http://host.docker.internal:5123/api/v1/recommendation` (agent on the host) + - Server : `http://192.168.208.61:5000/api/v1/recommendation` + - Public : `https://interactiveagent.passerelle.irt-systemx.fr/api/v1/recommendation` + +> **_NOTE:_** `host.docker.internal` lets the containers reach services (simulator, expert agent) +> running on the host — this is how local dev connects to them. Make sure those host services +> listen on `0.0.0.0` (not only `127.0.0.1`) so the containers can reach them. +> +> **_NOTE:_** For the simulator itself, you can use the example we provide — follow the tutorial +> in [InteractiveAI/usecases_examples/PowerGrid/](/usecases_examples/PowerGrid/README.md). > > 2. **Run InteractiveAI assistant** @@ -129,6 +149,38 @@ your-chromium-browser --disable-web-security --user-data-dir="[some directory he > **_NOTE:_** If you encounter any issues, please refer to our [troubleshooting guide](docs/troubleshooting.md). +### The PowerGrid expert agent API + +PowerGrid recommendations are produced by a separate service — the **deep expert agent**. The +`cab_recommendation` service calls it at `RL_AGENT_API_URL`, so it must be running (and reachable) +for recommendations to appear in InteractiveAI. + +1. Clone the agent repository and check out the API branch: + +```sh +git clone https://github.com/ainetus/T2.1_deep_expert.git +cd T2.1_deep_expert +git checkout feat/api-auth-compose +``` + +2. Start it by following that repository's README (the `feat/api-auth-compose` branch ships a + Docker Compose and adds token authentication). For local development: + - expose it on port **5123**, and + - make it listen on `0.0.0.0` (not only `127.0.0.1`) so the InteractiveAI containers can reach + it through `host.docker.internal`. + +3. Point InteractiveAI at it in `config/dev/cab-standalone/.secrets`, with a token that matches + the one the agent expects: + +```sh +export RL_AGENT_API_URL=http://host.docker.internal:5123/api/v1/recommendation +export RL_AGENT_API_TOKEN= +``` + +Then (re)run `./docker-compose.sh` so `cab_recommendation` picks up the values. For the LAN and +public deployments, use the corresponding `RL_AGENT_API_URL` from step 1 of +[Running All Services](#running-all-services-dev-mode) instead. + ### Default ports This project is based on a microservice architecture. Every service run on a specific port. Some of the default ports are as fellow: @@ -138,6 +190,11 @@ This project is based on a microservice architecture. Every service run on a spe * Historic Service: 5200 * Keycloak: 89 +Companion services for the PowerGrid use case run on the host (local dev) and are reached by the +containers via `host.docker.internal`: +* PowerGrid simulator (provided example): 5122 +* PowerGrid expert agent API: 5123 + ### Authentication data For a development environment, the system uses predefined initial data for Keycloak setup. diff --git a/backend/recommendation-service/requirements.txt b/backend/recommendation-service/requirements.txt index 7eb1ae7c..55cbb741 100644 Binary files a/backend/recommendation-service/requirements.txt and b/backend/recommendation-service/requirements.txt differ diff --git a/backend/recommendation-service/resources/PowerGrid/manager.py b/backend/recommendation-service/resources/PowerGrid/manager.py index bb4a12b8..aefea2cb 100644 --- a/backend/recommendation-service/resources/PowerGrid/manager.py +++ b/backend/recommendation-service/resources/PowerGrid/manager.py @@ -1,15 +1,10 @@ -import json import os -import warnings import requests import urllib3 from api.manager.base_manager import BaseRecommendationManager -from owlready2 import get_ontology from settings import logger -from .PowerGridgrid2op_poc_simulator.assistant_manager import AgentType - urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) @@ -21,10 +16,6 @@ class PowerGridManager(BaseRecommendationManager): """ def __init__(self): - script_dir = os.path.dirname(os.path.abspath(__file__)) - self.owl_file_path = os.path.join( - script_dir, "ontology/Grid2onto_v2_3_1.owl" - ) # Runtime value comes from the RL_AGENT_API_URL env var (set via # .secrets -> docker-compose.sh -> .env for local Docker, or extraEnv # for k8s). The fallback is a safe in-cluster default only. @@ -36,7 +27,7 @@ def __init__(self): super().__init__() def get_recommendation(self, request_data): - """Get IA agent and ontology recomendations + """Get IA agent recomendations Args: request_data (dict): A dictionary with keys "context" and "event" @@ -45,18 +36,7 @@ def get_recommendation(self, request_data): list[dict]: List of recomendations """ logger.info("Getting RL agent recommendations from external API") - parades = self._get_rl_parades(request_data) - - onto_recommendation = [] - event_data = request_data.get("event", {}) - event_line = event_data.get("line") - if event_line: - logger.info("Getting ontology recommendation") - onto_recommendation = self.get_onto_recommendation(event_line) - logger.info(onto_recommendation) - print(onto_recommendation) - # both parades & onto_recommendation should be lists on the same format - return parades + onto_recommendation + return self._get_rl_parades(request_data) def _get_rl_parades(self, request_data): """Call the external RL agent API to get parade recommendations. @@ -97,163 +77,3 @@ def _get_rl_parades(self, request_data): except Exception as e: logger.error(f"Unexpected error calling RL agent API: {type(e).__name__}: {e}") return [] - - def get_onto_recommendation(self, event_line): - """Get Ontology recomendations - - Args: - event_line (string): Line name - - Returns: - dict: One ontology recomendation - """ - # Default output - output_json = { - "title": "Default Ontology Recommendation", - "description": ( - "No recommendation has been found for this overload, because " - "it has not been observed in the past." - ), - "use_case": "PowerGrid", - "agent_type": AgentType.onto.name, - "actions": [{}], - "kpis": { - "type_of_the_reco": "Null", - "efficiency_of_the_reco": 1.99999, - }, - } - - # Loading ontology - rte_onto = get_ontology(self.owl_file_path).load() - - # Get all powerlines - powerlines_query = """ - PREFIX owl: - PREFIX rdf: - PREFIX rdfs: - PREFIX x_1.1: - PREFIX xml: - PREFIX xsd: - PREFIX cab: - - SELECT DISTINCT ?line - WHERE {{ - ?line rdf:type cab:Powerline . - }} - """ - - powerlines_list = list(rte_onto.world.sparql(powerlines_query)) - - our_powerline = "powerline_" + event_line - - selected_powerline = None - - for powerline in powerlines_list: - - if our_powerline in str(powerline[0]): - selected_powerline = str(powerline[0]) - break - - if selected_powerline is not None: - parts_prefix = selected_powerline.split(".") - prefix_onto = parts_prefix[0] + "." - selected_powerline = selected_powerline.replace(prefix_onto, "") - - selected_powerline_iri = ( - "http://www.semanticweb.org/emna.amdouni/ontologies/2023/0/Grid2Onto#" - + selected_powerline - ) - - # Get all similar situations - similar_situations_query = """ - PREFIX owl: - PREFIX rdf: - PREFIX rdfs: - PREFIX x_1.1: - PREFIX xml: - PREFIX xsd: - PREFIX cab: - - SELECT DISTINCT ?similarIssue ?line ?pastActionText ?actionDictVal ?category ?efficacity - {{ - ?similarIssue a cab:Powerline_overload_issue . - ?similarIssue cab:is_associated_with ?pastAction . - ?pastAction cab:has_initial_value ?pastActionText . - ?pastAction rdf:type ?category . - ?actionDict a cab:Action_dict . - ?pastAction cab:has_part ?actionDict . - ?actionDict cab:has_initial_value ?actionDictVal . - ?initial a cab:Initial_situation . - ?initial cab:has_part ?pastAction . - ?line a cab:Powerline . - ?initial cab:is_about ?line . - ?rho a cab:Rho . - ?similarIssue cab:has_measurement ?rho . - ?rho cab:has_final_value ?efficacity - FILTER (?category != ) - FILTER (?line = <{line}>) - }} - """.format( - line=selected_powerline_iri - ) - - similar_situations = list( - rte_onto.world.sparql(similar_situations_query) - ) - if similar_situations: - # compute number of situations and rho max - distinct_recommendations = set() - rho_max = min(sublist[-1] for sublist in similar_situations) - - for situation in similar_situations: - recommendation = str(situation[2]) - action = str(situation[3]) - action = action.replace("'", '"') - action = action.replace("False", "false").replace( - "True", "true" - ) - action_dict = json.loads(action) - - category = str(situation[4]) - category = category.replace(prefix_onto, "") - efficacity = situation[4] - if recommendation not in distinct_recommendations: - distinct_recommendations.add(recommendation) - - nb_past_actions_query = f""" - PREFIX owl: - PREFIX rdf: - PREFIX rdfs: - PREFIX x_1.1: - PREFIX xml: - PREFIX xsd: - PREFIX cab: - - SELECT (COUNT(?pastActionText) AS ?count) - WHERE {{ - ?similarIssue a cab:Powerline_overload_issue . - ?similarIssue cab:is_associated_with ?pastAction . - ?pastAction cab:has_initial_value ?pastActionText . - ?initial a cab:Initial_situation . - ?initial cab:has_part ?pastAction . - ?line a cab:Powerline . - ?initial cab:is_about ?line . - FILTER (?line = <{selected_powerline_iri}> && CONTAINS(?pastActionText, '{recommendation}')) - }} - """ - nb_similar_situations = list( - rte_onto.world.sparql(nb_past_actions_query) - )[0][0] - output_json = { - "title": recommendation, - "description": f"This pattern has been observed {nb_similar_situations} times in the past.", - "use_case": "PowerGrid", - "agent_type": AgentType.onto.name, - "actions": [action_dict], - "kpis": { - "type_of_the_reco": category, - "efficiency_of_the_reco": rho_max, - }, - } - - return [output_json] diff --git a/backend/recommendation-service/resources/PowerGrid/ontology/Grid2onto_v2_3.owl b/backend/recommendation-service/resources/PowerGrid/ontology/Grid2onto_v2_3.owl deleted file mode 100644 index 26d94cf0..00000000 --- a/backend/recommendation-service/resources/PowerGrid/ontology/Grid2onto_v2_3.owl +++ /dev/null @@ -1,3133 +0,0 @@ - - - - - - - - - - - - beta - - - - V1.2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1.0 - - - - - - - - - - - - - - - 1.0 - - - - - - - - - - - - 0.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #A_or - Laure CROCHEPIERRE - - - - #A_or - 30/01/2024 - - - - #A_or - Le courant à l'extrémité d'origine de chaque ligne électrique (exprimé en A). - - - - #A_or - intensité à l'origine de la ligne - - - - #Action - Laure CROCHEPIERRE - - - - #Action - Modification d'un composant du réseau électrique pour accomplir un objectif donné. - - - - #Action - Action - - - - #Action - Consider the temporal aspects. - - - - #Action - See:https://grid2op.readthedocs.io/en/latest/action.html#main-action-properties - - - - #Action_battery - Laure CROCHEPIERRE - - - - #Action_battery - 30/01/2024 - - - - #Action_battery - Action pouvant charger ou décharger une batterie - - - - #Action_battery - Action sur une batterie - - - - #Action_do_nothing - Laure CROCHEPIERRE - - - - #Action_do_nothing - 30/01/2024 - - - - #Action_do_nothing - Action_rien_faire - - - - #Action_prod - Laure CROCHEPIERRE - - - - #Action_prod - 30/01/2024 - - - - #Action_prod - Action agissant sur un moyen de production : écrettement, redispatching, ... - - - - #Action_prod - Action sur un moyen de production - - - - #Action_prod - Action sur un moyen de production - - - - #Action_topo - Laure CROCHEPIERRE - - - - #Action_topo - 30/01/2024 - - - - #Action_topo - Action sur les composants de type ligne, transformateur et bus servant à ré-aiguiller les flux électriques. - - - - #Action_topo - Action topologique - - - - #Atypic_observation - Laure CROCHEPIERRE - - - - #Atypic_observation - 30/01/2024 - - - - #Atypic_observation - Observation peu rencontrée dans l'historique - - - - #Atypic_observation - Observation critique - - - - #Available_margins_for_dispatching - Laure CROCHEPIERRE - - - - #Available_margins_for_dispatching - 30/01/2024 - - - - #Available_margins_for_dispatching - Indicateur quantitatif - - - - #Bus - Laure CROCHEPIERRE - - - - #Bus - 30/01/2024 - - - - #Bus - Composant du réseau électrique servant de point de connexion physique entre différents ouvrages (lignes et transformateur) - - - - #Bus - Jeu de barres - - - - #Comfort - Laure CROCHEPIERRE - - - - #Comfort - 30/01/2024 - - - - #Comfort - Objectif orienté utilisateur. - - - - #Comfort - Confort - - - - #Context - Laure CROCHEPIERRE - - - - #Context - 30/01/2024 - - - - #Context - Contexte associé à un événement. Il peut s'agir de KPIs, d'observations choisies - - - - #Context - Contexte - - - - #Critical_observation - Laure CROCHEPIERRE - - - - #Critical_observation - 30/01/2024 - - - - #Critical_observation - Observation importante pouvant mener par exemple à un événement réseau. - - - - #Critical_observation - Observation critique - - - - #Decrease_energy_losses_objective - Laure CROCHEPIERRE - - - - #Decrease_energy_losses_objective - 30/01/2024 - - - - #Decrease_energy_losses_objective - Objectif de réduction des pertes électriques pour accomplir l'objectif de type optimisation du réseau. - - - - #Decrease_energy_losses_objective - Objectif de décroissance des pertes - - - - #Decrease_nb_actions_objective - Laure CROCHEPIERRE - - - - #Decrease_nb_actions_objective - 30/01/2024 - - - - #Decrease_nb_actions_objective - Objectif de mise en oeuvre d'un nombre d'actions réduite pour accomplir l'objectif de confort de l'utilisateur. - - - - #Decrease_nb_actions_objective - Objectif de réduction du nombre d'actions - - - - #Decrease_nb_overloads - Laure CROCHEPIERRE - - - - #Decrease_nb_overloads - 30/01/2024 - - - - #Decrease_nb_overloads - Objectif de réduction du nombre de surcharges pour accomplir l'objectif de sécurité - - - - #Decrease_nb_overloads - Objectif de réduction du nombre de surcharges - - - - #Decreasing_losses - Laure CROCHEPIERRE - - - - #Decreasing_losses - 30/01/2024 - - - - #Decreasing_losses - Objectif de décroissance des pertes - - - - #Decreasing_nb_actions - Laure CROCHEPIERRE - - - - #Decreasing_nb_actions - 30/01/2024 - - - - #Decreasing_nb_actions - Objectif de réduction du nombre d'actions - - - - #Decreasing_nb_overloads - Laure CROCHEPIERRE - - - - #Decreasing_nb_overloads - 30/01/2024 - - - - #Decreasing_nb_overloads - Objectif de réduction du nombre de surcharges - - - - #Decreasing_operator_workload - Laure CROCHEPIERRE - - - - #Decreasing_operator_workload - 30/01/2024 - - - - #Decreasing_operator_workload - Réduction de la charge de l'opérateur - - - - #Distance_from_reference_topology - Laure CROCHEPIERRE - - - - #Distance_from_reference_topology - 30/01/2024 - - - - #Distance_from_reference_topology - Distance à la topologie de référence - - - - #Electrical_grid - Laure CROCHEPIERRE - - - - #Electrical_grid - 30/01/2024 - - - - #Electrical_grid - Ensemble d'infrastructures énergétiques permettant d'acheminer l'électricité des centres de production (générateur) vers les consommateurs. - - - - #Electrical_grid - Réseau électrique - - - - #Electrical_grid_area - Laure CROCHEPIERRE - - - - #Electrical_grid_area - Périmètre géographique réduit du réseau électrique complet - - - - #Electrical_grid_area - Zone du réseau électrique - - - - #Electrical_grid_component - Laure CROCHEPIERRE - - - - #Electrical_grid_component - 30/01/2024 - - - - #Electrical_grid_component - Composant du réseau électrique - - - - #Electrical_grid_component - Element matériel du réseau, aussi appelé infrastructure - - - - #Electrical_grid_state_measurement_datum - Laure CROCHEPIERRE - - - - #Electrical_grid_state_measurement_datum - 30/01/2024 - - - - #Electrical_grid_state_measurement_datum - Mesure d'une grandeur sur le réseau électrique (par opposition à estimation) - - - - #Electrical_grid_state_measurement_datum - Mesure - - - - #Electrical_grid_system - Laure CROCHEPIERRE - - - - #Electrical_grid_system - 30/01/2024 - - - - #Electrical_grid_system - Système électrique - - - - #Energy_losses - Laure CROCHEPIERRE - - - - #Energy_losses - 30/01/2024 - - - - #Energy_losses - Pertes - - - - #Event - Laure CROCHEPIERRE - - - - #Event - 30/01/2024 - - - - #Event - Evenement - - - - #Explanation - Explication - - - - #Explanation - Laure CROCHEPIERRE - - - - #Explanation - 30/01/2024 - - - - #Final_situation - Laure CROCHEPIERRE - - - - #Final_situation - 30/01/2024 - - - - #Final_situation - Situation finale - - - - #Forecast - Laure CROCHEPIERRE - - - - #Forecast - 30/01/2024 - - - - #Forecast - Prévision - - - - #Gen_p - Laure CROCHEPIERRE - - - - #Gen_p - 30/01/2024 - - - - #Gen_p - La valeur de production active de chaque générateur (exprimée en MW). - - - - #Gen_p - Puissance active du générateur - - - - #Gen_q - Laure CROCHEPIERRE - - - - #Gen_q - 30/01/2024 - - - - #Gen_q - La valeur de production réactive de chaque générateur (exprimée en MVar). - - - - #Gen_q - Puissance réactive du générateur - - - - #Gen_v - Tension au générateur - - - - #Gen_v - 30/01/2024 - - - - #Gen_v - Le module de la tension du bus auquel chaque générateur est connecté (exprimée en kV). - - - - #Gen_v - Laure CROCHEPIERRE - - - - #Generator - Laure CROCHEPIERRE - - - - #Generator - 30/01/2024 - - - - #Generator - Générateur produisant de l'électricité - - - - #Generator - Générateur - - - - #Goal - Laure CROCHEPIERRE - - - - #Goal - 30/01/2024 - - - - #Goal - Objectif que l'on cherche à résoudre par l'application d'actions. - - - - #Goal - Goal - - - - #Grid_region - Laure CROCHEPIERRE - - - - #Grid_region - Une région est un type de zone du réseau électrique. - - - - #Grid_region - Région du réseau électrique - - - - #Grid_state - Laure CROCHEPIERRE - - - - #Grid_state - 30/01/2024 - - - - #Grid_state - Etat du réseau - - - - #Grid_state - Etat du réseau - - - - #Human - Laure CROCHEPIERRE - - - - #Human - 30/01/2024 - - - - #Human - Agent humain agissant sur le réseau. Définit l'origine d'une recommandation comme venant de l'humain. - - - - #Human - Humain - - - - #Increase_grid_optimisation_objective - Laure CROCHEPIERRE - - - - #Increase_grid_optimisation_objective - 30/01/2024 - - - - #Increase_grid_optimisation_objective - Type d'objectif associé à l'optimisation du réseau. - - - - #Increase_grid_optimisation_objective - Objectif d'optimisation du réseau - - - - #Increase_operator_confort_objective - Laure CROCHEPIERRE - - - - #Increase_operator_confort_objective - 30/01/2024 - - - - #Increase_operator_confort_objective - Type d'objectif associé à l'amélioration du confort de l'utilisateur. - - - - #Increase_operator_confort_objective - Objectif d'améloration du confort de l'opérateur - - - - #Initial_situation - Laure CROCHEPIERRE - - - - #Initial_situation - 30/01/2024 - - - - #Initial_situation - Situation initiale - - - - #Issue_alert - Laure CROCHEPIERRE - - - - #Issue_alert - 30/01/2024 - - - - #Issue_alert - Problème rencontré sur le réseau électrique. - - - - #Issue_alert - Problème - - - - #Junior_profile - Laure CROCHEPIERRE - - - - #Junior_profile - 30/01/2024 - - - - #Junior_profile - Opérateur junior, nouveau dans la conduite du réseau. - - - - #Junior_profile - Profil junior - - - - #KPI_datum - 30/01/2024 - - - - #KPI_datum - Indicateur - - - - #KPI_datum - Laure CROCHEPIERRE - - - - #Line_status - Gives the status (connected / disconnected) for every powerline (True at position i means the powerline i is connected) - - - - #Line_status - 30/01/2024 - - - - #Line_status - Statut de la ligne - - - - #Line_status - Laure CROCHEPIERRE - - - - #List_of_actions - Laure CROCHEPIERRE - - - - #List_of_actions - 30/01/2024 - - - - #List_of_actions - Liste d'actions - - - - #List_recommanded_actions - Laure CROCHEPIERRE - - - - #List_recommanded_actions - 30/01/2024 - - - - #List_recommanded_actions - Liste d'actions recommandées - - - - #Load - Laure CROCHEPIERRE - - - - #Load - 30/01/2024 - - - - #Load - Charge consommant de l'électricité - - - - #Load - Charge - - - - #Load_p - Laure CROCHEPIERRE - - - - #Load_p - 30/01/2024 - - - - #Load_p - The active load value of each consumption (expressed in MW). - - - - #Load_p - Puissance active de la charge - - - - #Load_q - Laure CROCHEPIERRE - - - - #Load_q - 30/01/2024 - - - - #Load_q - La valeur de la puissance réactive de la charge de chaque consommation (exprimée en MVar). - - - - #Load_q - Puissance réactive de la charge - - - - #Load_v - Laure CROCHEPIERRE - - - - #Load_v - 30/01/2024 - - - - #Loss_of_line - Laure CROCHEPIERRE - - - - #Loss_of_line - 30/01/2024 - - - - #Machine - Laure CROCHEPIERRE - - - - #Machine - 30/01/2024 - - - - #Machine - Agent machine agissant sur le réseau. Définit l'origine d'une recommandation comme venant d'un processus machine (IA par exemple). - - - - #Machine - Machine - - - - #Maintenance - Laure CROCHEPIERRE - - - - #Maintenance - 30/01/2024 - - - - #Make_grid_safe_objective - Laure CROCHEPIERRE - - - - #Make_grid_safe_objective - 30/01/2024 - - - - #Make_grid_safe_objective - Type d'objectif associé à la sécurisation du réseau - - - - #Make_grid_safe_objective - Objectif de sécurisation du réseau - - - - #Node - Laure CROCHEPIERRE - - - - #Node - 30/01/2024 - - - - #Node - Point de connexion électrique entre plusieurs lignes ou transformateur - - - - #Node - Nœud - - - - #Normal_observation - Laure CROCHEPIERRE - - - - #Normal_observation - 30/01/2024 - - - - #Normal_observation - Observation fréquemment obtenue dans l'historique - - - - #Normal_observation - Observation normale - - - - #Number_of_actions - Laure CROCHEPIERRE - - - - #Number_of_actions - 30/01/2024 - - - - #Number_of_actions - Nombre d'actions - - - - #Number_of_actions - Nombre d'actions - - - - #Number_of_available_assets - Laure CROCHEPIERRE - - - - #Number_of_available_assets - 30/01/2024 - - - - #Number_of_available_assets - Nombre d'infrastructures disponibles pour réaliser une action. - - - - #Number_of_available_assets - Nombre d'élements disponibles - - - - #Number_of_available_flexibilities - Laure CROCHEPIERRE - - - - #Number_of_available_flexibilities - 30/01/2024 - - - - #Number_of_available_flexibilities - Nombre de flexibilités disponibles - - - - #Number_of_available_flexibilities - Nombre de flexibilités disponibles - - - - #Number_of_overloads - Laure CROCHEPIERRE - - - - #Number_of_overloads - 30/01/2024 - - - - #Number_of_overloads - Nombre de lignes en surcharge (rho supérieur à 1). - - - - #Number_of_overloads - Nombre de surcharges - - - - #Objective - Laure CROCHEPIERRE - - - - #Objective - 30/01/2024 - - - - #Objective - Objectif - - - - #Observation - Laure CROCHEPIERRE - - - - #Observation - 30/01/2024 - - - - #Observation - Ensemble d'éléments observables sur le réseau à un instant donné. - - - - #Observation - Observation Grid2op - - - - #Operator - Laure CROCHEPIERRE - - - - #Operator - 30/01/2024 - - - - #Operator - Type d'agent réalisant la conduite du réseau. - - - - #Operator - Opérateur - - - - #Optimisation - Laure CROCHEPIERRE - - - - #Optimisation - 30/01/2024 - - - - #Optimisation - Une fois l'objectif de sécurité atteint, l'optimisation du réseau consiste à alller au plus près des marges pour par exemple minimiser les pertes électriques, augmenter la réserve de puissance réactive. - - - - #Optimisation - Optimisation - - - - #P_or - Laure CROCHEPIERRE - - - - #P_or - 30/01/2024 - - - - #P_or - La puissance active à l'origine de chaque ligne électrique (exprimé en MW). - - - - #P_or - Puissance active - - - - #Physical_grid_characteristics - Laure CROCHEPIERRE - - - - #Physical_grid_characteristics - Observations décrivant d'un point de vue physique le réseau. - - - - #Physical_grid_characteristics - Caractéristiques physiques - - - - #Physical_grid_characteristics - Deprecated - - - - #Power_flow - 30/01/2024 - - - - #Power_flow - Calcul de répartition - - - - #Powerline - Laure CROCHEPIERRE - - - - #Powerline - 30/01/2024 - - - - #Powerline - Infrastructure principale du réseau électrique reliant deux noeuds du réseau - - - - #Powerline - Ligne - - - - #Powerline_overload_issue - Laure CROCHEPIERRE - - - - #Powerline_overload_issue - 30/01/2024 - - - - #Powerline_overload_issue - Problème de surcharge de ligne(s) - - - - #Powerline_recommanded_action - Laure CROCHEPIERRE - - - - #Powerline_recommanded_action - 27/03/2024 - - - - #Powerline_recommanded_action - Action, agissant sur une ligne, proposée pour accomplir un objectif donné. - - - - #Profile - Laure CROCHEPIERRE - - - - #Profile - 30/01/2024 - - - - #Profile - Profil d'expertise de l'opérateur - - - - #Profile - Profile - - - - #Q_or - Laure CROCHEPIERRE - - - - #Q_or - 30/01/2024 - - - - #Q_or - La puissance réactive à l'extrémité d'origine de chaque ligne électrique (exprimé en MVar). - - - - #Q_or - Puissance active - - - - #Qualitative_measurement_datum_KPI - Laure CROCHEPIERRE - - - - #Qualitative_measurement_datum_KPI - 30/01/2024 - - - - #Qualitative_measurement_datum_KPI - Indicateur qualitatif - - - - #Quantitative_measurement_datum_KPI - Laure CROCHEPIERRE - - - - #Quantitative_measurement_datum_KPI - 30/01/2024 - - - - #Quantitative_measurement_datum_KPI - Indicateur quantitatif - - - - #Recommanded_action - Laure CROCHEPIERRE - - - - #Recommanded_action - 30/01/2024 - - - - #Recommanded_action - Action proposée pour accomplir un objectif donné. - - - - #Recommanded_action - Action recommandée - - - - #Renewable_energy_share - Laure CROCHEPIERRE - - - - #Renewable_energy_share - Pourcentage d'énergie renouvelable produite sur le réseau - - - - #Renewable_energy_share - Proportion de renouvelable - - - - #Request_function - Laure CROCHEPIERRE - - - - #Request_function - 30/01/2024 - - - - #Rho - Laure CROCHEPIERRE - - - - #Rho - 30/01/2024 - - - - #Rho - Charge de la ligne - - - - #Rho - The capacity of each powerline. It is defined at the observed current flow divided by the thermal limit of each powerline (no unit). - - - - #Safety - Laure CROCHEPIERRE - - - - #Safety - 30/01/2024 - - - - #Safety - Objectif principal à accomplir sur le réseau assurant le réseau est exploité dans ses limites, notamment sans que les lignes entrent en surcharge. - - - - #Safety - Sécurité - - - - #Senior_profile - Laure CROCHEPIERRE - - - - #Senior_profile - 30/01/2024 - - - - #Senior_profile - Opérateur expert, aguerri à la conduite du réseau. - - - - #Senior_profile - Profil expert - - - - #Set_line_status - Laure CROCHEPIERRE - - - - #Set_line_status - 23/03/2024 - - - - #Set_line_status - Action menée sur les lignes servant à ré-aiguiller les flux électriques. Il s'agit d'une action Grid2op définissant l'état (connecté ou déconnecté) des lignes. - - - - #Set_line_status - Définition de l'état de la ligne - - - - #Set_topo_vect - Laure CROCHEPIERRE - - - - #Set_topo_vect - 23/03/2024 - - - - #Set_topo_vect - Il s'agit d'une action Grid2op définissant la connectivité des lignes aux différents bus de leurs postes origine et extrémité. - - - - #Set_topo_vect - Définition de la topologie du réseau - - - - #Similar_situation - Laure CROCHEPIERRE - - - - #Similar_situation - 30/01/2024 - - - - #Similar_situation - Situation similaire - - - - #Situation - Laure CROCHEPIERRE - - - - #Situation - 30/01/2024 - - - - #Situation - Ensemble des informations définissant l'état du réseau à un instant donné. - - - - #Situation - Situation de réseau - - - - #Storage - Laure CROCHEPIERRE - - - - #Storage - 30/01/2024 - - - - #Storage - Batterie ayant une capacité de stockage électrique sur le réseau - - - - #Storage - Batterie - - - - #Substation - Laure CROCHEPIERRE - - - - #Substation - 30/01/2024 - - - - #Substation - Poste électrique, lieu de connexion de lignes électriques dans lequel - - - - #Substation - Poste - - - - #Switch_line_status - Laure CROCHEPIERRE - - - - #Switch_line_status - 24/03/2024 - - - - #Switch_line_status - Il s'agit d'une action Grid2op modifiant ou non l'état (de connecté à déconnecté, de déconnecté à connecté) des lignes. - - - - #Switch_line_status - Changement de l'état de la ligne - - - - #Topo_vect - 30/01/2024 - - - - #Topo_vect - For each object (load, generator, ends of a powerline) it gives on which bus this object is connected in its substation. - - - - #Topo_vect - Topologie vectorielle - - - - #Topo_vect - Laure CROCHEPIERRE - - - - #Transformer - Laure CROCHEPIERRE - - - - #Transformer - 30/01/2024 - - - - #Transformer - Composant du réseau électrique pouvant augmenter ou baisser les niveaux de tension sur le réseau - - - - #Transformer - Transformateur - - - - #V_or - Laure CROCHEPIERRE - - - - #V_or - 30/01/2024 - - - - #V_or - Le module de la tension au niveau du bus auquel l'extrémité d'origine de chaque ligne électrique est connectée (exprimée en kV). - - - - #V_or - Tension à l'origine de la ligne - - - - #Voltage - 30/01/2024 - - - - - - - diff --git a/backend/recommendation-service/resources/PowerGrid/ontology/Grid2onto_v2_3_1.owl b/backend/recommendation-service/resources/PowerGrid/ontology/Grid2onto_v2_3_1.owl deleted file mode 100644 index b69ef5ba..00000000 --- a/backend/recommendation-service/resources/PowerGrid/ontology/Grid2onto_v2_3_1.owl +++ /dev/null @@ -1,4903 +0,0 @@ - - - - - - - - - beta - V1.2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Le courant à l'extrémité d'origine de chaque ligne électrique (exprimé en A). - intensité à l'origine de la ligne - - - - - Laure CROCHEPIERRE - 30/01/2024 - Mesure d'une grandeur sur le réseau électrique (par opposition à estimation) - Mesure - - - - - - - - - - - - - - - - - - - - - Laure CROCHEPIERRE - Modification d'un composant du réseau électrique pour accomplir un objectif donné. - Action - Consider the temporal aspects. - See:https://grid2op.readthedocs.io/en/latest/action.html#main-action-properties - - - - - Cette classe représente les données, sous format json, assciées à une action. - - - - - - - - - - - - - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Type d'agent réalisant la conduite du réseau. - Opérateur - - - - - Laure CROCHEPIERRE - 30/01/2024 - Profil d'expertise de l'opérateur - Profile - - - - - Laure CROCHEPIERRE - 30/01/2024 - Objectif que l'on cherche à résoudre par l'application d'actions. - Goal - - - - - - - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - - - - - Laure CROCHEPIERRE - 30/01/2024 - Action pouvant charger ou décharger une batterie - Action sur une batterie - - - - - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Action agissant sur un moyen de production : écrettement, redispatching, ... - Action sur un moyen de production - Action sur un moyen de production - - - - - Laure CROCHEPIERRE - 30/01/2024 - Charge consommant de l'électricité - Charge - - - - - Laure CROCHEPIERRE - 30/01/2024 - Composant du réseau électrique - Element matériel du réseau, aussi appelé infrastructure - - - - - - - - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Action sur les composants de type ligne, transformateur et bus servant à ré-aiguiller les flux électriques. - Action topologique - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Infrastructure principale du réseau électrique reliant deux noeuds du réseau - Ligne - - - - - - - - - - - - - - - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Poste électrique, lieu de connexion de lignes électriques dans lequel - Poste - - - - - 30/01/2024 - Calcul de répartition - - - - - Laure CROCHEPIERRE - 30/01/2024 - Générateur produisant de l'électricité - Générateur - - - - - - - - - - - - - - - - - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Point de connexion électrique entre plusieurs lignes ou transformateur - Nœud - - - - - Laure CROCHEPIERRE - 30/01/2024 - Observation peu rencontrée dans l'historique - Observation critique - - - - - - - - - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Ensemble d'éléments observables sur le réseau à un instant donné. - Observation Grid2op - - - - - Laure CROCHEPIERRE - 30/01/2024 - Evenement - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Indicateur quantitatif - - - - - Laure CROCHEPIERRE - 30/01/2024 - Indicateur qualitatif - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Une fois l'objectif de sécurité atteint, l'optimisation du réseau consiste à alller au plus près des marges pour par exemple minimiser les pertes électriques, augmenter la réserve de puissance réactive. - Optimisation - - - - - - - - - - - - - - - - - 30/01/2024 - Indicateur - Laure CROCHEPIERRE - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Ensemble d'infrastructures énergétiques permettant d'acheminer l'électricité des centres de production (générateur) vers les consommateurs. - Réseau électrique - - - - - Laure CROCHEPIERRE - 30/01/2024 - Composant du réseau électrique servant de point de connexion physique entre différents ouvrages (lignes et transformateur) - Jeu de barres - - - - - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Objectif orienté utilisateur. - Confort - - - - - - - - - - - - - - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Contexte associé à un événement. Il peut s'agir de KPIs, d'observations choisies - Contexte - - - - - Laure CROCHEPIERRE - - - - - Laure CROCHEPIERRE - 30/01/2024 - Problème rencontré sur le réseau électrique. - Problème - - - - - - - - - - - - - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Ensemble des informations définissant l'état du réseau à un instant donné. - Situation de réseau - - - - - Laure CROCHEPIERRE - 30/01/2024 - Observation critique - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Objectif de réduction des pertes électriques pour accomplir l'objectif de type optimisation du réseau. - Objectif de décroissance des pertes - - - - - Laure CROCHEPIERRE - 30/01/2024 - Type d'objectif associé à l'optimisation du réseau. - Objectif d'optimisation du réseau - - - - - Laure CROCHEPIERRE - 30/01/2024 - Objectif - - - - - Laure CROCHEPIERRE - 30/01/2024 - Objectif de mise en oeuvre d'un nombre d'actions réduite pour accomplir l'objectif de confort de l'utilisateur. - Objectif de réduction du nombre d'actions - - - - - Laure CROCHEPIERRE - 30/01/2024 - Type d'objectif associé à l'amélioration du confort de l'utilisateur. - Objectif d'améloration du confort de l'opérateur - - - - - Laure CROCHEPIERRE - 30/01/2024 - Objectif de réduction du nombre de surcharges pour accomplir l'objectif de sécurité - Objectif de réduction du nombre de surcharges - - - - - Laure CROCHEPIERRE - 30/01/2024 - Type d'objectif associé à la sécurisation du réseau - Objectif de sécurisation du réseau - - - - - Laure CROCHEPIERRE - 30/01/2024 - Objectif de décroissance des pertes - - - - - Laure CROCHEPIERRE - 30/01/2024 - Objectif de réduction du nombre d'actions - - - - - Laure CROCHEPIERRE - 30/01/2024 - Objectif de réduction du nombre de surcharges - - - - - Laure CROCHEPIERRE - 30/01/2024 - Réduction de la charge de l'opérateur - - - - - - - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Distance à la topologie de référence - - - - - - - - - - - - - - - - - - - - - - - - - - - - Laure CROCHEPIERRE - Périmètre géographique réduit du réseau électrique complet - Zone du réseau électrique - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Système électrique - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Pertes - - - - - Explication - Laure CROCHEPIERRE - 30/01/2024 - - - - - Laure CROCHEPIERRE - - - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Prévision - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - La valeur de production active de chaque générateur (exprimée en MW). - Puissance active du générateur - - - - - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - La valeur de production réactive de chaque générateur (exprimée en MVar). - Puissance réactive du générateur - - - - - - - - - - - - - - - Tension au générateur - 30/01/2024 - Le module de la tension du bus auquel chaque générateur est connecté (exprimée en kV). - Laure CROCHEPIERRE - - - - - - - - - - - - - - - - - - - - - - Laure CROCHEPIERRE - Une région est un type de zone du réseau électrique. - Région du réseau électrique - - - - - - - - - - - - - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Etat du réseau - Etat du réseau - - - - - - - - - - - Gives the status (connected / disconnected) for every powerline (True at position i means the powerline i is connected) - 30/01/2024 - Statut de la ligne - Laure CROCHEPIERRE - - - - - - - - - - - 30/01/2024 - For each object (load, generator, ends of a powerline) it gives on which bus this object is connected in its substation. - Topologie vectorielle - Laure CROCHEPIERRE - - - - - Laure CROCHEPIERRE - 30/01/2024 - Agent humain agissant sur le réseau. Définit l'origine d'une recommandation comme venant de l'humain. - Humain - - - - - - - - - Laure CROCHEPIERRE - - - - - - - - - - - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Objectif principal à accomplir sur le réseau assurant le réseau est exploité dans ses limites, notamment sans que les lignes entrent en surcharge. - Sécurité - - - - - Laure CROCHEPIERRE - 30/01/2024 - Opérateur junior, nouveau dans la conduite du réseau. - Profil junior - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Liste d'actions - - - - - Laure CROCHEPIERRE - 30/01/2024 - Liste d'actions recommandées - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - The active load value of each consumption (expressed in MW). - Puissance active de la charge - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - La valeur de la puissance réactive de la charge de chaque consommation (exprimée en MVar). - Puissance réactive de la charge - - - - - Laure CROCHEPIERRE - 30/01/2024 - - - - - Laure CROCHEPIERRE - - - - - Laure CROCHEPIERRE - 30/01/2024 - Agent machine agissant sur le réseau. Définit l'origine d'une recommandation comme venant d'un processus machine (IA par exemple). - Machine - - - - - Laure CROCHEPIERRE - - - - - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Indicateur quantitatif - - - - - 30/01/2024 - - - - - Laure CROCHEPIERRE - 30/01/2024 - Observation fréquemment obtenue dans l'historique - Observation normale - - - - - - - - - - - - - - - - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Nombre d'actions - Nombre d'actions - - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Nombre d'infrastructures disponibles pour réaliser une action. - Nombre d'élements disponibles - - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Nombre de flexibilités disponibles - Nombre de flexibilités disponibles - - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Nombre de lignes en surcharge (rho supérieur à 1). - Nombre de surcharges - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - La puissance active à l'origine de chaque ligne électrique (exprimé en MW). - Puissance active - - - - - - - - - - - Laure CROCHEPIERRE - Observations décrivant d'un point de vue physique le réseau. - Caractéristiques physiques - Deprecated - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1.0 - - - - - - - - - - - - - - - - - - - - - - - 0.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3.0 - - - - - - - - - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Problème de surcharge de ligne(s) - - - - - Laure CROCHEPIERRE - 30/01/2024 - Charge de la ligne - The capacity of each powerline. It is defined at the observed current flow divided by the thermal limit of each powerline (no unit). - - - - - - - - - - - - - - - - - - - - Laure CROCHEPIERRE - Action, agissant sur une ligne, proposée pour accomplir un objectif donné. - - - - - Laure CROCHEPIERRE - 30/01/2024 - Action proposée pour accomplir un objectif donné. - Action recommandée - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - La puissance réactive à l'extrémité d'origine de chaque ligne électrique (exprimé en MVar). - Puissance active - - - - - - - - - - - - - - - Laure CROCHEPIERRE - Pourcentage d'énergie renouvelable produite sur le réseau - Proportion de renouvelable - - - - - Laure CROCHEPIERRE - 30/01/2024 - Opérateur expert, aguerri à la conduite du réseau. - Profil expert - - - - - Laure CROCHEPIERRE - Action menée sur les lignes servant à ré-aiguiller les flux électriques. Il s'agit d'une action Grid2op définissant l'état (connecté ou déconnecté) des lignes. - Définition de l'état de la ligne - - - - - Laure CROCHEPIERRE - Il s'agit d'une action Grid2op définissant la connectivité des lignes aux différents bus de leurs postes origine et extrémité. - Définition de la topologie du réseau - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Batterie ayant une capacité de stockage électrique sur le réseau - Batterie - - - - - Laure CROCHEPIERRE - Il s'agit d'une action Grid2op modifiant ou non l'état (de connecté à déconnecté, de déconnecté à connecté) des lignes. - Changement de l'état de la ligne - - - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Composant du réseau électrique pouvant augmenter ou baisser les niveaux de tension sur le réseau - Transformateur - - - - - - - - - - - Laure CROCHEPIERRE - 30/01/2024 - Le module de la tension au niveau du bus auquel l'extrémité d'origine de chaque ligne électrique est connectée (exprimée en kV). - Tension à l'origine de la ligne - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This action will: - NOT change anything to the injections - NOT perform any redispatching action - NOT modify any storage capacity - NOT perform any curtailment - NOT force any line status - NOT switch any line status - NOT switch anything in the topology - NOT force any particular bus configuration - Raise an alarm on area: east - - - - - 0.9681275486946106 - - - - - 2012-01-04 07:20:00 - - - - - - - - - - - - - 1.3189594745635986 - - - - - 1.0065436363220215 - - - - - 54_58_154 - - - - - 1 - - - - - 0.3366421884655705 - - - - - {'_set_line_status': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_switch_line_status': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_set_topo_vect': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_change_bus_vect': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_redispatch': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], '_storage_power': [], '_curtail': [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], '_raise_alarm': [True, False, False]} - - - - - 2012-01-04 07:25:00 - - - - - 858.5199956893921 - - - - - 1.3400672674179077 - - - - - 0.336839396129193 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Set the bus of the following element(s) - - - - - 0.6634863018989563 - - - - - 2012-01-04 10:55:00 - - - - - - - - - - - - - 0.7324960231781006 - - - - - 1.0269922018051147 - - - - - 44_48_133 - - - - - 1 - - - - - 0.5202283875350088 - - - - - {'_set_line_status': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_switch_line_status': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_set_topo_vect': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 1, 2, 1, 1, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_change_bus_vect': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_redispatch': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], '_storage_power': [], '_curtail': [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], '_raise_alarm': [False, False, False]} - - - - - 2012-01-04 11:00:00 - - - - - 1219.250001192093 - - - - - 0.8575723767280579 - - - - - 0.5242607329278928 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Set the bus of the following element(s) - - - - - 0.5769473314285278 - - - - - 2012-01-05 10:35:00 - - - - - - - - - 0.7575469613075256 - - - - - 1.0057731866836548 - - - - - 44_48_133 - - - - - 1 - - - - - 0.5144902190956483 - - - - - {'_set_line_status': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_switch_line_status': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_set_topo_vect': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 1, 2, 1, 1, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_change_bus_vect': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_redispatch': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], '_storage_power': [], '_curtail': [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], '_raise_alarm': [False, True, True]} - - - - - 2012-01-05 10:40:00 - - - - - 1270.040014743805 - - - - - 0.9071735143661499 - - - - - 0.5153302754651263 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Set the bus of the following element(s) - - - - - 0.5055027604103088 - - - - - 2012-01-05 11:45:00 - - - - - - - - - 0.7169448733329773 - - - - - 1.0452219247817993 - - - - - 44_48_133 - - - - - 1 - - - - - 0.542238635971484 - - - - - {'_set_line_status': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_switch_line_status': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_set_topo_vect': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_change_bus_vect': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_redispatch': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], '_storage_power': [], '_curtail': [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], '_raise_alarm': [False, True, True]} - - - - - 2012-01-05 11:50:00 - - - - - 1351.1100063323975 - - - - - 0.7480379939079285 - - - - - 0.5413626369172067 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Set the bus of the following element(s) - - - - - 0.7822652459144592 - - - - - 2012-01-06 13:25:00 - - - - - - - - - 0.7963861227035522 - - - - - 1.00251305103302 - - - - - 44_48_133 - - - - - 1 - - - - - 0.5176450515480016 - - - - - {'_set_line_status': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_switch_line_status': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_set_topo_vect': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 1, 2, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_change_bus_vect': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_redispatch': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], '_storage_power': [], '_curtail': [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], '_raise_alarm': [False, True, True]} - - - - - 2012-01-06 13:30:00 - - - - - 1258.1300010681152 - - - - - 0.8455572128295898 - - - - - 0.5275662616642761 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Set the bus of the following element(s) - - - - - 0.80047208070755 - - - - - 2012-01-09 00:10:00 - - - - - - - - - - - - - 1.6084414720535278 - - - - - 1.0012634992599487 - - - - - 43_44_125 - - - - - 1 - - - - - 0.2920708852594247 - - - - - {'_set_line_status': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_switch_line_status': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_set_topo_vect': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_change_bus_vect': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_redispatch': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], '_storage_power': [], '_curtail': [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], '_raise_alarm': [False, False, True]} - - - - - 2012-01-09 00:15:00 - - - - - 820.0499954223633 - - - - - 1.971313238143921 - - - - - 0.2910967490425366 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Set the bus of the following element(s) - - - - - 0.7269015908241272 - - - - - 2012-01-09 06:20:00 - - - - - - - - - 1.3403648138046265 - - - - - 1.0084598064422607 - - - - - 54_58_154 - - - - - 1 - - - - - 0.29293462254096136 - - - - - {'_set_line_status': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_switch_line_status': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_set_topo_vect': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 1, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_change_bus_vect': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_redispatch': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], '_storage_power': [], '_curtail': [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], '_raise_alarm': [True, False, False]} - - - - - 2012-01-09 06:25:00 - - - - - 751.9000058174133 - - - - - 1.3461506366729736 - - - - - 0.2909952299311328 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Set the bus of the following element(s) - - - - - 0.7363576889038086 - - - - - 2012-01-10 11:20:00 - - - - - - - - - 0.6116133332252502 - - - - - 1.0462101697921753 - - - - - 44_48_133 - - - - - 1 - - - - - 0.5075426757551056 - - - - - {'_set_line_status': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_switch_line_status': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_set_topo_vect': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 1, 1, 2, 1, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_change_bus_vect': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_redispatch': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], '_storage_power': [], '_curtail': [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], '_raise_alarm': [False, True, True]} - - - - - 2012-01-10 11:25:00 - - - - - 1343.2299964427948 - - - - - 0.6839886903762817 - - - - - 0.5146370475455343 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This action will: - NOT change anything to the injections - NOT perform any redispatching action - NOT modify any storage capacity - NOT perform any curtailment - NOT force any line status - NOT switch any line status - NOT switch anything in the topology - NOT force any particular bus configuration - Raise an alarm on area: east - - - - - 0.9681275486946106 - - - - - 2012-01-04 07:20:00 - - - - - - - - - 1.3189594745635986 - - - - - 1.0065436363220215 - - - - - 54_58_154 - - - - - 1 - - - - - 0.3366421884655705 - - - - - {'_set_line_status': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_switch_line_status': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_set_topo_vect': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_change_bus_vect': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_redispatch': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], '_storage_power': [], '_curtail': [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], '_raise_alarm': [True, False, False]} - - - - - 2012-01-04 07:25:00 - - - - - 858.5199956893921 - - - - - 1.3400672674179077 - - - - - 0.336839396129193 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Set the bus of the following element(s) - - - - - 0.6634863018989563 - - - - - 2012-01-04 10:55:00 - - - - - - - - - 0.7324960231781006 - - - - - 1.0269922018051147 - - - - - 44_48_133 - - - - - 1 - - - - - 0.5202283875350088 - - - - - {'_set_line_status': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_switch_line_status': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_set_topo_vect': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 1, 2, 1, 1, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_change_bus_vect': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_redispatch': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], '_storage_power': [], '_curtail': [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], '_raise_alarm': [False, False, False]} - - - - - 2012-01-04 11:00:00 - - - - - 1219.250001192093 - - - - - 0.8575723767280579 - - - - - 0.5242607329278928 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Set the bus of the following element(s) - - - - - 0.5769473314285278 - - - - - 2012-01-05 10:35:00 - - - - - - - - - 0.7575469613075256 - - - - - 1.0057731866836548 - - - - - 44_48_133 - - - - - 1 - - - - - 0.5144902190956483 - - - - - {'_set_line_status': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_switch_line_status': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_set_topo_vect': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 1, 2, 1, 1, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_change_bus_vect': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_redispatch': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], '_storage_power': [], '_curtail': [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], '_raise_alarm': [False, True, True]} - - - - - 2012-01-05 10:40:00 - - - - - 1270.040014743805 - - - - - 0.9071735143661499 - - - - - 0.5153302754651263 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Set the bus of the following element(s) - - - - - 0.9058685302734375 - - - - - 2012-01-05 11:40:00 - - - - - - - - - 0.7506881356239319 - - - - - 1.0024315118789673 - - - - - 44_48_133 - - - - - 1 - - - - - 0.5326806972996297 - - - - - {'_set_line_status': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_switch_line_status': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_set_topo_vect': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_change_bus_vect': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_redispatch': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], '_storage_power': [], '_curtail': [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], '_raise_alarm': [False, False, False]} - - - - - 2012-01-05 11:45:00 - - - - - 1343.200010061264 - - - - - 0.7533180117607117 - - - - - 0.5420636115068745 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Set the bus of the following element(s) - - - - - 0.7822652459144592 - - - - - 2012-01-06 13:25:00 - - - - - - - - - 0.7963861227035522 - - - - - 1.00251305103302 - - - - - 44_48_133 - - - - - 1 - - - - - 0.5176450515480016 - - - - - {'_set_line_status': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_switch_line_status': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_set_topo_vect': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 1, 2, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_change_bus_vect': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_redispatch': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], '_storage_power': [], '_curtail': [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], '_raise_alarm': [False, True, True]} - - - - - 2012-01-06 13:30:00 - - - - - 1258.1300010681152 - - - - - 0.8455572128295898 - - - - - 0.5275662616642761 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Set the bus of the following element(s) - - - - - 0.871711790561676 - - - - - 2012-01-08 13:10:00 - - - - - - - - - - - - - 1.1053409576416016 - - - - - 1.1086878776550293 - - - - - 55_57_148 - - - - - 1 - - - - - 0.48653905859934 - - - - - {'_set_line_status': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_switch_line_status': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_set_topo_vect': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_change_bus_vect': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_redispatch': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], '_storage_power': [], '_curtail': [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], '_raise_alarm': [True, False, False]} - - - - - 2012-01-08 13:15:00 - - - - - 862.2699956893921 - - - - - 1.09774911403656 - - - - - 0.4909514455410989 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Set the bus of the following element(s) - - - - - 0.7776464223861694 - - - - - 2012-01-08 13:35:00 - - - - - - - - - 0.7403329610824585 - - - - - 1.0175766944885254 - - - - - 55_57_148 - - - - - 1 - - - - - 0.5783557971204049 - - - - - {'_set_line_status': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_switch_line_status': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_set_topo_vect': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 1, 1, 1, 2, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_change_bus_vect': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_redispatch': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], '_storage_power': [], '_curtail': [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], '_raise_alarm': [False, False, False]} - - - - - 2012-01-08 13:40:00 - - - - - 1014.689998626709 - - - - - 0.7623346447944641 - - - - - 0.5747979634751454 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Force reconnection of - - - - - 0.732400119304657 - - - - - 2012-01-08 17:20:00 - - - - - - - - - - - - - 1.4384031295776367 - - - - - 1.008924961090088 - - - - - 55_56_146 - - - - - 1 - - - - - 0.3775671956114976 - - - - - {'_set_line_status': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_switch_line_status': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_set_topo_vect': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_change_bus_vect': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_redispatch': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], '_storage_power': [], '_curtail': [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], '_raise_alarm': [False, False, False]} - - - - - 2012-01-08 17:25:00 - - - - - 699.8300008773804 - - - - - 1.28229558467865 - - - - - 0.3768084217243306 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Set the bus of the following element(s) - - - - - 0.706099808216095 - - - - - 2012-01-08 17:25:00 - - - - - - - - - - - - - 1.28229558467865 - - - - - 1.026733160018921 - - - - - 50_57_149 - - - - - 2 - - - - - 0.3768084217243306 - - - - - {'_set_line_status': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_switch_line_status': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_set_topo_vect': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_change_bus_vect': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_redispatch': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], '_storage_power': [], '_curtail': [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], '_raise_alarm': [True, False, False]} - - - - - 2012-01-08 17:30:00 - - - - - 705.8400002717972 - - - - - 1.3089832067489624 - - - - - 0.3762744434656651 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Set the bus of the following element(s) - - - - - 0.7269015908241272 - - - - - 2012-01-09 06:20:00 - - - - - - - - - 1.3403648138046265 - - - - - 1.0084598064422607 - - - - - 54_58_154 - - - - - 1 - - - - - 0.29293462254096136 - - - - - {'_set_line_status': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_switch_line_status': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_set_topo_vect': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 1, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_change_bus_vect': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_redispatch': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], '_storage_power': [], '_curtail': [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], '_raise_alarm': [True, False, False]} - - - - - 2012-01-09 06:25:00 - - - - - 751.9000058174133 - - - - - 1.3461506366729736 - - - - - 0.2909952299311328 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Set the bus of the following element(s) - - - - - 0.7363576889038086 - - - - - 2012-01-10 11:20:00 - - - - - - - - - 0.6116133332252502 - - - - - 1.0462101697921753 - - - - - 44_48_133 - - - - - 1 - - - - - 0.5075426757551056 - - - - - {'_set_line_status': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_switch_line_status': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_set_topo_vect': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 1, 1, 2, 1, 1, 2, 2, 2, 1, 2, 2, 2, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_change_bus_vect': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_redispatch': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], '_storage_power': [], '_curtail': [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], '_raise_alarm': [False, True, True]} - - - - - 2012-01-10 11:25:00 - - - - - 1343.2299964427948 - - - - - 0.6839886903762817 - - - - - 0.5146370475455343 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This action will: - NOT change anything to the injections - NOT perform any redispatching action - NOT modify any storage capacity - NOT perform any curtailment - NOT force any line status - NOT switch any line status - NOT switch anything in the topology - NOT force any particular bus configuration - Raise an alarm on area: east - - - - - 0.9681275486946106 - - - - - 2012-01-04 07:20:00 - - - - - - - - - 1.3189594745635986 - - - - - 1.0065436363220215 - - - - - 54_58_154 - - - - - 1 - - - - - 0.3366421884655705 - - - - - {'_set_line_status': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_switch_line_status': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_set_topo_vect': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_change_bus_vect': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_redispatch': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], '_storage_power': [], '_curtail': [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], '_raise_alarm': [True, False, False]} - - - - - 2012-01-04 07:25:00 - - - - - 858.5199956893921 - - - - - 1.3400672674179077 - - - - - 0.336839396129193 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Set the bus of the following element(s) - - - - - 0.6634863018989563 - - - - - 2012-01-04 10:55:00 - - - - - - - - - 0.7324960231781006 - - - - - 1.0269922018051147 - - - - - 44_48_133 - - - - - 1 - - - - - 0.5202283875350088 - - - - - {'_set_line_status': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_switch_line_status': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_set_topo_vect': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 1, 2, 1, 1, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_change_bus_vect': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_redispatch': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], '_storage_power': [], '_curtail': [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], '_raise_alarm': [False, False, False]} - - - - - 2012-01-04 11:00:00 - - - - - 1219.250001192093 - - - - - 0.8575723767280579 - - - - - 0.5242607329278928 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Set the bus of the following element(s) - - - - - 0.5769473314285278 - - - - - 2012-01-05 10:35:00 - - - - - - - - - 0.7575469613075256 - - - - - 1.0057731866836548 - - - - - 44_48_133 - - - - - 1 - - - - - 0.5144902190956483 - - - - - {'_set_line_status': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_switch_line_status': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_set_topo_vect': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 1, 2, 1, 1, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_change_bus_vect': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_redispatch': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], '_storage_power': [], '_curtail': [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], '_raise_alarm': [False, True, True]} - - - - - 2012-01-05 10:40:00 - - - - - 1270.040014743805 - - - - - 0.9071735143661499 - - - - - 0.5153302754651263 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Set the bus of the following element(s) - - - - - 0.5055027604103088 - - - - - 2012-01-05 11:45:00 - - - - - - - - - 0.7169448733329773 - - - - - 1.0452219247817993 - - - - - 44_48_133 - - - - - 1 - - - - - 0.542238635971484 - - - - - {'_set_line_status': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_switch_line_status': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_set_topo_vect': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_change_bus_vect': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_redispatch': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], '_storage_power': [], '_curtail': [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], '_raise_alarm': [False, True, True]} - - - - - 2012-01-05 11:50:00 - - - - - 1351.1100063323975 - - - - - 0.7480379939079285 - - - - - 0.5413626369172067 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Set the bus of the following element(s) - - - - - 0.7822652459144592 - - - - - 2012-01-06 13:25:00 - - - - - - - - - 0.7963861227035522 - - - - - 1.00251305103302 - - - - - 44_48_133 - - - - - 1 - - - - - 0.5176450515480016 - - - - - {'_set_line_status': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_switch_line_status': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_set_topo_vect': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 1, 2, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_change_bus_vect': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_redispatch': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], '_storage_power': [], '_curtail': [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], '_raise_alarm': [False, True, True]} - - - - - 2012-01-06 13:30:00 - - - - - 1258.1300010681152 - - - - - 0.8455572128295898 - - - - - 0.5275662616642761 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Redispatch "gen_54_26" of 2.80 MW - - - - - 1.323344349861145 - - - - - 2012-01-06 18:00:00 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2.7802488803863525 - - - - - 1.9171618223190308 - - - - - 63_60_181 - - - - - 11 - - - - - 0.32324117990400775 - - - - - {'_set_line_status': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_switch_line_status': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_set_topo_vect': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 1, 1, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_change_bus_vect': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_redispatch': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.799999952316284, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], '_storage_power': [], '_curtail': [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], '_raise_alarm': [True, True, False]} - - - - - 2012-01-06 18:05:00 - - - - - 890.0299954414368 - - - - - 2.9845950603485107 - - - - - 0.31870952927971624 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This action will: - NOT change anything to the injections - NOT perform any redispatching action - NOT modify any storage capacity - NOT perform any curtailment - NOT force any line status - NOT switch any line status - NOT switch anything in the topology - NOT force any particular bus configuration - Raise an alarm on area: east - - - - - 0.9681275486946106 - - - - - 2012-01-04 07:20:00 - - - - - - - - - 1.3189594745635986 - - - - - 1.0065436363220215 - - - - - 54_58_154 - - - - - 1 - - - - - 0.3366421884655705 - - - - - {'_set_line_status': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_switch_line_status': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_set_topo_vect': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_change_bus_vect': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_redispatch': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], '_storage_power': [], '_curtail': [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], '_raise_alarm': [True, False, False]} - - - - - 2012-01-04 07:25:00 - - - - - 858.5199956893921 - - - - - 1.3400672674179077 - - - - - 0.336839396129193 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Set the bus of the following element(s) - - - - - 0.6634863018989563 - - - - - 2012-01-04 10:55:00 - - - - - - - - - 0.7324960231781006 - - - - - 1.0269922018051147 - - - - - 44_48_133 - - - - - 1 - - - - - 0.5202283875350088 - - - - - {'_set_line_status': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_switch_line_status': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_set_topo_vect': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 1, 2, 1, 1, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_change_bus_vect': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_redispatch': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], '_storage_power': [], '_curtail': [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], '_raise_alarm': [False, False, False]} - - - - - 2012-01-04 11:00:00 - - - - - 1219.250001192093 - - - - - 0.8575723767280579 - - - - - 0.5242607329278928 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Redispatch "gen_54_26" of 2.80 MW - - - - - 1.2520853281021118 - - - - - 2012-01-04 20:40:00 - - - - - - - - - 2.2587380409240723 - - - - - 1.7937039136886597 - - - - - 60_61_159 - - - - - 10 - - - - - 0.2931285736377836 - - - - - {'_set_line_status': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_switch_line_status': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_set_topo_vect': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 1, 2, 2, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_change_bus_vect': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_redispatch': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.799999952316284, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], '_storage_power': [], '_curtail': [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], '_raise_alarm': [True, True, False]} - - - - - 2012-01-04 20:45:00 - - - - - 927.3400130271912 - - - - - 2.2846314907073975 - - - - - 0.2946325083249843 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Redispatch "gen_55_29" of 2.80 MW - - - - - 1.0466557741165161 - - - - - 2012-01-04 20:45:00 - - - - - - - - - 2.2846314907073975 - - - - - 1.6975096464157104 - - - - - 60_61_159 - - - - - 4 - - - - - 0.2946325083249843 - - - - - {'_set_line_status': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_switch_line_status': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_set_topo_vect': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_change_bus_vect': [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], '_redispatch': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.799999952316284, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], '_storage_power': [], '_curtail': [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], '_raise_alarm': [False, False, False]} - - - - - 2012-01-04 20:50:00 - - - - - 915.9700014591217 - - - - - 3.0016400814056396 - - - - - 0.2923593854419387 - - - - - - - - - - - - - - - - - - - - - - diff --git a/backend/recommendation-service/resources/PowerGrid/ontology/Onto2grid_v1.2.owl b/backend/recommendation-service/resources/PowerGrid/ontology/Onto2grid_v1.2.owl deleted file mode 100644 index 08b644b8..00000000 --- a/backend/recommendation-service/resources/PowerGrid/ontology/Onto2grid_v1.2.owl +++ /dev/null @@ -1,1173 +0,0 @@ - - - - - emna.amdouni - AMDOUNI Emna (IRT-SystemX), MAROT Antoine (RTE), ROZIER Alexandre (RTE), CROCHEPIERRE Laure (RTE) - 27th March 2023 - AMDOUNI Emna (IRT-SystemX) - beta - V1.2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Gives the status (connected / disconnected) for every powerline (True at position i means the powerline i is connected) - - - - - - - - - - - For each object (load, generator, ends of a powerline) it gives on which bus this object is connected in its substation. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Consider the temporal aspects. - See:https://grid2op.readthedocs.io/en/latest/action.html#main-action-properties - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The id of the substation to which the load is connected - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - We could call it Abnormal (to be discussed later) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - is_extracted from Physical grid measurement - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - - - - - - - - - - - - - - - - - - - - - - - - - 1.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The capacity of each powerline. It is defined at the observed current flow divided by the thermal limit of each powerline (no unit). - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The active load value of each consumption (expressed in MW). - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - add ranking function (how much does it answer to a specific goal). - - - - - - - - - - - - - - - - - - - The process should satisfy the goal - - - - - - - - - - - - - - - - - - - - - - - Antoine: consider mapping this calss with the notion of issue and alarm. The agent receives an alarm. Task is a problem to be resolved by an agent and associated with a notification. - - - - - is an action that resolves a specific issue. --> create an axiom - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1.01 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1.01 - - - - - - 1.006 - - - - - - 1.05 - - - - - - 1.008 - - - - - - - - - - - - 1.5 - - - - - - - - - - - - diff --git a/config/dev/cab-standalone/.env.example b/config/dev/cab-standalone/.env.example index 42f109e9..04b75ccb 100644 --- a/config/dev/cab-standalone/.env.example +++ b/config/dev/cab-standalone/.env.example @@ -5,11 +5,22 @@ CONFIG_PATH=./ SPRING_PROFILES_ACTIVE=docker HOST_IP=172.17.0.1 -# RL agent API for PowerGrid recommendations -# Local Docker: use the direct internal IP (no token needed) -# OVH/CI: use the HTTPS company proxy URL with RL_AGENT_API_TOKEN set -RL_AGENT_API_URL=http://frontend:80/rl-api/recommendation -RL_AGENT_API_TOKEN= +# RL agent API (T2.1_deep_expert) for PowerGrid recommendations. +# Normally set via .secrets (see .secrets.example) — these are only fallbacks. +# The RL agent requires RL_AGENT_API_TOKEN in every mode. +# Local dev : http://host.docker.internal:5123/api/v1/recommendation (RL agent on the host) +# Server : http://192.168.208.61:5000/api/v1/recommendation (LAN) +# Public : https://interactiveagent.passerelle.irt-systemx.fr/api/v1/recommendation +RL_AGENT_API_URL=http://host.docker.internal:5123/api/v1/recommendation +RL_AGENT_API_TOKEN=619e707da0981a48d9982019d996f98e20bdd885eab8b20ae05b4ef0f2e95097 + +# PowerGrid simulator upstream for the frontend's /powergrid-simu/ nginx proxy. +# The frontend keeps VITE_POWERGRID_SIMU=/powergrid-simu (same-origin, no CORS); +# only this upstream changes per environment: +# Local dev : http://host.docker.internal:5122/ (simulator container on the host) +# LAN : http://192.168.208.61:5100/ +# (Public/k8s uses nginx-kubernetes.conf via the helm chart, not this variable.) +POWERGRID_SIMU_UPSTREAM=http://host.docker.internal:5122/ # VITE build-time variables (also required in frontend/env/.env.local for local dev) VITE_POWERGRID_SIMU=false diff --git a/config/dev/cab-standalone/.secrets.example b/config/dev/cab-standalone/.secrets.example index 561d610f..2b2d2668 100644 --- a/config/dev/cab-standalone/.secrets.example +++ b/config/dev/cab-standalone/.secrets.example @@ -1,6 +1,28 @@ # Copy to .secrets and fill in your values — this file is gitignored -# Local Docker: set RL_AGENT_API_URL to the direct internal IP (e.g. http://192.168.x.x:5000/api/v1/recommendation) -# OVH/CI: use the HTTPS URL and set the token -export RL_AGENT_API_URL=http://frontend:80/rl-api/recommendation -export RL_AGENT_API_TOKEN= +# +# RL agent (T2.1_deep_expert) — pick ONE RL_AGENT_API_URL for your environment: +# Local dev : RL agent running on THIS host on port 5123, reached via host.docker.internal +# (cab_recommendation has the host-gateway mapping) +# Server : RL agent on the LAN host +# Public : RL agent behind the company HTTPS proxy +# The RL agent (T2.1_deep_expert) requires RL_AGENT_API_TOKEN in every mode. + +# --- Local dev (default) --- +export RL_AGENT_API_URL=http://host.docker.internal:5123/api/v1/recommendation +export RL_AGENT_API_TOKEN= + +# --- Server (LAN) --- +# export RL_AGENT_API_URL=http://192.168.208.61:5000/api/v1/recommendation +# export RL_AGENT_API_TOKEN= + +# --- Public (HTTPS) --- +# export RL_AGENT_API_URL=https://interactiveagent.passerelle.irt-systemx.fr/api/v1/recommendation +# export RL_AGENT_API_TOKEN= + +export VITE_POWERGRID_SIMU=/powergrid-simu export VITE_COGNITIVE_TOKEN= + +# PowerGrid simulator upstream for the frontend's /powergrid-simu/ proxy. +# Local dev : http://host.docker.internal:5122/ (default) +# LAN : http://192.168.208.61:5100/ +export POWERGRID_SIMU_UPSTREAM=http://host.docker.internal:5122/ diff --git a/config/dev/cab-standalone/docker-compose.sh b/config/dev/cab-standalone/docker-compose.sh index 6bda7543..6bb0ef20 100755 --- a/config/dev/cab-standalone/docker-compose.sh +++ b/config/dev/cab-standalone/docker-compose.sh @@ -51,6 +51,7 @@ fi echo "RL_AGENT_API_URL=${RL_AGENT_API_URL:-https://interactiveagent.passerelle.irt-systemx.fr/api/v1/recommendation}" >> .env echo "RL_AGENT_API_TOKEN=${RL_AGENT_API_TOKEN:-}" >> .env echo "VITE_POWERGRID_SIMU=${VITE_POWERGRID_SIMU:-/powergrid-simu}" >> .env +echo "POWERGRID_SIMU_UPSTREAM=${POWERGRID_SIMU_UPSTREAM:-http://host.docker.internal:5122/}" >> .env echo "VITE_COGNITIVE_TOKEN=${VITE_COGNITIVE_TOKEN:-}" >> .env cat .env diff --git a/config/dev/cab-standalone/docker-compose.yml b/config/dev/cab-standalone/docker-compose.yml index 83efc64d..a3137056 100644 --- a/config/dev/cab-standalone/docker-compose.yml +++ b/config/dev/cab-standalone/docker-compose.yml @@ -140,10 +140,16 @@ services: VITE_RAILWAY_SIMU: ${VITE_RAILWAY_SIMU} VITE_COGNITIVE_TOKEN: ${VITE_COGNITIVE_TOKEN} restart: unless-stopped + # Lets nginx proxy /powergrid-simu/ to a simulator running on the host (local dev). + extra_hosts: + - "host.docker.internal:host-gateway" environment: - VITE_POWERGRID_SIMU=${VITE_POWERGRID_SIMU} - VITE_ATM_SIMU=${VITE_ATM_SIMU} - VITE_RAILWAY_SIMU=${VITE_RAILWAY_SIMU} + # PowerGrid simulator upstream for the /powergrid-simu/ nginx proxy: + # local -> http://host.docker.internal:5122/ LAN -> http://192.168.208.61:5100/ + - POWERGRID_SIMU_UPSTREAM=${POWERGRID_SIMU_UPSTREAM} volumes: - './ui-config:/usr/share/nginx/html/opfab' - './nginx-cors-permissive.conf:/etc/nginx/conf.d/default.conf' @@ -165,6 +171,10 @@ services: context: ../../../backend dockerfile: Recommendation-Service-Dockerfile restart: unless-stopped + # Lets the service reach an RL agent running on the host (local dev), + # e.g. RL_AGENT_API_URL=http://host.docker.internal:5123/api/v1/recommendation + extra_hosts: + - "host.docker.internal:host-gateway" environment: - GATEWAY_SERVICE=http://frontend:80 - DATABASE_URL=postgresql://postgres:postgres@db_postgres_recommendation:5432/cab-recommendation diff --git a/config/dev/cab-standalone/nginx-cors-permissive.conf b/config/dev/cab-standalone/nginx-cors-permissive.conf index d7b19b5f..24577d55 100644 --- a/config/dev/cab-standalone/nginx-cors-permissive.conf +++ b/config/dev/cab-standalone/nginx-cors-permissive.conf @@ -342,10 +342,13 @@ server { proxy_set_header X-Forwarded-For $remote_addr; } + # PowerGrid simulator "apply action" proxy. The upstream is environment-specific + # and injected at container start from $POWERGRID_SIMU_UPSTREAM (see start-webui.sh): + # local -> http://host.docker.internal:5122/ LAN -> http://192.168.208.61:5100/ location /powergrid-simu/ { proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $remote_addr; - proxy_pass http://192.168.208.61:5100/; + proxy_pass __POWERGRID_SIMU_UPSTREAM__; } location /cognitive-api/ { diff --git a/deploy-chart/values.ovh.yaml b/deploy-chart/values.ovh.yaml index 33dafdad..e6dc00cd 100644 --- a/deploy-chart/values.ovh.yaml +++ b/deploy-chart/values.ovh.yaml @@ -2,25 +2,25 @@ cabcontext: image: repository: harbor.irtsysx.fr/docker-proxy-cache/irtsystemx/interactiveai-cab-context pullPolicy: Always - tag: "1.3.5" + tag: "1.3.6" cabevent: image: repository: harbor.irtsysx.fr/docker-proxy-cache/irtsystemx/interactiveai-cab-event pullPolicy: Always - tag: "1.3.5" + tag: "1.3.6" cabhistoric: image: repository: harbor.irtsysx.fr/docker-proxy-cache/irtsystemx/interactiveai-cab-historic pullPolicy: Always - tag: "1.3.5" + tag: "1.3.6" cabrecommendation: image: repository: harbor.irtsysx.fr/docker-proxy-cache/irtsystemx/interactiveai-cab-recommendation pullPolicy: Always - tag: "1.3.5" + tag: "1.3.6" extraEnv: - name: RL_AGENT_API_URL value: "https://interactiveagent.passerelle.irt-systemx.fr/api/v1/recommendation" @@ -34,10 +34,10 @@ cabcapitalization: image: repository: harbor.irtsysx.fr/docker-proxy-cache/irtsystemx/interactiveai-cab-capitalization pullPolicy: Always - tag: "1.3.5" + tag: "1.3.6" frontend: image: repository: harbor.irtsysx.fr/docker-proxy-cache/irtsystemx/interactiveai-cab-standalone-frontend pullPolicy: Always - tag: "1.3.5" + tag: "1.3.6" diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 967303d8..679aa8fa 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,12 +1,12 @@ { "name": "cab-front", - "version": "1.3.5", + "version": "1.3.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "cab-front", - "version": "1.3.5", + "version": "1.3.6", "license": "MPL-2.0", "dependencies": { "@floating-ui/vue": "^1.0.6", diff --git a/frontend/package.json b/frontend/package.json index 6dec5877..a3967949 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "cab-front", - "version": "1.3.5", + "version": "1.3.6", "private": true, "license": "MPL-2.0", "type": "module", diff --git a/frontend/start-webui.sh b/frontend/start-webui.sh index 3f5615e9..c906e6b7 100755 --- a/frontend/start-webui.sh +++ b/frontend/start-webui.sh @@ -52,6 +52,13 @@ sed -i "s/$(echo $nginx_conf_path_default | sed 's/\//\\\//g')\/conf\.d/$(echo $ echo "The conf.d path in the personal nginx.conf file:" grep "conf.d" $nginx_conf_path_personal/nginx.conf +# PowerGrid simulator upstream — environment-specific, injected here so one nginx +# config serves every environment. Defaults to the local-dev host container. +# No-op for configs that don't contain the placeholder (e.g. kubernetes). +powergrid_simu_upstream="${POWERGRID_SIMU_UPSTREAM:-http://host.docker.internal:5122/}" +echo "PowerGrid simulator upstream: $powergrid_simu_upstream" +sed -i "s#__POWERGRID_SIMU_UPSTREAM__#${powergrid_simu_upstream}#g" $defaultconf_personal + /usr/sbin/crond nginx -c /personal-conf/nginx.conf -g "daemon off;" diff --git a/usecases_examples/PowerGrid/Dockerfile.api b/usecases_examples/PowerGrid/Dockerfile.api deleted file mode 100644 index 260479d6..00000000 --- a/usecases_examples/PowerGrid/Dockerfile.api +++ /dev/null @@ -1,24 +0,0 @@ -# syntax=docker/dockerfile:1 - -FROM python:3.9-slim-bullseye - - -RUN apt-get update && apt-get install -y --no-install-recommends \ - ffmpeg libsm6 libxext6 \ - && rm -rf /var/lib/apt/lists/* - - -RUN mkdir /code -COPY . /code/ -WORKDIR /code - -# Install only API deps -COPY requirements-api.txt /code/requirements-api.txt -RUN pip install --no-cache-dir -r requirements-api.txt -# Copy the rest -COPY . /code -EXPOSE 5000 - -# Use absolute path to avoid surprises if WORKDIR ever changes -CMD ["python3", "/code/RecommendationAPI.py"] - diff --git a/usecases_examples/PowerGrid/PowerGrid_poc_simulator_consol.py b/usecases_examples/PowerGrid/PowerGrid_poc_simulator_consol.py deleted file mode 100644 index a323a016..00000000 --- a/usecases_examples/PowerGrid/PowerGrid_poc_simulator_consol.py +++ /dev/null @@ -1,1257 +0,0 @@ -"""PowerGrid Simulator based on Grid2Op platform""" -from grid2op.Chronics.handlers import PerfectForecastHandler, CSVHandler -import re -import importlib -from grid2op.PlotGrid import PlotMatplot -from grid2op.Agent import recoPowerlineAgent -from grid2op.Agent import BaseAgent -from grid2op.Chronics import FromHandlers -import grid2op -from lightsim2grid import SecurityAnalysis -import numpy as np -import simplejson as json -import requests -import toml -import matplotlib.pyplot as plt -import io -import logging -import getpass -import os -import base64 -import time -from datetime import datetime, timedelta, timezone -import matplotlib -matplotlib.use('agg') -try: - from lightsim2grid import LightSimBackend - bkClass = LightSimBackend -except ImportError: - from grid2op.Backend import PandaPowerBackend - bkClass = PandaPowerBackend - -# Add for IA Agent testing (required assistantManager.py file) -# from assistantManager import agent_type,AgentManager - - -class Listener(): - """Class containing simulator functions to stream and diagnose Grid2Op data and events.""" - - def __init__(self, init_obs): - """Initialize the Listener with initial observation.""" - self._current_issues = None - self._anticipation = None - self.line_statuses = init_obs.line_status - self.subs_on_bus_2 = np.repeat(False, init_obs.n_sub) - self.objs_on_bus_2 = {id: [] for id in range(init_obs.n_sub)} - - def _stop_if_action(self, act): - """Check if the given action can affect the grid.""" - if act.can_affect_something(): - logging.info("The current action has a chance to change the grid") - return True - return False - - def _stop_if_bad_kpi(self, obs): - """Check if there is an overload in the grid.""" - # Check if overload - if obs.rho.max() >= 1.0: - # logging.info("Overload") - return True - return False - - def _stop_if_line_disconnected(self, obs): - """Check if any line is disconnected.""" - if np.any(obs.line_status == False): - # logging.info("Line disconnected") - return True - return False - - def _stop_if_alarm(self, obs): - """Check if an alarm is raised by the assistant.""" - do_stop_if_alarm = True - if do_stop_if_alarm: - if np.any(obs.time_since_last_alarm == 0): - logging.info("Assistant raised an alarm") - return True - return False - - def _stop_if_anticipation_security_analysis(self, obs, env, contingency_line_ids): - """Perform security analysis for anticipation of N-1 events.""" - # Launch the security analysis - anticipation = [] - security_analysis = SecurityAnalysis(env) - thermal_limit = obs.thermal_limit - - for value in (contingency_line_ids): - security_analysis.add_single_contingency(value) - - _, res_a, _ = security_analysis.get_flows() - for i, c_value in enumerate(contingency_line_ids): - flow = np.array(res_a[i]) - impacted_lines = [] - rho = [] - for j, value in enumerate(flow): - if value / thermal_limit[j] >= 1.0: - impacted_lines = get_formatted_name_line(obs,j) - rho.append(value / thermal_limit[j]) - if len(impacted_lines) > 0: - line_name = get_formatted_name_line(obs,c_value) - anticipation.append((line_name, impacted_lines, rho)) - - self._anticipation = None - if len(anticipation) > 0: - self._anticipation = anticipation - return True - return False - - def _stop_if_issue(self, obs, f_obs, f_env, contingency_line_ids): - """Check for various issues in the grid.""" - issues = [] - self._current_issues = [] - if self._stop_if_alarm(obs): - issues.append("Assistant raised an alarm") - - if self._stop_if_bad_kpi(obs): - issues.append("Overload") - - if self._stop_if_line_disconnected(obs): # and obs.current_step == 100 - issues.append("Line lost") - - if f_obs is not None: - # and obs.current_step == 100 - if self._stop_if_anticipation_security_analysis(f_obs, f_env, contingency_line_ids): - issues.append("Anticipation N-1") - - if len(issues) > 0: - self._current_issues = issues - return True - return False - - def stop_for_issue_state(self, obs, f_obs, f_env, contingency_line_ids): - """Transfer private result to the simulator.""" - return self._stop_if_issue(obs, f_obs, f_env, contingency_line_ids) - - def update_objs_on_bus_switch(self, objs_on_bus_2, elem, pos_topo_vect): - """Update objects on bus 2 after a bus switch.""" - if pos_topo_vect[elem["object_id"]] in objs_on_bus_2[elem["substation"]]: - # elem was on bus 2,remove it from objs_on_bus_2 - objs_on_bus_2[elem["substation"]] = [ - x - for x in objs_on_bus_2[elem["substation"]] - if x != pos_topo_vect[elem["object_id"]] - ] - else: - objs_on_bus_2[elem["substation"]].append( - pos_topo_vect[elem["object_id"]]) - return objs_on_bus_2 - - def update_objs_on_bus_assign(self, objs_on_bus_2, elem, pos_topo_vect): - """Update objects on bus 2 after a bus assignment.""" - if ( - pos_topo_vect[elem["object_id"] - ] in objs_on_bus_2[elem["substation"]] - and elem["bus"] == 1 - ): - # elem was on bus 2,remove it from objs_on_bus_2 - objs_on_bus_2[elem["substation"]] = [ - x - for x in objs_on_bus_2[elem["substation"]] - if x != pos_topo_vect[elem["object_id"]] - ] - elif ( - pos_topo_vect[elem["object_id"] - ] not in objs_on_bus_2[elem["substation"]] - and elem["bus"] == 2 - ): - objs_on_bus_2[elem["substation"]].append( - pos_topo_vect[elem["object_id"]]) - return objs_on_bus_2 - - def update_objs_on_bus(self, objs_on_bus_2, elem, topo_vect_dict, kind): - """Update objects on bus 2 based on topology changes.""" - for object_type, pos_topo_vect in topo_vect_dict.items(): - if elem["object_type"] == object_type and elem["bus"]: - if kind == "bus_switch": - objs_on_bus_2 = self.update_objs_on_bus_switch( - objs_on_bus_2, elem, pos_topo_vect) - else: - objs_on_bus_2 = self.update_objs_on_bus_assign( - objs_on_bus_2, elem, pos_topo_vect - ) - break - return objs_on_bus_2 - - def get_distance_from_obs(self, act, line_statuses, subs_on_bus_2, objs_on_bus_2, obs): - """Calculate the distance from the reference topology.""" - impact_on_objs = act.impact_on_objects() - - # lines reconnetions/disconnections - line_statuses[ - impact_on_objs["force_line"]["disconnections"]["powerlines"] - ] = False - line_statuses[ - impact_on_objs["force_line"]["reconnections"]["powerlines"] - ] = True - line_statuses[impact_on_objs["switch_line"]["powerlines"]] = np.invert( - line_statuses[impact_on_objs["switch_line"]["powerlines"]] - ) - - topo_vect_dict = { - "load": obs.load_pos_topo_vect, - "generator": obs.gen_pos_topo_vect, - "line (extremity)": obs.line_ex_pos_topo_vect, - "line (origin)": obs.line_or_pos_topo_vect, - } - - # Bus manipulation - if impact_on_objs["topology"]["changed"]: - for modif_type in ["bus_switch", "assigned_bus"]: - - for elem in impact_on_objs["topology"][modif_type]: - objs_on_bus_2 = self.update_objs_on_bus( - objs_on_bus_2, elem, topo_vect_dict, kind=modif_type - ) - - for elem in impact_on_objs["topology"]["disconnect_bus"]: - # Disconnected bus counts as one for the distance - subs_on_bus_2[elem["substation"]] = True - - subs_on_bus_2 = [ - True if objs_on_2 else False for _, objs_on_2 in objs_on_bus_2.items() - ] - - distance = len(line_statuses) - \ - line_statuses.sum() + sum(subs_on_bus_2) - return distance, line_statuses, subs_on_bus_2, objs_on_bus_2 - - def trigger_kpis(self, obs, act): - """Calculate and return various KPIs for the current state.""" - kpis = {} - if obs.rho.max() > 1: - kpis["max_overload"] = float( - np.round(np.float64(obs.rho.max()), decimals=3, out=None)) - else: - kpis["max_overload"] = '' - - kpis["renewable_energy_share"] = float(np.round(sum(obs.gen_p[np.where((obs.gen_type == "hydro") | ( - obs.gen_type == "solar") | (obs.gen_type == "wind"))])/sum(obs.gen_p), decimals=3, out=None)) - kpis["total_consumption"] = float( - np.round(sum(obs.load_p), decimals=3, out=None)) - - distance, _, _, _ = self.get_distance_from_obs( - act, self.line_statuses, self.subs_on_bus_2, self.objs_on_bus_2, obs) - kpis["distance_from_reference_topology"] = float( - np.round(np.float64(distance), decimals=3, out=None)) - - kpis["curtailment_volume"] = float( - np.round(sum(obs.curtailment_mw), decimals=3, out=None)) - kpis["redispatching_volume"] = float(np.round(max(abs(sum(obs.actual_dispatch[obs.actual_dispatch > 0])), abs( - sum(obs.actual_dispatch[obs.actual_dispatch < 0]))), decimals=3, out=None)) - return kpis - - @property - def current_issues(self): - """Return the current issues detected by the Listener.""" - return self._current_issues - - @property - def anticipation(self): - """Return the anticipation results from security analysis.""" - return self._anticipation - - -class Communicate: - """Class handling communication with the InteractiveAI API.""" - - def __init__(self): - """Initialize the Communicate class for handling InteractiveAI API communication.""" - logging.info("COMMUNICATIONS' SETUP FOR THIS SESSION : \n") - try: - self.outputsConfig = toml.load("config/API_POWERGRID_CAB.toml") - if self.outputsConfig['Outputs']['activate'] == 'yes': - self.CAB_API_on = True - else: - self.CAB_API_on = False - logging.info("According to your communication setup,this session can just run in a standalone mode.\n \ - Check the file 'API_POWERGRID_CAB.toml' to setup the simulator differently. \n") - except Exception as e: - print(e) - self.CAB_API_on = False - logging.info("The connection with InteractiveAI is not properly configured.\n \ - It will therefore not be established. \n \ - Check the file 'API_POWERGRID_CAB.toml' to setup the simulator differently. \n") - - self.push_step = 1 - self.acces_token = None - self.cab_url = None - self.list_of_issues = {} - # self.datestr = datetime.now(timezone.utc) #.strftime("%d/%m/%Y %H:%M:%S") - - def choose_a_CAB_application(self): - """Prompt user to choose a InteractiveAI server application.""" - authorization = False - connexion_counter = 0 - print(f"Choose the targeted InteractiveAI application between: \n\ - - A '{self.outputsConfig['Connexion']['cab_server_url_1'][:-1]}' \n\ - - B '{self.outputsConfig['Connexion']['cab_server_url_2'][:-1]}' \n\ - - C '{self.outputsConfig['Connexion']['cab_server_url_3'][:-1]}' ") - while authorization == False: - if connexion_counter > 3: - logging.info("The connexion with InteractiveAI will not be established. \n\ - The Simulator will run in a standalone mode.\n") - self.CAB_API_on = False - break - if connexion_counter >= 1: - print( - "Your choice has to be between the 2 available options. Try again!") - choice = input("What would be your InteractiveAI server's choice? ") - if choice is not None: - if choice == 'A': - self.cab_url = self.outputsConfig['Connexion']['cab_server_url_1'] - logging.info( - "The simulator will now perform it connexion with InteractiveAI's server '%s'.\n", self.cab_url[:-1]) - authorization = True - elif choice == 'B': - self.cab_url = self.outputsConfig['Connexion']['cab_server_url_2'] - logging.info( - "The simulator will now perform it connexion with InteractiveAI's server '%s'.\n", self.cab_url[:-1]) - authorization = True - elif choice == 'C': - self.cab_url = self.outputsConfig['Connexion']['cab_server_url_3'] - logging.info( - "The simulator will now perform it connexion with InteractiveAI's server '%s'.\n", self.cab_url[:-1]) - authorization = True - connexion_counter += 1 - return authorization - - def login(self, username, password): - """Perform login to the InteractiveAI API.""" - # url = self.outputsConfig['Connexion']['login_url'] - url = self.cab_url + self.outputsConfig['Connexion']['login_port'] - - payload = f"username={username}&password={password}&grant_type=password&clientId=opfab-client" - headers = { - 'Authorization': 'Basic b3BmYWItY2xpZW50Om9wZmFiLWtleWNsb2FrLXNlY3JldA==', - 'Content-Type': 'application/x-www-form-urlencoded' - } - - response = requests.request( - "POST", url, headers=headers, data=payload, timeout=15) - # print(response.text) - # print(response.json()) - logging.info(f"Login status message: {response}") - logging.info(f"Login response.reason: {response.reason}") - self.acces_token = response.json().get("access_token") - # print(self.acces_token) - authorization = False - if self.acces_token is not None: - authorization = True - return authorization - - def send_context_online(self, env, obs, scn_first_step, context_date): - """Send context information to the InteractiveAI API.""" - try: - plot_helper = PlotMatplot(env.observation_space) - plot_helper.plot_obs(obs, line_info="rho", - load_info=None, gen_info=None) - # fig.legend(loc ="lower left") - - img = io.BytesIO() - plt.savefig(img, format="png", bbox_inches="tight") # format="png" - img.seek(0) - img_b64 = base64.b64encode(img.read()).decode('utf-8') - plt.close() - # print('encoded done') - except Exception as e: - print(e) - - if obs.current_step >= scn_first_step & self.CAB_API_on is True: - # logging.info("Simulation step %s",step) - logging.info("Status: send context to InteractiveAI") - - try: - # url = self.outputsConfig['Outputs']['Context']['url'] - url = self.cab_url + \ - self.outputsConfig['Outputs']['Context']['context_port'] - except Exception as e: - print(e) - - try: - payload = json.dumps({ - # "date": f"{obs.get_time_stamp()}", - # f"{date + timedelta(minutes=float(30))}", - # "2024-04-26T18:29:52+02:00", - "date": f"{context_date}", - "data": { - "observation": obs.to_json(), - "topology": img_b64 - }, - "use_case": "PowerGrid" - }) - headers = { - 'Authorization': f"Bearer {self.acces_token}", - 'Content-Type': 'application/json' - } - - if obs.current_step >= scn_first_step: - response = requests.request( - "POST", url, headers=headers, data=payload, timeout=15) - # logging.info(response.text) - logging.info("Context succesfully sent") - except Exception as e: - print(e) - logging.info( - "The context has not been sent : the connexion with InteractiveAI failed") - - try: - img.close() - except Exception as e: - print(e) - '''if obs.current_step == 757: - with open("obs757.json","w") as f: - json.dump(obs.to_json(),f,indent=4,ensure_ascii=False)''' - - def send_payload_and_store_it(self, payload, obs, scn_first_step): - """Send payload to InteractiveAI API and store it locally.""" - try: - - # Use for debug - '''with open("new_PowerGrid_events","w") as f: - #f.write(json.dumps({"toto":json.dumps(kpis,indent=4,ensure_ascii=False)})) - f.write(payload)''' - # print(payload) - - # Payload updating for same events detected - try: - if obs.current_step >= scn_first_step: - self.payload = json.loads(payload) - if self.payload["title"] in list(self.list_of_issues.keys()): - value = self.list_of_issues[self.payload["title"]] - self.payload["start_date"] = value["start_date"] - except Exception as e: - print(e) - - # Send event - if obs.current_step >= scn_first_step: - # if not ((self.payload["title"] in list(self.list_of_issues.keys())) and ("déconnectée" in self.payload["title"])): - if self.CAB_API_on is True: - url = self.cab_url + \ - self.outputsConfig['Outputs']['Events']['event_port'] - headers = { - 'Authorization': f"Bearer {self.acces_token}", - 'Content-Type': 'application/json' - } - response = requests.request( - "POST", url, headers=headers, data=json.dumps(self.payload), timeout=15) - text = self.payload["title"] - - if self.CAB_API_on is True: - logging.info(f"Event sent to InteractiveAI : {text}") - else: - print(f"Event sent to InteractiveAI : {text}") - # print("Réponse",response.text) - - except Exception as e: - print(e) - logging.info( - "The event has not been sent : the connexion with InteractiveAI failed") - - # Store event in simulator memory - try: - if obs.current_step >= scn_first_step: - if self.CAB_API_on is True: - logging.info(self.payload["title"]) - else: - print(self.payload["title"]) - self.issues_follow_up() - except Exception as e: - print(e) - logging.info("The event's follow-up is not working") - - def send_event_online(self, - context_date, - scn_first_step, - kpis, - obs, - current_issues, - line_name="0_0_0", - zone=None, - line=None, - duration=None, - case_overload=False, - case_assist_alarm=False, - case_anticip=False, - case_line_lost=False): - """Generate and send event information to InteractiveAI API.""" - if zone is None: - zone = [] - if line is None: - line = [] - - # date = obs.get_time_stamp() # Realtime of the record scenrio - # date = self.datestr + timedelta(minutes=float(5*obs.current_step)) # Realtime from now date - # + timedelta(minutes=float(obs.current_step)) # CAB timeline scaling - date = datetime.now(timezone.utc) - # print(date) - - if ("Overload" in current_issues) and case_overload: - try: - self.payload = {} - payload_dict = {} - payload_dict = { - "criticality": "HIGH", - "title": f"Surcharge sur ligne {line_name}", - "description": f"Attention la ligne {line_name} \ - est en surcharge de \ - {np.round(np.float64(obs.rho.max() * 100),decimals=1,out=None)}%", - "start_date": f"{context_date}", - "end_date": f"{context_date + timedelta(minutes=float(5))}", - "data": { - "event_type": "KPI", - "line": f"{line_name}", - "flux": np.round(np.float64(obs.rho.max() * 100), decimals=1, out=None), - "kpis": kpis - }, - "use_case": "PowerGrid", - "is_active": False - } - - payload = json.dumps(payload_dict) - # print(f"Overload description: {payload}") - self.send_payload_and_store_it(payload, obs, scn_first_step) - except Exception as e: - print(e) - - if ("Assistant raised an alarm" in current_issues) and case_assist_alarm: - try: - self.payload = {} - payload_dict = {} - payload_dict = { - "criticality": "MEDIUM", - "title": "Alerte Agent IA", - "description": f"Soyez vigilant sur la zone {zone}", - "start_date": f"{context_date}", - "end_date": f"{context_date + timedelta(minutes=float(5))}", - "data": { - "event_type": "agent", - "zone": zone, - "line": "", - "kpis": kpis - }, - "use_case": "PowerGrid", - "is_active": False - } - - payload = json.dumps(payload_dict) - # print(f"Assistant alarm description: {payload}") - self.send_payload_and_store_it(payload, obs, scn_first_step) - except Exception as e: - print(e) - - if ("Anticipation N-1" in current_issues) and case_anticip: - anticip_date = context_date + timedelta(minutes=float(5*duration)) - try: - self.payload = {} - payload_dict = {} - payload_dict = { - "criticality": "MEDIUM", - "title": f"Risque sur aléa N-1 sur la ligne {line[0]}", - "description": f"Lignes impactées {line[1]},charge max {np.round(max(line[2]) * 100,decimals=1,out=None)}%", - "start_date": f"{anticip_date}", - "end_date": f"{anticip_date + timedelta(minutes=float(5*duration))}", - "data": { - "event_type": "anticipation", - "line": f"{line[0]}", - "flux": np.round(max(line[2]) * 100, decimals=1, out=None), - "kpis": kpis - }, - "use_case": "PowerGrid", - "is_active": False - } - - payload = json.dumps(payload_dict) - # print(f"Anticipation description: {payload}") - self.send_payload_and_store_it(payload, obs, scn_first_step) - except Exception as e: - print(e) - - if ("Line lost" in current_issues) and (line_name != "0_0_0") and case_line_lost: - try: - self.payload = {} - payload_dict = {} - payload_dict = { - "criticality": "ROUTINE", - "title": f"Line {line_name} disconnected", - "description": f"Line {line_name} is disconnected", - "start_date": f"{context_date}", - "end_date": f"{context_date + timedelta(minutes=float(5))}", - "data": { - "event_type": "consignation", - "line": f"{line_name}", - "kpis": kpis - }, - "use_case": "PowerGrid", - "is_active": False - } - - payload = json.dumps(payload_dict) - # print(f"Line lost description: {payload}") - self.send_payload_and_store_it(payload, obs, scn_first_step) - except Exception as e: - print(e) - - def issues_follow_up(self): - """Update the list of ongoing issues.""" - # already exist => change start_date and end_date,and update list - # doesn't exist => create payload and add to list - self.list_of_issues[self.payload["title"]] = self.payload - # print("list_of_issues= ",self.list_of_issues) - - def send_issues_ending_online(self, - stepDuration, - context_date): - """Send information about resolved issues to InteractiveAI API.""" - for key in list(self.list_of_issues.keys()): - value = self.list_of_issues[key] - # if value["end_date"] >= obs.get_time_stamp(): # scenario based realtime - # or (('Surcharge sur ligne' in value["title"]) and (value["title"] != self.payload["title"])) : # realtime,scenario based - if datetime.strptime(value["end_date"], "%Y-%m-%d %H:%M:%S.%f%z") < context_date : - value["criticality"] = "ND" - payload = json.dumps(value) - - # send restored event - try: - url = self.cab_url + \ - self.outputsConfig['Outputs']['Events']['event_port'] - headers = { - 'Authorization': f"Bearer {self.acces_token}", - 'Content-Type': 'application/json' - } - # print(f"Restoration = {payload}") - if self.CAB_API_on is True: - response = requests.request( - "POST", url, headers=headers, data=payload, timeout=15) - # print(response.text) - test = value["title"] - logging.info(f"END event sent to InteractiveAI : {test}") - time.sleep(stepDuration) - except Exception as e: - print(e) - logging.info( - "The ending event has not been sent : the connexion with InteractiveAI failed \n") - - # Use del to remove the item from the dictionary - del self.list_of_issues[key] - - def get_act_from_api(self): - """Retrieve action recommendations from InteractiveAI API.""" - # Function that initiate the connexion with CAB through allowing the user to choose any available server. - get_act_counter = 0 - act_dict = {} - while bool(act_dict) is False: - if get_act_counter == 0: - val = input( - "\n There is an event : Check InteractiveAI for recommendations\n Press 'Enter' once you have made your choice in InteractiveAI application.") - else: - val = input( - "\n Any recommendation was received. Try again!\n Press 'Enter' once you have made your choice in InteractiveAI application.") - url = self.outputsConfig['Inputs']['Act']['url'] - payload = {} - headers = {} - response = requests.request( - "GET", url, headers=headers, data=payload, timeout=15) - # print(response.text) - # print(response.json()) - act_dict = response.json() - if bool(act_dict) is False and get_act_counter >= 1: - logging.info( - "\n Any recommendation was received! \n The simulation will continue with a default NULL recommendation.") - time.sleep(1) - break - elif bool(act_dict) : - logging.info("\n InteractiveAI' s recommendation received! \n") - get_act_counter += 1 - # print(act_dict) - return act_dict - - -def search_chronic_num_from_name(scenario_name, - env): - """Find the chronic ID from its name in the data storage base.""" - found_id = None - # Search scenario with provided name - for id, sp in enumerate(env.chronics_handler.real_data.subpaths): - sp_end = os.path.basename(sp) - if sp_end == scenario_name: - found_id = id - return found_id - - -def get_curent_lines_in_bad_KPI(obs): - """Identify the line with the worst KPI in the grid in the following format: {line_or_to_subid}:{line_ex_to_subid}:{name_line}.""" - res = (obs.rho == obs.rho.max()).tolist().index(True) - return get_formatted_name_line(obs, res) - - -def get_curent_lines_lost(obs): - """Identify disconnected lines in the grid in the following format: {line_or_to_subid}:{line_ex_to_subid}:{name_line}.""" - res = (obs.line_status is False).tolist().index(True) - return get_formatted_name_line(obs, res) - -def get_formatted_name_line(obs, idx): - """Format line name to {line_or_to_subid}:{line_ex_to_subid}:{name_line}""" - return f"{obs.line_or_to_subid[idx]}:{obs.line_ex_to_subid[idx]}:{obs.name_line[idx]}" - - -def get_zone_where_alarm_occured(obs): - """Determine the cardinal zone where an alarm occurred.""" - zone_idx = np.where(obs.last_alarm > -1) - # obs.last_alarm = [86 -1 -1] =[EST,CENTRE ,OUEST] => zone = EST - if zone_idx[0] == 0: - zone = "Est" - elif zone_idx[0] == 1: - zone = "Centre" - elif zone_idx[0] == 2: - zone = "Ouest" - else: - zone = " " - return zone - - -def display_parades_prompt(env, obs): - """Function that will display the IA recommendations prompt. Still under devellopement""" - action_do_nothing = env.action_space({}) - ok_act = False - while not ok_act: - val = input("Choose action type:\n 1. Injection change.\n 2. Switch line\n 3. Topological change\n 4. Redispatch\n 5. Storage\n 6. Curtailement\n 7. Force line\n 8. Do nothing\nChosen action number: ") - ok_val = input("You chose action " + val + - ". Press enter to validate or 'n' to change.\n") - if ok_val == 'n': - continue - - if val == '1': - # ATTENTION CETTE ACTION A CHANGE ENTRE lES VERSIONS DE GRID2OP - inject_type = ["load_p", "load_q", "prod_p", "prod_v"] - ok = False - while not ok: - inj_key_id = input( - "Choose type of injection to change:\n 1. Load active power.\n 2. Load reactive power.\n 3. Generator active power setpoint.\n 4.Generator voltage magnitude setpoint.\n") - ok_val = input("You chose injection type '" + inj_key_id + - "'. Press enter to validate or 'n' to change.\n") - if ok_val != 'n': - ok = True - ok = False - if int(inj_key_id) < 3: - values_len = env.action_space.n_load - else: - values_len = env.action_space.n_gen - while not ok: - values = input("Type injection requires " + - str(values_len) + ".\n Enter values: ") - values_list = [float(s) for s in re.findall(r'\d+', values)] - if len(values_list) == 1: - values_list = values_list * values_len - if len(values_list) == values_len: - ok = True - act2 = env.action_space( - {"injection": {inject_type[int(inj_key_id) - 1]: values_list}}) - ok_act = True - if val == '2': - print("bla switch line") - if val == '3': - substation_id = input("Type substation id: ") - current_config = obs.sub_topology(int(substation_id)) - print("Current config of length ", len( - current_config), ":", current_config) - validate = False - while not validate: - change_config = input("Choose new config: ") - config_list = [int(s) - for s in re.findall(r'\d+', change_config)] - if len(config_list) != len(current_config): - print("Config length ", len(config_list), " is different from expected length ", - len(current_config)) - continue - if any(x != 1 and x != 2 for x in config_list): - print("Lines can only be assigned to Bus 1 or 2.") - continue - print("Chosen config of length ", len( - config_list), ":", config_list) - act2 = env.action_space( - {"set_bus": {"substations_id": [(int(substation_id), config_list)]}}) - validate = input( - "Validate by pressing enter or type n to correct.\n") - if validate != 'n': - validate = True - ok_act = True - if val == '4': - name = input("Type generator name: ") - while name not in obs.name_gen: - print("Generators: ", obs.name_gen) - name = input("Type a valid generator name: ") - idx = np.where(obs.name_gen == name)[0][0] - validate = False - while not validate: - redispatch = input("Type the amount of redispatch: ") - ok = input("Chosen value " + redispatch + - " MW. Press enter to validate or type n to change.\n") - if ok != 'n': - validate = True - act2 = env.action_space({"redispatch": [(idx, float(redispatch))]}) - ok_act = True - if val == '5': - if len(obs.name_storage) > 0: - print("Storage units", obs.name_storage) - idx = input("Give storage unit index: ") - value = input( - "Type the amount of power in MW (negative if production and positive if recharge): ") - act2 = env.action_space( - {"set_storage": [(int(idx), float(value))]}) # storage unit of id 0 produce 1.5MW - ok_act = True - else: - print("No storage units available on the grid. Choose another action.\n") - ok_act = False - if val == '6': - print("Renewable generator indices:", [i for i in range( - len(obs.gen_renewable)) if obs.gen_renewable[i]]) - idx = input("Choose a generator index: ") - ratio = input("Enter ratio to curtail: ") - act2 = env.action_space({"curtail": [(int(idx), float(ratio))]}) - ok_act = True - if val == '7': - # reconnect_powerline = env.action.space.reconnect_powerline(line_id=5,bus_or=1,bus_ex=2) - # act2 = env.action_space({"set_bus": {"loads_id": [(4,1)]}}) - print("bla force line") - ok_act = True - if val == '8': - act2 = action_do_nothing - ok_act = True - - # print(act2) - return act2 - - -def expand_act_from_cab(env, act_dict): - """Function that will generate compliant act from act_dict.""" - act = env.action_space() - act.from_json(act_dict) - act_vect = act.to_vect() - actnew = env.action_space() - actnew.from_vect(act_vect) - return actnew - - -def load_assistant(assistant_path, - assistant_seed, - env, - logger=None): - """utility to load the agent""" - # lazy loading - assistant = None - abs_assistant_path = os.path.abspath(assistant_path) - submission = importlib.import_module( - f"Ressources.XD_silly_repo.submission") - assistant = submission.make_agent( - env.copy(), os.path.join(abs_assistant_path, "submission")) - if not isinstance(assistant, BaseAgent): - msg_ = "your assistant you be a grid2op.Agent.BaseAgent" - raise RuntimeError(msg_) - assistant.seed(int(assistant_seed)) - return assistant - - -def local_XD_Silly(obs, - assistant): - """Get local recommendations from the XD_Silly assistant.""" - recos = assistant.make_recommandations(obs, n_actions=3) - if len(recos) > 0: - local_act, _ = recos[0] - return local_act - - -def get_nbOfTimestepSinceLastObs(obs_dict, - previous_step): - """Calculate the number of timesteps since the last observation.""" - nb_timestep = int(obs_dict.get("current_step")[0])-int(previous_step) - return nb_timestep - - -def targeted_scenario_act_fixed(env, - obs): - """Apply fixed actions for specific steps in the targeted scenario.""" - act = None - topo_trigger = False - # Manual action's correction on specifics steps - if obs.current_step == 0: - # print("Simulation step : ",obs.current_step) - # print("obs_Topology",obs.topo_vect) - act = env.action_space( - {'set_bus': {'substations_id': [(28, (2, 1, 2, 1, 1))]}}) - topo_trigger = True - - if obs.current_step in [162, 419, 433, 744, 1871]: - # print("Simulation step : ",obs.current_step) - # print("obs_Topology",obs.topo_vect) - act = env.action_space({'set_bus': {'substations_id': [( - 16, (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1))]}}) - topo_trigger = True - - if obs.current_step == 799: - # print("Simulation step : ",obs.current_step) - # print("obs_Topology",obs.topo_vect) - act = env.action_space( - {'set_bus': {'substations_id': [(9, (1, 1, 1, 1, 1, 1, 1))]}}) - topo_trigger = True - - if obs.current_step == 800: - # print("Simulation step : ",obs.current_step) - # print("obs_Topology",obs.topo_vect) - act = env.action_space( - {'set_bus': {'substations_id': [(19, (1, 1, 1))]}}) - topo_trigger = True - - if obs.current_step == 801: - # print("Simulation step : ",obs.current_step) - # print("obs_Topology",obs.topo_vect) - act = env.action_space( - {'set_bus': {'substations_id': [(21, (1, 1, 1, 1, 1, 1, 1, 1))]}}) - topo_trigger = True - - if obs.current_step == 802: - # print("Simulation step : ",obs.current_step) - # print("obs_Topology",obs.topo_vect) - act = env.action_space( - {'set_bus': {'substations_id': [(23, (1, 1, 1, 1, 1, 1, 1, 1, 1, 1))]}}) - topo_trigger = True - - if obs.current_step == 1539: - # print("Simulation step : ",obs.current_step) - # print("obs_Topology",obs.topo_vect) - act = env.action_space( - {'set_bus': {'substations_id': [(26, (1, 1, 1, 1, 1, 1, 1, 1, 1))]}}) - topo_trigger = True - return act, topo_trigger - - -def run_simulator(): - """Main function to run the PowerGrid simulator based on Grid2Op platform.""" - # Logger - logging.getLogger().setLevel(logging.INFO) - logging.info(" Welcome to PowerGrid Simulator based on Grid2Op platform! \n") - - # Communications module - com = Communicate() - - # Connexion with InteractiveAI management - if com.CAB_API_on is True: - server_choosen = com.choose_a_CAB_application() - if server_choosen is True: - connexion = False - connexion_counter = 0 - while connexion is False: - if connexion_counter >= 1: - print("Try again") - username = input('Username : ') - try: - password = getpass.getpass('Password : ') - except: - password = input('Password : ') - connexion = com.login(username, password) - connexion_counter += 1 - - try: - # Load simulation configuration - config = toml.load("config/CONFIG.toml") - - forecasts_horizons = [5, 10, 15, 20, 25, 30] - - # Grid2OP environment definition and loading - # env = grid2op.make(config['env_name'],backend=bkClass()) - env = grid2op.make(config['env_name'], - backend=bkClass(), - data_feeding_kwargs={ - "gridvalueClass": FromHandlers, - "gen_p_handler": CSVHandler("prod_p"), - "load_p_handler": CSVHandler("load_p"), - "gen_v_handler": CSVHandler("prod_v"), - "load_q_handler": CSVHandler("load_q"), - "h_forecast": forecasts_horizons, - "gen_p_for_handler": PerfectForecastHandler("prod_p_forecasted"), - "load_p_for_handler": PerfectForecastHandler("load_p_forecasted"), - "load_q_for_handler": PerfectForecastHandler("load_q_forecasted")}) - - # Initial state - env.seed(config['env_seed']) - id_scenario = search_chronic_num_from_name(config['scenario_name'], - env) - env.set_id(id_scenario) # Scenario choice - obs = env.reset() - if com.CAB_API_on is True: - logging.info("The scenario launched is : %s \n", - env.chronics_handler.get_name()) - else: - print("The scenario launched is : %s \n", - env.chronics_handler.get_name()) - - reward = 0 - done = False - anticipation_compute_step = config['step_start_security_analysis'] - - # Assistant definition and loading - # Uncomment the following line if required - assistant_path = config['assistant_path'] - assistant_seed = config['assistant_seed'] - local_assistant = load_assistant(assistant_path, assistant_seed, env) - - # Added for IA Agent testing (required assistantManager.py file) - # agentM = AgentManager() - - # Agent RecoPowerLine - agent_reco = recoPowerlineAgent.RecoPowerlineAgent(env.action_space) - act = agent_reco.act(obs, 0) - - if com.CAB_API_on is True: - logging.info("The simulation is loaded.\n") - else: - print("The Simulation is loaded.\n") - - except Exception as e: - print(e) - logging.info( - "The simulation is not load properly. The program will stop.") - exit() - - # Listener module - listen = Listener(obs) - - # Context refreshing rate - try: - send_tempo = com.outputsConfig['Outputs']['Context']['tempo'] - except Exception as e: - print(e) - send_tempo = 50 # by default - - event_resolved_trigger = False - - # Choose the first step concern by context sending to InteractiveAI - try: - com.push_step = config['scenario_first_step'] - except Exception as e: - print(e) - - silent_mode_msg_trigger = True - step_counter = 0 - date = datetime.now(timezone.utc) - - while not done: - context_date = date + timedelta(minutes=float(5))*step_counter - - # Pour corriger la valeur de act à certain pas précis en vue d'avoir notre scénario cible - act_fixed, _ = targeted_scenario_act_fixed(env, - obs) - if act_fixed is not None: - act = act_fixed - - # Begining of steps : Observation updates - obs, reward, done, info = env.step(act) # obs,reward,done,info - - # By default - act = env.action_space({}) - - # To handle between "silent mode" and "stream simulation" (with or without InteractiveAI) - # (The stream simulation starts at step config['scenario_first_step']) - if obs.current_step >= config['scenario_first_step']: - if com.CAB_API_on is True: - logging.info("Simulation step %s", - obs.current_step) - else: - print("Simulation step %s", - obs.current_step) - - elif obs.current_step == config['scenario_first_step'] - 1: - print("\n") - logging.info(f"The simulator is now connected to InteractiveAI\n") - silent_mode_msg_trigger = False - else: - if silent_mode_msg_trigger: - logging.info(f'''Status: The scenario unfolds in silent mode.\n - The simulator will reconnect to InteractiveAI from the step - {config['scenario_first_step']} - (see configuration file) \n''') - silent_mode_msg_trigger = False - if obs.current_step % 50 == 0: - print("step", - obs.current_step, end="", - flush=True) - elif obs.current_step % 10 == 0: - print(' ... ', - end="", - flush=True) - # time.sleep(config['stepDuration_s']/10) - - # To handle end of event card and event followup - com.send_issues_ending_online(config['stepDuration_s'], - context_date) - - # Forecast events checking - obs_forecast = None - f_env = None - if obs.current_step == anticipation_compute_step: - anticipation_compute_step = obs.current_step + \ - config['refresh_frequency_step'] - # pour dans 15 min (time_step_forecast=3) - obs_forecast, *_ = obs.simulate(env.action_space(), - config['time_step_forecast']) - - f_env = obs_forecast._obs_env - - # Added to send context online sequentialy - if obs.current_step >= config['scenario_first_step']: - context_just_sent = False - if (obs.current_step == com.push_step or event_resolved_trigger is True) and com.CAB_API_on is True: - com.push_step = obs.current_step + send_tempo - com.send_context_online( - env, obs, config['scenario_first_step'], context_date) - event_resolved_trigger = False - context_just_sent = True - - if listen.stop_for_issue_state(obs, - obs_forecast, - f_env, - env._opponent._lines_ids): - # logging.info("An alarm is raised") - - # ---------------------------------------------------------------------------------- - if "Overload" in listen.current_issues: - if obs.current_step >= config['scenario_first_step']: - com.push_step = obs.current_step + send_tempo - if com.CAB_API_on is True and context_just_sent is False: - com.send_context_online(env, - obs, - config['scenario_first_step'], - context_date) - context_just_sent = True - logging.info("Status: there is an Overload") - - com.send_event_online(context_date, - config['scenario_first_step'], - listen.trigger_kpis(obs, act), - obs, listen.current_issues, - line_name=get_curent_lines_in_bad_KPI( - obs), - case_overload=True) - # act = display_parades_prompt(env,obs) - if (obs.current_step < config['scenario_first_step']) or (com.CAB_API_on is False): - # Utiliser XD_Silly en cache (en local) - act = local_XD_Silly(obs, local_assistant) - if com.CAB_API_on is False: - logging.info(f"Parade : {act}") - - else: - # Récuperer les parades de InteractiveAI - act_dict = com.get_act_from_api() - act = expand_act_from_cab(env, act_dict) - logging.info(f"Parade : {act}") - - # Added for IA Agent testing (required assistantManager.py file) - # obs_dict = obs.to_json() - # recommendation = agentM.recommendate(obs_dict) - # parades = agentM.getlistOfParadeInfo() - # act,__ = recommendation[0] - - event_resolved_trigger = True - - if "Assistant raised an alarm" in listen.current_issues: - if obs.current_step >= config['scenario_first_step']: - - # com.push_step = obs.current_step + send_tempo - # if com.CAB_API_on is True and context_just_sent == False: - # com.send_context_online(env,obs,config['scenario_first_step'],context_date) - # context_just_sent = True - - logging.info("Status: there is an IA Agent alert") - - com.send_event_online(context_date, - config['scenario_first_step'], - listen.trigger_kpis(obs, act), - obs, - listen.current_issues, - zone=get_zone_where_alarm_occured( - obs), - case_assist_alarm=True) - # act = display_parades_prompt(env,obs) - event_resolved_trigger = True - - if "Anticipation N-1" in listen.current_issues: - if obs.current_step >= config['scenario_first_step']: - - # #com.push_step = obs.current_step + send_tempo - # if com.CAB_API_on is True: # and context_just_sent == False: - # com.send_context_online(obs_forecast._obs_env,obs_forecast,config['scenario_first_step'],context_date) - # #context_just_sent = True - # time.sleep(40) - - logging.info("Status: there is an Anticipation N-1 event") - - for x in listen.anticipation: - logging.info( - f"There is a line lost anticipation event {x}") - - com.send_event_online(context_date, - config['scenario_first_step'], - listen.trigger_kpis( - obs, env.action_space()), - obs_forecast, - listen.current_issues, - line=x, - duration=config['duration_step_forecast'], - case_anticip=True) - # act = display_parades_prompt(env,obs) - event_resolved_trigger = True - obs_forecast = None - if obs.current_step >= config['scenario_first_step']: - # time.sleep(40) - - # pause_simulation = input( - # "\n The simulation is on 'pause'!\n Press 'Enter' when you are ready to continue.") - pass - - if "Line lost" in listen.current_issues: - if obs.current_step >= config['scenario_first_step']: - # com.push_step = obs.current_step + send_tempo - # if com.CAB_API_on == True and context_just_sent == False: - # com.send_context_online(env,obs,config['scenario_first_step'],context_date) - # context_just_sent = True - logging.info("Status: there is a Line lost %s", - get_curent_lines_lost(obs)) - - com.send_event_online(context_date, - config['scenario_first_step'], - listen.trigger_kpis(obs, act), - obs, - listen.current_issues, - line_name=get_curent_lines_lost(obs), - case_line_lost=True) - event_resolved_trigger = True - if obs.current_step >= config['scenario_first_step']: - # time.sleep(40) - - # pause_simulation = input( - # "\n The simulation is on 'pause'!\n Press 'Enter' when you are ready to continue.") - pass - # -------------------------------------------------------------------- - - # To reconnect lines in the grid any time this agent detect a line disconnection. - # (This act is ovewriten in case of Oveload and XD_Silly intervene) - if act == env.action_space({}): - act = agent_reco.act(obs, 0) - # print("Recopowerline acted. \n") - - # To handle simulator speed - if obs.current_step >= config['scenario_first_step']: - step_counter = step_counter + 1 - time.sleep(config['stepDuration_s']) - - -if __name__ == '__main__': - run_simulator() diff --git a/usecases_examples/PowerGrid/README.md b/usecases_examples/PowerGrid/README.md index 456f174e..3cbdb440 100644 --- a/usecases_examples/PowerGrid/README.md +++ b/usecases_examples/PowerGrid/README.md @@ -14,23 +14,21 @@ to solve security issues. For further explanation on Grid2Op, the official documentation of Grid2Op is available at [https://grid2op.readthedocs.io/](https://grid2op.readthedocs.io/). And it can also be found here [Grid2Op/README.md](Grid2Op/README.md). -* [1 Installation](#1-installation) - * [1.1 Requirements](#11-requirements) - * [1.2 Setup a Virtualenv (optional)](#12-setup-a-virtualenv-optional) - * [1.3 Installation of the simulator layer](#13-installation-of-the-simulator-layer) - * [1.3.1 CASE 1 : Console Simulator](#131-case-1--console-simulator) - * [1.3.2 CASE 2 : Web App Simulator](#132-case-2--web-app-simulator) -* [2 Run the simulator](#2-run-the-simulator) - * [2.1 CASE 1 : Console Simulator](#21-case-1--console-simulator) - * [Configurate the simulator settings](#configurate-the-simulator-settings) - * [Run the simulator in your terminal](#run-the-simulator-in-your-terminal) - * [2.2 CASE 2 : Web App Simulator](#22-case-2--web-app-simulator) - * [To launch the simulator app](#to-launch-the-simulator-app) - * [Run the simulator in your terminal (optional)](#run-the-simulator-in-your-terminal-optional) - * [2.3 Credentials required to run the simulation](#23-credentials-required-to-run-the-simulation) -* [3 Project Structure](#3-project-structure) - * [3.1 Main Directories](#31-main-directories) - * [3.2 Important Files](#32-important-files) +- [PowerGrid grid2op POC simulator](#powergrid-grid2op-poc-simulator) +- [1 Installation](#1-installation) + - [1.1 Requirements:](#11-requirements) + - [1.2 Setup a Virtualenv (optional)](#12-setup-a-virtualenv-optional) + - [Create a virtual environment](#create-a-virtual-environment) + - [Enter the virtual environment](#enter-the-virtual-environment) + - [1.3 Installation of the simulator layer](#13-installation-of-the-simulator-layer) +- [2 Run the simulator](#2-run-the-simulator) + - [2.1 Local deployment](#21-local-deployment) + - [2.2 Server deployment](#22-server-deployment) + - [2.3 Run directly, without Docker (optional)](#23-run-directly-without-docker-optional) + - [2.4 Credentials required to run the simulation](#24-credentials-required-to-run-the-simulation) +- [3 Project Structure](#3-project-structure) + - [3.1 Main Directories](#31-main-directories) + - [3.2 Important Files](#32-important-files) # 1 Installation @@ -39,7 +37,8 @@ And it can also be found here [Grid2Op/README.md](Grid2Op/README.md). * Docker and Docker Compose ## 1.2 Setup a Virtualenv (optional) -Follow this section in case you are working on localhost, and without Docker. +Follow this section only if you want to run the simulator directly on your host, without Docker +(see [2.3](#23-run-directly-without-docker-optional)). With Docker you can skip this section. ### Create a virtual environment ```commandline @@ -59,80 +58,68 @@ source venv_grid2op/scripts/activate ``` ## 1.3 Installation of the simulator layer -Either use CASE 1 or CASE 2 to install the PowerGrid's simulator of your choice. - - -### 1.3.1 CASE 1 : Console Simulator - -1. Install dependencies for the console simulator (optional, yet required when working on localhost): +This step is only required to run the simulator directly on your host (without Docker). +When using Docker, dependencies are installed inside the image automatically. ```commandline cd InteractiveAI/usecases_examples/PowerGrid -pip install -r requirements-consol.txt +pip install -r requirements-app.txt ``` -2. Launch the InteractiveAI event listener server, compatible with the console simulator. - -```commandline -docker compose up -d --build api -``` +# 2 Run the simulator -The launched API might be accessible at this address: -http://SERVER_ADDRESS:5100 +The simulator is a web application. Two Docker Compose files are provided: -The SERVER_ADDRESS will be the one of the computer used to launch the Docker command. +| File | Use | Simulator UI | InteractiveAI | +| -------------------------- | ------------------- | -------------------------- | -------------------------------------------- | +| `docker-compose.local.yml` | Local development | http://localhost:5122 | on the same host, via `host.docker.internal` | +| `docker-compose.yml` | Server / production | http://SERVER_ADDRESS:5100 | a remote/public URL | -### 1.3.2 CASE 2 : Web App Simulator +## 2.1 Local deployment -1. Install dependencies for the console simulator (optional, yet required when working on localhost): +Use this when InteractiveAI is running on the **same machine** as the simulator. ```commandline cd InteractiveAI/usecases_examples/PowerGrid -pip install -r requirements-app.txt +docker compose -f docker-compose.local.yml up -d --build ``` -**2. Launch the whole all in one web app simulator through docker on a computer (BEST APPROACH):** +Then open http://localhost:5122 in your browser. -```commandline -docker compose up -d --build app -``` +In the login page, select the InteractiveAI server +`http://host.docker.internal:3200/`. -The launched app might be accessible at this address: -http://SERVER_ADDRESS:5100/ +Because the code is bind-mounted in this mode, changes to templates/code are picked up on a browser refresh, without rebuilding the image. -The SERVER_ADDRESS will be the one of the computer used to launch the Docker command. +## 2.2 Server deployment -# 2 Run the simulator +Use this to deploy the simulator on a server, connecting to a **remote/public** InteractiveAI +instance (e.g. `https://demo.interactiveai.irt-systemx.fr/`). -## 2.1 CASE 1 : Console Simulator - -### Configurate the simulator settings -* Define your simulation configuration in the file: [`/InteractiveAI/usecases_examples/PowerGrid/config/CONFIG.toml`](/usecases_examples/PowerGrid/config/CONFIG.toml) -* Define InteractiveAI connection settings in the file: [`/InteractiveAI/usecases_examples/PowerGrid/config/API_POWERGRID_CAB.toml`](/usecases_examples/PowerGrid/config/API_POWERGRID_CAB.toml) - -### Run the simulator in your terminal ```commandline cd InteractiveAI/usecases_examples/PowerGrid -python PowerGrid_poc_simulator_consol.py +docker compose up -d --build ``` -## 2.2 CASE 2 : Web App Simulator +Then open http://SERVER_ADDRESS:5100/ (with **SERVER_ADDRESS** the address of your remote +machine), and select the public InteractiveAI URL in the login page. The list of available +InteractiveAI servers is defined in +[`config/API_POWERGRID_CAB.toml`](/usecases_examples/PowerGrid/config/API_POWERGRID_CAB.toml); +you can also add one directly from the login page. + +The code is bind-mounted in this mode too, so edits to code/templates take effect after a +container restart, without rebuilding the image. -### To launch the simulator app (BEST APPROACH) -Open a web browser and navigate to the URL returned by Docker after running the containers. -This URL will typically be `http://localhost:5100/` unless you've configured a different port. +## 2.3 Run directly, without Docker (optional) -Note: If you're running Docker on a remote machine or using Docker Toolbox on Windows, -you may need to replace 'localhost' with the appropriate IP address. -For example : http://SERVER_ADDRESS:5100/ with **SERVER_ADDRESS** the one of your remote machine. +After completing the installation steps in [section 1](#1-installation): -### Run the simulator in your terminal (optional) ```commandline cd InteractiveAI/usecases_examples/PowerGrid python PowerGrid_poc_simulator_app.py ``` -## 2.3 Credentials required to run any simulator +## 2.4 Credentials required to run the simulation To run the simulation, you will need the following credentials: @@ -153,9 +140,8 @@ These credentials are created by the InteractiveAI platform. The PowerGrid's sim ## 3.2 Important Files -- `PowerGrid_poc_simulator_consol.py`: Main script to run the simulator in console mode. - `PowerGrid_poc_simulator_app.py`: Main script to run the simulator in web application mode. -- `requirements-consol.txt`: List of dependencies for the console mode simulator. - `requirements-app.txt`: List of dependencies for the web application mode simulator. -- `docker-compose.yml`: Configuration for the Docker environment. -- `Dockerfile.app` and `Dockerfile.api`: Dockerfile files to build Docker images. \ No newline at end of file +- `docker-compose.local.yml`: Docker Compose file for local development (simulator UI on port 5122). +- `docker-compose.yml`: Docker Compose file for server deployment (simulator UI on port 5100). +- `Dockerfile.app`: Dockerfile used to build the simulator Docker image. diff --git a/usecases_examples/PowerGrid/RecommendationAPI.py b/usecases_examples/PowerGrid/RecommendationAPI.py deleted file mode 100644 index b0e93e15..00000000 --- a/usecases_examples/PowerGrid/RecommendationAPI.py +++ /dev/null @@ -1,48 +0,0 @@ -from flask import Flask, jsonify, request - -class Recommendation: - def __init__(self): - self.data = {} - -recommend = Recommendation() - -app = Flask(__name__) - -@app.after_request - -def add_cors_headers(response): - """Allow the CAB frontend to POST applied recommendations cross-origin. - - Without these headers the browser's preflight OPTIONS succeeds but the actual - POST is blocked by CORS. Prefer the nginx same-origin proxy (/powergrid-simu/) - where possible; these headers only matter for direct plain-HTTP calls. - """ - response.headers['Access-Control-Allow-Origin'] = '*' - response.headers['Access-Control-Allow-Methods'] = 'GET, POST, OPTIONS' - response.headers['Access-Control-Allow-Headers'] = 'Content-Type, Authorization' - return response - -@app.route("/") -def home_page(): - return "API for PowerGrid recommendations" - - -@app.route('/api/v1/recommendations', methods=['POST']) -def receive_act(): - recommend.data = (request.get_json()) - print(recommend.data) - return jsonify({ - "message" : "OK" - }) - -@app.route('/api/v1/recommendations', methods=['GET']) -def send_act(): - act_dict = {} - act_dict = recommend.data - recommend.data = {} - print(act_dict) - return jsonify(act_dict) - - - -app.run(debug=True, host='0.0.0.0', port=5000) \ No newline at end of file diff --git a/usecases_examples/PowerGrid/app/templates/dashboard.html b/usecases_examples/PowerGrid/app/templates/dashboard.html index d867da38..764e05f4 100644 --- a/usecases_examples/PowerGrid/app/templates/dashboard.html +++ b/usecases_examples/PowerGrid/app/templates/dashboard.html @@ -2,72 +2,159 @@ + - Dashboard + Dashboard · PowerGrid Simulator