Skip to content

Commit

Permalink
update matsim, workflows and experiment run class
Browse files Browse the repository at this point in the history
  • Loading branch information
rakow committed Dec 16, 2024
1 parent 5a55ca4 commit 2196d7f
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 26 deletions.
20 changes: 10 additions & 10 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ jobs:

runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-java@v3
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
java-version: 21
architecture: x64
Expand All @@ -29,8 +29,8 @@ jobs:

runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-java@v3
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
java-version: 21
architecture: x64
Expand All @@ -54,8 +54,8 @@ jobs:
java: [21]

steps:
- uses: actions/checkout@v3
- uses: actions/setup-java@v3
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}
architecture: x64
Expand All @@ -64,7 +64,7 @@ jobs:

- name: Test
run: mvn --batch-mode --update-snapshots test -Dmatsim.preferLocalDtds=true -Dmaven.javadoc.skip -e
- uses: actions/upload-artifact@v3
- uses: actions/upload-artifact@v4
with:
name: test-coverage
path: target/site/jacoco/
Expand All @@ -77,8 +77,8 @@ jobs:

runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-java@v3
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
java-version: 21
architecture: x64
Expand All @@ -88,7 +88,7 @@ jobs:
- name: Package
run: mvn --batch-mode --update-snapshots package -DskipTests -Dmatsim.preferLocalDtds=true -Dmaven.javadoc.skip -e
- run: mkdir staging && cp *.jar staging
- uses: actions/upload-artifact@v3
- uses: actions/upload-artifact@v4
with:
name: Package
path: staging
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<artifactId>matsim-all</artifactId>

<!-- PR-labelled release -->
<version>2025.0-PR3636</version>
<version>2025.0-PR3642</version>

<!-- snapshot == not recommended: rather use PR-labelled release!-->
<!-- <version>2025.0-SNAPSHOT</version>-->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import org.matsim.core.config.Config;
import org.matsim.core.config.ConfigUtils;
import org.matsim.core.controler.Controler;
import org.matsim.core.replanning.strategies.DefaultPlanStrategiesModule;
import org.matsim.core.router.TripStructureUtils;
import org.matsim.modechoice.InformedModeChoiceConfigGroup;
import org.matsim.modechoice.InformedModeChoiceModule;
Expand All @@ -18,11 +19,15 @@
import org.matsim.modechoice.estimators.DefaultActivityEstimator;
import org.matsim.modechoice.estimators.DefaultLegScoreEstimator;
import org.matsim.modechoice.estimators.FixedCostsEstimator;
import org.matsim.modechoice.pruning.PlanScoreThresholdPruner;
import org.matsim.run.OpenBerlinScenario;
import org.matsim.run.scoring.AdvancedScoringConfigGroup;
import org.matsim.run.scoring.PseudoRandomTripScoreEstimator;
import org.matsim.vehicles.VehicleType;
import picocli.CommandLine;

import java.util.List;

/**
* This class can be used to run some synthetic mode choice experiments on the OpenBerlin scenario.
*/
Expand All @@ -34,6 +39,13 @@ public class OpenBerlinChoiceExperiment extends OpenBerlinScenario {
@CommandLine.Option(names = "--imc", description = "Enable informed-mode-choice functionality")
private boolean imc;

@CommandLine.Option(names = "--imc-pruning", description = "Plan pruning threshold. If 0 pruning is disabled", defaultValue = "0")
private double pruning;

@CommandLine.Option(names = "--imc-strategy", description = "Mode choice strategy to use",
defaultValue = InformedModeChoiceModule.SELECT_SUBTOUR_MODE_STRATEGY)
private String strategy;

public static void main(String[] args) {
MATSimApplication.execute(OpenBerlinChoiceExperiment.class, args);
}
Expand All @@ -47,19 +59,20 @@ protected Config prepareConfig(Config config) {

InformedModeChoiceConfigGroup imcConfig = ConfigUtils.addOrGetModule(config, InformedModeChoiceConfigGroup.class);

imcConfig.setTopK(25);
imcConfig.setModes(List.of(config.subtourModeChoice().getModes()));
imcConfig.setConstraintCheck(InformedModeChoiceConfigGroup.ConstraintCheck.repair);

// TODO: enable pruning

// TODO: replace strategy

// TODO: start imc runs
// from uncalibrated population with baseline calibration
InformedModeChoiceModule.replaceReplanningStrategy(config, "person",
DefaultPlanStrategiesModule.DefaultStrategy.SubtourModeChoice,
strategy
);

// next, with new mode scoring

// different number iterations x pruning thresholds/top k
if (pruning > 0)
imcConfig.setPruning("p" + pruning);

} else if (pruning > 0) {
throw new IllegalArgumentException("Pruning is only available with informed-mode-choice enabled");
}

return config;
Expand Down Expand Up @@ -102,15 +115,11 @@ protected void prepareControler(Controler controler) {
.withFixedCosts(FixedCostsEstimator.DailyConstant.class, "car", "pt")
.withLegEstimator(DefaultLegScoreEstimator.class, ModeOptions.ConsiderIfCarAvailable.class, "car")
.withLegEstimator(DefaultLegScoreEstimator.class, ModeOptions.AlwaysAvailable.class, "pt", "walk", "bike", "ride")
.withPruner("p" + pruning, new PlanScoreThresholdPruner(pruning))
.withConstraint(RelaxedMassConservationConstraint.class);

if (ConfigUtils.hasModule(controler.getConfig(), AdvancedScoringConfigGroup.class)) {

// TODO: add pseudo random errors to estimator
// Implement pseudo trip scoring into informed mode choice

// TODO: option for pruning

builder.withTripScoreEstimator(PseudoRandomTripScoreEstimator.class);
}

controler.addOverridingModule(builder.build());
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package org.matsim.run.scoring;

import com.google.inject.Inject;
import org.matsim.core.router.TripStructureUtils;
import org.matsim.modechoice.EstimatorContext;
import org.matsim.modechoice.estimators.TripScoreEstimator;

/**
* Provides the pseudo random score to the estimator.
*/
public class PseudoRandomTripScoreEstimator implements TripScoreEstimator {

private final PseudoRandomScorer scorer;

@Inject
public PseudoRandomTripScoreEstimator(PseudoRandomScorer scorer) {
this.scorer = scorer;
}

@Override
public double estimate(EstimatorContext context, String mainMode, TripStructureUtils.Trip trip) {
return scorer.scoreTrip(context.person.getId(), mainMode, trip);
}
}

0 comments on commit 2196d7f

Please sign in to comment.