Source code for grid2op.Observation.completeObservation

# Copyright (c) 2019-2020, RTE (https://www.rte-france.com)
# See AUTHORS.txt
# This Source Code Form is subject to the terms of the Mozilla Public License, version 2.0.
# If a copy of the Mozilla Public License, version 2.0 was not distributed with this file,
# you can obtain one at http://mozilla.org/MPL/2.0/.
# SPDX-License-Identifier: MPL-2.0
# This file is part of Grid2Op, Grid2Op a testbed platform to model sequential decision making in power systems.

from grid2op.Observation.baseObservation import BaseObservation


[docs]class CompleteObservation(BaseObservation): """ This class represent a complete observation, where everything on the powergrid can be observed without any noise. This is the only :class:`BaseObservation` implemented (and used) in Grid2Op. Other type of observation, for other usage can of course be implemented following this example. It has the same attributes as the :class:`BaseObservation` class. Only one is added here. For a :class:`CompleteObservation` the unique representation as a vector is: 1. :attr:`BaseObservation.year` the year [1 element] 2. :attr:`BaseObservation.month` the month [1 element] 3. :attr:`BaseObservation.day` the day [1 element] 4. :attr:`BaseObservation.hour_of_day` the hour of the day [1 element] 5. :attr:`BaseObservation.minute_of_hour` minute of the hour [1 element] 6. :attr:`BaseObservation.day_of_week` the day of the week. Monday = 0, Sunday = 6 [1 element] 7. :attr:`BaseObservation.gen_p` the active value of the productions [:attr:`grid2op.Space.GridObjects.n_gen` elements] 8. :attr:`BaseObservation.gen_q` the reactive value of the productions [:attr:`grid2op.Space.GridObjects.n_gen` elements] 9. :attr:`BaseObservation.gen_v` the voltage setpoint of the productions [:attr:`grid2op.Space.GridObjects.n_gen` elements] 10. :attr:`BaseObservation.load_p` the active value of the loads [:attr:`grid2op.Space.GridObjects.n_load` elements] 11. :attr:`BaseObservation.load_q` the reactive value of the loads [:attr:`grid2op.Space.GridObjects.n_load` elements] 12. :attr:`BaseObservation.load_v` the voltage setpoint of the loads [:attr:`grid2op.Space.GridObjects.n_load` elements] 13. :attr:`BaseObservation.p_or` active flow at origin of powerlines [:attr:`grid2op.Space.GridObjects.n_line` elements] 14. :attr:`BaseObservation.q_or` reactive flow at origin of powerlines [:attr:`grid2op.Space.GridObjects.n_line` elements] 15. :attr:`BaseObservation.v_or` voltage at origin of powerlines [:attr:`grid2op.Space.GridObjects.n_line` elements] 16. :attr:`BaseObservation.a_or` current flow at origin of powerlines [:attr:`grid2op.Space.GridObjects.n_line` elements] 17. :attr:`BaseObservation.p_ex` active flow at extremity of powerlines [:attr:`grid2op.Space.GridObjects.n_line` elements] 18. :attr:`BaseObservation.q_ex` reactive flow at extremity of powerlines [:attr:`grid2op.Space.GridObjects.n_line` elements] 19. :attr:`BaseObservation.v_ex` voltage at extremity of powerlines [:attr:`grid2op.Space.GridObjects.n_line` elements] 20. :attr:`BaseObservation.a_ex` current flow at extremity of powerlines [:attr:`grid2op.Space.GridObjects.n_line` elements] 21. :attr:`BaseObservation.rho` line capacity used (current flow / thermal limit) [:attr:`grid2op.Space.GridObjects.n_line` elements] 22. :attr:`BaseObservation.line_status` line status [:attr:`grid2op.Space.GridObjects.n_line` elements] 23. :attr:`BaseObservation.timestep_overflow` number of timestep since the powerline was on overflow (0 if the line is not on overflow)[:attr:`grid2op.Space.GridObjects.n_line` elements] 24. :attr:`BaseObservation.topo_vect` representation as a vector of the topology [for each element it gives its bus]. See :func:`grid2op.Backend.Backend.get_topo_vect` for more information. 25. :attr:`BaseObservation.time_before_cooldown_line` representation of the cooldown time on the powerlines [:attr:`grid2op.Space.GridObjects.n_line` elements] 26. :attr:`BaseObservation.time_before_cooldown_sub` representation of the cooldown time on the substations [:attr:`grid2op.Space.GridObjects.n_sub` elements] 27. :attr:`BaseObservation.time_next_maintenance` number of timestep before the next maintenance (-1 means no maintenance are planned, 0 a maintenance is in operation) [:attr:`grid2op.Space.GridObjects.n_line` elements] 28. :attr:`BaseObservation.duration_next_maintenance` duration of the next maintenance. If a maintenance is taking place, this is the number of timestep before it ends. [:attr:`grid2op.Space.GridObjects.n_line` elements] 29. :attr:`BaseObservation.target_dispatch` the target dispatch for each generator [:attr:`grid2op.Space.GridObjects.n_gen` elements] 30. :attr:`BaseObservation.actual_dispatch` the actual dispatch for each generator [:attr:`grid2op.Space.GridObjects.n_gen` elements] 31. :attr:`BaseObservation.storage_charge` the actual state of charge of each storage unit [:attr:`grid2op.Space.GridObjects.n_storage` elements] 32. :attr:`BaseObservation.storage_power_target` the production / consumption of setpoint of each storage unit [:attr:`grid2op.Space.GridObjects.n_storage` elements] 33. :attr:`BaseObservation.storage_power` the realized production / consumption of each storage unit [:attr:`grid2op.Space.GridObjects.n_storage` elements] 34. :attr:`BaseObservation.gen_p_before_curtail` : the theoretical generation that would have happened if no generator from renewable energy sources have been performed (in MW) [:attr:`grid2op.Space.GridObjects.n_gen` elements] 35. :attr:`BaseObservation.curtailment` : the current curtailment applied [:attr:`grid2op.Space.GridObjects.n_gen` elements] 36. :attr:`BaseObservation.is_alarm_illegal` whether the last alarm has been illegal (due to budget constraint) [``bool``], .. warning: /!\\\\ Only valid with "l2rpn_icaps_2021" environment /!\\\\ 37. :attr:`BaseObservation.curtailment_limit` : the current curtailment limit (if any) [:attr:`grid2op.Space.GridObjects.n_gen` elements] 38. :attr:`BaseObservation.time_since_last_alarm` number of step since the last alarm has been raised successfully [``int``] .. warning: /!\\\\ Only valid with "l2rpn_icaps_2021" environment /!\\\\ 39. :attr:`BaseObservation.last_alarm` : for each alarm zone, gives the last step at which an alarm has been successfully raised at this zone .. warning: /!\\\\ Only valid with "l2rpn_icaps_2021" environment /!\\\\ [:attr:`grid2op.Space.GridObjects.dim_alarms` elements] 40. :attr:`BaseObservation.attention_budget` : the current attention budget [``int``] 41. :attr:`BaseObservation.was_alarm_used_after_game_over` : was the last alarm used to compute anything related to the attention budget when there was a game over (can only be set to ``True`` if the observation corresponds to a game over), warning: /!\\\\ Only valid with "l2rpn_icaps_2021" environment /!\\\\ [``bool``] 42. :attr:`BaseObservation.is_alarm_illegal` whether the last alert has been illegal (due to budget constraint) [``bool``] 43. :attr:`BaseObservation.curtailment_limit` : the current curtailment limit (if any) [:attr:`grid2op.Space.GridObjects.n_gen` elements] 44. :attr:`BaseObservation.curtailment_limit_effective` Limit (in ratio of gen_pmax) imposed on each renewable generator effectively imposed by the environment. 45. :attr:`BaseObservation.current_step` the number of steps since the beginning of the episode (it's 0 for the observation after a call to `env.reset()`) 46. :attr:`BaseObservation.max_step` maximum number of steps that can be done by the environment. When :attr:`BaseObservation.current_step` is :attr:`BaseObservation.max_step` the the environment is done. 47. :attr:`BaseObservation.delta_time` Amount of time (in minutes) represented by a step. In general, there are the equivalent of 5 minutes between two steps. 48. :attr:`BaseObservation.gen_margin_up` From how much can you increase each generators production between this step and the next. 49. :attr:`BaseObservation.gen_margin_down` From how much can you decrease each generators production between this step and the next. 50. :attr:`BaseObservation.active_alert` This attribute gives the lines "under alert" at the given observation. 51. :attr:`BaseObservation.time_since_last_alert` Give the time since an alert has been raised for each powerline. 52. :attr:`BaseObservation.alert_duration` Give the time since an alert has started for all attackable line. 53. :attr:`BaseObservation.total_number_of_alert` Total number of alerts since the beginning of the episode sent by the agent 54. :attr:`BaseObservation.time_since_last_attack` For each attackable line `i` it counts the number of steps since the powerline has been attacked 55. :attr:`BaseObservation.was_alert_used_after_attack` For each attackable line `i` it says if an alert has been used or not for the computation of the reward: +1 means "used and the alert was correct", -1 means "used and the alert was not correct" and 0 means "not used" 56. :attr:`BaseObservation.attack_under_alert` For each attackable line `i` it says if an alert has been sent (+1) or not (-1) for each attackable line currently under attack. """ attr_list_vect = [ "year", "month", "day", "hour_of_day", "minute_of_hour", "day_of_week", "gen_p", "gen_q", "gen_v", "load_p", "load_q", "load_v", "p_or", "q_or", "v_or", "a_or", "p_ex", "q_ex", "v_ex", "a_ex", "rho", "line_status", "timestep_overflow", "topo_vect", "time_before_cooldown_line", "time_before_cooldown_sub", "time_next_maintenance", "duration_next_maintenance", "target_dispatch", "actual_dispatch", "storage_charge", "storage_power_target", "storage_power", "gen_p_before_curtail", "curtailment", "curtailment_limit", "curtailment_limit_effective", # starting grid2op version 1.6.6 "is_alarm_illegal", "time_since_last_alarm", "last_alarm", "attention_budget", "was_alarm_used_after_game_over", "_shunt_p", "_shunt_q", "_shunt_v", "_shunt_bus", # starting from grid2op version 1.6.0 "current_step", "max_step", # starting from grid2op version 1.6.4 "delta_time", # starting grid2op version 1.6.5 "gen_margin_up", "gen_margin_down", # starting grid2op version 1.6.6 # line alert (starting grid2Op 1.9.1, for compatible envs) "active_alert", "attack_under_alert", "time_since_last_alert", "alert_duration", "total_number_of_alert", "time_since_last_attack", "was_alert_used_after_attack", ] attr_list_json = [ "_thermal_limit", "support_theta", "theta_or", "theta_ex", "load_theta", "gen_theta", "storage_theta", ] attr_list_set = set(attr_list_vect)
[docs] def __init__(self, obs_env=None, action_helper=None, random_prng=None, kwargs_env=None): BaseObservation.__init__( self, obs_env=obs_env, action_helper=action_helper, random_prng=random_prng, kwargs_env=kwargs_env ) self._dictionnarized = None
[docs] def update(self, env, with_forecast=True): # reset the matrices self._reset_matrices() self.reset() self._update_obs_complete(env, with_forecast=with_forecast)