fix home-01 prodej pri zaporu
This commit is contained in:
@@ -50,7 +50,7 @@ DEFAULT_PLANNER_DISCHARGE_RELAX_PREWINDOW_SLOTS = 8
|
||||
# Penalizace je v Kč/Wh (např. 0.20 = 200 Kč/kWh). Musí být dost velká, aby přebila
|
||||
# bezpečnostní SoC buffer + terminal shadow cenu a solver skutečně „dovylil“ před sell<0.
|
||||
PRENEG_SELL_SOC_ANCHOR_SLACK_PENALTY_CZK_PER_WH = 0.20
|
||||
PEAK_EXPORT_SHORTFALL_PENALTY_CZK_KWH = 40.0
|
||||
PEAK_EXPORT_SHORTFALL_PENALTY_CZK_KWH = 80.0
|
||||
# Měkký tlak: v okně sell<0 + block_export využít PV přebytek do baterie (ne curtail).
|
||||
PV_CHARGE_SHORTFALL_PENALTY_CZK_KWH = 120.0
|
||||
# Curtailment při sell<0 + allow_charge: nesmí být téměř zdarma oproti nabíjení (BA81).
|
||||
@@ -59,7 +59,7 @@ NEG_SELL_CURTAIL_PENALTY_CZK_KWH = 1.0
|
||||
NEG_SELL_PV_CHARGE_REWARD_CZK_KWH = 0.8
|
||||
# Měkký tlak: v okně sell<0 dobít na soc_max (ne zastavit na ~94 % kvůli curtail).
|
||||
NEG_SELL_SOC_UNDERFILL_PENALTY_CZK_PER_WH = 0.35
|
||||
PLANNER_BUILD_TAG = "2026-05-25-purchase-fixed-neg-sell-v9"
|
||||
PLANNER_BUILD_TAG = "2026-05-25-home01-neg-sell-evening-v10"
|
||||
CORRECTION_WINDOW_H = 1 # hodina zpět pro výpočet korekčního faktoru
|
||||
CORRECTION_MIN_CLAMP = 0.5 # spodní limit korekčního faktoru
|
||||
CORRECTION_MAX_CLAMP = 1.5 # horní limit korekčního faktoru
|
||||
@@ -1475,10 +1475,7 @@ def solve_dispatch(
|
||||
for t_peak in morning_pre_neg_export_ts:
|
||||
if t_peak in profitable_export_ts:
|
||||
prob += ge_bat[t_peak] >= float(PRENEG_MORNING_EXPORT_MIN_W) * z_export[t_peak]
|
||||
evening_export_push_w = min(
|
||||
export_push_w,
|
||||
float(battery.max_discharge_power_w) * 0.5,
|
||||
)
|
||||
evening_export_push_w = export_push_w
|
||||
evening_push_ts = _evening_battery_export_push_indices(
|
||||
slots,
|
||||
profitable_export_ts=profitable_export_ts,
|
||||
@@ -1657,6 +1654,18 @@ def solve_dispatch(
|
||||
# Přebytek FVE → baterie / curtail A; B přes z_gen_cutoff nebo bc_pv.
|
||||
prob += ge[t] == 0
|
||||
prob += ge_pv[t] == 0
|
||||
elif not purchase_fixed_pre and pv_surplus_neg_w > 500:
|
||||
# Spot (home-01): při sell<0 neexportovat, dokud není baterie plná (curtailable A).
|
||||
# Dříve skip_pv_store_block + pv_b vynucoval export i při prázdné baterii.
|
||||
soc_prev_neg = current_soc_wh if t == 0 else soc[t - 1]
|
||||
w_pv_full = pulp.LpVariable(f"w_pv_full_neg_{t}", cat=pulp.LpBinary)
|
||||
prob += soc_prev_neg >= (
|
||||
float(battery.soc_max_wh)
|
||||
- soc_headroom_wh
|
||||
- float(battery.soc_max_wh) * (1 - w_pv_full)
|
||||
)
|
||||
prob += ge_pv[t] <= float(pv_surplus_neg_w) * w_pv_full
|
||||
prob += ge[t] <= float(grid.max_export_power_w) * w_pv_full
|
||||
|
||||
soc_prev_expr = current_soc_wh if t == 0 else soc[t - 1]
|
||||
arb_t = arb_floor_series[t]
|
||||
|
||||
Reference in New Issue
Block a user