Model parameters

Every setting of the model is in ModelParameters, in three files. cfg/main/ModelParameters.dms holds what a run chooses and the assumptions that PBL wants to vary; most users only need this file. cfg/main/ModelParameters/Advanced.dms holds what is agreed with PBL, the technical parameters that rarely need adjustment and the tables that PBL may extend. cfg/main/ModelParameters/Impl.dms holds what follows from the other settings and is not set by hand. In the configuration the last two are the sub-containers ModelParameters/Advanced and ModelParameters/Impl; a name below that starts with Advanced/ or Impl/ is in that sub-container.

How to run the model with these settings is on How to run the model.

Contents


The settings of a run

cfg/main/ModelParameters.dms has six groups:

  1. what is computed: AnalysisMoment, PartOfDay, Orgset and Destset with the Orgset_Single* and Destset_Single* selections, OutputLabel, OutputFormat, Export_TravelledDistance and Export_PriceInformation;
  2. the component: Component, PreTransport and PostTransport;
  3. merging: MergeOutput, MergeComponents, MergeRunNr and MergeCriteria;
  4. assumptions that only change the output: MaxTravelTime, MaxWalkingTime_Org2Dest, MaxCyclingTime_Org2Dest, the time costs of walking and cycling, OVFiets_RentalPrice and the car costs, start and parking time (Car_StartTime is also in the signature of the time-dependent car caches, because it shifts the departure time on the network);
  5. assumptions that make the model recompute intermediate results in %LocalDataProjDir%/IntermediateResults, because they are in the signatures of the caches: the maximum pre- and post-transport times, WalkingSpeed_kmhr and CyclingSpeed_kmhr (pre- and post-transport caches), Cycling_StartTime, Cycling_ParkingTime_IC_Station, MaxPTTime, Max_transfers and the transfer time costs (chain cache), MaxCarTime and UseTomTomNetworkForCars (car caches). The maximum pre-transport times and the cycling start and parking time also enter the chain cache: they set the longest pre-transport leg (Impl/PT_Max_V_Time) and with it the last boarding moment of the chains;
  6. one origin-destination pair: OD_Origin, OD_Destination, OD_DepartureTime and OD_Option; see Routes of an OD pair.

General

