Skip to content

Commit

Permalink
config fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
rakow committed Dec 18, 2023
1 parent ac4b097 commit 7adfe34
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 6 deletions.
12 changes: 12 additions & 0 deletions input/v6.1/berlin-v6.1-vehicleTypes.xml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,18 @@
<networkMode networkMode="truck"/>
</vehicleType>

<vehicleType id="truck">
<attributes>
<attribute name="accessTimeInSecondsPerPerson" class="java.lang.Double">1</attribute>
<attribute name="doorOperationMode" class="org.matsim.vehicles.VehicleType$DoorOperationMode">serial</attribute>
<attribute name="egressTimeInSecondsPerPerson" class="java.lang.Double">1</attribute>
</attributes>
<length meter="15.0"/>
<width meter="1.0"/>
<passengerCarEquivalents pce="3.5"/>
<networkMode networkMode="truck"/>
</vehicleType>

<!-- Specific types for commercial traffic -->

<vehicleType id="golf1.4">
Expand Down
2 changes: 1 addition & 1 deletion input/v6.1/berlin-v6.1.config.xml
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@
</module>

<module name="counts">
<param name="inputCountsFile" value="./berlin-v6.0-counts-car-vmz.xml.gz"/>
<param name="inputCountsFile" value="./berlin-v6.1-counts-car-vmz.xml.gz"/>
</module>

<module name="ReplanningAnnealer" >
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/org/matsim/prepare/ReprojectNetwork.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@

import org.matsim.api.core.v01.Scenario;
import org.matsim.api.core.v01.network.Link;
import org.matsim.api.core.v01.network.Node;
import org.matsim.application.MATSimAppCommand;
import org.matsim.application.options.CrsOptions;
import org.matsim.core.config.Config;
import org.matsim.core.config.ConfigUtils;
import org.matsim.core.network.NetworkUtils;
import org.matsim.core.scenario.ScenarioUtils;
import org.matsim.core.utils.geometry.CoordUtils;
import org.matsim.pt.transitSchedule.api.TransitScheduleWriter;
import picocli.CommandLine;

Expand Down Expand Up @@ -56,6 +58,10 @@ public Integer call() throws Exception {
// Scenario loader does the reprojection for the network
Scenario scenario = ScenarioUtils.loadScenario(config);

for (Node node : scenario.getNetwork().getNodes().values()) {
node.setCoord(CoordUtils.round(node.getCoord()));
}

if (!remapModes.isEmpty()) {
for (Link link : scenario.getNetwork().getLinks().values()) {
Set<String> modes = new HashSet<>(link.getAllowedModes());
Expand Down
22 changes: 17 additions & 5 deletions src/main/java/org/matsim/prepare/RunOpenBerlinCalibration.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@
import org.matsim.core.replanning.choosers.ForceInnovationStrategyChooser;
import org.matsim.core.replanning.choosers.StrategyChooser;
import org.matsim.core.replanning.strategies.DefaultPlanStrategiesModule;
import org.matsim.core.router.RoutingModeMainModeIdentifier;
import org.matsim.core.router.DefaultAnalysisMainModeIdentifier;
import org.matsim.core.router.MainModeIdentifier;
import org.matsim.core.router.TripStructureUtils;
import org.matsim.core.scoring.ScoringFunction;
import org.matsim.core.scoring.ScoringFunctionFactory;
Expand Down Expand Up @@ -301,25 +302,36 @@ protected void prepareScenario(Scenario scenario) {

log.info("Converting all agents to car plans.");

RoutingModeMainModeIdentifier mmi = new RoutingModeMainModeIdentifier();
MainModeIdentifier mmi = new DefaultAnalysisMainModeIdentifier();

for (Person person : scenario.getPopulation().getPersons().values()) {
for (Plan plan : person.getPlans()) {
final List<PlanElement> planElements = plan.getPlanElements();
final List<TripStructureUtils.Trip> trips = TripStructureUtils.getTrips(plan);

for (TripStructureUtils.Trip trip : trips) {

final List<PlanElement> fullTrip =
planElements.subList(
planElements.indexOf(trip.getOriginActivity()) + 1,
planElements.indexOf(trip.getDestinationActivity()));

String mode = mmi.identifyMainMode(fullTrip);

// Already car, nothing to do
if (Objects.equals(mode, TransportMode.car) || Objects.equals(mode, TransportMode.truck))
continue;

double dist = CoordUtils.calcEuclideanDistance(getCoord(scenario, trip.getOriginActivity()), getCoord(scenario, trip.getDestinationActivity()));

// very short trips remain walk
String desiredMode = dist <= 100 ? TransportMode.walk : TransportMode.car;
// short bike and walk trips are not changed
if (dist <= 500 && (Objects.equals(mode, TransportMode.walk) || Objects.equals(mode, TransportMode.bike)))
continue;

// rest of the trips is set to walk if below threshold, car otherwise
String desiredMode = dist <= 500 ? TransportMode.walk : TransportMode.car;

if (!Objects.equals(mmi.identifyMainMode(fullTrip), desiredMode)) {
if (!Objects.equals(mode, desiredMode)) {
fullTrip.clear();
Leg leg = PopulationUtils.createLeg(desiredMode);
TripStructureUtils.setRoutingMode(leg, desiredMode);
Expand Down

0 comments on commit 7adfe34

Please sign in to comment.