Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
100 commits
Select commit Hold shift + click to select a range
eb692d8
activate epsilon by default
sebhoerl Sep 30, 2024
6649152
integrate transit routing parameters
sebhoerl Sep 30, 2024
d4a55d9
update crossing penalty
sebhoerl Sep 30, 2024
8ef5252
update choice model
sebhoerl Sep 30, 2024
748bac6
prepare for testing
sebhoerl Oct 1, 2024
757ea13
add fix for population routing
sebhoerl Oct 1, 2024
047bb4f
add modes for convergence
sebhoerl Oct 2, 2024
1ef466d
revert integration of motorbikes for no
sebhoerl Oct 3, 2024
0c8e288
further cleanup
sebhoerl Oct 3, 2024
9f95c51
fix
sebhoerl Oct 3, 2024
c1937f3
config
sebhoerl Oct 3, 2024
4d7f4c7
config
sebhoerl Oct 3, 2024
0938b21
reconfigure termination
sebhoerl Oct 3, 2024
9d5623f
revert termination configuration
sebhoerl Oct 3, 2024
18b3925
rename passenger -> car_passenger
sebhoerl Oct 3, 2024
a08a8bf
Merge branch 'develop' into feat/model-2024
sebhoerl Oct 3, 2024
a85e04f
update configurator
sebhoerl Oct 3, 2024
7c89534
update parameters without motorbike
sebhoerl Oct 3, 2024
8296a1c
add parking costs
sebhoerl Oct 7, 2024
a666bbb
update certain definitions in estimator
sebhoerl Oct 7, 2024
84a5e96
avoid circular dependency for predictor
sebhoerl Oct 7, 2024
65d1c10
fix error in cost model
sebhoerl Oct 7, 2024
ca57c26
idf pt estimator was not enabled
sebhoerl Oct 8, 2024
a57fa7d
fixes and forgot to add driving permit for car passenger
sebhoerl Oct 8, 2024
c064537
update passenger availability and some other parameters
sebhoerl Oct 9, 2024
c7a29a9
fix bug in cost model
sebhoerl Oct 9, 2024
a7e5984
test in pt model
sebhoerl Oct 10, 2024
64864b4
update model
sebhoerl Oct 10, 2024
361463a
add debugging output
sebhoerl Oct 12, 2024
db67327
revert debugging
sebhoerl Oct 12, 2024
b59c19b
formatting
sebhoerl Oct 12, 2024
f08ae29
rearranging some code
sebhoerl Oct 14, 2024
b685880
fix bug for pt variables
sebhoerl Oct 20, 2024
36b5aea
add vdf
sebhoerl Oct 21, 2024
3f1092a
fix vdf
sebhoerl Oct 21, 2024
2dd9a22
Merge branch 'develop' into feat/model-2024
sebhoerl Oct 21, 2024
ed09eea
update
sebhoerl Oct 21, 2024
a930864
fix capacity factor
sebhoerl Oct 23, 2024
511ff54
Merge branch 'develop' into feat/model-2024
sebhoerl Oct 29, 2024
3608c7d
Merge branch 'develop' into feat/model-2024
sebhoerl Nov 2, 2024
30f0372
fix
sebhoerl Nov 2, 2024
da2bd85
Merge branch 'develop' into feat/model-2024
sebhoerl Nov 9, 2024
25d656b
Merge branch 'develop' into feat/model-2024
sebhoerl Jan 14, 2025
7dae6d9
deactivate policies
sebhoerl Jan 14, 2025
b6d4119
add script to adjust capacity
sebhoerl Jan 31, 2025
ba04942
add dummies for paris
sebhoerl Feb 1, 2025
6c63edd
add dummy for bicycle inside Paris
sebhoerl Feb 11, 2025
a15ed6d
Merge branch 'develop' into feat/model-2024
sebhoerl Feb 23, 2025
e113bb6
travel time correction for car passengers
sebhoerl Mar 1, 2025
6e568b2
Merge branch 'develop' into feat/model-2024
sebhoerl Mar 7, 2025
d386ca3
Merge branch 'develop' into feat/model-2024
sebhoerl Mar 8, 2025
b6d1e88
Merge branch 'develop' into feat/model-2024
sebhoerl Mar 8, 2025
67a6079
Merge branch 'develop' into feat/model-2024
sebhoerl Mar 9, 2025
ba75b71
possibility to change network speeds
sebhoerl Mar 29, 2025
df68f11
make extent optional
sebhoerl Mar 29, 2025
b264f39
add passenger speed factor
sebhoerl Apr 6, 2025
d2ddc46
fix psf
sebhoerl Apr 7, 2025
a9068ef
update to latest values
sebhoerl Jul 22, 2025
53b6596
update walk speed
sebhoerl Jul 22, 2025
6803be1
Merge branch 'develop' into feat/model-2024
sebhoerl Jul 22, 2025
3b597e4
allow setting capacities
sebhoerl Jul 23, 2025
0ccdce0
fix for setting freespeed
sebhoerl Jul 23, 2025
b78a1db
fix
sebhoerl Jul 23, 2025
7630f9a
adapt config
sebhoerl Jul 23, 2025
5d8815d
update
sebhoerl Jul 23, 2025
99bfe1d
fix pipeline bug
sebhoerl Jul 23, 2025
6529c58
provide config network
sebhoerl Jul 25, 2025
b8b7191
update network configuration
sebhoerl Jul 25, 2025
5ef3e3e
defaults
sebhoerl Jul 25, 2025
b6ca49d
Merge branch 'develop' into feat/model-2024
sebhoerl Jul 28, 2025
e7c1b8f
Merge branch 'develop' into feat/model-2024
sebhoerl Jul 28, 2025
3f6d8b0
add new components
sebhoerl Aug 11, 2025
89472e3
logging
sebhoerl Aug 12, 2025
46e6b31
switch to CU
sebhoerl Aug 12, 2025
7730c17
cu are double
sebhoerl Aug 12, 2025
db30ef2
Merge branch 'develop' into feat/model-2024
sebhoerl Aug 12, 2025
29149e8
Merge branch 'develop' into feat/model-2024
sebhoerl Aug 12, 2025
79a440a
remove logging
sebhoerl Aug 12, 2025
41ac126
update
sebhoerl Aug 22, 2025
36bb338
update
sebhoerl Aug 22, 2025
d21dfd3
add functionality for choice model probe
sebhoerl Sep 12, 2025
3f8322a
add choice model output
sebhoerl Sep 16, 2025
023a2a4
enable writer
sebhoerl Sep 16, 2025
3064214
add progress
sebhoerl Sep 16, 2025
1d3bafc
directly make use of parking duration in probe model
sebhoerl Sep 16, 2025
7a911b8
update probing
sebhoerl Sep 16, 2025
c6932ac
update
sebhoerl Sep 16, 2025
91c9cf4
fix dep time
sebhoerl Sep 16, 2025
c5a3b89
bugfix
sebhoerl Sep 16, 2025
c54cd3f
bugfix
sebhoerl Sep 17, 2025
e68ba21
add costs and utilities
sebhoerl Sep 17, 2025
b228340
add availability
sebhoerl Sep 17, 2025
d694c79
fix
sebhoerl Sep 17, 2025
c5b3d7f
update
sebhoerl Sep 17, 2025
ad0303c
update
sebhoerl Sep 17, 2025
2b504d7
update
sebhoerl Sep 17, 2025
2530dcc
update
sebhoerl Sep 18, 2025
c4bcd89
Merge branch 'develop' into feat/model-2024
sebhoerl Oct 2, 2025
3ecfb78
Merge branch 'develop' into feat/model-2024
sebhoerl Oct 2, 2025
64981d2
Merge branch 'develop' into feat/model-2024
sebhoerl Oct 3, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ dependency-reduced-pom.xml
*.iml
*.idea
simulation_output
.vscode
Original file line number Diff line number Diff line change
Expand Up @@ -10,26 +10,26 @@ public EqasimRaptorConfigGroup() {
}

