oprava
Some checks failed
CI and deploy / migration-check (push) Failing after 12s
CI and deploy / deploy (push) Has been skipped

This commit is contained in:
Dusan Vojacek
2026-05-31 00:13:44 +02:00
parent 111f51c06c
commit 5d06f49d2b
4 changed files with 103 additions and 21 deletions

View File

@@ -71,7 +71,7 @@ NEG_BUY_CHARGE_SHORTFALL_PENALTY_CZK_KWH = 100.0
PRE_NEG_CHARGE_PENALTY_CZK_KWH = 400.0
PRE_NEG_BATT_EXPORT_SHORTFALL_PENALTY_CZK_KWH = 80.0
PRE_NEG_BATT_EXPORT_MIN_SELL_CZK_KWH = 1.0
PLANNER_BUILD_TAG = "2026-05-31-evening-push-relaxed-clear-v54"
PLANNER_BUILD_TAG = "2026-05-31-evening-push-any-relaxed-v55"
# Ranní slabá FVE: neaplikovat pv_store ge_pv=0 (jinak curtail při sell < večerní peak).
DAWN_LOW_PV_NO_CURTAIL_W = 1500
# Mimo evening_push: preferovat bd pro dům místo gi, když buy >> acq (účinná cena importu).
@@ -234,20 +234,29 @@ def _maybe_add_planner_comparison(
peer_version = _planner_peer_version(active_version)
if peer_version == active_version:
return None
peer_results, peer_ms, peer_snapshot = solve_dispatch(
slots,
battery,
heat_pump,
grid,
ev_sessions,
vehicles,
current_soc_wh,
current_tuv_temp_c,
tuv_delta_stats=tuv_delta_stats,
operating_mode=operating_mode,
charge_commitment_prev_w=charge_commitment_prev_w,
planner_version=peer_version,
)
try:
peer_results, peer_ms, peer_snapshot = solve_dispatch_two_pass(
slots,
battery,
heat_pump,
grid,
ev_sessions,
vehicles,
current_soc_wh,
current_tuv_temp_c,
tuv_delta_stats=tuv_delta_stats,
operating_mode=operating_mode,
charge_commitment_prev_w=charge_commitment_prev_w,
planner_version=peer_version,
evening_push_ts_override=None,
)
except RuntimeError as exc:
logger.warning(
"Planner comparison peer (%s) failed, skipping compare run: %s",
peer_version,
exc,
)
return None
# active_results / active_ms jsou doplněny později v calleru
return {
"peer_version": peer_version,
@@ -2721,7 +2730,12 @@ def solve_dispatch(
evening_push_hysteresis_retained = True
else:
evening_push_ts = computed_evening_push_ts
if relaxed_neg_prep_window:
if (
relaxed_expensive_import
or relaxed_neg_buy_charge
or relaxed_neg_prep_window
or neg_sell_phases_fallback
):
evening_push_ts = set()
evening_push_hysteresis_retained = False
last_pos_sell_pre_neg_buy = _last_non_negative_sell_before_neg_buy(
@@ -2843,9 +2857,16 @@ def solve_dispatch(
commit_pen = float(getattr(battery, "planner_charge_commitment_penalty_czk_kwh", 0.2))
commit_lp: list[tuple[int, pulp.LpVariable, float]] = []
if charge_commitment_prev_w is not None and len(charge_commitment_prev_w) == T:
commitment_for_solve = charge_commitment_prev_w
if (
relaxed_neg_buy_charge
or relaxed_neg_prep_window
or neg_sell_phases_fallback
):
commitment_for_solve = None
if commitment_for_solve is not None and len(commitment_for_solve) == T:
for t in range(T):
prev = charge_commitment_prev_w[t]
prev = commitment_for_solve[t]
if prev is not None and prev > 500:
cap_prev = float(prev)
cv = pulp.LpVariable(f"ccommit_{t}", 0, cap_prev)
@@ -4097,6 +4118,7 @@ def solve_dispatch(
planner_version=planner_version,
relaxed_expensive_import=True,
relaxed_neg_buy_charge=True,
evening_push_ts_override=evening_push_ts_override,
)
if not relaxed_neg_prep_window:
logger.warning(
@@ -4503,7 +4525,15 @@ def solve_dispatch(
"evening_push_override_filtered_empty": bool(
push_override_raw and not push_override_eff
),
"evening_push_cleared_on_relaxed_prep": bool(relaxed_neg_prep_window),
"evening_push_cleared_on_relaxed_prep": bool(
relaxed_neg_prep_window
or relaxed_neg_buy_charge
or relaxed_expensive_import
or neg_sell_phases_fallback
),
"charge_commitment_ignored_on_relaxed": bool(
commitment_for_solve is None and charge_commitment_prev_w is not None
),
"kv1_evening_push_morning_peak_rule": _kv1_block_export_fixed_evening_push(
grid,
purchase_fixed=purchase_fixed_pre,