posun dovybiti tesnep red zapornou cenu
This commit is contained in:
@@ -9,6 +9,8 @@ from types import SimpleNamespace
|
||||
from services.planning_engine import (
|
||||
PlanningSlot,
|
||||
_dynamic_arb_floor_wh_series,
|
||||
_slots_until_buy_le_threshold,
|
||||
_soc_panel_min_wh_series,
|
||||
solve_dispatch,
|
||||
)
|
||||
|
||||
@@ -58,6 +60,48 @@ def _battery(
|
||||
)
|
||||
|
||||
|
||||
class SlotsUntilBuyExtremeTests(unittest.TestCase):
|
||||
def test_slots_until_first_extreme(self) -> None:
|
||||
base = datetime(2026, 4, 3, 0, 0, tzinfo=timezone.utc)
|
||||
slots: list[PlanningSlot] = []
|
||||
for i in range(10):
|
||||
slots.append(
|
||||
PlanningSlot(
|
||||
interval_start=base + timedelta(minutes=15 * i),
|
||||
buy_price=1.0,
|
||||
sell_price=1.0,
|
||||
pv_a_forecast_w=0,
|
||||
pv_b_forecast_w=0,
|
||||
load_baseline_w=500,
|
||||
ev1_connected=False,
|
||||
ev2_connected=False,
|
||||
)
|
||||
)
|
||||
slots[-1] = PlanningSlot(
|
||||
interval_start=slots[-1].interval_start,
|
||||
buy_price=-10.0,
|
||||
sell_price=0.0,
|
||||
pv_a_forecast_w=0,
|
||||
pv_b_forecast_w=0,
|
||||
load_baseline_w=500,
|
||||
ev1_connected=False,
|
||||
ev2_connected=False,
|
||||
)
|
||||
dist = _slots_until_buy_le_threshold(slots, -2.0)
|
||||
self.assertEqual(dist[0], 9)
|
||||
self.assertEqual(dist[8], 1)
|
||||
self.assertEqual(dist[9], 0)
|
||||
|
||||
def test_prewindow_clamps_relaxed_floor_until_close(self) -> None:
|
||||
sm = [5000.0] * 10
|
||||
dist = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
|
||||
panel = _soc_panel_min_wh_series(sm, dist, 10_000.0, 20_000.0, 2)
|
||||
self.assertEqual(panel[0], 20_000.0)
|
||||
self.assertEqual(panel[6], 20_000.0)
|
||||
self.assertEqual(panel[7], 5000.0)
|
||||
self.assertEqual(panel[9], 5000.0)
|
||||
|
||||
|
||||
class DynamicArbFloorTests(unittest.TestCase):
|
||||
def test_more_pv_ahead_lowers_floor(self) -> None:
|
||||
"""Čím víc FVE ve lookahead, tím nižší ekonomická podlaha v prvním slotu."""
|
||||
|
||||
Reference in New Issue
Block a user