Skip to content

Commit 83a29ad

Browse files
committed
ensure backwards compatibility with previous drt config design
1 parent 52fdd8c commit 83a29ad

File tree

5 files changed

+174
-22
lines changed

5 files changed

+174
-22
lines changed

contribs/drt/src/main/java/org/matsim/contrib/drt/run/DrtConfigGroup.java

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,15 @@
1919

2020
package org.matsim.contrib.drt.run;
2121

22-
import static org.matsim.core.config.groups.QSimConfigGroup.EndtimeInterpretation;
23-
24-
import java.util.Collection;
25-
import java.util.Optional;
26-
27-
import javax.annotation.Nullable;
28-
22+
import com.google.common.base.Preconditions;
23+
import com.google.common.base.Verify;
24+
import jakarta.validation.constraints.NotBlank;
25+
import jakarta.validation.constraints.NotNull;
26+
import jakarta.validation.constraints.Positive;
2927
import org.apache.logging.log4j.LogManager;
3028
import org.apache.logging.log4j.Logger;
31-
import org.checkerframework.checker.units.qual.C;
3229
import org.matsim.api.core.v01.TransportMode;
30+
import org.matsim.contrib.common.util.ReflectiveConfigGroupWithConfigurableParameterSets;
3331
import org.matsim.contrib.drt.analysis.zonal.DrtZoneSystemParams;
3432
import org.matsim.contrib.drt.estimator.DrtEstimatorParams;
3533
import org.matsim.contrib.drt.fare.DrtFareParams;
@@ -44,17 +42,15 @@
4442
import org.matsim.contrib.drt.speedup.DrtSpeedUpParams;
4543
import org.matsim.contrib.dvrp.router.DvrpModeRoutingNetworkModule;
4644
import org.matsim.contrib.dvrp.run.Modal;
47-
import org.matsim.contrib.common.util.ReflectiveConfigGroupWithConfigurableParameterSets;
4845
import org.matsim.core.config.Config;
49-
import org.matsim.core.config.groups.ScoringConfigGroup;
5046
import org.matsim.core.config.groups.RoutingConfigGroup;
47+
import org.matsim.core.config.groups.ScoringConfigGroup;
5148

52-
import com.google.common.base.Preconditions;
53-
import com.google.common.base.Verify;
49+
import javax.annotation.Nullable;
50+
import java.util.Collection;
51+
import java.util.Optional;
5452

55-
import jakarta.validation.constraints.NotBlank;
56-
import jakarta.validation.constraints.NotNull;
57-
import jakarta.validation.constraints.Positive;
53+
import static org.matsim.core.config.groups.QSimConfigGroup.EndtimeInterpretation;
5854