Parameter Default Description
AnalysisMoment 'Y2025' The reference date (peildatum): a preset year in Advanced/AnalysisMomentPresets that sets the analysis day, the GTFS feed, and the versions of OSM, TomTom, the administrative boundaries, the BAG and the OV-fiets locations. The reference dates are the second Tuesday of October (#125): Y2015 (13 October 2015), Y2023 (10 October 2023), Y2024 (8 October 2024), Y2025 (14 October 2025) and Y2026 (13 October 2026); see step 2.
PartOfDay 'Ochtendspits' The part of the day of the departure moments, from Advanced/PartsOfDay: 'Ochtendspits' (07:00, 07:15, 07:30, 07:45), 'Middag' (12:00 to 12:45) or 'Avond' (19:00 to 19:45), each four moments a quarter of an hour apart. It sets Advanced/PT_DepartureHours and Impl/Car_CongestionMoment_ForDirect.
Component 'PT' The component of the run (#117): 'WW' (the direct walking trip), 'CC' (the direct cycling trip), 'Car' (the direct car trip, with start and parking time) or 'PT' (a public transport journey: PreTransport + public transport + PostTransport). The direct trips are separate components because they treat some Pareto attributes and the front differently. The name of the component (Impl/ComponentName: WW, CC, Car or <pre>_PT_<post>, such as W_PT_W or C_RM_PT_OVf_C) goes after the label in the name of the output folder, not in the file names in it, to keep the paths short. See Components and merging.
PreTransport Classifications/TimeInvariantTypes/V/Org2Stops_Walking With Component 'PT': the pre-transport type, one of Org2Stops_Walking (W, walking to any stop), Org2Stops_Cycling (C), Org2RM_Stops_Cycling (C_RM, cycling to a rail or metro stop), Org2RMT_Stops_Cycling (C_RMT, rail, metro or tram) or Org2Ric_Stops_Cycling (C_Ric, an InterCity station); the alternatives are comments below the parameter (Advanced/PreTransportTypes).
PostTransport Classifications/TimeInvariantTypes/V/Stops2Dest_Walking With Component 'PT': the post-transport type, one of Stops2Dest_Walking (W), Stops2Dest_Cycling (C), RM_Stops2Dest_Cycling (RM_C), RMT_Stops2Dest_Cycling (RMT_C) or OVF_Stops2Dest_Cycling (OVf_C, the OV-fiets, only from a stop near an OV-fiets location) (Advanced/PostTransportTypes). Only the OV-fiets is rented; the other cycling post-transports use one’s own bicycle at the last stop, at the same costs as one’s own bicycle in the pre-transport (PostTransport_Cycling_Time_Costs).
MergeOutput FALSE Does the run merge the output of the components in MergeComponents instead of computing (NetworkSetup/ComponentMerge)? The output goes to <Analysis_date>_<OutputLabel>_Merged<MergeRunNr>. Component, PreTransport and PostTransport do not count then.
MergeComponents 'WW,W_PT_W,CC,C_PT_W,C_PT_OVf_C,Car' The components that MergeOutput merges, separated by commas: names from Advanced/Components/name. The default gives the options of the 2023 delivery: W_PT (WW and W_PT_W), C_PT (CC, C_PT_W and C_PT_OVf_C) and Car. Their output must exist as parquet (OutputFormat 'parquet'), under the same OutputLabel, reference date, part of the day and origin and destination sets.
MergeRunNr 1 The number of the merge in the name of its output folder, <Analysis_date>_<OutputLabel>_Merged<MergeRunNr>. The merged components are not in the folder name, which would get too long, but in signature.txt in that folder (_samen-<components>, with the signature of each component). Give another set of MergeComponents or MergeCriteria another number: under the same number the run stops at the signature of the folder.
MergeCriteria 'Price,Time,Car,Bike' The criteria of the merge; the components themselves choose on Advanced/MinimiseCriteria. Any subset of Price (or Price_Augm), Time, Car (NeedsCar) and Bike (NeedsBike), down to a single criterion, with at least Price or Time (an integrity check). With 'Time' or 'Price' alone each pair and departure moment keeps exactly one row, the fastest or the cheapest; with 'Price,Time' an option with a car or bicycle can push out one without. Car and Bike count only when a merged component needs a car or one’s own bicycle. See Components and merging.
Orgset 'Buurt2025' The origin set, from Advanced/org_domain_list, including the neighbourhood sets 'Buurt2023' and 'Buurt2025' (#126); see below.
Destset 'Buurt2025' The destination set, from Advanced/dest_domain_list, including 'Buurt2023' and 'Buurt2025'.
OutputLabel 'basis' A short name for the variant, at most 20 characters (letters, digits, - and _). The output goes to %LocalDataProjDir%/Output/<Analysis_date>_<OutputLabel> with the component after it: _ and the name of the component, such as _W_PT_W, _C_PT_OVf_C or _WW, or _Merged<MergeRunNr> for a merge, and _fb for a component that cycles over the Fietsersbond network; see step 6. Give each set of parameters its own label: another set under the same label stops at the signature of that folder.
OutputFormat 'parquet' The format of the output per block and departure moment, 'parquet' or 'csv'. The parquet is compressed with zstd and typed (times in minutes and prices in euro as float32, distances in metres as uint32); the departure moment is in the file name, not in the column names. It has, per kind of component, only the columns that vary within the component and do not follow linearly from others (Impl/ExportClass): WW and CC Traveltime; Car Traveltime and TravelDist_Car; a public transport component Traveltime, Price, Price_Augm, ModeUsed, WaitingTime, PretransTime, PosttransTime and TravelDist_Bus, _Metro, _Tram, _Rail and _Ferry (PTTime is Traveltime minus the pre- and post-transport time; the price parts follow from Price and those times). The csv has all columns that Export_TravelledDistance and Export_PriceInformation include, each with the departure moment after its name. Merging (MergeOutput) reads the parquet of the components and writes its result in this format.
Export_TravelledDistance TRUE Does the csv include the distances, per leg (pre-transport, public transport per mode and in total, post-transport) and per mode (walking, cycling, car)? The parquet does not depend on it.
Export_PriceInformation TRUE Does the csv include the prices: Price, Price_Augm, Price split into pre-transport, public transport and post-transport (PretransPrice, PTPrice, PosttransPrice) and per mode (WalkingPrice, CyclingPrice, CarPrice)? See step 7 of Public transport. Prices are computed and checked whenever this is TRUE or MinimiseCriteria contains a price criterion.

The neighbourhood sets (#126) compute from neighbourhood to neighbourhood. Advanced/NeighbourhoodSets has two variants, each with the CBS neighbourhood boundaries and the BAG of the same year:

  • Buurt2023: CBS 2023 and the BAG of 1 January 2023, 14,421 neighbourhoods, for the reference dates 2015, 2023 and 2024;
  • Buurt2025: CBS 2025 and the BAG of 1 January 2025, 14,729 neighbourhoods, for 2025 and 2026.

The point of a neighbourhood, as origin and as destination, is the centroid of its dwelling addresses; a neighbourhood without dwellings gets the middle of its polygon. When Orgset or Destset is a variant, Impl/BAG_snapshot and Impl/RegioIndelingen_year take its years, whatever AnalysisMoment says, and origins and destinations cannot be different variants. The presets of the reference dates have the same years, so 'Buurt' and the BAG cells follow the variant of the reference date too. With a variant as origin set, Advanced/MaxOrgBlockSize is 33: 450 blocks of at most 33 neighbourhoods.

For a subset of origins, useful for testing, the Orgset_Single* parameters select a single neighbourhood, municipality, province or COROP region; the Destset_Single* parameters select a single neighbourhood, province or COROP region as destinations. The chosen area is part of the origin and destination set in the names and signatures (for example buurt_enkele_corop-kop_van_noord_holland), so two selections do not share a car cache or output file.

Public transport

Parameter Default Description
MaxPTTime 90 min Maximum total public transport travel time, including waiting and transfers.
MaxTravelTime 90 min Maximum total journey time including pre- and post-transport legs.
Transfer_Walking_Time_Costs 0.19 €/min Monetary value assigned to walking time during transfers, used to prevent unrealistically long transfer walks when minimising price.
Transfer_Waiting_Time_Costs 0.05 €/min Monetary value assigned to waiting time at transfer stops.
Max_transfers 3 Maximum number of transfers allowed, 1 to 4. Increasing this significantly increases computation time and memory use.

Car

Parameter Default Description
MaxCarTime 90 min Maximum car travel time.
UseTomTomNetworkForCars TRUE Whether to use the TomTom road network. If false, the OSM network is used instead.
Car_CostPerKm 0.24 €/km The car cost parameter (#88): the price of the direct car trip is its distance times this, plus Car_FixedCosts_PerTrip; see Private transport.
Car_FixedCosts_PerTrip 0 € Fixed amount per car trip, for example parking.
Car_StartTime, Car_ParkingTime 2, 3 min Time added to the direct car trip for getting to the car and for parking at the destination.

Walking and cycling

The networks, speeds, maximum times, extra times and prices of walking and cycling, with all their parameters, are on Walking and cycling legs. In short:

  • the maximum time of each pre- and post-transport type is a parameter of its own, for example MaxWalkingTime_Org2Stops, MaxCyclingTime_Org2RM_Stops or MaxCyclingTime_Stops2Dest; the walking times of types that no component uses are in Advanced, equal to MaxWalkingTime_Org2Stops or MaxWalkingTime_Stops2Dest;
  • the maximum pre- and post-transport times and the speeds are in the signature of the pre- and post-transport caches, so a change makes new pre- and post-transport caches necessary (batch\UpdateAll.cmd legs, or the output step, which writes the missing ones first);
  • the time-cost parameters (PreTransport_Walking_Time_Costs, PostTransport_Cycling_Time_Costs, and so on) attach a monetary value to the travel time of each mode and direction, which matters when MinimiseCriteria includes price.
Parameter Default Description
MaxWalkingTime_Org2Dest, MaxCyclingTime_Org2Dest 90, 90 min Maximum duration of a direct walking or cycling trip.
WalkingSpeed_kmhr, CyclingSpeed_kmhr 4.5, 14 km/h Walking and cycling speed on every link; they are in the signature of the pre- and post-transport caches.
OVFiets_RentalPrice 4.45 € Rental price of the OV-fiets (OVf_C) for the first 24 hours.
Cycling_StartTime 1 min Added to every cycling trip and cycling leg.

Agreed and technical choices

cfg/main/ModelParameters/Advanced.dms holds what is agreed with PBL (MinimiseCriteria, which is in the chain cache signature, and CentroidWeightType), the technical parameters that rarely need adjustment, the maximum walking times of the pre- and post-transport types that no component uses (MaxWalkingTime_Org2RMT_Stops, _Org2RM_Stops, _Org2Ric_Stops, _OVF_Stops2Dest, _RMT_Stops2Dest and _RM_Stops2Dest, equal to MaxWalkingTime_Org2Stops or MaxWalkingTime_Stops2Dest), and the tables that PBL may extend: the presets of the reference dates (AnalysisMomentPresets), the origin and destination sets (org_domain_list, dest_domain_list, NeighbourhoodSets), the parts of the day (PartsOfDay) and the component definitions (PreTransportTypes, PostTransportTypes, PT_Components, DirectComponents and Components).

General

Parameter Default Description
Advanced/CentroidWeightType 'Addresses' Whether to weight neighbourhood centroids by addresses or population.
Advanced/Components/SingleDepartureMoment TRUE for WW, CC and Car, FALSE for the public transport components; for Car not with CarTimeDependent Does the component compute and write one departure moment, the congestion moment of the part of the day (Impl/CongestionMinute, 07:30 in the morning rush), instead of the four quarter-hours of Advanced/PT_DepartureMinutes_All? The direct trips do not depend on the departure moment, except the time-dependent car trip (#132). The merge (MergeOutput) reads the one file of such a component for every departure moment.
Advanced/Components/BlocksPerPortion 50 (25 for the public transport components with cycling pre-transport, 10 for MergeOutput) The number of origin blocks per GeoDmsRun in the output step (batch\UpdateAll.cmd output, batch\WriteOutputBlocks.ps1), one value per component in the table Advanced/Components. For a public transport component it is set per pre-transport type (Advanced/PreTransportTypes/BlocksPerPortion), because the pre-transport sets the memory; it is 50 for WW, CC and Car. 0 puts all blocks in one portion. Each portion pays the start-up again, a few minutes until the first block file (2.5 to 6 minutes for Y2023, Buurt2023 to Buurt2023); a smaller portion keeps the memory of a run lower when it grows per block (in one request a merge grows by about 7 GB per block, hence 10). For one run, the environment variable OUTPUT_BATCHSIZE overrides it (set OUTPUT_BATCHSIZE=20 before UpdateAll.cmd output), and OUTPUT_MAXBLOCKS computes at most that many blocks, for a test.

Public transport

Parameter Default Description
Advanced/MinimiseCriteria 'Price,Time' The criteria of the Pareto front of a component, as agreed with PBL: 'Price', 'Price_Augm', 'Time', or a combination such as 'Price,Time', in any upper or lower case. The price and time criteria are in the signature of the chain cache, so changing them makes the model compute a new chain cache. 'Car' and 'Bike' make car and bicycle ownership criteria of the final selection per departure moment only, so they change the output signature (MinCrit-Price_Time_A_C) but not the chain cache; see Car and bicycle ownership as criteria. Each component chooses on price and time; the ownership criteria belong to the merge, which has its own criteria, MergeCriteria.
Advanced/ChainParetoTimeEpsilon 0.01 The relative epsilon on the travel time (GeoDMS #1282) in the final selection per departure moment, in the merge of the components and, when a leg has a time penalty (flex), in the chain joiner. The price comes first, because the model reports on accessibility poverty: the cheapest option always stays, and a more expensive one only when it is more than ChainParetoTimeEpsilon (1%) faster than the fastest cheaper option kept. Prices, and the remaining times of the chain joiner, are compared exactly; 0 compares the travel time exactly as well. See Public transport.
Advanced/PriceMethod 'DOVA' Price method for regional (non-NS) transport: 'Detailed' (fare table per mode, operator, concession and line; 2023 to 2026) or 'DOVA' (concession-wide km fares from the DOVA overview; 2013 to 2026). Feeds before 2023 always use DOVA. See Public transport fares.
Advanced/NS_TariffChoice 'Price_FullFare' NS tariff class. Options: 'Price_FullFare', 'Price_20pct_Discount', 'Price_40pct_Discount'.
Advanced/MaxTransferDist 500 m Maximum crow-fly distance allowed for a transfer walk between stops.
Advanced/IFF_TransferTime TRUE Does a transfer between two platforms of the same NS station take at least the transfer time of the station in the NS timetable (IFF, Advanced/IFF_file_date) (#123)? In the chain cache signature as _iff<date>. See Transfers.
Advanced/MaxWaitingTimeAtOrigin 899 s Maximum waiting time at the origin before departing.
Advanced/IncludeWaitingAtHomeInTravelTime FALSE Whether waiting time at the origin counts towards total travel time.
Advanced/MaxStopBlockSize 104 Number of stops per stop block of the chain step. Together with NumberOfStopBlocks, this determines peak memory use.
Advanced/NumberOfStopBlocks 500 (1 for an OD pair) Number of stop blocks. MaxStopBlockSize * NumberOfStopBlocks must exceed the number of stops (ChecksBeforeRunning/PT_CheckBlocks).
Advanced/PT_DepartureHours derived The hour of the departure moments: that of PartOfDay (7, 12 or 19). For more hours in one run, raise its nrofrows and give the hours as a list.

Car

Parameter Default Description
Advanced/CarTD_Search, CarTD_WindowStart, CarTD_NrSlots 'pareto_alt'; an hour before the departure hour; 48 The search of the time-dependent car trip ('pareto_alt': distance first, the time profile on the travel time; 'scalar': only the fastest route, for tests), and the window of slots of 300 s (from 06:00 in the morning rush, 4 hours).
Advanced/OSM_MaxSpeedQuantile 0.5 Quantile of the tagged speed limits per road type and country, used for OSM roads without a usable maxspeed tag; see Private transport.
Advanced/ExtraLink_MaxSnapDistance 250 m Maximum distance between an end point of a manual connection (ferries, missing links) and the road network; a connection with an end point further away is left out.
Advanced/CongestionTimes/MaxSpeed 100, 100, 0 km/h Cap on the car speed in the morning, noon and late-evening rush (0 = none), on the TomTom and the OSM network; free flow has no cap. See Private transport.
Advanced/ParetoLegs_Car, Advanced/CarLegDistanceQuantum TRUE, 0.04 km Whether the direct car trip is a (time, distance) Pareto front per pair instead of the fastest route only, and the per-link quantum of the distance criterion with CarFrontEpsilon 0; see Private transport.
Advanced/CarFrontEpsilon, Impl/CarFrontMaxDistance 0.01, 2.5 km per minute of MaxCarTime The relative epsilon of the direct car front (GeoDMS #1282): per destination zone the routes are taken in the order of distance (the price), the shortest first, and a longer route only when it is more than 1% faster than the shorter routes kept, with an exact search because the travel time is bounded. CarFrontMaxDistance is the bound on the distance that the engine requires, wide enough to cut nothing, while MaxCarTime bounds the travel time; see Private transport. It needs an engine that applies the epsilon relatively, as GeoDMS 20.24.2 and later do; see GeoDMS software.

Walking and cycling

Parameter Default Description
Advanced/Cycling_PreTransport_Penalty, Cycling_ParkingTime_IC_Station 0, 3 min Parking time at the end of a cycling pre-transport leg, and the extra parking time when that leg ends at an InterCity station (a stop in PublicTransport_Prep/Impl/Ric_Stops), for every type of cycling pre-transport.
Advanced/CyclingNetwork 'OSM' The network of all cycling legs and the direct cycling trip: 'OSM' or 'Fietsersbond' (#124). OSM is the default at the request of PBL: the Fietsersbond network of 2024 gets no new versions and is compared with OSM first. With the Fietsersbond, ferries up to Advanced/Fietsersbond_MaxFerryLength (2 km) take part with Advanced/Fietsersbond_FerryExtraTime (5 min) extra. When cycling takes part, the output signature has _fb<date>-veer<m>m<min>min and the output folder _fb. See Walking and cycling legs.

Derived settings

cfg/main/ModelParameters/Impl.dms holds what follows from the settings and is not set by hand: the effective dates and years (GTFS_file_date, Analysis_date, FareTable_year, BAG_snapshot), the selections of the run (AllowDirectWalking, AllowDirectCycling, AllowDirectCar, Car_CongestionMoment_ForDirect, CarTimeDependent, PT_DepartureMinutes), and the tags, folders and file names of the caches and the output.

Public transport

Parameter Default Description
Impl/GTFS_file_date derived The download date of the GTFS feed: its folder under %NetworkModel_Dir%/Infrastructuur/GTFS/ and its MMD cache %LocalDataProjDir%/GTFS/<date>.mmd, from the preset of AnalysisMoment. Its year also sets the fare year (see Impl/FareTable_year).
Impl/Analysis_date derived The calendar date for which the timetable is analysed: the reference date of AnalysisMoment. The feed must have a complete timetable on this day, and on the day before or after when the analysis window needs it; its weekday must match CongestionSpeed_DaySelection. These are checked when the network is built; see Create routable network from GTFS files.
Impl/FareTable_year derived Fare year, derived from the year of GTFS_file_date so that the fare table always matches the agency names in the loaded feed. Do not set it by hand. The DOVA year, NS price year and concession area year are derived from it.
Impl/PT_PreTransport_Types derived The pre-transport type of the run: that of PreTransport; see Pre- and post-transport connections on the Public transport page.
Impl/PT_PostTransport_Types derived The post-transport type of the run: that of PostTransport.
Impl/PT_DepartureMinutes derived The minutes of the departure moments within the hour: those of Advanced/PT_DepartureMinutes_All (0, 15, 30, 45); for a component with Advanced/Components/SingleDepartureMoment only the minute of the congestion moment, and for an OD pair with OD_DepartureTime only that moment.

Car

Parameter Default Description
Impl/AllowDirectCar derived Whether the direct car trip takes part in the Pareto front per origin-destination pair, next to AllowDirectWalking and AllowDirectCycling. It follows from Component (Advanced/Components/DirectCar; with MergeOutput, whether a merged component has it).
Impl/Car_CongestionMoment_ForDirect derived Which car travel time the direct trip uses: 'MorningRush', 'NoonRush', 'LateEveningRush' or 'Freeflow' (TomTom only); with the OSM network it is 'MaxSpeed'. It follows PartOfDay: the middle of the hour of the departure moments (07:30, 12:30, 19:30).
Impl/CarTimeDependent UseTomTomNetworkForCars Does the direct car trip use time-dependent link times, with a cache per departure moment (TD07h00m to TD07h45m in the morning rush, which UpdateAll.cmd cars makes) (#132)? See Time periods on the Private transport page. It needs TomTom, a weekday as CongestionSpeed_DaySelection and, for Advanced/CarTD_Search 'pareto_alt', an engine with timedependent_alt.

Walking and cycling

Parameter Default Description
Impl/AllowDirectWalking, Impl/AllowDirectCycling derived Whether the direct walking and cycling trips take part in the Pareto front per origin-destination pair, side by side with each other and with the car. They follow from Component (with MergeOutput, from the merged components).