v2 test: levný sell (<opp hodnota) posílá přebytek do auta, ne do sítě
Postřeh uživatele — pásma nízkého výkupu před zápornými okny: mechanismus měkkého cíle to už řeší (opp 1 Kč/kWh > sell 0.3 → auto vyhraje), test to dokládá: plná domácí baterka + 9 kW PV → ~17 kWh do auta, minimální export. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -273,6 +273,20 @@ class EvOpportunisticTests(unittest.TestCase):
|
||||
self.assertLess(delivered, 4000.0 + 200.0)
|
||||
self.assertLess(snap["objective_terms"]["ev_opp_wh"][0], 100.0)
|
||||
|
||||
def test_cheap_sell_prefers_car_over_grid(self) -> None:
|
||||
# sell 0.3 < opp 1.0, plná domácí baterka, velký PV přebytek
|
||||
# → přebytek do auta, ne za babku do sítě
|
||||
bat = _battery()
|
||||
slots = [_slot(_BASE, i, buy=3.0, sell=0.3, pv_a=9000, load=500, ev1=True) for i in range(16)]
|
||||
results, _, snap = _solve(
|
||||
slots, battery=bat, soc0=bat.soc_max_wh, # baterka plná
|
||||
ev_sessions=(self._session(needed=2000.0, headroom=25000.0), None),
|
||||
)
|
||||
delivered = sum((r.ev1_setpoint_w or 0) * 0.25 for r in results)
|
||||
exported = sum(-r.grid_setpoint_w * 0.25 for r in results if r.grid_setpoint_w < 0)
|
||||
self.assertGreater(delivered, 15000.0, "přebytek má téct do auta")
|
||||
self.assertLess(exported, delivered, "prodej za 0.3 nemá vyhrát nad autem")
|
||||
|
||||
def test_total_energy_capped_even_at_negative_buy(self) -> None:
|
||||
# fix latentního bugu: bez headroom (opp=0) nesmí buy<0 pumpovat nad needed
|
||||
slots = [_slot(_BASE, i, buy=-2.0, sell=-1.0, ev1=True, load=300) for i in range(16)]
|
||||
|
||||
Reference in New Issue
Block a user