Skip to content

Commit 678fbb0

Browse files
authored
chore: ensuring simulations are deterministic in tests (#282)
1 parent 60520f1 commit 678fbb0

3 files changed

Lines changed: 37 additions & 16 deletions

File tree

core/src/main/java/org/eqasim/core/scenario/RunInsertVehicles.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ static public void insertVehicles(Config config, Scenario scenario) {
2323
VehiclesFactory factory = vehicles.getFactory();
2424

2525
VehicleType vehicleType = VehicleUtils.createVehicleType(Id.create("defaultVehicleType", VehicleType.class));
26+
vehicleType.setNetworkMode("car");
2627
vehicles.addVehicleType(vehicleType);
2728
for (Person person : scenario.getPopulation().getPersons().values()) {
2829
Map<String, Id<Vehicle>> personVehicles = new HashMap<>();

core/src/test/java/org/eqasim/TestSimulationPipeline.java

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,11 @@
33
import java.io.File;
44
import java.io.IOException;
55
import java.net.URL;
6-
import java.util.Collection;
7-
import java.util.HashSet;
8-
import java.util.List;
9-
import java.util.Optional;
10-
import java.util.Set;
6+
import java.util.*;
117

128
import org.apache.commons.io.FileUtils;
9+
import org.apache.logging.log4j.LogManager;
10+
import org.apache.logging.log4j.Logger;
1311
import org.eqasim.core.analysis.run.RunLegAnalysis;
1412
import org.eqasim.core.analysis.run.RunPublicTransportLegAnalysis;
1513
import org.eqasim.core.analysis.run.RunTripAnalysis;
@@ -36,18 +34,13 @@
3634
import org.eqasim.core.simulation.vdf.utils.AdaptConfigForVDF;
3735
import org.eqasim.core.standalone_mode_choice.RunStandaloneModeChoice;
3836
import org.eqasim.core.standalone_mode_choice.StandaloneModeChoiceConfigurator;
39-
import org.eqasim.core.tools.ExportActivitiesToShapefile;
40-
import org.eqasim.core.tools.ExportNetworkRoutesToGeopackage;
41-
import org.eqasim.core.tools.ExportNetworkToShapefile;
42-
import org.eqasim.core.tools.ExportPopulationToCSV;
43-
import org.eqasim.core.tools.ExportTransitLinesToShapefile;
44-
import org.eqasim.core.tools.ExportTransitStopsToShapefile;
37+
import org.eqasim.core.tools.*;
4538
import org.junit.After;
4639
import org.junit.Before;
4740
import org.junit.Test;
4841
import org.matsim.api.core.v01.Scenario;
4942
import org.matsim.api.core.v01.TransportMode;
50-
import org.matsim.api.core.v01.population.Person;
43+
import org.matsim.api.core.v01.population.*;
5144
import org.matsim.contribs.discrete_mode_choice.model.DiscreteModeChoiceTrip;
5245
import org.matsim.contribs.discrete_mode_choice.model.mode_availability.ModeAvailability;
5346
import org.matsim.core.config.CommandLine;
@@ -57,6 +50,7 @@
5750
import org.matsim.core.controler.AbstractModule;
5851
import org.matsim.core.controler.Controler;
5952
import org.matsim.core.scenario.ScenarioUtils;
53+
6054
import org.matsim.core.utils.misc.CRCChecksum;
6155

6256
import com.google.inject.Inject;
@@ -73,16 +67,21 @@ public void setUp() throws IOException {
7367

7468
@After
7569
public void tearDown() throws IOException {
76-
FileUtils.deleteDirectory(new File("melun_test"));
70+
//FileUtils.deleteDirectory(new File("melun_test"));
7771
}
7872

7973
private void runMelunSimulation(String configPath, String outputPath) {
8074
runMelunSimulation(configPath, outputPath, null, null);
8175
}
8276

8377
private void runMelunSimulation(String configPath, String outputPath, String inputPlansFile, Integer lastIteration) {
84-
EqasimConfigurator eqasimConfigurator = new EqasimConfigurator();
8578
Config config = ConfigUtils.loadConfig(configPath);
79+
runMelunSimulation(config, outputPath, inputPlansFile, lastIteration);
80+
}
81+
82+
private void runMelunSimulation(Config config, String outputPath, String inputPlansFile, Integer lastIteration) {
83+
EqasimConfigurator eqasimConfigurator = new EqasimConfigurator();
84+
8685
eqasimConfigurator.updateConfig(config);
8786
((ControllerConfigGroup) config.getModules().get(ControllerConfigGroup.GROUP_NAME)).setOutputDirectory(outputPath);
8887
if(inputPlansFile != null) {
@@ -424,11 +423,32 @@ public void testPipeline() throws Exception {
424423
runCutterV2();
425424
}
426425

426+
@Test
427+
public void testBaseDeterminism() throws Exception {
428+
Logger logger = LogManager.getLogger(TestSimulationPipeline.class);
429+
Config config = ConfigUtils.loadConfig("melun_test/input/config.xml");
430+
runMelunSimulation(config, "melun_test/output_determinism_1", null, 2);
431+
432+
config = ConfigUtils.loadConfig("melun_test/input/config.xml");
433+
runMelunSimulation(config, "melun_test/output_determinism_2", null, 2 );
434+
435+
for(String comparedFile: new String[]{"output_plans.xml.gz"}) {
436+
long firstCrc = CRCChecksum.getCRCFromFile("melun_test/output_determinism_1/" + comparedFile);
437+
long secondCrc = CRCChecksum.getCRCFromFile("melun_test/output_determinism_2/"+comparedFile);
438+
assert firstCrc == secondCrc;
439+
}
440+
}
441+
427442
public void runPopulationRouting() throws CommandLine.ConfigurationException, IOException, InterruptedException {
428443
RunPopulationRouting.main(new String[] {
429444
"--config-path", "melun_test/input/config.xml",
430-
"--output-path", "melun_test/output/routed_population.xml.gz"
445+
"--output-path", "melun_test/output/routed_population.xml"
446+
});
447+
RunPopulationRouting.main(new String[] {
448+
"--config-path", "melun_test/input/config.xml",
449+
"--output-path", "melun_test/output/routed_population_again.xml"
431450
});
451+
assert CRCChecksum.getCRCFromFile("melun_test/output/routed_population.xml") == CRCChecksum.getCRCFromFile("melun_test/output/routed_population_again.xml");
432452
}
433453

434454
public void runStandaloneModeChoice() throws CommandLine.ConfigurationException, IOException, InterruptedException {

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
<properties>
2323
<maven.compiler.source>21</maven.compiler.source>
2424
<maven.compiler.target>21</maven.compiler.target>
25-
<matsim.version>2025.0-PR3483</matsim.version>
25+
<matsim.version>2025.0-PR3568</matsim.version>
2626
</properties>
2727

2828
<distributionManagement>

0 commit comments

Comments
 (0)