Skip to content

Commit 74befe8

Browse files
authored
fix: adapt to new way of configuring link speed calculator (#273)
1 parent 0597c86 commit 74befe8

File tree

7 files changed

+45
-51
lines changed

7 files changed

+45
-51
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package org.eqasim.core.components.traffic;
2+
3+
import org.matsim.api.core.v01.network.Link;
4+
import org.matsim.core.mobsim.qsim.qnetsimengine.QVehicle;
5+
6+
public class DefaultEqasimLinkSpeedCalculator implements EqasimLinkSpeedCalculator {
7+
final private double crossingPenalty;
8+
9+
public DefaultEqasimLinkSpeedCalculator(double crossingPenalty) {
10+
this.crossingPenalty = crossingPenalty;
11+
}
12+
13+
@Override
14+
public double getMaximumVelocity(QVehicle vehicle, Link link, double time) {
15+
boolean isMajor = true;
16+
17+
for (Link other : link.getToNode().getInLinks().values()) {
18+
if (other.getCapacity() >= link.getCapacity()) {
19+
isMajor = false;
20+
}
21+
}
22+
23+
double maximumVelocity = Math.min(vehicle.getMaximumVelocity(), link.getFreespeed(time));
24+
25+
if (isMajor || link.getToNode().getInLinks().size() == 1) {
26+
return maximumVelocity;
27+
} else {
28+
double travelTime = link.getLength() / maximumVelocity;
29+
travelTime += crossingPenalty;
30+
return link.getLength() / travelTime;
31+
}
32+
}
33+
}
Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,6 @@
11
package org.eqasim.core.components.traffic;
22

3-
import org.matsim.api.core.v01.network.Link;
4-
import org.matsim.core.mobsim.qsim.qnetsimengine.QVehicle;
53
import org.matsim.core.mobsim.qsim.qnetsimengine.linkspeedcalculator.LinkSpeedCalculator;
64

7-
public class EqasimLinkSpeedCalculator implements LinkSpeedCalculator {
8-
final private double crossingPenalty;
9-
10-
public EqasimLinkSpeedCalculator(double crossingPenalty) {
11-
this.crossingPenalty = crossingPenalty;
12-
}
13-
14-
@Override
15-
public double getMaximumVelocity(QVehicle vehicle, Link link, double time) {
16-
boolean isMajor = true;
17-
18-
for (Link other : link.getToNode().getInLinks().values()) {
19-
if (other.getCapacity() >= link.getCapacity()) {
20-
isMajor = false;
21-
}
22-
}
23-
24-
double maximumVelocity = Math.min(vehicle.getMaximumVelocity(), link.getFreespeed(time));
25-
26-
if (isMajor || link.getToNode().getInLinks().size() == 1) {
27-
return maximumVelocity;
28-
} else {
29-
double travelTime = link.getLength() / maximumVelocity;
30-
travelTime += crossingPenalty;
31-
return link.getLength() / travelTime;
32-
}
33-
}
5+
public interface EqasimLinkSpeedCalculator extends LinkSpeedCalculator {
346
}

core/src/main/java/org/eqasim/core/components/traffic/EqasimTrafficQSimModule.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,20 @@
22

33
import org.eqasim.core.components.config.EqasimConfigGroup;
44
import org.matsim.core.mobsim.qsim.AbstractQSimModule;
5-
import org.matsim.core.mobsim.qsim.qnetsimengine.linkspeedcalculator.LinkSpeedCalculator;
65

76
import com.google.inject.Provides;
87
import com.google.inject.Singleton;
98

109
public class EqasimTrafficQSimModule extends AbstractQSimModule {
1110
@Override
1211
protected void configureQSim() {
13-
bind(LinkSpeedCalculator.class).to(EqasimLinkSpeedCalculator.class);
12+
addLinkSpeedCalculator().to(EqasimLinkSpeedCalculator.class);
13+
bind(EqasimLinkSpeedCalculator.class).to(DefaultEqasimLinkSpeedCalculator.class);
1414
}
1515

1616
@Provides
1717
@Singleton
18-
public EqasimLinkSpeedCalculator provideBaselineLinkSpeedCalculator(EqasimConfigGroup eqasimConfig) {
19-
return new EqasimLinkSpeedCalculator(eqasimConfig.getCrossingPenalty());
18+
public DefaultEqasimLinkSpeedCalculator provideDefaultEqasimLinkSpeedCalculator(EqasimConfigGroup eqasimConfig) {
19+
return new DefaultEqasimLinkSpeedCalculator(eqasimConfig.getCrossingPenalty());
2020
}
2121
}

core/src/main/java/org/eqasim/core/simulation/vdf/VDFQSimModule.java

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,18 @@
11
package org.eqasim.core.simulation.vdf;
22

3+
import org.eqasim.core.components.traffic.EqasimLinkSpeedCalculator;
34
import org.eqasim.core.simulation.vdf.travel_time.VDFLinkSpeedCalculator;
45
import org.eqasim.core.simulation.vdf.travel_time.VDFTravelTime;
5-
import org.matsim.api.core.v01.Scenario;
66
import org.matsim.api.core.v01.population.Population;
7-
import org.matsim.core.api.experimental.events.EventsManager;
87
import org.matsim.core.mobsim.qsim.AbstractQSimModule;
9-
import org.matsim.core.mobsim.qsim.qnetsimengine.ConfigurableQNetworkFactory;
10-
import org.matsim.core.mobsim.qsim.qnetsimengine.QNetworkFactory;
118

129
import com.google.inject.Provides;
1310
import com.google.inject.Singleton;
1411

1512
public class VDFQSimModule extends AbstractQSimModule {
1613
@Override
1714
protected void configureQSim() {
18-
}
19-
20-
@Provides
21-
@Singleton
22-
public QNetworkFactory provideQNetworkFactory(EventsManager events, Scenario scenario,
23-
VDFLinkSpeedCalculator linkSpeedCalculator) {
24-
ConfigurableQNetworkFactory networkFactory = new ConfigurableQNetworkFactory(events, scenario);
25-
networkFactory.setLinkSpeedCalculator(linkSpeedCalculator);
26-
return networkFactory;
15+
bind(EqasimLinkSpeedCalculator.class).to(VDFLinkSpeedCalculator.class);
2716
}
2817

2918
@Provides

core/src/main/java/org/eqasim/core/simulation/vdf/travel_time/VDFLinkSpeedCalculator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package org.eqasim.core.simulation.vdf.travel_time;
22

3+
import org.eqasim.core.components.traffic.EqasimLinkSpeedCalculator;
34
import org.matsim.api.core.v01.network.Link;
45
import org.matsim.api.core.v01.population.Person;
56
import org.matsim.api.core.v01.population.Population;
67
import org.matsim.core.mobsim.qsim.qnetsimengine.QVehicle;
7-
import org.matsim.core.mobsim.qsim.qnetsimengine.linkspeedcalculator.LinkSpeedCalculator;
88

9-
public class VDFLinkSpeedCalculator implements LinkSpeedCalculator {
9+
public class VDFLinkSpeedCalculator implements EqasimLinkSpeedCalculator {
1010
private final VDFTravelTime travelTime;
1111
private final Population population;
1212

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ private void runMelunEmissions() throws CommandLine.ConfigurationException, IOEx
165165
"sample_41_EFA_ColdStart_SubSegm_2020detailed.csv", "--hbefa-hot-detailed",
166166
"sample_41_EFA_HOT_SubSegm_2020detailed.csv", });
167167

168-
assertEquals(355977, countLines(new File("melun_test/output/output_emissions_events.xml.gz")));
168+
assertEquals(353704, countLines(new File("melun_test/output/output_emissions_events.xml.gz")));
169169

170170
RunExportEmissionsNetwork.main(new String[] { "--config-path", "melun_test/input/config.xml",
171171
"--pollutants", "PM,CO,NOx,Unknown", "--time-bin-size", "3600" });

ile_de_france/src/test/java/org/eqasim/ile_de_france/TestCorisica.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ public void testCorsicaPipeline()
7676
Assert.assertEquals(389, countPersons("corsica_test/simulation_output/output_plans.xml.gz"));
7777

7878
Map<String, Long> counts = countLegs("corsica_test/simulation_output/output_events.xml.gz");
79-
Assert.assertEquals(992, (long) counts.get("car"));
79+
Assert.assertEquals(994, (long) counts.get("car"));
8080
Assert.assertEquals(129, (long) counts.get("car_passenger"));
8181
Assert.assertEquals(221, (long) counts.get("walk"));
8282
Assert.assertEquals(0, (long) counts.getOrDefault("bike", 0L));
@@ -120,7 +120,7 @@ public void testCorsicaPipeline()
120120
});
121121

122122
Map<String, Long> counts = countLegs("corsica_test/cut_output/output_events.xml.gz");
123-
Assert.assertEquals(422, (long) counts.get("car"));
123+
Assert.assertEquals(424, (long) counts.get("car"));
124124
Assert.assertEquals(53, (long) counts.get("car_passenger"));
125125
Assert.assertEquals(101, (long) counts.get("walk"));
126126
Assert.assertEquals(0, (long) counts.getOrDefault("bike", 0L));

0 commit comments

Comments
 (0)