Skip to content

Commit

Permalink
class to fix wrongly assigned vehicle availability attributes
Browse files Browse the repository at this point in the history
  • Loading branch information
simei94 committed Jul 17, 2024
1 parent cef22e2 commit 630d243
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 1 deletion.
4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,10 @@ input/v1.0/mexico-city-v1.0-1pct.input.plans.xml.gz: input/v1.0/mexico-city-init
--output $@\
--all-plans\
--coord-dist 100
# for SMC all agents > 18 (age) should have carAvail = always
$(sc) --income-area "" prepare fix-vehicle-availabilities\
--input $@\
--output $@

# commented out due to bug when reading plans / activities with assigned facilityIds, see matsim-libs PR3106
# $(sc) --income-area "" prepare xy-to-links\
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package org.matsim.prepare.population;

import org.matsim.api.core.v01.population.Person;
import org.matsim.api.core.v01.population.Population;
import org.matsim.application.MATSimAppCommand;
import org.matsim.core.population.PersonUtils;
import org.matsim.core.population.PopulationUtils;
import picocli.CommandLine;

import java.nio.file.Path;

@CommandLine.Command(
name = "fix-vehicle-availabilities",
description = "Make sure that car and bike availability is set correctly."
)
public class FixVehicleAvailAttributes implements MATSimAppCommand {
@CommandLine.Option(names = "--input", description = "Path to input population", required = true)
private Path input;
@CommandLine.Option(names = "--output", description = "Output path of altered population. If not defined, input population will be overwritten.")
private Path output;

public static void main(String[] args) {
new FixVehicleAvailAttributes().execute(args);
}

@Override
public Integer call() throws Exception {

Population population = PopulationUtils.readPopulation(input.toString());

for (Person person : population.getPersons().values()) {
CAR_AVAIL carAvail = CAR_AVAIL.ALWAYS;

if (PersonUtils.getAge(person) < 18) {
carAvail = CAR_AVAIL.NEVER;
}

PersonUtils.setCarAvail(person, carAvail.toString().toLowerCase());

// remove bikeAvail attribute because it might be confusing if people who have no bike available are using one
if (person.getAttributes().getAttribute("bikeAvail") != null) {
person.getAttributes().removeAttribute("bikeAvail");
}
}
PopulationUtils.writePopulation(population, output.toString());

return 0;
}

private enum CAR_AVAIL {
ALWAYS,
NEVER
}
}
2 changes: 1 addition & 1 deletion src/main/java/org/matsim/run/RunMexicoCityScenario.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@
AdaptCountsScale.class, AdjustActivityToLinkDistances.class, ChangeFacilities.class, ChangeModeNames.class, CheckActivityFacilities.class, CheckCarAvailability.class, CleanNetwork.class, CorrectPtVehicleTypes.class,
CreateBikeNetworkFromShp.class, CreateCommuterRelations.class, CreateCountsFromDatosVialesPortal.class, CreateLandUseShp.class, CreateMATSimFacilities.class, CreateMetropolitanAreaPopulation.class,
CreateMexicoCityPopulation.class, CreateMexicoCityScenarioConfig.class, CreateMexicoCityNetworkFromSumo.class, CreateTransitScheduleFromGtfs.class, CreateVehicleTypes.class,
DownSamplePopulation.class, ExtractHomeCoordinates.class, FixSubtourModes.class, GenerateShortDistanceTrips.class, InitLocationChoice.class, MergePopulations.class,
DownSamplePopulation.class, ExtractHomeCoordinates.class, FixSubtourModes.class, FixVehicleAvailAttributes.class, GenerateShortDistanceTrips.class, InitLocationChoice.class, MergePopulations.class,
PrepareBikePopulation.class, PrepareIncome.class, PrepareNetwork.class, ResolveGridCoordinates.class, RunActivitySampling.class, RunCountOptimization.class,
SelectPlansFromIndex.class, SplitActivityTypesDuration.class, XYToLinks.class
})
Expand Down

0 comments on commit 630d243

Please sign in to comment.