5955
public class DrtConfigGroup extends ReflectiveConfigGroupWithConfigurableParameterSets implements Modal {
6056
private static final Logger log = LogManager.getLogger(DrtConfigGroup.class);
@@ -238,6 +234,27 @@ private void initSingletonParameterSets() {
238234

239235
}
240236

237+
/**
238+
* for backwards compatibility with old drt config groups
239+
*/
240+
public void handleAddUnknownParam(final String paramName, final String value) {
241+
switch (paramName) {
242+
case "maxWaitTime":
243+
case "maxTravelTimeAlpha":
244+
case "maxTravelTimeBeta":
245+
case "maxAbsoluteDetour":
246+
case "maxDetourAlpha":
247+
case "maxDetourBeta":
248+
case "maxAllowedPickupDelay":
249+
case "rejectRequestIfMaxWaitOrTravelTimeViolated":
250+
case "maxWalkDistance":
251+
getDrtOptimizationConstraintsParam().addParam(paramName, value);
252+
break;
253+
default:
254+
super.handleAddUnknownParam(paramName, value);
255+
}
256+
}
257+
241258
@Override
242259
protected void checkConsistency(Config config) {
243260
super.checkConsistency(config);

contribs/drt/src/test/java/org/matsim/contrib/drt/run/examples/RunDrtExampleIT.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,7 @@ void testRunDrtWithPrebooking() {
393393
* rejectionRate, rejections, waitAverage, inVehicleTravelTimeMean, & totalTravelTimeMean
394394
*/
395395

396-
private void verifyDrtCustomerStatsCloseToExpectedStats(String outputDirectory, Stats expectedStats) {
396+
static void verifyDrtCustomerStatsCloseToExpectedStats(String outputDirectory, Stats expectedStats) {
397397

398398
String filename = outputDirectory + "/drt_customer_stats_drt.csv";
399399

@@ -424,7 +424,7 @@ private void verifyDrtCustomerStatsCloseToExpectedStats(String outputDirectory,
424424
assertThat(actualStats).usingRecursiveComparison().isEqualTo(expectedStats);
425425
}
426426

427-
private static class Stats {
427+
static class Stats {
428428
private final double rejectionRate;
429429
private final double rejections;
430430
private final double waitAverage;
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package org.matsim.contrib.drt.run.examples;
2+
3+
import org.junit.jupiter.api.Test;
4+
import org.junit.jupiter.api.extension.RegisterExtension;
5+
import org.matsim.api.core.v01.Id;
6+
import org.matsim.contrib.common.zones.systems.grid.square.SquareGridZoneSystemParams;
7+
import org.matsim.contrib.drt.run.MultiModeDrtConfigGroup;
8+
import org.matsim.contrib.dvrp.run.DvrpConfigGroup;
9+
import org.matsim.contrib.zone.skims.DvrpTravelTimeMatrixParams;
10+
import org.matsim.core.config.Config;
11+
import org.matsim.core.config.ConfigUtils;
12+
import org.matsim.core.controler.OutputDirectoryHierarchy;
13+
import org.matsim.core.utils.io.IOUtils;
14+
import org.matsim.examples.ExamplesUtils;
15+
import org.matsim.testcases.MatsimTestUtils;
16+
import org.matsim.vis.otfvis.OTFVisConfigGroup;
17+
18+
import java.net.URL;
19+
20+
/**
21+
*
22+
* Tests the older drt config version where optimization constraints where not stored as separate parameters
23+
* @author nkuehnel / MOIA
24+
*/
25+
public class RunOldDrtConfigCompatibilityIT {
26+
27+
@RegisterExtension
28+
private MatsimTestUtils utils = new MatsimTestUtils();
29+
30+
@Test
31+
void testRunDrtExampleWithNoRejections_ExtensiveSearch() {
32+
Id.resetCaches();
33+
34+
DvrpConfigGroup dvrpConfigGroup = new DvrpConfigGroup();
35+
DvrpTravelTimeMatrixParams matrixParams = dvrpConfigGroup.getTravelTimeMatrixParams();
36+
matrixParams.addParameterSet(matrixParams.createParameterSet(SquareGridZoneSystemParams.SET_NAME));
37+
38+
URL configUrl = IOUtils.extendUrl(ExamplesUtils.getTestScenarioURL("mielec"), "mielec_drt_config_v1.xml");
39+
Config config = ConfigUtils.loadConfig(configUrl, new MultiModeDrtConfigGroup(), dvrpConfigGroup,
40+
new OTFVisConfigGroup());
41+
42+
for (var drtCfg : MultiModeDrtConfigGroup.get(config).getModalElements()) {
43+
//disable rejections
44+
drtCfg.getDrtOptimizationConstraintsParam().rejectRequestIfMaxWaitOrTravelTimeViolated = false;
45+
}
46+
47+
config.controller().setOverwriteFileSetting(OutputDirectoryHierarchy.OverwriteFileSetting.deleteDirectoryIfExists);
48+
config.controller().setOutputDirectory(utils.getOutputDirectory());
49+
RunDrtExample.run(config, false);
50+
51+
var expectedStats = RunDrtExampleIT.Stats.newBuilder()
52+
.rejectionRate(0.0)
53+
.rejections(0)
54+
.waitAverage(297.19)
55+
.inVehicleTravelTimeMean(386.78)
56+
.totalTravelTimeMean(683.97)
57+
.build();
58+
59+
RunDrtExampleIT.verifyDrtCustomerStatsCloseToExpectedStats(utils.getOutputDirectory(), expectedStats);
60+
}
61+
}

contribs/drt/src/test/java/org/matsim/contrib/drt/teleportation/DrtTeleportationTest.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.matsim.contrib.drt.fare.DrtFareParams;
1313
import org.matsim.contrib.drt.run.DrtConfigGroup;
1414
import org.matsim.contrib.drt.run.DrtControlerCreator;
15+
import org.matsim.contrib.drt.run.DrtOptimizationConstraintsParams;
1516
import org.matsim.contrib.drt.run.MultiModeDrtConfigGroup;
1617
import org.matsim.contrib.dvrp.run.DvrpConfigGroup;
1718
import org.matsim.core.config.Config;
@@ -45,9 +46,10 @@ void testTeleportationEngine() throws IOException {
4546

4647
Controler controler = DrtControlerCreator.createControler(config, false);
4748
DrtConfigGroup drtConfigGroup = DrtConfigGroup.getSingleModeDrtConfig(config);
48-
drtConfigGroup.maxTravelTimeAlpha = 1.2;
49-
drtConfigGroup.maxTravelTimeBeta = 600;
50-
drtConfigGroup.maxWaitTime = 300;
49+
DrtOptimizationConstraintsParams constraintsParam = drtConfigGroup.getDrtOptimizationConstraintsParam();
50+
constraintsParam.maxTravelTimeAlpha = 1.2;
51+
constraintsParam.maxTravelTimeBeta = 600;
52+
constraintsParam.maxWaitTime = 300;
5153
DrtFareParams fareParams = new DrtFareParams();
5254
fareParams.baseFare = 1.0;
5355
fareParams.distanceFare_m = 0.001;
@@ -75,12 +77,12 @@ public void install() {
7577

7678
double waitAvg = Double.parseDouble(row.get("wait_average"));
7779

78-
assertThat(waitAvg).isEqualTo(drtConfigGroup.maxWaitTime);
80+
assertThat(waitAvg).isEqualTo(constraintsParam.maxWaitTime);
7981

8082
double distMean = Double.parseDouble(row.get("distance_m_mean"));
8183
double directDistMean = Double.parseDouble(row.get("directDistance_m_mean"));
8284

83-
assertThat(distMean / directDistMean).isCloseTo(drtConfigGroup.maxTravelTimeAlpha, Offset.offset(0.0001));
85+
assertThat(distMean / directDistMean).isCloseTo(constraintsParam.maxTravelTimeAlpha, Offset.offset(0.0001));
8486

8587
}
8688

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<?xml version="1.0" ?>
2+
<!DOCTYPE config SYSTEM "http://www.matsim.org/files/dtd/config_v2.dtd">
3+
<config>
4+
<module name="dvrp">
5+
</module>
6+
7+
<module name="multiModeDrt">
8+
<parameterset type="drt">
9+
<parameterset type="ExtensiveInsertionSearch"/>
10+
<param name="stopDuration" value="60"/>
11+
<param name="maxWaitTime" value="600"/>
12+
<param name="maxTravelTimeAlpha" value="1.3"/>
13+
<param name="maxTravelTimeBeta" value="400"/>
14+
15+
<param name="vehiclesFile" value="vehicles-10-cap-4.xml"/>
16+
<!-- param name="vehiclesFile" value="vehicles-20-cap-2.xml" / -->
17+
18+
<parameterset type="zonalSystem">
19+
<parameterset type="SquareGridZoneSystem" >
20+
<param name="cellSize" value="500"/>
21+
</parameterset>
22+
</parameterset>
23+
24+
<parameterset type="rebalancing">
25+
<parameterset type="minCostFlowRebalancingStrategy">
26+
<param name="targetAlpha" value="0.5"/>
27+
<param name="targetBeta" value="0.5"/>
28+
</parameterset>
29+
</parameterset>
30+
</parameterset>
31+
</module>
32+
33+
<module name="network">
34+
<param name="inputNetworkFile" value="network.xml"/>
35+
</module>
36+
37+
<module name="plans">
38+
<param name="inputPlansFile" value="plans_only_drt_1.0.xml.gz"/>
39+
</module>
40+
41+
<module name="qsim">
42+
<param name="simStarttimeInterpretation" value="onlyUseStarttime"/>
43+
<param name="endTime" value="30:00:00"/>
44+
<param name="insertingWaitingVehiclesBeforeDrivingVehicles" value="true"/>
45+
<param name="snapshotStyle" value="queue"/>
46+
</module>
47+
48+
<module name="otfvis">
49+
<param name="coloringScheme" value="taxicab"/>
50+
<param name="drawNonMovingItems" value="true"/>
51+
</module>
52+
53+
<module name="controller">
54+
<param name="outputDirectory" value="test/output/mielec_drt"/>
55+
<param name="overwriteFiles" value="deleteDirectoryIfExists"/>
56+
<param name="firstIteration" value="0"/>
57+
<param name="lastIteration" value="0"/>
58+
</module>
59+
60+
<module name="scoring">
61+
<param name="activityType_0" value="dummy"/>
62+
<param name="activityTypicalDuration_0" value="24:00:00"/>
63+
<param name="traveling_drt" value="-6"/>
64+
</module>
65+
66+
<module name="replanning">
67+
<!-- We focus only on DynAgents. "Standard" agents do not change their behaviour -->
68+
<param name="maxAgentPlanMemorySize" value="1"/>
69+
<param name="ModuleProbability_1" value="1.0"/>
70+
<param name="Module_1" value="KeepLastSelected"/>
71+
</module>
72+
</config>

0 commit comments

Comments
 (0)