docs: arbitráž — sell strana marginální cena vs strop exportu (proč baterie nedrží na špičku)
All checks were successful
CI and deploy / migration-check (push) Successful in 31s
CI and deploy / deploy (push) Has been skipped

Zrcadlo sekce 3 (buy: min(buy) != cena zásoby) na prodejní straně: baterie se
nevyprodá do jednoho slotu (strop 13.5 kW = 3.4 kWh/15min), rozloží se přes
více slotů s klesající cenou. Rozhodnutí drzet vs vybit = proti MARGINÁLNÍ
ceně (nejnizsi pouzity slot), ne spicce. Konkrétní příklad večer 2026-06-14
+ caveat terminal value za horizontem (jeden skalár, ne marginální).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dusan Vojacek
2026-06-14 11:46:42 +02:00
parent 87a4f47666
commit f726188ec9

View File

@@ -77,6 +77,51 @@ Použití `min(buy)` jako „acquisition cost“ pro večerní export:
--- ---
## 3b. Výprodejní strana: marginální cena, ne špička (proč baterie nedrží jen na nejdražší slot)
Zrcadlo sekce 3 na **prodejní** straně. Častá intuice: „baterie drží, protože večer
je jeden drahý slot (sell 2,76 Kč) — prodá se za něj“. **Ne.** Stejně jako se 64 kWh
**nenabije** v jedné čtvrthodině, tak se ani **nevyprodá** do jednoho slotu — strop
exportu (home-01 **13,5 kW**) pustí jen ~**3,4 kWh / 15 min**. Vybití celé baterie do
sítě tedy zabere **hodiny** a rozloží se přes **více** prodejních slotů s **klesající**
cenou.
**Klíčový princip — MILP je marginální:** účelová funkce `Σ (ge[t] × sell[t])` přes
**všechny** sloty s **per-slot stropem** `ge[t] ≤ max_export` znamená, že solver
prodává **nejdřív nejdražší sloty** a každou další kWh až za **nižší** dosažitelnou
cenu. Rozhodnutí **„držet baterii vs. vybít teď“** se tedy poměřuje proti
**MARGINÁLNÍ ceně** = nejnižší z **reálně využitých** prodejních slotů, **ne** proti
špičce. Baterie drží jen tolik, dokud i ta **marginální** vyvezená kWh (prodaná v tom
nejlevnějším z použitých oken) bije alternativu (krytí loadu / další držení); nad to
prodá / spotřebuje dřív.
**Konkrétní příklad (home-01, večer 2026-06-14, plán):** baterie nabitá za odpolední
**záporné** ceny (SoC ~100 %) se vyváží na **stropu 13,5 kW napříč 20:3023:00**, ne jen
do špičky 22:00:
| slot | sell Kč/kWh | export | pozn. |
|------|-------------|--------|-------|
| 20:30 | 2,21 | 13,5 kW | |
| 21:00 | 2,20 | 13,5 kW | marginální (nejnižší použitý) |
| 21:30 | 2,25 | 13,5 kW | |
| **22:00** | **2,76** | 13,5 kW | **špička — jen jeden slot** |
| 22:30 | 2,47 | 13,5 kW | |
| 23:00 | 2,32 | 13,5 kW | |
SoC klesne 92 → 32 % (~38 kWh) za **6** slotů. Do špičky 2,76 jde jen **jeden** slot;
marginální kWh se prodá za **~2,2**. Kdyby solver oceňoval **celou** baterii špičkou
2,76, **držel by víc**, než je optimální. Že vyváží napříč oknem = důkaz, že počítá
**marginálně se stropem**, ne naivně na špičku.
**Caveat — kde to marginální NENÍ:** platí jen pro sloty **uvnitř horizontu** (viditelná
prodejní okna). Energie zbylá **za horizontem** (`soc[T1]`) se ocení **jedním skalárem**
(`terminal_soc_value` = průměr buy prvních 24 h × faktor, pravidlo §16), **ne** pořádnou
marginální budoucí prodejní křivkou. Pro „dnešní večer v horizontu“ je to správně
marginální; zpřesnění terminal value (počasím/cenou vážené, „fáze 3e“) je
v `docs/06-open-questions.md` a `docs/04-modules/planning-extended-horizon.md`.
---
## 4. Co používat místo toho (směr návrhu) ## 4. Co používat místo toho (směr návrhu)
| Pojem | Význam | Poznámka | | Pojem | Význam | Poznámka |