diff --git a/backend/services/planning_engine.py b/backend/services/planning_engine.py index 2c13f74..18f4b55 100644 --- a/backend/services/planning_engine.py +++ b/backend/services/planning_engine.py @@ -498,7 +498,13 @@ def solve_dispatch( soc_prev_expr = current_soc_wh if t == 0 else soc[t - 1] arb_t = arb_floor_series[t] soc_low_t = soc_min_series[t] - prob += soc_prev_expr >= (arb_t - (arb_t - soc_low_t) * (1 - w_arb[t])) + # Při relaxovaném dnu (soc_low pod DB min_soc Wh) nesmí větev w_arb=1 znovu vynutit arb_t + # (typicky ~rezerva 20 %) — jinak nejde „vypustit“ baterku k planner floor 5 %. + if soc_low_t < min_soc_wh - 1e-3: + arb_cap_t = min(arb_t, soc_low_t) + else: + arb_cap_t = arb_t + prob += soc_prev_expr >= (arb_cap_t - (arb_cap_t - soc_low_t) * (1 - w_arb[t])) prob += bd[t] <= ( s.load_baseline_w + ev_total_t