-
Notifications
You must be signed in to change notification settings - Fork 28
Expand file tree
/
Copy pathRunFabiland.java
More file actions
68 lines (54 loc) · 3.37 KB
/
RunFabiland.java
File metadata and controls
68 lines (54 loc) · 3.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package run;
import de.tum.bgu.msm.SiloModel;
import de.tum.bgu.msm.container.DataContainer;
import de.tum.bgu.msm.container.ModelContainer;
import de.tum.bgu.msm.io.output.DefaultResultsMonitor;
import de.tum.bgu.msm.io.output.HouseholdSatisfactionMonitor;
import de.tum.bgu.msm.io.output.MultiFileResultsMonitor;
import de.tum.bgu.msm.io.output.ResultsMonitor;
import de.tum.bgu.msm.properties.Properties;
import de.tum.bgu.msm.utils.SiloUtil;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.matsim.core.config.Config;
import org.matsim.core.config.ConfigUtils;
import org.matsim.core.config.groups.RoutingConfigGroup;
import org.matsim.core.controler.OutputDirectoryHierarchy;
import java.util.Arrays;
public class RunFabiland {
private final static Logger logger = LogManager.getLogger(RunFabiland.class);
public static void main(String[] args) {
// yyyy This does not run out of the box. Presumably, it needs an argument. Could you please add a comment that explains to make this here run? Thanks ... kai, jun'23
// yyyyyy Also, there should be a regression test running this method. kai, jun'23
Properties properties = SiloUtil.siloInitialization(args[0]);
String[] matsimArgs = Arrays.copyOfRange( args, 1, args.length );
Config config = null;
// if (args.length > 1 && args[1] != null) {
config = ConfigUtils.loadConfig(matsimArgs);
// }
logger.info("Started SILO Fabiland sandbox model");
// The following is obviously just a dirty quickfix until access/egress is default in MATSim
if (properties.transportModel.includeAccessEgress) {
//// config.plansCalcRoute().setInsertingAccessEgressWalk(true); // in matsim-12
config.routing().setAccessEgressType(RoutingConfigGroup.AccessEgressType.accessEgressModeToLink); // in matsim-13-w37
}
// config.routing().setAccessEgressType( RoutingConfigGroup.AccessEgressType.none );
// yyyyyy Silo uses a re-implementation of a lot of matsim infrastructure, and that is outside injection. The more advanced access/egress types are not implemented there.
// kai, apr'26
config.controller().setOverwriteFileSetting( OutputDirectoryHierarchy.OverwriteFileSetting.overwriteExistingFiles );
// Somehow, some version matsim is starting again for the accessibility computation, and that wipes the directory after the main run.
// --> did not help
DataContainer dataContainer = DataBuilderFabiland.buildDataContainer(properties, config);
DataBuilderFabiland.readInput(properties, dataContainer);
ModelContainer modelContainer = ModelBuilderFabiland.getModelContainer(dataContainer, properties, config);
ResultsMonitor resultsMonitor = new DefaultResultsMonitor(dataContainer, properties);
MultiFileResultsMonitor multiFileResultsMonitor = new MultiFileResultsMonitor(dataContainer, properties);
HouseholdSatisfactionMonitor householdSatisfactionMonitor = new HouseholdSatisfactionMonitor(dataContainer, properties, modelContainer);
SiloModel model = new SiloModel(properties, dataContainer, modelContainer);
model.addResultMonitor(resultsMonitor);
model.addResultMonitor(multiFileResultsMonitor);
model.addResultMonitor(householdSatisfactionMonitor);
model.runModel();
logger.info("Finished SILO.");
}
}