Releases: Grid2op/lightsim2grid
Releases · Grid2op/lightsim2grid
Release v0.9.2
[0.9.2] 2024-10-18
- [ADDED] support loading a grid when everything is NOT on the same bus
(topo_vect
used to be wrong in this case). This is especially usefull
for grid loaded withpypowsybl
- [ADDED] a file benchmarking the timings for running powerflow on different
grid sizes. - [UPDATED] urls to match the new repo location
- [UPDATED] urls to match new grid2op location
Release v0.9.1
- [FIXED] a bug due to wrong type (in a numpy array) for the element name which lead in turn
to a fail assertion (equality between two numpy arrays returning a bool and not an array) - [FIXED] a bug when init a grid from pypowsybl: the wrong value was used for trafos
h
(double) - [FIXED] a bug when init a grid from pypowsybl: wrong values for
_ls_to_orig
and_orig_to_ls
was set (and later used) - [FIXED] yet another bug when init a grid from pypowsybl: the voltage in kV (not in pu)
could be set due to "wrong" labelling of the bus ids - [FIXED] yet another bug when init a grid from pypowsybl: the ratio of the transformers
sent in lightsim2grid did not take into account the "rated_u1
rated_u2
" on both side
(only used on one side) - [FIXED] yet another bug when init a grid from pypowsybl: the ratio of the transformers
sent in lightsim2grid did not take into account the ratio in thepypow_net.get_ratio_tap_changers()
- [ADDED] a method for the
ContingencyAnalysisCPP
class that returns, for all contingencies
in the contingency list, which will be simulated and which causes the grid to be disconnected. - [ADDED] it is now possible to use "one substation" (voltage level) pypowsybl side is
one substation in lightsim2grid. - [IMPROVED] removing a weird
1j * h_
when initializing powerlines and transformers. This was
part of a pandapower "hack" which is not present anymore (see
#88 (comment))
Release v0.9.0
Major focus on this release:
- wheels are now compiled with numpy 2 to make them compatible with both numpy 1.something and 2.something
- some accelaration on the
DC
powerflows, especially the PTDF and LODF with some bug fixes there - clearer interface to make the difference when data are retrieved with bus id sent to the solver (internal, should not be used) and bus id from the
gridmodel
Breaking changes
- [BREAKING] installing pandapower lightsim2grid does not require anymore to install
pandapower (you can initializeGridModel
with pypowsybl or pandapower if you want). To make it both
cleaner and clearer the functionlightsim2grid.gridmodel.init
has been removed.
Please uselightsim2grid.gridmodel.init_from_pandapower
or
lightsim2grid.gridmodel.init_from_pypowsybl
from now on - [BREAKING] the previous
gridmodel.get_ptdf()
function was wrongly labelled with the
"solver" bus id and not thegridmodel
bus id which could cause issue when it was computed
on some grid configuration. It has now been fixed (so thegridmodel.get_ptdf
returns the
proper things). If you want the previous behaviour, you need to usegridmodel.get_ptdf_solver()
- [BREAKING] similarly,
gridmodel.get_Ybus()
,gridmodel.get_dcYbus()
,gridmodel.get_Sbus()
andgridmodel.get_dcSbus()
now return things in thegridmodel
bus ordering. For the previous
behaviour you can usegridmodel.get_Ybus_solver()
,gridmodel.get_dcYbus_solver()
,
gridmodel.get_Sbus_solver()
andgridmodel.get_dcSbus_solver()
- [BREAKING] the more rational logic above also extends to all the functions listed in the
table below:
Function with behaviour change | Name of the new function having the same behaviour |
---|---|
gridmodel.get_ptdf() | gridmodel.get_ptdf_solver() |
gridmodel.get_Ybus() | gridmodel.get_Ybus_solver() |
gridmodel.get_dcYbus() | gridmodel.get_dcYbus_solver() |
gridmodel.get_Sbus() | gridmodel.get_Sbus_solver() |
gridmodel.get_dcSbus() | gridmodel.get_dcSbus_solver() |
gridmodel.get_pv() | gridmodel.get_pv_solver() |
gridmodel.get_pq() | gridmodel.get_pq_solver() |
gridmodel.get_slack_ids() | gridmodel.get_slack_ids_solver() |
gridmodel.get_slack_ids_dc() | gridmodel.get_slack_ids_dc_solver() |
gridmodel.get_slack_weights() | gridmodel.get_slack_weights_solver() |
gridmodel.get_V() | gridmodel.get_V_solver() |
gridmodel.get_Va() | gridmodel.get_Va_solver() |
gridmodel.get_Vm() | gridmodel.get_Vm_solver() |
gridmodel.get_J() | gridmodel.get_J_solver() |
gridmodel.get_Bf() | gridmodel.get_Bf_solver() |
Bug fixes
- [FIXED] the
change_solver
in theContingencyAnalysis
did not work correctly.
More specifically the solver type used might not be correct if changed which could
lead to wrong Ybus being passed to the solver. - [FIXED] some compatibility mode with python
3.7
- [FIXED] a bug when "turned off" generator were not PV (slack was
"turned off" when its target P was 0. But still the slack so ends up producing something...) - [FIXED] (consistency with pandapower) when an intial powerflow is run
to initialized an AC powerflow, the initial voltages are 1 pu (and
notgridmodel.get_init_vm_pu()
as previously). - [FIXED]
gridmodel.get_ptdf()
now have the
normal "gridmodel" bus id representation and not the "solver" bus ordering. - [FIXED]
gridmodel.get_lodf()
issue wrong results in case of some
topological modification - [FIXED] calls to methods such as
gridmodel.get_pv
orgridmodel.get_V
orgridmodel.get_Ybus
could lead to severe crashes (segmentation fault)
on some (rare) cases. Now an exceptions should be thrown in these cases. - [FIXED] basic backward compatibility is ensured and tested for legacy grid2op >= 0.9.1.post1
Not all features are tested and only 1.x versions are tested
(ie 1.1 or 1.2 but not 1.2.1, 1.2.2, 1.2.3 etc.) and only for python 3.11 - [FIXED] a bug when using
LightSimBackend
with some old (but not too old) grid2op
versions.
New features
- [ADDED] it is now possible to deactivate the support for shunts by
subclassing the LightSimBackend class and setting theshunts_data_available
toFalse
- [IMPROVED] in the
ContingencyAnalysis
class, the underlying cpp model will now
perform an initial powerflow.
Improvements
- [IMPROVED] distributed wheels are now compiled (whenever possible) with numpy 2.
This makes them compatible with both numpy 1.x.y and numpy 2.z.t versions. - [IMPROVED] tests are now performed when lightsim2grid is compiled with
the latest clang (18) and gcc (14) versions on the CI using python 3.11
Release v0.8.2
- [FIXED] CI was broken after migration to artifact v4, set it back to v3
(and make the names of the folder clearer) - [FIXED] CI when using latest pandapower version (2.14) which broke some previous tests
- [ADDED] the computation of the LODF (line outage distribution factor) in
lightsim2grid - [ADDED] some convenience functions to retrieve in a vectorized way the
buses to which each elements of a given container is connected
(eggridmodel.get_lines().get_bus_from()
) - [ADDED] more binaries (windows
arm64
and macosarm64
) - [IMPROVED] remove some compilation warnings for clang
- [IMPROVED] possibility to specify generator used as slack by its name when initializing
frompypowsybl
. - [IMPROVED] removing some warnings when grid2op is not installed
(it should not raise any warning as lightsim2grid does not require grid2op)
Release v0.8.1
- [FIXED] a bug with shunts when
nb_busbar_per_sub
>= 2 - [FIXED] some bugs preventing backward compatibility
- [FIXED] an issue in the computation of gen_q when intialized with pypowsybl
(some overflow cpp side leading to infinite number in gen_q) - [FIXED] a bug in the "containers" cpp side (wrong bus was assigned)
when elements was disconnected, which lead to wrong computations for
time series or contingency analysis. - [FIXED] another bug in ContingencyAnalysis (cpp side) leading to wrong computation
when a powerline was disconnected - [FIXED] some broken imports when grid2op was not installed
- [FIXED] missing "typing_extension" as required when installation
- [ADDED] some information of compilation directly in the cpp module
- [ADDED] some information of compilation available in the python
compilation_options
module python side - [ADDED] some convenient methods for
ContingencyAnalysis
python side (most
notably the possibility to initialize it from aLightSimBackend
and to
change the topology of the grid) - [ADDED] a "reward" module in lightsim2grid with custom reward
based on lightsim2grid. - [ADDED] a class
N1ContingencyReward
that can leverage lightsim2grid to
assess the number of safe / unsafe N-1. - [IMPROVED] time measurments in python and c++
- [IMPROVED] now test lightsim2grid with oldest grid2op version
- [IMPROVED] speed, by accelerating the reading back of the data (now read only once and then
pointers are re used) - [IMPROVED] c++ side avoid allocating memory (which allow to gain speed python side too)
- [IMPROVED] type hinting in
LightSimBackend
for all 'public' methods (most
notably the one used by grid2op) - [IMPROVED] now the benchmarks are more verbose (detailing some compilation options)
Release v0.8.0
- [BREAKING] now able to retrieve
dcSbus
with a dedicated method (and not with the oldget_Sbus
).
If you previously usedgridmodel.get_Sbus()
to retrieve the Sbus used for DC powerflow, please use
gridmodel.get_dcSbus()
instead. - [DEPRECATED] in the cpp class: the old
SecurityAnalysisCPP
has been renamedContingencyAnalysisCPP
(you should not import it, but it you do you canfrom lightsim2grid.securityAnalysis import ContingencyAnalysisCPP
now) - [DEPRECATED] in the cpp class: the old
Computers
has been renamedTimeSerieCPP
(you should not import it, but it you do you canfrom lightsim2grid.time_serie import TimeSerieCPP
now) - [FIXED] now voltage is properly set to 0. when shunts are disconnected
- [FIXED] now voltage is properly set to 0. when storage units are disconnected
- [FIXED] a bug where non connected grid were not spotted in DC
- [FIXED] a bug when trying to set the slack for a non existing genererator
- [FIXED] a bug in init from pypowsybl when some object were disconnected. It raises
an error (because they are not connected to a bus): now this function properly handles
these cases. - [FIXED] a bug leading to not propagate correctly the "compute_results" flag when the
environment was copied (for example) - [FIXED] a bug where copying a lightsim2grid
GridModel
did not fully copy it - [FIXED] a bug in the "topo_vect" comprehension cpp side (sometimes some buses
might not be activated / deactivated correctly) - [FIXED] a bug when reading a grid initialize from pypowsybl (trafo names where put in place
of shunt names) - [FIXED] read the docs was broken
- [FIXED] a bug when reading a grid from pandapower for multiple slacks when slack
are given by the "ext_grid" information. - [FIXED] a bug in "gridmodel.assign_slack_to_most_connected()" that could throw an error if a
generator with "target_p" == 0. was connected to the most connected bus on the grid - [FIXED] backward compat with "future" grid2op version with a
better way to copyLightSimBackend
- [ADDED] sets of methods to extract the main component of a grid and perform powerflow only on this
one. - [ADDED] possibility to set / retrieve the names of each elements of the grid.
- [ADDED] embed in the generator models the "non pv" behaviour. (TODO need to be able to change Q from python side)
- [ADDED] computation of PTPF (Power Transfer Distribution Factor) is now possible
- [ADDED] (not tested) support for more than 2 busbars per substation
- [ADDED] a timer to get the time spent in the gridmodel for the powerflow (env.backend.timer_gridmodel_xx_pf)
which also include the time - [ADDED] support for more than 2 busbars per substation (requires grid2op >= 1.10.0)
- [ADDED] possibility to retrieve the bus id of the original iidm when initializing from pypowsybl
(return_sub_id
kwargs). This is a "beta" feature and will be adressed in a better way
in a near future. - [ADDED] possibility to continue the grid2op 'step' when the solver converges but a load or a
generator is disconnected from the grid. - [IMPROVED] now performing the new grid2op
create_test_suite
- [IMPROVED] now lightsim2grid properly throw
BackendError
- [IMPROVED] clean ce cpp side by refactoring: making clearer the difference (linear) solver
vs powerflow algorithm and move same type of files in the same directory. This change
does not really affect python side at the moment (but will in future versions) - [IMPROVED] CI to test on gcc 13 and clang 18 (latest versions to date)
- [IMPROVED] computation speed: grid is not read another time in some cases.
For example, if load and generators do not change, then Sbus is not
recomputed. Likewise, if the topology does not change, then the Ybus
is not recomputed either see #72
Release v0.7.5.post1
Fix to be able to work with latest grid2op version
Release v0.7.4 (post1)
Use this version of lightsim2grid 0.7.4 for "forward compatibility" with grid2op 1.10.0
Release v0.7.3 (post1)
Forward compatible version with grid2op >= 1.10.0
Release v0.7.2 (post1)
Lightsim2grid versoin 0.7.2 with forward compatibility with grid2op >= 1.10.0