Skip to content

Commit

Permalink
refactor!: moved model elements initialisation in the parent Simulati…
Browse files Browse the repository at this point in the history
…onModel class (#62)

BREAKING CHANGE: model classes are not specified in the following attributes of the SimulationModel subclasses: environment_class, population_class, input_class, output_class
  • Loading branch information
leo-desbureaux-tellae authored Aug 2, 2022
1 parent 1e11623 commit 0f2e49e
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 84 deletions.
37 changes: 26 additions & 11 deletions starling_sim/basemodel/simulation_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@
import numpy
import datetime

from starling_sim.basemodel.population.dict_population import DictPopulation
from starling_sim.basemodel.environment.environment import Environment
from starling_sim.basemodel.input.dynamic_input import DynamicInput
from starling_sim.basemodel.output.output_factory import OutputFactory
from starling_sim.basemodel.schedule.scheduler import Scheduler
from starling_sim.basemodel.trace.trace import trace_simulation_end
from starling_sim.utils.utils import import_gtfs_feed, get_git_revision_hash
from starling_sim.utils.constants import BASE_LEAVING_CODES
Expand Down Expand Up @@ -30,13 +35,22 @@ class SimulationModel:
#: Agent types of the model and their modes
modes = None

#: Model environment class
environment_class = Environment

#: Model population class
population_class = DictPopulation

#: Model dynamic input class
input_class = DynamicInput

#: Model output factory class
output_class = OutputFactory

def __init__(self, scenario):
"""
Initialisation of the simulation model with instances of its different elements
This constructor must be extended to instantiate the model elements
using the correct classes
:param scenario: SimulationScenario object
"""

Expand All @@ -55,22 +69,23 @@ def __init__(self, scenario):
# information to be completed for the specific models

# elements of the model
self.agentPopulation = None
self.environment = None
self.agentPopulation = self.population_class.__new__(self.population_class)
self.agentPopulation.__init__(self.agent_type_class.keys())
self.environment = self.environment_class.__new__(self.environment_class)
self.environment.__init__(scenario)

# inputs and outputs
self.dynamicInput = None
self.outputFactory = None
self.dynamicInput = self.input_class.__new__(self.input_class)
self.dynamicInput.__init__(self.agent_type_class)
self.outputFactory = self.output_class.__new__(self.output_class)
self.outputFactory.__init__()

# event manager
self.scheduler = None
self.scheduler = Scheduler()

# complete, unfiltered gtfs timetable, if relevant
self.gtfs = None

# TODO : data structure to store simulation information (e.g. demand)
# self.data = None

def setup(self):
"""
Sets the entries of the simulation model and prepares it for the simulation run.
Expand Down
6 changes: 0 additions & 6 deletions starling_sim/models/FF_VS/input.py

This file was deleted.

24 changes: 1 addition & 23 deletions starling_sim/models/FF_VS/model.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
from starling_sim.basemodel.simulation_model import SimulationModel
from starling_sim.basemodel.population.dict_population import DictPopulation
from starling_sim.basemodel.environment.environment import Environment
from starling_sim.models.FF_VS.input import Input
from starling_sim.models.FF_VS.output import Output
from starling_sim.basemodel.schedule.scheduler import Scheduler
from starling_sim.models.FF_VS.user import User
from starling_sim.basemodel.agent.vehicles.vehicle import Vehicle

Expand All @@ -21,22 +17,4 @@ class Model(SimulationModel):

modes = {"user": ["walk"], "vehicle": [None, "walk"]}

def __init__(self, scenario):
"""
Initialisation of the classes used by the free-floating model
:param scenario: SimulationScenario object
"""

super().__init__(scenario)

# elements of the model
self.agentPopulation = DictPopulation(self.agent_type_class.keys())
self.environment = Environment(self.scenario)

# inputs and outputs
self.dynamicInput = Input(self.agent_type_class)
self.outputFactory = Output()

# event manager
self.scheduler = Scheduler()
output_class = Output
24 changes: 2 additions & 22 deletions starling_sim/models/SB_VS/model.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
from starling_sim.basemodel.simulation_model import SimulationModel
from starling_sim.basemodel.population.dict_population import DictPopulation
from starling_sim.basemodel.environment.environment import Environment
from starling_sim.models.SB_VS.input import Input
from starling_sim.models.SB_VS.output import Output
from starling_sim.basemodel.schedule.scheduler import Scheduler
from starling_sim.models.SB_VS.user import User
from starling_sim.basemodel.agent.vehicles.station_based_vehicle import StationBasedVehicle
from starling_sim.basemodel.agent.stations.vehicle_sharing_station import VehicleSharingStation
Expand All @@ -26,22 +23,5 @@ class Model(SimulationModel):

modes = {"user": ["walk"], "vehicle": ["station"], "station": [None, "walk"]}

def __init__(self, scenario):
"""
Initialisation of the classes used by the station-based model
:param scenario: SimulationScenario object
"""

super().__init__(scenario)

# elements of the model
self.agentPopulation = DictPopulation(self.agent_type_class.keys())
self.environment = Environment(self.scenario)

# inputs and outputs
self.dynamicInput = Input(self.agent_type_class)
self.outputFactory = Output()

# event manager
self.scheduler = Scheduler()
input_class = Input
output_class = Output
24 changes: 2 additions & 22 deletions starling_sim/models/SB_VS_R/model.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
from starling_sim.basemodel.simulation_model import SimulationModel
from starling_sim.basemodel.population.dict_population import DictPopulation
from starling_sim.basemodel.environment.environment import Environment
from starling_sim.models.SB_VS_R.input import Input
from starling_sim.models.SB_VS_R.output import Output
from starling_sim.basemodel.schedule.scheduler import Scheduler
from starling_sim.models.SB_VS_R.operator import Operator
from starling_sim.models.SB_VS_R.repositioning_staff import RepositioningStaff
from starling_sim.models.SB_VS.user import User
Expand Down Expand Up @@ -35,22 +32,5 @@ class Model(SimulationModel):
"operator": {"staff": "staff", "fleet": "station"},
}

def __init__(self, scenario):
"""
Initialisation of the classes used by the station-based with repositioning model
:param scenario: SimulationScenario object
"""

super().__init__(scenario)

# elements of the model
self.agentPopulation = DictPopulation(self.agent_type_class.keys())
self.environment = Environment(self.scenario)

# inputs and outputs
self.dynamicInput = Input(self.agent_type_class)
self.outputFactory = Output()

# event manager
self.scheduler = Scheduler()
input_class = Input
output_class = Output

0 comments on commit 0f2e49e

Please sign in to comment.