diff --git a/src/gsy_e/models/area/event_dispatcher.py b/src/gsy_e/models/area/event_dispatcher.py index 5867ecb531..7a3df79e68 100644 --- a/src/gsy_e/models/area/event_dispatcher.py +++ b/src/gsy_e/models/area/event_dispatcher.py @@ -21,7 +21,7 @@ from gsy_framework.constants_limits import ConstSettings from gsy_framework.enums import AvailableMarketTypes from gsy_framework.enums import SpotMarketTypeEnum -from numpy.random import random +import random from pendulum import DateTime from gsy_e.events.event_structures import MarketEvent, AreaEvent @@ -140,7 +140,7 @@ def _broadcast_notification_to_area_and_child_agents( if not self.area.events.is_connected: return - for child in sorted(self.area.children, key=lambda _: random()): + for child in sorted(self.area.children, random.sample(self.children, len(self.children)): if not child.children: continue self._broadcast_notification_to_single_agent( @@ -175,7 +175,7 @@ def broadcast_notification( return # Broadcast to children in random order to ensure fairness - for child in sorted(self.area.children, key=lambda _: random()): + for child in sorted(self.area.children, random.sample(self.children, len(self.children)): child.dispatcher.event_listener(event_type, **kwargs) # TODO: Enable the following block once GSYE-340 is implemented diff --git a/src/gsy_e/models/area/redis_dispatcher/area_event_dispatcher.py b/src/gsy_e/models/area/redis_dispatcher/area_event_dispatcher.py index 4d8918ccfb..a5a1612b83 100644 --- a/src/gsy_e/models/area/redis_dispatcher/area_event_dispatcher.py +++ b/src/gsy_e/models/area/redis_dispatcher/area_event_dispatcher.py @@ -31,7 +31,7 @@ def publish_area_event(self, area_uuid, event_type: AreaEvent, **kwargs): self.redis.publish(dispatch_chanel, json.dumps(send_data)) def broadcast_event_redis(self, event_type: AreaEvent, **kwargs): - for child in sorted(self.area.children, key=lambda _: random()): + for child in sorted(self.area.children, random.sample(self.children, len(self.children)): self.publish_area_event(child.uuid, event_type, **kwargs) self.redis.wait() self.root_dispatcher.market_event_dispatcher.wait_for_futures() @@ -44,7 +44,7 @@ def broadcast_event_redis(self, event_type: AreaEvent, **kwargs): if not self.area.events.is_connected: break - for area_name in sorted(agents, key=lambda _: random()): + for area_name in sorted(agents, random.sample(self.children, len(self.children)): agents[area_name].event_listener(event_type, **kwargs) self.root_dispatcher.market_notify_event_dispatcher.wait_for_futures() diff --git a/src/gsy_e/models/area/redis_dispatcher/market_event_dispatcher.py b/src/gsy_e/models/area/redis_dispatcher/market_event_dispatcher.py index 5409ff1c57..f883c7e841 100644 --- a/src/gsy_e/models/area/redis_dispatcher/market_event_dispatcher.py +++ b/src/gsy_e/models/area/redis_dispatcher/market_event_dispatcher.py @@ -64,7 +64,7 @@ def publish_event(self, area_uuid, event_type: MarketEvent, **kwargs): self.redis.publish(dispatch_channel, json.dumps(send_data)) def broadcast_event_redis(self, event_type: MarketEvent, **kwargs): - for child in sorted(self.area.children, key=lambda _: random()): + for child in sorted(self.area.children, random.sample(self.children, len(self.children)): self.publish_event(child.uuid, event_type, **kwargs) self.child_response_events[event_type.value].wait() self.child_response_events[event_type.value].clear() @@ -76,7 +76,7 @@ def broadcast_event_redis(self, event_type: MarketEvent, **kwargs): if not self.area.events.is_connected: break - for area_name in sorted(agents, key=lambda _: random()): + for area_name in sorted(agents, random.sample(self.children, len(self.children)): agents[area_name].event_listener(event_type, **kwargs) def publish_response(self, event_type): diff --git a/src/gsy_e/models/market/__init__.py b/src/gsy_e/models/market/__init__.py index 5251b1ad41..b04e47eafa 100644 --- a/src/gsy_e/models/market/__init__.py +++ b/src/gsy_e/models/market/__init__.py @@ -26,7 +26,7 @@ from gsy_framework.constants_limits import ConstSettings, GlobalConfig from gsy_framework.data_classes import Offer, Trade, Bid from gsy_framework.enums import SpotMarketTypeEnum -from numpy.random import random +import random from pendulum import DateTime, duration from gsy_e.constants import FLOATING_POINT_TOLERANCE, DATE_TIME_FORMAT diff --git a/src/gsy_e/models/strategy/load_hours.py b/src/gsy_e/models/strategy/load_hours.py index b37881c886..5038da8312 100644 --- a/src/gsy_e/models/strategy/load_hours.py +++ b/src/gsy_e/models/strategy/load_hours.py @@ -27,7 +27,7 @@ limit_float_precision, find_object_of_same_weekday_and_time, is_time_slot_in_simulation_duration) from gsy_framework.validators.load_validator import LoadValidator -from numpy import random +import random from pendulum import duration from gsy_e import constants diff --git a/src/gsy_e/models/strategy/market_agents/balancing_agent.py b/src/gsy_e/models/strategy/market_agents/balancing_agent.py index 150ef7a8ef..3d842a7678 100644 --- a/src/gsy_e/models/strategy/market_agents/balancing_agent.py +++ b/src/gsy_e/models/strategy/market_agents/balancing_agent.py @@ -17,7 +17,7 @@ """ from gsy_framework.constants_limits import ConstSettings from gsy_framework.data_classes import TraderDetails -from numpy.random import random +import random from gsy_e.constants import FLOATING_POINT_TOLERANCE from gsy_e.models.strategy.market_agents.one_sided_agent import OneSidedAgent @@ -123,12 +123,12 @@ def _balancing_trade(self, offer, target_energy): return trade def event_balancing_trade(self, *, market_id, trade, offer=None): - for engine in sorted(self.engines, key=lambda _: random()): + for engine in random.sample(self.engines, len(self.engines)): engine.event_offer_traded(trade=trade) def event_balancing_offer_split(self, *, market_id, original_offer, accepted_offer, residual_offer): - for engine in sorted(self.engines, key=lambda _: random()): + for engine in random.sample(self.engines, len(self.engines)): engine.event_offer_split(market_id=market_id, original_offer=original_offer, accepted_offer=accepted_offer, diff --git a/src/gsy_e/models/strategy/market_agents/market_agent.py b/src/gsy_e/models/strategy/market_agents/market_agent.py index 3d9cebaa6c..6c3b984326 100644 --- a/src/gsy_e/models/strategy/market_agents/market_agent.py +++ b/src/gsy_e/models/strategy/market_agents/market_agent.py @@ -18,7 +18,7 @@ from typing import Optional, TYPE_CHECKING from gsy_framework.constants_limits import ConstSettings -from numpy.random import random +import random from gsy_e.constants import TIME_FORMAT from gsy_e.models.strategy import BaseStrategy, _TradeLookerUpper @@ -74,7 +74,7 @@ def area_reconfigure_event(self, *args, **kwargs): min_offer_age = kwargs["min_offer_age"] self._validate_constructor_arguments(min_offer_age) self.min_offer_age = min_offer_age - for engine in sorted(self.engines, key=lambda _: random()): + for engine in random.sample(self.engines, len(self.engines)): engine.min_offer_age = min_offer_age @property diff --git a/src/gsy_e/models/strategy/market_agents/one_sided_agent.py b/src/gsy_e/models/strategy/market_agents/one_sided_agent.py index 6e5a131684..5ade1df1f0 100644 --- a/src/gsy_e/models/strategy/market_agents/one_sided_agent.py +++ b/src/gsy_e/models/strategy/market_agents/one_sided_agent.py @@ -17,7 +17,7 @@ """ from typing import Optional, TYPE_CHECKING -from numpy.random import random +import random from gsy_e.models.market import MarketBase from gsy_e.models.strategy.market_agents.market_agent import MarketAgent @@ -57,7 +57,7 @@ def get_market_from_market_id(self, market_id: str) -> Optional[MarketBase]: def event_tick(self): area = self.owner - for engine in sorted(self.engines, key=lambda _: random()): + for engine in random.sample(self.engines, len(self.engines)): engine.tick(area=area) # pylint: disable=unused-argument @@ -67,17 +67,17 @@ def event_offer(self, *, market_id: str, offer: "Offer"): # pylint: disable=unused-argument def event_offer_traded(self, *, market_id: str, trade: "Trade"): - for engine in sorted(self.engines, key=lambda _: random()): + for engine in random.sample(self.engines, len(self.engines)): engine.event_offer_traded(trade=trade) # pylint: disable=unused-argument def event_offer_deleted(self, *, market_id: str, offer: "Offer"): - for engine in sorted(self.engines, key=lambda _: random()): + for engine in random.sample(self.engines, len(self.engines)): engine.event_offer_deleted(offer=offer) def event_offer_split(self, *, market_id: str, original_offer: "Offer", accepted_offer: "Offer", residual_offer: "Offer"): - for engine in sorted(self.engines, key=lambda _: random()): + for engine in random.sample(self.engines, len(self.engines)): engine.event_offer_split(market_id=market_id, original_offer=original_offer, accepted_offer=accepted_offer, diff --git a/src/gsy_e/models/strategy/market_agents/two_sided_agent.py b/src/gsy_e/models/strategy/market_agents/two_sided_agent.py index 65617eb5ea..d5fce410d4 100644 --- a/src/gsy_e/models/strategy/market_agents/two_sided_agent.py +++ b/src/gsy_e/models/strategy/market_agents/two_sided_agent.py @@ -17,7 +17,7 @@ """ from typing import TYPE_CHECKING from gsy_framework.constants_limits import ConstSettings -from numpy.random import random +import random from gsy_e.models.strategy.market_agents.one_sided_agent import OneSidedAgent from gsy_e.models.strategy.market_agents.two_sided_engine import TwoSidedEngine @@ -62,17 +62,17 @@ def event_bid(self, *, market_id: str, bid: "Bid"): # pylint: disable=unused-argument def event_bid_traded(self, *, market_id: str, bid_trade: "Trade"): - for engine in sorted(self.engines, key=lambda _: random()): + for engine in random.sample(self.engines, len(self.engines)): engine.event_bid_traded(bid_trade=bid_trade) # pylint: disable=unused-argument def event_bid_deleted(self, *, market_id: str, bid: "Bid"): - for engine in sorted(self.engines, key=lambda _: random()): + for engine in random.sample(self.engines, len(self.engines)): engine.event_bid_deleted(bid=bid) def event_bid_split(self, *, market_id: str, original_bid: "Bid", accepted_bid: "Bid", residual_bid: "Bid"): - for engine in sorted(self.engines, key=lambda _: random()): + for engine in random.sample(self.engines, len(self.engines)): engine.event_bid_split(market_id=market_id, original_bid=original_bid, accepted_bid=accepted_bid, diff --git a/src/gsy_e/models/strategy/smart_meter.py b/src/gsy_e/models/strategy/smart_meter.py index 7033de905f..07d91adc1d 100644 --- a/src/gsy_e/models/strategy/smart_meter.py +++ b/src/gsy_e/models/strategy/smart_meter.py @@ -23,7 +23,7 @@ from gsy_framework.read_user_profile import InputProfileTypes, read_arbitrary_profile from gsy_framework.utils import find_object_of_same_weekday_and_time, limit_float_precision from gsy_framework.validators.smart_meter_validator import SmartMeterValidator -from numpy import random +import random from pendulum import duration from gsy_e import constants