|
MATSIM
|
Packages | |
| package | corelisteners |
| package | events |
| package | listener |
Classes | |
| class | AbstractController |
| class | AbstractModule |
| interface | AllowsConfiguration |
| class | Controler |
| class | ControlerDefaults |
| class | ControlerDefaultsModule |
| interface | ControlerI |
| interface | ControlerListenerManager |
| class | ControlerListenerManagerImpl |
| class | ControlerUtils |
| interface | Controller |
| class | ControllerUtils |
| class | DefaultPrepareForSimModule |
| class | ExplodedConfigModule |
| class | Injector |
| interface | IterationCounter |
| class | MatsimRuntimeModifications |
| interface | MatsimServices |
| class | MatsimServicesImpl |
| class | NewControler |
| class | NewControlerModule |
| class | OutputDirectoryHierarchy |
| class | OutputDirectoryLogging |
| interface | PersonPrepareForSimAlgorithm |
| interface | PrepareForMobsim |
| class | PrepareForMobsimImpl |
| interface | PrepareForSim |
| class | PrepareForSimImpl |
| class | PrepareForSimUtils |
| class | ReplayEvents |
| class | TerminateAtFixedIterationNumber |
| interface | TerminationCriterion |
| class | XY2LinksForFacilities |
The Controler is responsible for complete simulation runs, including the initialization of all required data, running the iterations and the replanning, analyses, etc.
The Controler has three main parts:
These three parts are repeated in a loop and build the iterations. By default, Scoring and Replanning refers to plans, but it could as well be done for facilities, traffic lights, etc.
The Controler offers several extension points, where additional functionality can be plugged in. These extension points are realized with Events and Listeners: Classes can implement one or more Listener Interfaces and can be registered with the Controler with addControlerListener(). The Controler sends Controler Events at the corresponding points during the run to the registered Listeners, at which point the Listeners can execute their own code.
Currently, the following Events (and corresponding Listeners) are available:
[The iteration loop of the Controler]
+-----------+ +----------------+ +-----------+ +------------+
|Startup (1)|-->(2)--->(3)-->|Execution/MobSim|-->(4)-->|Scoring (5)|-->(6)--+-->|Shutdown (8)|
+-----------+ ^ +----------------+ +-----------+ | +------------+
| v
\ +--------------+ /
---------------<---|Replanning (7)|<----------(2)<---
+--------------+
All Events are issued when org.matsim.core.controler.Controler#run() is called. When the Startup-Event is issued, the configuration as well as other data (plans, network, ...) are already loaded and initialized.
If you plan to write your own ControlerListener to provide additional functionality to MATSim, use the following class as a starting point for integrating your ControlerListener into the Controler:
import org.matsim.controler.Controler; import org.matsim.myfunctionality.MyFunctionality;
class MyClass {
public static void main(final String[] args) {
Controler controler = new Controler(args);
controler.addControlerListener(new MyFunctionality());
controler.run();
}
}
If your additional functionality requires additional parameters in the configuration file, you can provide a custom Config-Group and load it in the constructor of your ControlerListener. When the configuration file will be parsed later, your config-group gets loaded with the settings from the file, and you can later on access the values.
class MyFunctionality implements StartupListener {
final MyConfigGroup settings = new MyConfigGroup(); public MyFunctionality(final Controler controler) {
controler.getConfig().addModule("my_functionality", this.settings);
} public void notifyStartup(final StartupEvent event) {
int value = this.settings.getMyValue();
}
}
1.8.13