Implement market decision logic for battery discharge based on market rates

This commit is contained in:
2026-09-22 15:56:40 +01:00
parent 4e37339534
commit c918ad6129
3 changed files with 27 additions and 0 deletions
+6
View File
@@ -23,4 +23,10 @@ def main():
market2_start = market2.get_start_time()
start_time = min(market_1_start, market2_start)
for item in market_1_start:
print(item)
battery.update(increment, None, market1)
if __name__ == "__main__":
main()
+12
View File
@@ -33,8 +33,20 @@ class BatteryModel:
self._total_profit = 0.0
def update(self, increment: datetime.timedelta, previous_state: "BatteryModel", market_data_increment: MarketDataIncrement):
self.market_decision(increment, previous_state, market_data_increment)
pass
def market_decision(self, increment: datetime.timedelta, previous_state: "BatteryModel", market_data_increment: MarketDataIncrement):
if self._battery_state == BatteryState.IDLE and self._current_charge > 0:
# Sell, I guess, to whoever offers more
for market_data_increment in market_data_increment.markets:
self._battery_state = BatteryState.DISCHARGING
self._current_charge_rate = self._max_discharge_rate
self._current_market_rate = market_data_increment.get_max_market_rate()
self._current_charge_value = self._current_charge_rate * self._current_charge
return
def handle_charge_or_discharge(self, increment: datetime.timedelta, previous_state: "BatteryModel"):
if self._battery_state != BatteryState.CHARGING:
total_charge_this_increment = self._current_charge_rate * (increment.total_seconds()/60.0)
+9
View File
@@ -38,3 +38,12 @@ class MarketDataIncrement:
def __init__(self, timestamp: datetime.datetime, markets: List[Tuple[datetime.datetime, float]]):
self.timestamp = timestamp
self.markets = markets
def get_max_market_rate(self):
rate = 0
highest = ()
for i in self.markets:
if i[1] > rate:
rate = i[1]
highest = i
return highest