Skip to content

Commit

Permalink
Merge pull request #121 from msmobility/mito_Germany_carlos
Browse files Browse the repository at this point in the history
Mito germany carlos
  • Loading branch information
nkuehnel authored May 10, 2021
2 parents 751c025 + f0e913e commit 562fcbf
Show file tree
Hide file tree
Showing 26 changed files with 2,485 additions and 192 deletions.
125 changes: 125 additions & 0 deletions src/main/java/de/tum/bgu/msm/MitoModelGermany.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
package de.tum.bgu.msm;

import de.tum.bgu.msm.data.DataSet;
import de.tum.bgu.msm.data.travelTimes.SkimTravelTimes;
import de.tum.bgu.msm.io.input.readers.*;
import de.tum.bgu.msm.resources.Properties;
import de.tum.bgu.msm.resources.Resources;
import de.tum.bgu.msm.util.ImplementationConfig;
import de.tum.bgu.msm.util.MitoUtil;
import org.apache.log4j.Logger;

import java.util.Random;

/**
* Implements the Microsimulation Transport Orchestrator (MITO)
*
* @author Rolf Moeckel
* Created on Sep 18, 2016 in Munich, Germany
* <p>
* To run MITO, the following data need either to be passed in from another program or
* need to be read from files and passed in (using method initializeStandAlone):
* - zones
* - autoTravelTimes
* - transitTravelTimes
* - timoHouseholds
* - retailEmplByZone
* - officeEmplByZone
* - otherEmplByZone
* - totalEmplByZone
* - sizeOfZonesInAcre
*/
public final class MitoModelGermany {

private static final Logger logger = Logger.getLogger(MitoModelGermany.class);
private final String scenarioName;

private DataSet dataSet;

private MitoModelGermany(DataSet dataSet, String scenarioName) {
this.dataSet = dataSet;
this.scenarioName = scenarioName;
MitoUtil.initializeRandomNumber();
}

public static MitoModelGermany standAloneModel(String propertiesFile, ImplementationConfig config) {
logger.info(" Creating standalone version of MITO ");
Resources.initializeResources(propertiesFile);
MitoModelGermany model = new MitoModelGermany(new DataSet(), Resources.instance.getString(Properties.SCENARIO_NAME));
model.readStandAlone(config);
return model;
}

public static MitoModelGermany initializeModelFromSilo(String propertiesFile, DataSet dataSet, String scenarioName) {
logger.info(" Initializing MITO from SILO");
Resources.initializeResources(propertiesFile);
MitoModelGermany model = new MitoModelGermany(dataSet, scenarioName);
new OmxSkimsReader(dataSet).readOnlyTransitTravelTimes();
new OmxSkimsReader(dataSet).readSkimDistancesNMT();
new OmxSkimsReader(dataSet).readSkimDistancesAuto();
model.readAdditionalData();
return model;
}

public void run() {
long startTime = System.currentTimeMillis();
logger.info("Started the Microsimulation Transport Orchestrator (MITO)");

TravelDemandGeneratorGermany ttd = new TravelDemandGeneratorGermany.Builder(dataSet).build();
ttd.generateTravelDemand(scenarioName);
printOutline(startTime);
}

private void readStandAlone(ImplementationConfig config) {
dataSet.setYear(Resources.instance.getInt(Properties.SCENARIO_YEAR));
new ZonesReader(dataSet).read();
if (Resources.instance.getBoolean(Properties.REMOVE_TRIPS_AT_BORDER)) {
new BorderDampersReader(dataSet).read();
}
//new JobReader(dataSet, config.getJobTypeFactory()).read();
new SchoolsReader(dataSet).read();
new HouseholdsReaderGermany(dataSet).read();
//new HouseholdsCoordReader(dataSet).read();
//new PersonsReader(dataSet).read();
//the class called Synthetic population reader: could it be renamed to PersonJobReader?
new SyntheticPopulationReaderGermany(dataSet, config.getJobTypeFactory()).read();
dataSet.setTravelTimes(new SkimTravelTimes());
new OmxSkimsReader(dataSet).read();
readAdditionalData();
}

private void readAdditionalData() {
new TripAttractionRatesReader(dataSet).read();
new ModeChoiceInputReader(dataSet).read();
new EconomicStatusReader(dataSet).read();
new TimeOfDayDistributionsReader(dataSet).read();
new CalibrationDataReader(dataSet).read();
new CalibrationRegionMapReader(dataSet).read();

}

private void printOutline(long startTime) {
String trips = MitoUtil.customFormat(" " + "###,###", dataSet.getTrips().size());
logger.info("A total of " + trips.trim() + " microscopic trips were generated");
logger.info("Completed the Microsimulation Transport Orchestrator (MITO)");
float endTime = MitoUtil.rounder(((System.currentTimeMillis() - startTime) / 60000.f), 1);
int hours = (int) (endTime / 60);
int min = (int) (endTime - 60 * hours);
logger.info("Runtime: " + hours + " hours and " + min + " minutes.");
}

public DataSet getData() {
return dataSet;
}

public String getScenarioName() {
return scenarioName;
}

public void setRandomNumberGenerator(Random random) {
MitoUtil.initializeRandomNumber(random);
}



}
Loading

0 comments on commit 562fcbf

Please sign in to comment.