Skip to main content

Overview

The Remedial Action Optimization (RAO) module provides advanced optimization capabilities for power system security management. It optimizes the use of remedial actions to ensure network security while minimizing costs.

Main Classes

Rao

Main class for running remedial action optimization.
from pypowsybl.rao import create_rao

rao = create_rao()

Methods

run
method
Run a remedial action optimization.Parameters:
  • crac (Crac): CRAC (Contingency list, Remedial Actions and additional Constraints)
  • network (Network): Network to optimize
  • parameters (Parameters, optional): RAO parameters
  • rao_provider (str): RAO provider name (default: “SearchTreeRao”)
  • loop_flow_glsk (Glsk, optional): Loop flow GLSK for loop flow computation
Returns: RaoResultExample:
result = rao.run(
    crac=crac,
    network=network,
    parameters=params,
    loop_flow_glsk=glsk
)
run_voltage_monitoring
method
Run voltage monitoring after RAO.Parameters:
  • crac (Crac): CRAC object
  • network (Network): Network
  • rao_result (RaoResult): Result from previous RAO run
  • load_flow_parameters (loadflow.Parameters, optional): Load flow parameters
  • provider_str (str): Provider string
  • monitoring_glsk (Glsk, optional): GLSK for monitoring
Returns: RaoResult
run_angle_monitoring
method
Run angle monitoring after RAO.Parameters:
  • crac (Crac): CRAC object
  • network (Network): Network
  • rao_result (RaoResult): Result from previous RAO run
  • load_flow_parameters (loadflow.Parameters, optional): Load flow parameters
  • provider_str (str): Provider string
  • monitoring_glsk (Glsk, optional): GLSK for monitoring
Returns: RaoResult

Crac

Represents the CRAC (Contingency list, Remedial Actions and additional Constraints) data.
from pypowsybl.rao import Crac

# Load from file
crac = Crac.from_file_source(network, 'crac.json')

# Load from buffer
import io
with open('crac.json', 'rb') as f:
    crac = Crac.from_buffer_source(network, io.BytesIO(f.read()))
from_file_source
classmethod
Load CRAC from a file.Parameters:
  • network (Network): Network object
  • crac_file (str or PathLike): Path to CRAC file
Returns: Crac
from_buffer_source
classmethod
Load CRAC from a buffer.Parameters:
  • network (Network): Network object
  • crac_source (BytesIO): CRAC data buffer
Returns: Crac

Glsk

Represents Generation and Load Shift Keys for sensitivity analysis.
from pypowsybl.rao import Glsk
Used in RAO for loop flow computation and monitoring.

Parameters

Comprehensive parameters for RAO execution.
from pypowsybl.rao import (
    Parameters,
    ObjectiveFunctionParameters,
    RangeActionOptimizationParameters,
    TopoOptimizationParameters
)

params = Parameters(
    objective_function_parameters=ObjectiveFunctionParameters(),
    range_action_optimization_parameters=RangeActionOptimizationParameters(),
    topo_optimization_parameters=TopoOptimizationParameters()
)
objective_function_parameters
ObjectiveFunctionParameters
Parameters for the objective function.
range_action_optimization_parameters
RangeActionOptimizationParameters
Parameters for range action optimization (PST, HVDC, injections).
topo_optimization_parameters
TopoOptimizationParameters
Parameters for topological action optimization.
multithreading_parameters
MultithreadingParameters
Parameters for parallel execution.
second_preventive_rao_parameters
SecondPreventiveRaoParameters
Parameters for second preventive RAO execution.
not_optimized_cnecs_parameters
NotOptimizedCnecsParameters
Parameters for CNECs that should not be optimized.
loadflow_and_sensitivity_parameters
LoadFlowAndSensitivityParameters
Load flow and sensitivity computation parameters.
provider_parameters
Dict[str, str]
Provider-specific parameters.

Loading and Saving Parameters

from_file_source
classmethod
Load parameters from a file.Parameters:
  • parameters_file (str or PathLike): Path to parameters file
Returns: ParametersExample:
params = Parameters.from_file_source('rao_params.json')
from_buffer_source
classmethod
Load parameters from a buffer.Parameters:
  • parameters_source (BytesIO): Parameters data buffer
Returns: Parameters
serialize
method
Save parameters to a file.Parameters:
  • output_file (str): Output file path
Example:
params.serialize('output_params.json')
serialize_to_binary_buffer
method
Serialize parameters to a binary buffer.Returns: BytesIO
to_json
method
Convert parameters to JSON dictionary.Returns: Dict[str, Any]

ObjectiveFunctionParameters

Parameters for the RAO objective function. Attributes:
  • objective_function_type: Type of objective function
  • unit: Unit for optimization (MW, AMPERE)
  • curative_min_obj_improvement: Minimum improvement required for curative actions
  • enforce_curative_security: Whether to enforce security in curative perimeter

RangeActionOptimizationParameters

Parameters for optimizing range actions (PST, HVDC, injections). Key Attributes:
  • max_mip_iterations: Maximum iterations for MIP solver
  • pst_ra_min_impact_threshold: Minimum impact threshold for PST actions
  • pst_sensitivity_threshold: Sensitivity threshold for PST
  • pst_model: PST model type
  • hvdc_ra_min_impact_threshold: Minimum impact threshold for HVDC actions
  • injection_ra_min_impact_threshold: Minimum impact threshold for injection actions
  • ra_range_shrinking: Range shrinking strategy
  • solver: Solver to use (e.g., “CBC”, “SCIP”)
  • relative_mip_gap: Relative MIP gap tolerance
  • solver_specific_parameters: Solver-specific parameters

TopoOptimizationParameters

Parameters for topological action optimization. Key Attributes:
  • max_preventive_search_tree_depth: Maximum depth for preventive search tree
  • max_curative_search_tree_depth: Maximum depth for curative search tree
  • predefined_combinations: Use predefined action combinations
  • relative_min_impact_threshold: Relative minimum impact threshold
  • absolute_min_impact_threshold: Absolute minimum impact threshold
  • skip_actions_far_from_most_limiting_element: Skip actions far from constraints
  • max_number_of_boundaries_for_skipping_actions: Max boundaries for action skipping

MultithreadingParameters

Parameters for parallel execution. Attributes:
  • available_cpus: Number of CPUs available for parallel computation

RaoResult

Result object returned by RAO execution.
# RaoResult is returned by rao.run()
result = rao.run(crac=crac, network=network, parameters=params)

Utility Functions

create_rao
function
Create a RAO object for running optimization.Returns: RaoExample:
from pypowsybl.rao import create_rao

rao = create_rao()

RaoLogFilter

Filter for RAO log messages.
from pypowsybl.rao import RaoLogFilter
import logging

# Create filter to show only OpenRAO logs
filter = RaoLogFilter()
filter
method
Filter log records to show only OpenRAO package logs.Parameters:
  • record (LogRecord): Log record to filter
Returns: bool - True if record should be displayed

Complete Example

import pypowsybl as pp
from pypowsybl.rao import (
    create_rao,
    Crac,
    Parameters,
    RangeActionOptimizationParameters
)

# Load network
network = pp.network.load('network.xiidm')

# Load CRAC
crac = Crac.from_file_source(network, 'crac.json')

# Configure parameters
range_params = RangeActionOptimizationParameters()
range_params.max_mip_iterations = 10
range_params.solver = "CBC"

params = Parameters(
    range_action_optimization_parameters=range_params
)

# Create and run RAO
rao = create_rao()
result = rao.run(
    crac=crac,
    network=network,
    parameters=params,
    rao_provider="SearchTreeRao"
)

# Process results
print(f"RAO optimization completed")
print(f"Result: {result}")

Parameter File Example

{
  "objective-function": {
    "type": "MAX_MIN_MARGIN_IN_MEGAWATT",
    "curative-min-obj-improvement": 0.0,
    "enforce-curative-security": true
  },
  "range-actions-optimization": {
    "max-mip-iterations": 10,
    "pst-sensitivity-threshold": 0.01,
    "solver": "CBC",
    "relative-mip-gap": 0.001
  },
  "topological-actions-optimization": {
    "max-preventive-search-tree-depth": 5,
    "max-curative-search-tree-depth": 3,
    "relative-minimum-impact-threshold": 0.01
  }
}

Notes

  • RAO requires a valid CRAC file defining contingencies, CNECs, and remedial actions
  • The SearchTreeRao provider is the default and most commonly used
  • Parameters can be loaded from JSON files or configured programmatically
  • GLSK files are optional but required for loop flow computation

Build docs developers (and LLMs) love