dalsi pokus o fix nevyliti baterky pred zapornou cenou
Some checks failed
CI and deploy / migration-check (push) Failing after 17s
CI and deploy / deploy (push) Has been skipped

This commit is contained in:
Dusan Vojacek
2026-05-23 20:20:10 +02:00
parent 1ec92bdf79
commit da52cf168b
4 changed files with 78 additions and 34 deletions

View File

@@ -44,7 +44,7 @@
1. **Globální rozpočet Wh** (`discharge_slot_buffer × exportovatelná kapacita`): sloty podle `sell_price desc`, ale na **dni prvního `sell < 0`** se **vynechává noc 0004** (Prague), aby půlnoc nevyčerpala rozpočet před ranní špičkou.
2. **Večerní špičky per den:** `sell ≥ max(sell) degradation` jen pro hodiny **≥ 17** (Prague), ne globální max horizontu (jinak by vyhrála půlnoc 3,7 Kč místo večera).
3. **Ranní pásmo před prvním `sell < 0`:** hodiny **511** téhož kalendářního dne — všechny sloty s `sell ≥ lokální_max_ráno degradation`; ostatní sloty mezi ranním pásmem a prvním `sell < 0` s nižším sell mají export **zakázán** (žádný dump v 07:30 za 2 Kč). **`charge_acquisition`:** vážený `buy` před prvním exportem **téhož dne** jako záporné výkupní okno.
V `solve_dispatch` (AUTO): **`ge_bat` push** ve všech ranních peak slotech; **kotva SoC** na ranním peaku (ne na posledním slotu před `sell < 0`); **`gi` minimum** při `buy < 0`; **`export_shortfall`** u high-sell. Mimo exportní sloty: **`ge_bat = 0`**; **`bc_gi = 0`** mimo masku, **výjimka `buy < 0`**.
V `solve_dispatch` (AUTO): **`charge_slots`** zahrnuje i všechny sloty s **`buy < 0`** (i když maska z SQL byla false). **Záporný buy:** `bc_pv = 0`, **`bc_gi ≥ 90 %` max_charge** dokud je kam nabít (binární `z_neg_fill`). **Ranní peak před `sell < 0`:** `allow_charge = false` v SQL, v LP `bc = 0`, **`ge_bat` push** (~12 kW). **Večer ≥17:** `ge_bat` push (~10 kW). **`export_shortfall`** u high-sell. Mimo exportní sloty: **`ge_bat = 0`**.
- **Záporná nákupní cena:**
- horní mez `grid_import` zahrnuje `load_baseline_w` + nabíjení/EV/TČ (bez nekonečného importu).
- **Záporná prodejní cena → tvrdý zákaz vývozu (`ge = 0`)** (`planning_engine.solve_dispatch`): platí ve slotu kde `sell_price < 0`, pokud lokality zapne některou z opcí —