Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How does SwissRailRaptor score different access modes? Overestimation of Bike as Access mode #2999

Open
synas34 opened this issue Dec 18, 2023 · 1 comment

Comments

@synas34
Copy link

synas34 commented Dec 18, 2023

Hello there,

I have a model of Tokyo to examine Ridesharing autonomous vehicles and how they may interact with transit. I am using the Discrete Choice Model module for my mode choice as seen below. I am also defining a few access modes: walk to rail, robotaxi(drt) to rail, and finally, bike-to-rail. The relevant parts of the config file are posted below. It seems that the module is able to score the walk and drt at a reasonable mode ratio, however it is overestimates the bike to rail acccess mode choice. I am having difficulty to determine what parameter I should change to calibrate the SwissRailRaptor mode choice, and I hope someone can guide me to the relevant code or config file section.

So far I have tried to change the RaptorParameter: marginalUtilityOfWaitingPt_utl_s in the config file and through my main method but have not seen results. these code changes are below. If anyone could suggest the way forward it would be greatly appreciated

image

	<!-- This module is dedicated to configuring the multi-modal DRT (Demand Responsive Transport). -->
	<module name="multiModeDrt">
		<parameterset type="drt">
			<!-- The search strategy for finding a vehicle for a DRT request. -->
			<parameterset type="ExtensiveInsertionSearch"/>
			<!-- The duration of a stop in seconds. This is the time a vehicle waits at a stop. -->
			<param name="stopDuration" value="60"/>
			<!-- Operational Scheme, either of door2door, stopbased or serviceAreaBased. door2door by default -->
			<param name="operationalScheme" value="serviceAreaBased"/>
			<!-- Maximum wait time in seconds before being picked up by a DRT vehicle. -->
			<param name="maxWaitTime" value="600"/>
			<!-- Alpha parameter for max travel time estimation. Used to increase the travel time estimation based on direct travel time. -->
			<param name="maxTravelTimeAlpha" value="3.0"/>
			<!-- Beta parameter for max travel time estimation. This value in seconds will be added to the estimated travel time. -->
			<param name="maxTravelTimeBeta" value="1200"/>
			<param name="drtServiceAreaShapeFile" value="Shapefiles/EntireOdakyuCorridorUTM54N.shp"/>
			<param name="vehiclesFile" value="outputdrts0S4(200).xml"/>

			<parameterset type="zonalSystem">
				<!-- Specifies how the zones are generated. Here, it's based on a grid derived from the network. -->
				<param name="zonesGeneration" value="ShapeFile"/>
				<!-- The cell size of the grid in meters. This defines the size of each zone in the zonal system. -->
				<param name="cellSize" value="100"/>
				<param name="zonesShapeFile" value="Shapefiles/EntireOdakyuCorridorUTM54N.shp"/>
			</parameterset>

			<parameterset type="rebalancing">
				<!-- Uses the min-cost flow rebalancing strategy. -->
				<parameterset type="minCostFlowRebalancingStrategy">
					<!-- Target alpha value for the rebalancing strategy. -->
					<param name="targetAlpha" value="0.5"/>
					<!-- Target beta value for the rebalancing strategy. -->
					<param name="targetBeta" value="0.5"/>
				</parameterset>
			</parameterset>

			<parameterset type="drtfare">
				<!-- Base fare for a DRT trip. -->
				<param name="basefare" value="0.0"/>
				<!-- Daily subscription fee for using the DRT service. -->
				<param name="dailySubscriptionFee" value="0.0"/>
				<!-- Fare per meter of travel. -->
				<param name="distanceFare_m" value="0.05"/>
				<!-- Fare per hour of travel. -->
				<param name="timeFare_h" value="0"/>
				<!-- Minimum fare charged per DRT trip. -->
				<param name="minFarePerTrip" value="0.50"/>
			</parameterset>
		</parameterset>
	</module>


	<module name="swissRailRaptor" >
		<!-- Sets whether intermodal access and egress modes are selected by least cost (default) or randomly chosen out of the available access / egress modes. -->
		<param name="intermodalAccessEgressModeSelection" value="CalcLeastCostModePerStop" />
		<param name="useIntermodalAccessEgress" value="true" />
		<param name="useRangeQuery" value="true" />
		<param name="scoringParameters" value="Default" />
		<param name="transferPenaltyBaseCost" value="200" />
		<param name="transferPenaltyCostPerTravelTimeHour" value="200" />
		<param name="transferPenaltyMaxCost" value="700" />
		<param name="transferPenaltyMinCost" value="130" />
		<param name="useModeMappingForPassengers" value="true" />

		<!-- The configuration for walking as access/egress mode. -->
		<parameterset type="intermodalAccessEgress" >
			<!-- Initial distance around a person's origin or destination within which transit stops are looked for. -->
			<param name="initialSearchRadius" value="1500.0" />
			<!-- Maximum distance a person is willing to walk to/from a transit stop. -->
			<param name="maxRadius" value="2500.0" />
			<!-- If less than 2 transit stops are found within the initial search radius,
                 this value is added to the initial radius iteratively until transit stops are found or maxRadius is reached. -->
			<param name="searchExtensionRadius" value="500.0" />
			<!-- mode of transport for this parameterset is walking. -->
			<param name="mode" value="walk" />
		</parameterset>


		<parameterset type="intermodalAccessEgress" >
			<!-- Initial distance around a person's origin or destination within which transit stops are looked for. -->
			<param name="initialSearchRadius" value="1500.0" />
			<!-- Maximum distance a person is willing to walk to/from a transit stop. -->
			<param name="maxRadius" value="2500.0" />
			<!-- If less than 2 transit stops are found within the initial search radius,
                 this value is added to the initial radius iteratively until transit stops are found or maxRadius is reached. -->
			<param name="searchExtensionRadius" value="500.0" />
			<!-- mode of transport for this parameterset is walking. -->
			<param name="mode" value="bike" />
		</parameterset>

