Reconfiguration Theory & Experiments (IEEE-33)

This document explains what the reconfiguration experiments do, how the inputs are structured, and how to run the three available variants:

  • ADMM (01-reconfiguration-admm.py)

  • Benders (02-reconfiguration-bender.py)

  • Combined (03-reconfiguration-combined.py)

The goal is to solve an operational feasibility + reconfiguration problem under many load/PV scenarios, optionally including switching decisions and OLTC tap control, while respecting network limits (voltage, currents, power flow).


1) What “reconfiguration” means

  • selecting a valid radial switching state,

  • potentially adjusting transformer taps (OLTC),

  • ensuring power flow feasibility across scenarios,

  • minimizing operational objectives such as:

    • infeasibility ,

    • losses / proxy costs,

    • switching penalties or control effort.

This project exposes reconfiguration solvers through FastAPI endpoints, and the experiment scripts send payloads to those endpoints.


2) Input payload (00-reconfiguration.json)

All three reconfiguration scripts start from the same payload file:

experiments/ieee_33/00-reconfiguration.json

It has three main blocks:

2.1 grid

"grid": {
  "name": "test",
  "pp_file": "examples/ieee_33/simple_grid.p",
  "s_base": 1000000,
  "cosφ": 0.95,
  "egid_id_mapping_file": "examples/ieee_33/consumer_egid_idx_mapping.csv",
  "minimum_impedance": 0.001
}
  • pp_file: path to the pandapower network snapshot.

  • s_base: base power used for per-unit scaling (e.g., 1 MVA).

  • cosφ: default power factor assumption.

  • egid_id_mapping_file: mapping between consumer identifiers and internal indices.

  • minimum_impedance: a floor to prevent numerical issues (e.g., zero-impedance branches).

2.2 profiles

"profiles": {
  "load_profiles": ["examples/ieee_33/load_profiles"],
  "pv_profile": "examples/ieee_33/pv_profiles",
  "target_year": 2030,
  "quarter": 1,
  "scenario_name": "Basic"
}
  • Load and PV profiles define scenario time series.

  • target_year, quarter, scenario_name choose a slice of the scenario dataset.

  • These files are in parqut and each scenario has following structure `Basic_year.parquet:

┌────────┬─────┬─────┬─────┬───┬───────┬───────┬───────┬───────┐
│ egid   ┆ _0  ┆ _1  ┆ _2  ┆ … ┆ _8757 ┆ _8758 ┆ _8759 ┆ _1998 │
│ ---    ┆ --- ┆ --- ┆ --- ┆   ┆ ---   ┆ ---   ┆ ---   ┆ ---   │
│ str    ┆ f64 ┆ f64 ┆ f64 ┆   ┆ f64   ┆ f64   ┆ f64   ┆ f64   │
╞════════╪═════╪═════╪═════╪═══╪═══════╪═══════╪═══════╪═══════╡
│ 883806 ┆ 0.0 ┆ 0.0 ┆ 0.0 ┆ … ┆ 0.0   ┆ 0.0   ┆ 0.0   ┆ 0.0   │

2.3 konfig

"konfig": {
  "verbose": false,
  "solver_name": "gurobi",
  "solver_non_convex": 2,
  "big_m": 1000,
  "ε": 1,
  "ρ": 2,
  "γ_admm_penalty": 1,
  "γ_infeasibility": 10,
  "γ_trafo_loss": 100,
  "time_limit": 10,
  "max_iters": 20,
  "μ": 10,
  "τ_incr": 2,
  "τ_decr": 2,
  "seed": 42,
  "groups": 5,
  "vm_max_pu": 1.05,
  "vm_min_pu": 0.95
}

This block contains solver and algorithm parameters. Not all fields are used by all methods.

Typical roles:

  • solver_name: optimizer backend (e.g., gurobi).

  • solver_non_convex: controls nonconvex handling in the solver.

  • big_m: Big-M constant used in mixed-integer constraints (e.g., switching logic).

  • ε, ρ: commonly used as ADMM tuning parameters / tolerances.

  • γ_infeasibility: weight for infeasibility slack penalties (encourages feasibility).

  • time_limit: runtime limit per solve / iteration (seconds).

  • max_iters: maximum iterations (notably ADMM).

  • vm_min_pu, vm_max_pu: voltage bounds.

Note: In the Benders and Combined scripts, konfig is filtered to the fields supported by their respective Pydantic configs, then some values are overridden for that method.


3) Three solver variants

ADMM (/reconfiguration/admm)

Script: experiments/ieee_33/01-reconfiguration-admm.py
Best for many scenarios / large networks (decomposition-based).

PATCH http://{LOCALHOST}:{PY_PORT}/reconfiguration/admm

Benders (/reconfiguration/bender)

Script: experiments/ieee_33/02-reconfiguration-bender.py
Uses a master–subproblem approach; the script filters/overrides konfig for BenderConfig.

PATCH http://{LOCALHOST}:{PY_PORT}/reconfiguration/bender

Combined (/reconfiguration/combined)

Script: experiments/ieee_33/03-reconfiguration-combined.py
Single integrated (baseline) approach; the script filters/overrides konfig for CombinedConfig.

PATCH http://{LOCALHOST}:{PY_PORT}/reconfiguration/combined