LP first zjednoduseni
This commit is contained in:
@@ -104,24 +104,20 @@ Pro **home-01** při nabíjení 11:00–14:00 za ~0,7–0,9 Kč a výprodeji 19:
|
||||
|
||||
---
|
||||
|
||||
## 6. Implementace (2026-05) a backlog
|
||||
## 6. Implementace (LP-first přestavba, 2026-05)
|
||||
|
||||
### Hotovo (jednoduchá varianta před solve)
|
||||
### Hotovo
|
||||
|
||||
1. **`ems.fn_load_planning_slots_full`** (`R__063`): sloupce
|
||||
`charge_acquisition_buy_czk_kwh`, `charge_acquisition_cutoff_at`.
|
||||
2. **Vážený průměr `buy`** v `allow_charge` slotech **před** prvním `allow_discharge_export` (`cutoff`):
|
||||
`Σ(buy × per_slot_charge_wh) / Σ(per_slot_charge_wh)` — bez `future_sell` z odpolední FVE (jinak acquisition nafukovala večerní export).
|
||||
3. **`solve_dispatch`:** v exportních slotech (`allow_discharge_export`) přičíst k objective
|
||||
`+ ge_bat[t] × charge_acquisition × INTERVAL_H/1000` (náklad uložené energie), ponechat `−ge×sell`. Snapshot v `solver_params.inputs`.
|
||||
4. **FVE opportunity:** varianta **B** — lookahead `future_sell_opportunity`, ne jen `sell[t]` v odhadu PV Wh.
|
||||
1. **`ems.fn_load_planning_slots_full`** (`R__063`): grid **B** = nejlevnější sloty v AM/PM do Wh rozpočtu (bez `buy≤min+band` a lookahead gate na grid); **A** = PV jen pokud `sell ≥ future_sell_lookahead − degrad`. `charge_acquisition` z `allow_grid_charge` před 1. exportem.
|
||||
2. **`solve_dispatch` (AUTO):** objective `gi×buy − ge_pv×sell − ge_bat×sell + ge_bat×acquisition` (export bat. jen v `allow_discharge_export`). Odstraněn cross-slot guard `ge_pv ≥ surplus` / `bc=0` dle `export_refill_net`.
|
||||
3. **Guard FVE:** `ge_pv=0` jen při `sell < charge_acquisition − degrad` (ne `sell < buy` ve stejném slotu).
|
||||
4. **`solve_dispatch_two_pass`:** pass 1 → vážený `buy` z `bc`+`gi` v `allow_charge` → pass 2; volá `run_daily_plan` / `run_rolling_replan` v AUTO. Snapshot: `acquisition_pass1_czk_kwh`, `acquisition_pass2_czk_kwh`, `two_pass_enabled`.
|
||||
5. **Regrese:** `Home01RegressionTests` v `backend/tests/test_planning_dispatch_milp.py`; masky v `test_planning_charge_slot_selection.py`.
|
||||
|
||||
### Zbývá / vylepšit
|
||||
### Co dál neřešit ad-hoc
|
||||
|
||||
1. **Iterace po solve:** přepočítat acquisition z plánovaných `bc`+`gi` / `pv` místo odhadu z masek — viz [`docs/05-todo.md`](../05-todo.md).
|
||||
2. **Objective:** explicitní `ge_bat × (sell − acquisition − degrad)` vs současné `−ge×sell` + `+ge_bat×acquisition` (ekvivalentní jen pokud `ge_pv` v exportním slotu ≈ 0).
|
||||
3. **Masky:** více charge slotů ∝ `energy_to_fill / per_slot_wh` — viz [`planning.md`](planning.md).
|
||||
4. **Bilance / guardy:** zpřesnit, aby večerní export nebyl vázaný na falešný `gi×buy` v tomže slotu.
|
||||
- Další Python `if sell < buy` guardy — ekonomiku drží LP + acquisition + masky rozpočtu slotů.
|
||||
- Multi-period inventory model (větší projekt) — mimo tuto vlnu.
|
||||
|
||||
---
|
||||
|
||||
@@ -148,4 +144,4 @@ Očekávání: SoC před večerem **70–90 %** po levném pásmu; večer **expo
|
||||
|
||||
---
|
||||
|
||||
*Poslední aktualizace: 2026-05 — charge_acquisition před 1. exportem + LP `ge_bat` náklad; iterace po solve v TODO.*
|
||||
*Poslední aktualizace: 2026-05 — LP-first přestavba (masky B/A, two-pass acquisition, explicitní ge_pv/ge_bat objective). Po deployi: `solver_params.inputs.two_pass_enabled` na novém `planning_run`.*
|
||||
|
||||
Reference in New Issue
Block a user