<!--		<parameterset type="intermodalAccessEgress" >-->
<!--			&lt;!&ndash; Initial distance around a person's origin or destination within which transit stops are looked for. &ndash;&gt;-->
<!--			<param name="initialSearchRadius" value="1500.0" />-->
<!--			&lt;!&ndash; Maximum distance a person is willing to walk to/from a transit stop. &ndash;&gt;-->
<!--			<param name="maxRadius" value="2500.0" />-->
<!--			&lt;!&ndash; If less than 2 transit stops are found within the initial search radius,-->
<!--                 this value is added to the initial radius iteratively until transit stops are found or maxRadius is reached. &ndash;&gt;-->
<!--			<param name="searchExtensionRadius" value="500.0" />-->
<!--			&lt;!&ndash; mode of transport for this parameterset is walking. &ndash;&gt;-->
<!--			<param name="mode" value="ride" />-->
<!--		</parameterset>-->


				<!-- The configuration for DRT as access/egress mode. -->
		<parameterset type="intermodalAccessEgress" >
			<param name="mode" value="drt" />
			<!-- Initial distance around a person's origin or destination within which transit stops are looked for when using DRT. -->
			<param name="initialSearchRadius" value="3000.0" />
			<!-- If specific link IDs are to be used for DRT, they would be specified by an attribute.
                 In this case, no such attribute is set (null). -->
			<param name="linkIdAttribute" value="null" />
			<!-- Maximum distance a person is willing to travel using DRT to/from a transit stop. -->
			<param name="maxRadius" value="4000.0" />
			<!-- Specific agent attributes  considered for DRT access/egress. -->
			<param name="personFilterAttribute" value="null" />
			<param name="personFilterValue" value="null" />
			<!-- Similar to walking, if fewer transit stops are found,
                 this value is added to the initial radius until stops are found or maxRadius is reached. -->
			<param name="searchExtensionRadius" value="3000.0" />
			<!-- If sharing of DRT vehicles is considered, this defines the maximum search radius for potential ride-sharing opportunities.
                 Here, it's set to infinity, meaning there's no limit. -->
			<param name="shareTripSearchRadius" value="Infinity" />
			<!-- If transit stops are filtered based on specific attributes, those would be defined here.
                 In this case, no such attributes are set. -->
			<param name="stopFilterAttribute" value="null" />
			<param name="stopFilterValue" value="null" />
		</parameterset>

		<parameterset type="rangeQuerySettings" >
			<param name="maxEarlierDeparture_sec" value="300" />
			<param name="maxLaterDeparture_sec" value="300" />
		</parameterset>
		<parameterset type="routeSelector" >
			<param name="betaDepartureTime" value="0.0" />
			<param name="betaTransferCount" value="3000.0" />
			<param name="betaTravelTime" value="1" />
			<param name="subpopulations" value="" />
		</parameterset>

		<parameterset type="modeMapping">
			<param name="routeMode" value="local" />
			<param name="passengerMode" value="pt" />
		</parameterset>
		<parameterset type="modeMapping">
			<param name="routeMode" value="express" />
			<param name="passengerMode" value="pt" />
		</parameterset>
	</module>

	<module name="DiscreteModeChoice">
		<param name="modelType" value="Tour" />
		<param name="selector" value="MultinomialLogit" />
		<param name="tourConstraints" value="VehicleContinuity,SubtourMode" />
		<param name="tourFinder" value="PlanBased" />
		<param name="tripEstimator" value="NasirEstimatorName" />
		<param name="tourEstimator" value="Cumulative" />

		<parameterset type="modeAvailability:Car">
			<param name="availableModes" value="pt, car, walk, bike, drt" />
		</parameterset>
	</module>

		config = ConfigUtils.loadConfig( "examples/scenarios/Odakyu4/configSAVnoride.xml", new MultiModeDrtConfigGroup(),
				new DvrpConfigGroup(), new OTFVisConfigGroup(),new DiscreteModeChoiceConfigGroup());

                config.controler().setOverwriteFileSetting( OutputDirectoryHierarchy.OverwriteFileSetting.deleteDirectoryIfExists );
		config.controler().setOutputDirectory("examples/scenarios/Odakyu4/outputDec14(200)NewUtil-1seatSAV");
		// possibly modify config here
		config.qsim().setSimStarttimeInterpretation(QSimConfigGroup.StarttimeInterpretation.onlyUseStarttime);
		config.qsim().setSimEndtimeInterpretation((QSimConfigGroup.EndtimeInterpretation.onlyUseEndtime));

		// Create an instance of RaptorParameters
		SwissRailRaptorConfigGroup raptorConfig = (SwissRailRaptorConfigGroup) config.getModules().get("raptor");
		RaptorParameters raptorParameters = new RaptorParameters(raptorConfig);

		// Set the marginal utility of travel time for different travel modes
		raptorParameters.setMarginalUtilityOfTravelTime_utl_s("bike", -50);


		Controler controller = DrtControlerCreator.createControler(config, false);

		// Add Discrete Choice Module
		controller.addOverridingModule(new DiscreteModeChoiceModule());
		controller.addOverridingModule(new NasirSAVDMCExtension());
		DiscreteModeChoiceConfigurator.configureAsModeChoiceInTheLoop(config);


		// Run the simulation
		controller.run();

		<parameterset type="modeParams">
			<param name="constant" value="-1.5" />
			<param name="marginalUtilityOfTraveling_util_hr" value="-500.8" />
			<param name="mode" value="bike" />
			<param name="monetaryDistanceRate" value="0.0" />
		</parameterset>
@markusstraub
Copy link
Contributor

Hey, have a look at matsim-org/matsim-code-examples#722 - there is already some discussion about the problem you noticed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants