Source code for lapis.controller

from cobald.controller.linear import LinearController
from cobald.controller.relative_supply import RelativeSupplyController
from cobald.interfaces import Pool
from usim import time


[docs]class SimulatedLinearController(LinearController): def __init__( self, target: Pool, low_utilisation=0.5, high_allocation=0.5, rate=1, interval=1 ): super(SimulatedLinearController, self).__init__( target, low_utilisation, high_allocation, rate, interval )
[docs] async def run(self): while True: self.regulate(interval=self.interval) await (time + self.interval)
[docs]class SimulatedRelativeSupplyController(RelativeSupplyController): def __init__( self, target: Pool, low_utilisation=0.5, high_allocation=0.5, low_scale=0.9, high_scale=1.1, interval=1, ): super(SimulatedRelativeSupplyController, self).__init__( target=target, low_utilisation=low_utilisation, high_allocation=high_allocation, low_scale=low_scale, high_scale=high_scale, interval=interval, )
[docs] async def run(self): while True: self.regulate(interval=self.interval) await (time + self.interval)
[docs]class SimulatedCostController(SimulatedLinearController): def __init__( self, target: Pool, low_utilisation=0.5, high_allocation=0.5, rate=1, interval=1 ): self.current_cost = 1 super(SimulatedCostController, self).__init__( target, low_utilisation, high_allocation, rate, interval ) def regulate(self, interval): allocation = 0 for drone in self.target.drones: allocation += drone.allocation if self.target.supply - allocation <= 1: if self.target.utilisation >= 0.8: self.target.demand = int(allocation + self.current_cost) self.current_cost += 1 else: self.target.demand = allocation if self.current_cost > 1: self.current_cost -= 1
# self.target.demand = allocation + self.current_cost # else: # if self.current_cost > 1: # self.current_cost -= 1 # self.target.demand = allocation + self.current_cost