| YAML path | Type | Default | Allowed values | Meaning | Use when | Avoid when | Performance impact | Interactions |
|---|
state_estimation.enabled | Bool | true | true, false | Enables SE stage. | Measurement-driven workflows. | No measurement model/data. | Extra nonlinear solve pass. | update_net, PF start source. |
state_estimation.method | Symbol/String | wls | wls | State-estimation algorithm. | Standard weighted least squares. | Unsupported methods. | Fixed current implementation. | Validation rejects unsupported values. |
state_estimation.tol | Float64 | 1e-6 | positive real | SE convergence tolerance on the state step. The default sits AT the finite-difference noise floor (jac_eps), not below it: a tighter value is unreachable and the run clamps it with a log line. | Default. | Below jac_eps (unreachable). | Tighter means more iterations. | max_iter, jac_eps. |
state_estimation.max_iter | Int | 30 | positive integer | Iteration cap for the SE solver; the service and the Web UI form use the same value. Measured need on large sets: 2 to 11 iterations. | Default. | Raising it to outlast a diverging run (it will not converge later either). | Runtime upper bound. | tol, observability quality. |
state_estimation.flatstart | Bool | true | true, false | Start estimator from synthetic flat state. | No trusted historical/SCADA initial state. | When measured/historical start exists. | Low. | update_net and PF start chain. |
state_estimation.jac_eps | Float64 | 1e-6 | positive real | Jacobian perturbation epsilon (numeric terms). | Numeric stability tuning. | Extreme epsilon values. | Low/medium sensitivity impact. | tol and convergence behavior. |
state_estimation.update_net | Bool | true | true, false | Write estimated state back to network. | PF should consume SE result as start. | Isolated SE experiments only. | Low. | Links SE output to PF input. |
state_estimation.pmu_ref_offset | Symbol/String | auto | auto, off | PMU angle (VaMeas) reference handling: auto estimates a common reference-angle offset α between the PMU time base and the slack reference as an additional state. | PMU angles referenced to a GPS time base (default-safe: α ≈ 0 when bases coincide). | PMU angles guaranteed slack-referenced and the extra state is unwanted. | One extra state column. | VaMeas measurements, runse! keyword pmuRefOffset. |
state_estimation.imag_activation_iteration | Int | 2 | positive integer | First WLS iteration in which current-magnitude measurements (ImagMeas) enter the update step; earlier iterations run without them. | Current measurements present (flat-start protection). | No ImagMeas in the set (no effect). | None without currents. | ImagMeas rows, runse! keyword imagActivationIteration. |
state_estimation.report_residual_correlation | Bool | false | true, false | Adds residual-correlation columns (max abs k per measurement, warning above 1/sqrt(2)) to the bad-data report. | Investigating simple-redundant measurement groups. | Routine runs (extra dense matrix work). | One dense m x m pass in diagnostics. | validate_measurements keyword reportResidualCorrelation. |
state_estimation.update_shunts | Bool | false | true, false | Write estimated shunt susceptances back into the model (Shunt.y_pu_shunt/B_shunt) after a converged run. | Accepting the estimated shunt operating point as the new model. | Model data must stay authoritative (default: estimation never overwrites silently). | None. | Released shunts (setShuntEstimation!), runse! keyword updateShunts, SEResult.shuntEstimates. |
state_estimation.update_taps | Bool | false | true, false | Write the FIXED mechanical tap positions of released transformers back into the model (tap_ratio/phase_shift_deg) after a converged fixed run; frozen regulators keep their model value. | Accepting the fixed tap positions as the new model state. | Model data must stay authoritative (default: estimation never overwrites silently). | None. | Released taps (setTapEstimation!), runse! keyword updateTaps, SEResult.tapEstimates/tapFixation. |
state_estimation.topology_precheck | Bool | true | true, false | Run the advisory stage-1 topology pre-checks at the start of every estimation (validate_topology); findings warn and land in SEResult.topologyFindings, nothing is blocked. | Always (the checks are linear and cheap). | Fully trusted topology where even the warnings are noise. | Negligible. | Topology validation. |
state_estimation.topology_open_flow_k | Float64 | 4.0 | positive | Sigma multiple above which a measured flow over an OPEN element is a status contradiction. | Default. | Rarely changed. | None. | validate_topology. |
state_estimation.topology_dead_flow_k | Float64 | 3.0 | positive | Sigma multiple below which a closed branch's flow measurements read dead (fires only with a loaded neighbourhood). | Default. | Rarely changed. | None. | validate_topology. |
state_estimation.topology_voltage_k | Float64 | 4.0 | positive | Sigma multiple for the voltage disagreement across a closed link. | Default. | Rarely changed. | None. | validate_topology. |
state_estimation.topology_kcl_k | Float64 | 4.0 | positive | Sigma multiple for the node-balance check at completely measured nodes. | Default. | Rarely changed. | None. | validate_topology. |
state_estimation.topology_cluster_min | Int | 3 | positive integer | Minimum surviving suspects at one station for the stage-2 :topology_error_suspected_at_station classification. | Default. | Very small nets (every station clusters trivially). | None. | runse_diagnostics, Topology validation. |
state_estimation.robust | Bool | false | true, false | DEPRECATED, alias for robust_mode = staged and read only while robust_mode is off; set robust_mode instead and never both. Two-stage robust R modification: residuals beyond 3 sigma get widened solve weights, beyond 6 sigma the gradient contribution is suppressed. Statistics stay on original sigmas. | Online smoothing with sporadic gross errors. | Identification workflows (use sequential elimination there). | One weight pass per iteration. | robust_start_iteration, SEResult.robustRows, sequential elimination. |
state_estimation.robust_start_iteration | Int | 3 | positive integer | First WLS iteration with robust weight modification; earlier iterations solve unmodified. | Residuals are meaningless before the state settles. | Rarely changed. | None. | robust. |
state_estimation.robust_mode | Symbol | :off | off, staged, replacement | Robust solve-weight family: staged is the two-stage R modification with knees robust_k1/robust_k2; replacement pins rows with converged rn >= k_suppress to the fixed suppression_sigma. Statistics always stay on original sigmas. | Choosing between smoothing families; replacement mirrors an EMS suppression list. | Identification-only workflows. | replacement adds bounded re-solve rounds on the converged state. | robust (legacy alias for staged), robust_k1, robust_k2, k_suppress, suppression_sigma. |
state_estimation.k_eliminate | Float64 | 3.0 | positive | Elimination limit on the normalized residual rn = r/sqrt(Omega_ii) (API keyword normalizedThreshold): past it a row is removed from the estimate, not just down-weighted. | Loosening or tightening the bad-data identification. | Rarely changed below 3. | None. | max_eliminations, band test :high, Web UI warning when k_suppress < k_eliminate. |
state_estimation.robust_k1 | Float64 | 3.0 | positive, <= robust_k2 | Lower knee of the staged modification, on the RAW ratio `t = | r | /sigma(NOT the normalized residualrnthatkeliminateandksuppressuse); weights are unchanged up tot = k1` and the tangential band starts continuously there. | Adjusting the smoothing onset. | Defaults reproduce the classic 3/6 behavior bitwise. |
state_estimation.robust_k2 | Float64 | 6.0 | >= robust_k1 | Upper knee of the staged modification, on the same raw ratio ` | r | /sigmaasrobustk1; beyond it the gradient contribution is suppressed (sigmamod = | r | /k1`). |
state_estimation.k_suppress | Float64 | 4.0 | positive | Down-weight limit: rows whose CONVERGED normalized residual rn = r/sqrt(Omega_ii) reaches it get the fixed replacement sigma during the solve. Same scale as k_eliminate, so the two limits are directly comparable. | Online suppression of known-bad telemetry. | Identification (the row stays visible in statistics either way). | Bounded re-solve rounds. | robust_mode = replacement, suppression_sigma, Web UI warning when below k_eliminate. |
state_estimation.suppression_sigma | Float64 | 2000.0 | positive | The fixed sigma a suppressed row gets during the solve, in the measurement's unit; statistics and reports keep the original sigma. | Effectively removing a row's pull without deleting it. | Values near the real sigma (then use staged). | None. | robust_mode = replacement, k_suppress. |
state_estimation.max_eliminations | Int | 3 | >= 0 | Budget of the sequential elimination: at most this many rows are removed in one diagnostics run. Not a limit but a stop condition; 0 disables the elimination and leaves the diagnostics reporting only. | Sets with several independent gross errors. | Raising it to chase a :high that elimination cannot cure: past three removals the cause is usually a model or topology error, and stage 2 says so. | Each increment costs one further estimation run. | k_eliminate, stop reasons :max_eliminations and :no_localizable_suspect. |
state_estimation.rank_tol_factor | Float64 | 10.0 | positive real | FD-aware rank tolerance factor: observability rank decisions use factor * jacEps * sigma_max instead of an eps-scale threshold. | Always (FD Jacobians have an O(jacEps) error floor). | Exact analytic Jacobians passed with explicit tol. | None. | jac_eps, observability entry points, notes = [:structural_islands]. |
state_estimation.ia_current_floor_A | Float64 | 10.0 | positive real | Fallback for the IaMeas activity gate: a current-angle row is active only while the predicted current magnitude passes 3 * sigma of its paired ImagMeas, or 3 * this floor (ampere) when no magnitude is paired. | Current-phasor sets without magnitude pairs. | Full phasor pairs (the paired sigma wins automatically). | None. | ImagMeas value gate, imag_activation_iteration, diagnostics gating_notes. |
state_estimation.takahashi_min_states | Int | 200 | positive integer | State count from which the diagnostics compute Omega_ii via the sparse Takahashi selected inverse instead of the dense pinv (measured crossover near 130 to 150 states; 4.6x at 1800). | Large systems (default). | Never needed manually; K-matrix requests and guard failures use dense automatically. | Diagnostics only, not the solve. | report_residual_correlation, omega_path in the diagnostics result. |
state_estimation.observability.enabled | Bool | true | true, false | Run observability checks. | SCADA/SE validation workflows. | Fast-only runs where observability not needed. | Small extra analysis cost. | Diagnostics/output verbosity. |