@Parameter
public double travelTimeRail_u_h = -7.0;
public double travelTimeRail_u_h = -0.08317394412379128;

@Parameter
public double travelTimeSubway_u_h = -7.0;
public double travelTimeSubway_u_h = -1.0;

@Parameter
public double travelTimeBus_u_h = -7.0;
public double travelTimeBus_u_h = -2.8470557962683523;

@Parameter
public double travelTimeTram_u_h = -7.0;
public double travelTimeTram_u_h = -4.849609430935352;

@Parameter
public double travelTimeOther_u_h = -7.0;
public double travelTimeOther_u_h = -2.8470557962683523;

@Parameter
public double perTransfer_u = -1.0;
public double perTransfer_u = -0.47539778048347203;

@Parameter
public double waitTime_u_h = -6.0;
public double waitTime_u_h = -17.935075050105493;

@Parameter
public double walkTime_u_h = -7.0;
public double walkTime_u_h = -4.198783720934392;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package org.eqasim.core.scenario.preparation;

import org.matsim.api.core.v01.Scenario;
import org.matsim.api.core.v01.network.Link;
import org.matsim.api.core.v01.network.Network;
import org.matsim.core.config.CommandLine;
import org.matsim.core.config.CommandLine.ConfigurationException;

public class AdjustFreespeed {
static public final String INITIAL_FREESPEED = "eqasim:initialFreespeed";

static public void main(String[] args) throws ConfigurationException {
CommandLine commandLine = new CommandLine.Builder(args) //
.requireOptions("input-path", "output-path") //
.allowPrefixes("freespeed") //
.build();



}

static public void run(Network network) {

}

static public void validate(Scenario scenario) {
boolean valid = false;

for (Link link : scenario.getNetwork().getLinks().values()) {
if (link.getAttributes().getAttribute(INITIAL_FREESPEED) != null) {
valid = true;
break;
}
}

if (!valid) {
throw new IllegalStateException("Did not find initial freespeed. Did you call AdjustFreespeed?");
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
import org.matsim.api.core.v01.population.Population;
import org.matsim.core.router.TripStructureUtils;
import org.matsim.core.router.TripStructureUtils.StageActivityHandling;
import org.matsim.pt.transitSchedule.api.TransitSchedule;
import org.matsim.pt.transitSchedule.api.TransitStopFacility;

public class ImputeSpatialAttribute {
private final Geometry geometry;
Expand All @@ -30,12 +32,17 @@ public void run(Population population) throws InterruptedException {

for (Person person : population.getPersons().values()) {
for (Plan plan : person.getPlans()) {
for (Activity activity : TripStructureUtils.getActivities(plan, StageActivityHandling.ExcludeStageActivities)) {
for (Activity activity : TripStructureUtils.getActivities(plan,
StageActivityHandling.ExcludeStageActivities)) {
Point point = factory
.createPoint(new Coordinate(activity.getCoord().getX(), activity.getCoord().getY()));

if (geometry.contains(point)) {
activity.getAttributes().putAttribute(attribute, true);

if (activity.getType().equals("home")) {
person.getAttributes().putAttribute(attribute, true);
}
}
}
}
Expand All @@ -62,4 +69,21 @@ public void run(Network network) throws InterruptedException {

progress.close();
}

public void run(TransitSchedule schedule) throws InterruptedException {
ParallelProgress progress = new ParallelProgress("Imputing spatial schedule attributes ...",
schedule.getFacilities().size());

for (TransitStopFacility facility : schedule.getFacilities().values()) {
Point point = factory.createPoint(new Coordinate(facility.getCoord().getX(), facility.getCoord().getY()));

if (geometry.covers(point)) {
facility.getAttributes().putAttribute(attribute, true);
}

progress.update();
}

progress.close();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,17 @@
import org.matsim.core.population.io.PopulationReader;
import org.matsim.core.population.io.PopulationWriter;
import org.matsim.core.scenario.ScenarioUtils;
import org.matsim.pt.transitSchedule.api.TransitScheduleReader;
import org.matsim.pt.transitSchedule.api.TransitScheduleWriter;

public class RunImputeSpatialAttribute {
static public void main(String[] args)
throws ConfigurationException, MalformedURLException, IOException, InterruptedException {
CommandLine cmd = new CommandLine.Builder(args) //
.allowOptions("input-population-path", "input-network-path", "output-population-path",
"output-network-path") //
.requireOptions("shape-path", "shape-attribute", "shape-value", "attribute", EqasimConfigurator.CONFIGURATOR) //
"output-network-path", "input-schedule-path", "output-schedule-path",
EqasimConfigurator.CONFIGURATOR) //
.requireOptions("shape-path", "shape-attribute", "shape-value", "attribute") //
.build();

if (cmd.hasOption("input-population-path") ^ cmd.hasOption("output-population-path")) {
Expand All @@ -36,6 +39,10 @@ static public void main(String[] args)
throw new IllegalStateException("Both input and output path must be given for the network.");
}

if (cmd.hasOption("input-schedule-path") ^ cmd.hasOption("output-schedule-path")) {
throw new IllegalStateException("Both input and output path must be given for the schedule.");
}

// Load shape
String shapeAttribute = cmd.getOptionStrict("shape-attribute");
String shapeValue = cmd.getOptionStrict("shape-value");
Expand Down Expand Up @@ -68,5 +75,14 @@ static public void main(String[] args)
algorithm.run(scenario.getPopulation());
new PopulationWriter(scenario.getPopulation()).write(cmd.getOptionStrict("output-population-path"));
}

// Load schedule
if (cmd.hasOption("input-schedule-path")) {
File populationPath = new File(cmd.getOptionStrict("input-schedule-path"));
new TransitScheduleReader(scenario).readFile(populationPath.toString());
algorithm.run(scenario.getTransitSchedule());
new TransitScheduleWriter(scenario.getTransitSchedule())
.writeFile(cmd.getOptionStrict("output-schedule-path"));
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package org.eqasim.core.simulation.mode_choice.cost;

public abstract class AbstractCostModelWithPreviousTrips extends AbstractCostModel
implements CostModelWithPreviousTrips {
protected AbstractCostModelWithPreviousTrips(String mode) {
super(mode);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package org.eqasim.core.simulation.mode_choice.cost;

import java.util.List;

import org.matsim.api.core.v01.population.Person;
import org.matsim.api.core.v01.population.PlanElement;
import org.matsim.contribs.discrete_mode_choice.model.DiscreteModeChoiceTrip;
import org.matsim.contribs.discrete_mode_choice.model.trip_based.candidates.TripCandidate;

public interface CostModelWithPreviousTrips extends CostModel {
double calculateCost_MU(Person person, DiscreteModeChoiceTrip trip, List<? extends PlanElement> elements,
List<TripCandidate> previousTrips);
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,16 @@ public static void main(String[] args) throws CommandLine.ConfigurationException
Config config = ConfigUtils.loadConfig(commandLine.getOptionStrict("input-config-path"), new EqasimConfigGroup(), new DiscreteModeChoiceConfigGroup());
commandLine.applyConfiguration(config);

run(config);

ConfigUtils.writeConfig(config, commandLine.getOptionStrict("output-config-path"));
}

static public void run(Config config) {
DiscreteModeChoiceConfigGroup discreteModeChoiceConfigGroup = (DiscreteModeChoiceConfigGroup) config.getModules().get(DiscreteModeChoiceConfigGroup.GROUP_NAME);
discreteModeChoiceConfigGroup.setSelector(SelectorModule.MAXIMUM);

EqasimConfigGroup eqasimConfigGroup = (EqasimConfigGroup) config.getModules().get(EqasimConfigGroup.GROUP_NAME);
eqasimConfigGroup.setUsePseudoRandomErrors(true);

ConfigUtils.writeConfig(config, commandLine.getOptionStrict("output-config-path"));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,14 @@ protected double estimateTrip(Person person, String mode, DiscreteModeChoiceTrip
if (estimator == null) {
throw new IllegalStateException(String.format("No estimator registered for mode '%s'", mode));
} else {
double utility = estimator.estimateUtility(person, trip, elements);
double utility = 0.0;

if (estimator instanceof UtilityEstimatorWithPreviousTrips withPreviousTrips) {
utility += withPreviousTrips.estimateUtility(person, trip, elements, previousTrips);
} else {
utility += estimator.estimateUtility(person, trip, elements);
}

utility += epsilonProvider.getEpsilon(person.getId(), trip.getIndex(), mode);
utility -= utilityPenalty.calculatePenalty(mode, person, trip, elements);
return utility;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package org.eqasim.core.simulation.mode_choice.utilities;

import java.util.List;

import org.matsim.api.core.v01.population.Person;
import org.matsim.api.core.v01.population.PlanElement;
import org.matsim.contribs.discrete_mode_choice.model.DiscreteModeChoiceTrip;
import org.matsim.contribs.discrete_mode_choice.model.trip_based.candidates.TripCandidate;

public interface UtilityEstimatorWithPreviousTrips extends UtilityEstimator {
double estimateUtility(Person person, DiscreteModeChoiceTrip trip, List<? extends PlanElement> elements,
List<TripCandidate> previousTrips);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,17 @@
import java.util.List;

import org.eqasim.core.simulation.mode_choice.parameters.ModeParameters;
import org.eqasim.core.simulation.mode_choice.utilities.UtilityEstimator;
import org.eqasim.core.simulation.mode_choice.utilities.UtilityEstimatorWithPreviousTrips;
import org.eqasim.core.simulation.mode_choice.utilities.predictors.CarPredictor;
import org.eqasim.core.simulation.mode_choice.utilities.variables.CarVariables;
import org.matsim.api.core.v01.population.Person;
import org.matsim.api.core.v01.population.PlanElement;
import org.matsim.contribs.discrete_mode_choice.model.DiscreteModeChoiceTrip;
import org.matsim.contribs.discrete_mode_choice.model.trip_based.candidates.TripCandidate;

import com.google.inject.Inject;

public class CarUtilityEstimator implements UtilityEstimator {
public class CarUtilityEstimator implements UtilityEstimatorWithPreviousTrips {
private final ModeParameters parameters;
private final CarPredictor predictor;

Expand Down Expand Up @@ -40,8 +41,9 @@ protected double estimateMonetaryCostUtility(CarVariables variables) {
}

@Override
public double estimateUtility(Person person, DiscreteModeChoiceTrip trip, List<? extends PlanElement> elements) {
CarVariables variables = predictor.predictVariables(person, trip, elements);
public double estimateUtility(Person person, DiscreteModeChoiceTrip trip, List<? extends PlanElement> elements,
List<TripCandidate> previousTrips) {
CarVariables variables = predictor.predictVariables(person, trip, elements, previousTrips);

double utility = 0.0;

Expand All @@ -52,4 +54,9 @@ public double estimateUtility(Person person, DiscreteModeChoiceTrip trip, List<?

return utility;
}

@Override
public double estimateUtility(Person person, DiscreteModeChoiceTrip trip, List<? extends PlanElement> elements) {
throw new IllegalStateException("Need to provide previous trips");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package org.eqasim.core.simulation.mode_choice.utilities.predictors;

import java.util.List;

import org.eqasim.core.simulation.mode_choice.utilities.variables.BaseVariables;
import org.matsim.api.core.v01.population.Person;
import org.matsim.api.core.v01.population.PlanElement;
import org.matsim.contribs.discrete_mode_choice.model.DiscreteModeChoiceTrip;
import org.matsim.contribs.discrete_mode_choice.model.trip_based.candidates.TripCandidate;

public abstract class CachedVariablePredictorWithPreviousTrips<T extends BaseVariables>
implements VariablePredictorWithPreviousTrips<T> {
private DiscreteModeChoiceTrip cacheKey = null;
private T cacheValue = null;

@Override
public T predictVariables(Person person, DiscreteModeChoiceTrip trip, List<? extends PlanElement> elements,
List<TripCandidate> previousTrips) {
if (trip != cacheKey) {
cacheKey = trip;
cacheValue = predict(person, trip, elements, previousTrips);
}

return cacheValue;
}

protected abstract T predict(Person person, DiscreteModeChoiceTrip trip, List<? extends PlanElement> elements,
List<TripCandidate> previousTrips);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,22 @@
import java.util.List;

import org.eqasim.core.simulation.mode_choice.cost.CostModel;
import org.eqasim.core.simulation.mode_choice.cost.CostModelWithPreviousTrips;
import org.eqasim.core.simulation.mode_choice.parameters.ModeParameters;
import org.eqasim.core.simulation.mode_choice.utilities.variables.CarVariables;
import org.matsim.api.core.v01.TransportMode;
import org.matsim.api.core.v01.population.Leg;
import org.matsim.api.core.v01.population.Person;
import org.matsim.api.core.v01.population.PlanElement;
import org.matsim.contribs.discrete_mode_choice.model.DiscreteModeChoiceTrip;
import org.matsim.contribs.discrete_mode_choice.model.trip_based.candidates.TripCandidate;
import org.matsim.core.router.TripStructureUtils;

import com.google.common.base.Verify;
import com.google.inject.Inject;
import com.google.inject.name.Named;

public class CarPredictor extends CachedVariablePredictor<CarVariables> {
public class CarPredictor extends CachedVariablePredictorWithPreviousTrips<CarVariables> {
private final CostModel costModel;
private final ModeParameters parameters;

Expand All @@ -27,7 +29,8 @@ public CarPredictor(ModeParameters parameters, @Named("car") CostModel costModel
}

@Override
public CarVariables predict(Person person, DiscreteModeChoiceTrip trip, List<? extends PlanElement> elements) {
public CarVariables predict(Person person, DiscreteModeChoiceTrip trip, List<? extends PlanElement> elements,
List<TripCandidate> previousTrips) {
double carTravelTime_min = parameters.car.constantParkingSearchPenalty_min;
double accessEgressTime_min = parameters.car.additionalAccessEgressWalkTime_min;

Expand All @@ -44,7 +47,13 @@ public CarVariables predict(Person person, DiscreteModeChoiceTrip trip, List<? e
}
}

double cost_MU = costModel.calculateCost_MU(person, trip, elements);
final double cost_MU;
if (costModel instanceof CostModelWithPreviousTrips) {
cost_MU = ((CostModelWithPreviousTrips) costModel).calculateCost_MU(person, trip, elements, previousTrips);
} else {
cost_MU = costModel.calculateCost_MU(person, trip, elements);
}

double euclideanDistance_km = PredictorUtils.calculateEuclideanDistance_km(trip);

return new CarVariables(carTravelTime_min, cost_MU, euclideanDistance_km, accessEgressTime_min);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package org.eqasim.core.simulation.mode_choice.utilities.predictors;

import java.util.List;

import org.eqasim.core.simulation.mode_choice.utilities.variables.BaseVariables;
import org.matsim.api.core.v01.population.Person;
import org.matsim.api.core.v01.population.PlanElement;
import org.matsim.contribs.discrete_mode_choice.model.DiscreteModeChoiceTrip;
import org.matsim.contribs.discrete_mode_choice.model.trip_based.candidates.TripCandidate;

public interface VariablePredictorWithPreviousTrips<T extends BaseVariables> {
T predictVariables(Person person, DiscreteModeChoiceTrip trip, List<? extends PlanElement> elements,
List<TripCandidate> previousTrips);
}
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ public VDFTravelTime provideVDFTravelTime(VDFConfigGroup config, VDFScope scope,
: new ShapeScenarioExtent.Builder(new File(ConfigGroup
.getInputFileURL(getConfig().getContext(), config.getUpdateAreaShapefile()).getPath()),
Optional.empty(), Optional.empty()).build();

VDFTravelTime vdfTravelTime = new VDFTravelTime(scope, config.getMinimumSpeed(), config.getCapacityFactor(),
eqasimConfig.getSampleSize(), network, vdf, crossingPenalty, updateExtent);
if (config.getInputTravelTimesFile() != null) {
Expand Down
Loading
Loading