Skip to main content

Simulation parameters used in Logistics

only_pdpboolean

Use only pdp mode, if false, default cvrptw is used

trip_costnumber | nullnullable

Trip cost

pipeline_typestring

Single calculation - simple approach: Just one stateless API call and assignment. Two stages: First, an estimation of timestamps; second, a precise calculation.

Possible values: [simple_one_stage, two_stages]

max_pickup_slackinteger | nullnullable

Max pickup nodes slack

max_dropoff_slackinteger | nullnullable

Max dropoff nodes slack

use_path_equalizerboolean

Defines whether to use paths equalizer

Default value: false
path_equalizer_weight

Defines weight of the additional cost element produced by variance of path lengths.

Default value: 100
cvb_fleetmin_time_limitinteger
cvb_fleetmin_solutions_limitinteger
geofence_definition_strategy object
oneOf

By dropoff location. Both pickup and dropoff nodes will be labeled with same geofence Defined by dropoff point

Constant value: by_dropoff
cvb_fleetmin_iterations_limitinteger
use_cvb_local_search_operatorboolean
average_travel_duration_to_nodeinteger | nullnullable

Average travel duration to node

Possible values: >= 0

cvb_local_search_iterations_limitinteger
geofence_vehicle_allocation_strategy object

Geofence vehicle allocation strategy.I.e. how vehicles should be assigned to geofences. Mostly needed for cases when nodes are outside of all geofences. STRICT: Nodes with empty geofence tag can be picked up only by empty vehicle FLEXIBLE: Nodes with empty geofence tag can be picked up by any vehicle

oneOf
string

Geofence vehicle allocation strategy.

Possible values: [strict, flexible]

allow_upload_after_simulation_start_timeboolean | nullnullable

Allow booking updates after the simulation started. Set it to true if new orders can be added after the simuatlation started (for example, for live insertions)

Default value: false
should_set_max_slack_start_location_zeroboolean | nullnullable

Should set max_slack of start-location to zero or not

is_pickup_end_of_tripboolean

Sets if pikcup node should be treated as the end of the trip. THis is required for number of trips vehicle constraint.

is_dropoff_end_of_tripboolean

Sets if dropoff node should be treated as the end of the trip. THis is for number of trips vehicle constraint.

stateless_api_serverstring | nullnullable

Allows selecting a custom solver that supports the stateless API contract for the simulation.

stateless_api_loginstring | nullnullable

If custom stateless API is selected, can be used to overload login from the request context login

stateless_api_passwordstring | nullnullable

If custom stateless API is selected, can be used to overload password from the request context password

should_lock_next_stop_if_vehicle_liveboolean

Locks the upcoming stop during optimization for the vehicles. This helps to avoid driver confusion when they may be required to change the stop they are already driving to as a result of a live order insertion.

Default value: true
should_optimize_fail_to_board_bookingsboolean

Enables or disables default inclusion of failed to pickup orders into optimization

Default value: true
truckban_enabledboolean | nullnullable

A switch to enable or disable truck ban

truckban_strategy object

Strategy on how to address truckban

oneOf
string

Strategy in handling truck ban

Possible values: [default, duplicate_nodes]

truckban_buffer_time_windowsinteger | nullnullable

Buffer time when adjusting time windows due to truckban

booking_order_prioritization object

Activate booking order prioritization

oneOf
string

Strategy in executing booking order prioritization

Possible values: [disabled, strict, non_strict]

slack_costnumber | nullnullable

Slack cost for all the nodes

logistics_optimize_slackboolean | nullnullable

Optimize slacks in logistics mode.

path_constraints_modestring | nullnullable

Path constraints mode.

node_grouping_enabledboolean | nullnullable

Activate node grouping logic

node_grouping_capacity_strategy object

Strategy of the node grouping capacity requirement

oneOf
string

Strategy in deciding how node grouping should be done with respect with the capacity requirement

Possible values: [min, max, median, mean, ignore]

clear_cumulative_limitationsboolean | nullnullable

Clearance of cumulative limitations, if needed

manual_edit_api_minimize_slackboolean | nullnullable

Try to minimize slack in manual edit api.

manual_edit_api_vehicle_logistics_optimize_slackboolean | nullnullable

Whether manual edit api call should have vehicle.logistics_optimize_slack or no

manual_edit_api_use_vehicle_start_timeboolean | nullnullable

Take into account vehicle start time when performing manual edit actions, where applicable.

manual_edit_api_solver_kindManual Edit Api Solver Kind (string)

Kind of the solver to be used with manual edit api.

Possible values: [local, remote]

Default value: LOCAL
manual_edit_finalization_type_pickupsstring | nullnullable

Finalization type of pickup nodes.

manual_edit_finalization_type_dropoffsstring | nullnullable

Finalization type of dropoff nodes.

manual_edit_allow_vehicle_lateboolean

Allow vehicle late.

Default value: true
manual_edit_max_possible_latenessinteger | nullnullable

Maximum possible lateness.

Possible values: >= 1

manual_edit_lateness_penalty_coefficientinteger

Lateness penalty coefficient.

Possible values: >= 0

Default value: 10
manual_edit_optimize_quantitystring | nullnullable

Optimization quantity.

manual_edit_slack_cost_factornumber | nullnullable

Slack cost factor (for manual edit api only)

route_cost_modification_primary object

Additional params for route cost modification for primary routing engine

oneOf
matrix_typeRoute Cost Modification Matrix Type (string)

The type of travel cost matrix in which the route cost modification is applied to

Possible values: [time, distance]

relationRoute Cost Modification Relation (string)

Add penalty cost to nodes whose matrix type value is either greater or less than the specified threshold

Possible values: [greater, less]

thresholdnumber

Threshold value

penaltynumber

Penalty cost

route_cost_modification_secondary object

Additional params for route cost modification for secondary routing engine

oneOf
matrix_typeRoute Cost Modification Matrix Type (string)

The type of travel cost matrix in which the route cost modification is applied to

Possible values: [time, distance]

relationRoute Cost Modification Relation (string)

Add penalty cost to nodes whose matrix type value is either greater or less than the specified threshold

Possible values: [greater, less]

thresholdnumber

Threshold value

penaltynumber

Penalty cost

algorithmstring

Solver to be used for optimization. dynamic should be used for real time operations (on-demand)

Possible values: [static, dynamic]

Default value: static
first_solution_strategyinteger

The first_solution_strategy value defines the first solution-finding strategy to be used during calculations. See the documentation for a detailed explanation of each strategy.

Default value: 0
solution_limitnumber

Limit to the number of solutions generated during the search.

Default value: 10000000
use_local_search_metaheuristicboolean

Flag that enables the use of a local search metaheuristic.

Default value: false
guided_local_search_lambda_coefficientnumber

Parameter of the local search procedure.

Default value: 0.1
use_tsp_optboolean

Flag that enables Traveling Salesperson Problem (TSP) optimization.

Default value: false
time_limit_msnumber

Limit in ms to the time spent in the search.

Default value: 10000000
log_searchboolean

Flag that enables log search.

Default value: false
lns_time_limit_msnumber

Limit in ms to the time spent in the completion search for each local search neighbor.

Default value: 1000
savings_neighbors_rationumber

Savings neighbors ratio.

Default value: 0
waypoints_optimization_second_phaseboolean

Enables second phase waypoints optimization for prebook.

Default value: false
waypoints_solution_limitnumber

Waypoints solution limit in the second phase.

Default value: 1000
optimization_stepnumber

Minimum step by which the solution must be improved in local search.

Default value: 1
use_all_local_search_operatorsboolean

Use all available local search operators.

Default value: false
use_depth_first_searchboolean

If true, the solver should use depth-first search rather than local search to solve the problem.

Default value: false
use_local_search_operatorsstring[]

List of additional local search operator names. Currently supported: extended_swap_active that improves solutions when waypoints are used; logistics_relocate_pair that improves performance when logistics problem is solved in prebook mode.

Possible values: [extended_swap_active, logistics_relocate_pair]

first_solution_strategies_second_stage:integer[]

First solution strategies for second stage (Only one of them is used)

time_limit_ms_second_stageinteger

Maximum calculation time for second stage in milliseconds

vehicle_costsnumber

cost of each vehicle. In scenarios where trips take much longer than 2.78 hours (10000 s) or 10 km (10000 m), vehicle cost of 10000 might lead to higher number of vehicles used (as the cost of initiating additional vehicle is cheaper than using the existing ones).

Default value: 0
vehicle_amortized_linear_cost_factorinteger | nullnullable

Amortized default vehicle cost (linear part)

Default value: null
vehicle_amortized_quadratic_cost_factorinteger | nullnullable

Amortized default vehicle cost (quadratic part)

Default value: null
booking_penaltynumber

The penalty refers to a cost associated with dropping visits to certain locations. In vehicle routing problems, penalties are used to make a trade-off between visiting every location and minimizing overall costs (such as distance or time). If visiting a location is not feasible, a penalty is incurred instead. This allows the solver to skip visits to some locations, especially when visiting them would lead to excessive costs or infeasibility, while still returning a valid solution. This penalty is added to the total objective function and helps guide the solver in making decisions about which locations to skip.

Default value: 10000
mixed_fleetboolean

Only set to true if vehicles are using different routing profile.

Default value: false
use_walking_time_to_reduce_time_windowsboolean

Flag that enables the use of walking time in time window reduction.

Default value: false
time_dependent_transitboolean

If true then optimization goal is always total_distance regardless of the value passed in optimization_quantity.

Default value: false
optimize_quantitystring

Defines the optimization goal. Possible values: total_time - optimize the total time of all routes, and total_distance - optimize the total distance of all routes.

Possible values: [total_time, total_distance]

Default value: total_time
max_slacknumber | nullnullable

Maximum slack in seconds or null if no limitation required.

Default value: null
use_lifo_order_checkboolean

Flag that enables LIFO order check for the nodes of this booking. Used only if use_lifo_order_check is set for the model.

Default value: false
lifo_order_check_on_all_vehiclesboolean

Flag that enables LIFO order checking on all vehicles in the model.

Default value: true
mutually_exclusive_groupsarray[]

List of mutually-exclusive group relations. Group names are set in the group field for bookings and nodes. Each item in the list should be a list of string group names whose bookings (or nodes) cannot be on the same vehicle at the same time. For example, [["group1", "group2"], ["group2", "group3"]] prohibits bookings with groups group1 and group2, as well as group2 and group3, from being transferred in the same vehicle at the same time, but allows simultaneous transfer of bookings with groups group1 and group3. If strictly_exclusive_groups are not set, then this constraint is soft, and its weight is based on the group_crossing_penalty value. To achieve a hard constraint, strictly_exclusive_groups should have a list of such groups. Some groups can have a hard constraint while others have a soft constraint at the same time.

strictly_exclusive_groupsstring[]

List of groups that cannot, under any circumstances, be crossed with other groups. Default: All groups are strictly-exclusive.

group_crossing_penaltynumber

Penalty for crossing non-strictly exclusive groups.

compound_zones object[]

This list contains zones where entering or exiting may require additional time. Compound zone parameters will be applied to nodes belonging to the groups specified in this list, and the compound zone time will be added to the total travel time for those nodes. This allows for optimization against nodes with shorter enter/exit times and supports scenarios with fixed, required docking times.

  • Array [
  • groupsstring[]

    A list of groups that belong to the zone.

    node_uidsstring<uuid>

    Represents and validates UUID string

    enter_timeinteger

    Time in seconds required to enter the zone

    Default value: 0
    exit_timeinteger

    Time in seconds required to exit the zone

    Default value: 0
  • ]
  • cumulative_limitations object[]

    Contains a list describing limitations on the number of cumulative vehicles at the starting depot. This option is used to limit the number of vehicles that can be serviced simultaneously at the same depot, as well as to manage how vehicles are serviced at the depot.

    For this option to work properly, every vehicle should have no more than one node of type vehicle_position, bound as a partial route. This node is a placeholder for the pickup event. If the partial_route contains other nodes, the vehicle_position node must be the last in the list. The list of nodes_uids should hold the UIDs of these pickup nodes. The scheduler will split pickup time intervals into service intervals, each with a duration of depot_service_time. After this, the scheduler will remove the initial pickup nodes and instead insert pickup nodes, one per vehicle, for every service interval.

    Options group and node_uids can be used together in the same cumulative limitation instance.

  • Array [
  • groupstring,null[]

    Nodes belonging to this group will be included in the list identifying the pickup location.

    node_uidsstring<uuid>[]

    List of node UIDs identifying the pickup location.

    depot_service_timenumber

    Time in seconds to service a vehicle in the nodes defined in this object.

    max_cumulative_vehiclesinteger

    Number of vehicles that can be served at these pickup nodes at the same time.

  • ]
  • groups_order object

    Order of groups. A dictionary that should contain group names mapped to an integer sequence number for this group.

    Node ordering depends on their assigned groups and the groups_order configuration:

    1. Nodes with groups in groups_order: These nodes are sorted by their priority values. Higher priority values appear earlier.
    2. Nodes without groups in groups_order: These nodes have the lowest priority and appear after all nodes in point 1.
    3. Nodes with groups in groups_order but with None priority: The order of these nodes is undefined, and they may appear anywhere in the sequence.
    property name*integer
    route_compactness object

    Route compactness is achieved by employing a polylinear model that adds a cost (either time or distance, depending on the optimization goal) to vehicle travel to the nodes. This model penalizes longer travel, thereby promoting more compact routes. Integrated into the total cost function as a soft constraint, this mechanism automatically increases route compactness, balancing it against other optimization penalties.

    matrix_typestring

    Specifies whether to use distance or time. This value does not need to match the optimize_quantity in the payload.

    Possible values: [distance, time]

    ignore_firstboolean

    If true, no penalty is applied to the trip from partial_route to the first subsequent node. Note that penalties are always ignored for internal trips within a multi-node partial_route.

    Default value: true
    ignore_lastboolean

    If true, no penalty is applied to the trip from the last node to partial_route_end. Note that penalties are always ignored for internal trips within a multi-node partial_route.

    Default value: true
    thresholdnumber

    Defines the threshold for applying the penalty. Its units match those of the matrix_type matrix (typically meters for distance, seconds for time).

    relationstring

    Determines if the penalty applies to values above or below the threshold.

    Possible values: [greater, less]

    penalty object
    basenumber

    A number whose units match those of the matrix_type matrix.

    Default value: 0
    ratenumber

    The penalty rate per unit from the matrix_type matrix.

    Default value: 0
    scheduling_modestring

    Choose between default - Pickup and Delivery Problem (PDP) and Capacitated Vehicle Routing Problem with Time Windows (CVRPTW). CVRPTW is only suitable for scenarios with only one pickup point/DC. In this CVRPTW mode, all the pickup nodes are combined together, significantly reducing the number of nodes, which significantly improve the result. Each vehicle is limit to the maximum of one trip (or one pickup), as pickup nodes are combined. Both modes support capacity constrains.

    Possible values: [prebook, prebook_cvrptw]

    calculations_modestring

    In sync mode calculation results will be returned to the initial request, while in async_mode the consumer should retrieve the results by using anotehr request with job_id as a reference

    Possible values: [sync, async]

    use_vehicles_nodesboolean

    Diables on enables used of nodes representing vehicles in optimization

    allow_vehicle_lateboolean

    Relaxes time constrains allowing for vehicles to arrive late to the nodes trading off more efficient routes.

    Default value: false
    vehicle_late_penalty_coefficientinteger

    Penalty coefficient for lateness, used when allow_vehicle_late is true. The higher the penalty, the more weight is given to arrival on time.

    max_possible_latenessinteger | nullnullable

    Time in seconds for max possible lateness. Max lateness is not limited if this is null. Used if allow_vehicle_late is true.

    dropoff_earlierboolean

    If true and the assignment contains loops the algorithm will try to schedule dropoffs earlier, so the passenger will not move through their stop twice. Breaks are not rescheduled. If both dropoff_earlier and pickup_earlier are disabled (unspecified), loop detection is completely off, no analysis is performed, and no relevant actions are taken.

    Default value: false
    pickup_laterboolean

    If true and the assignment contains loops the algorithm will try to schedule pickups later, so the passenger will not move through their stop twice. Breaks are not rescheduled. If both dropoff_earlier and pickup_earlier are disabled (unspecified), loop detection is completely off, no analysis is performed, and no relevant actions are taken.

    use_mixed_time_matrixboolean

    If true then the Solver will take into account each node's possible departure time when query matrix (mixed time matrix mode).

    matrix_timestamp_selectionstring

    If current_time then all nodes will use the current time (from API request) as departure time, if min_time or max_time then node's open or close time will be used.

    Possible values: [current_time, min_time, max_time]

    use_node_weights_costboolean

    If true node weights are used in the cost calculation.

    Default value: false
    cvrptw_artificial_nodes_per_vehicleinteger

    This setting is for CVRPTW mode. If a positive value is present, then vehicle cost is added to the overall cost function if the number of nodes on the path is greater than the given value. A negative value disables additional costs.

    Default value: -1
    calculate_cumulative_distanceboolean

    Enables cumulative distance calculation. If set to true every node in 'vehicles' section in the result will contain 'scheduled_distance' field, which contain distance to this node.

    Default value: false
    exclude_unroutable_bookingboolean

    If enabled, optimization bookings that have unroutable nodes will result in no offer situation (so no vehicle assignemnt assignemnts will occur). Defult is false in which case if a node is unroutable, the optimization engine will use air distance (straight line) approximation between the nodes.

    Routability is determined by the underlying map, selected vehicle profile and any temporary or permanent restrictions in place.

    Default value: false
    use_selective_path_equalizerboolean

    Equalize paths during second stage of calculation. The system will first calculate the minimum number of vehicles required to meet the demand, and it will then balance the workload across the active vehicles based on the selected balancing method (e.g., number of bookings, total trip distance, or total trip time). The system will ensure that the number of vehicles is not increased during the balancing process.

    Default value: false
    Simulation parameters used in Logistics
    {
    "only_pdp": true,
    "trip_cost": 0,
    "pipeline_type": "simple_one_stage",
    "max_pickup_slack": 0,
    "max_dropoff_slack": 0,
    "use_path_equalizer": false,
    "cvb_fleetmin_time_limit": 0,
    "cvb_fleetmin_solutions_limit": 0,
    "cvb_fleetmin_iterations_limit": 0,
    "use_cvb_local_search_operator": true,
    "average_travel_duration_to_node": 0,
    "cvb_local_search_iterations_limit": 0,
    "geofence_vehicle_allocation_strategy": "strict",
    "allow_upload_after_simulation_start_time": false,
    "should_set_max_slack_start_location_zero": true,
    "is_pickup_end_of_trip": true,
    "is_dropoff_end_of_trip": true,
    "stateless_api_server": "string",
    "stateless_api_login": "string",
    "stateless_api_password": "string",
    "should_lock_next_stop_if_vehicle_live": true,
    "should_optimize_fail_to_board_bookings": true,
    "truckban_enabled": true,
    "truckban_strategy": "default",
    "truckban_buffer_time_windows": 0,
    "booking_order_prioritization": "disabled",
    "slack_cost": 0,
    "logistics_optimize_slack": true,
    "path_constraints_mode": "string",
    "node_grouping_enabled": true,
    "node_grouping_capacity_strategy": "min",
    "clear_cumulative_limitations": true,
    "manual_edit_api_minimize_slack": true,
    "manual_edit_api_vehicle_logistics_optimize_slack": true,
    "manual_edit_api_use_vehicle_start_time": true,
    "manual_edit_api_solver_kind": "LOCAL",
    "manual_edit_finalization_type_pickups": "string",
    "manual_edit_finalization_type_dropoffs": "string",
    "manual_edit_allow_vehicle_late": true,
    "manual_edit_max_possible_lateness": 0,
    "manual_edit_lateness_penalty_coefficient": 10,
    "manual_edit_optimize_quantity": "string",
    "manual_edit_slack_cost_factor": 0,
    "route_cost_modification_primary": {
    "matrix_type": "time",
    "relation": "greater",
    "threshold": 0,
    "penalty": 0
    },
    "route_cost_modification_secondary": {
    "matrix_type": "time",
    "relation": "greater",
    "threshold": 0,
    "penalty": 0
    },
    "algorithm": "static",
    "first_solution_strategy": 0,
    "solution_limit": 10000000,
    "use_local_search_metaheuristic": false,
    "guided_local_search_lambda_coefficient": 0.1,
    "use_tsp_opt": false,
    "time_limit_ms": 10000000,
    "log_search": false,
    "lns_time_limit_ms": 1000,
    "savings_neighbors_ratio": 0,
    "waypoints_optimization_second_phase": false,
    "waypoints_solution_limit": 1000,
    "optimization_step": 1,
    "use_all_local_search_operators": false,
    "use_depth_first_search": false,
    "use_local_search_operators": [
    "extended_swap_active"
    ],
    "first_solution_strategies_second_stage:": [
    0
    ],
    "time_limit_ms_second_stage": 0,
    "vehicle_costs": 0,
    "vehicle_amortized_linear_cost_factor": null,
    "vehicle_amortized_quadratic_cost_factor": null,
    "booking_penalty": 10000,
    "mixed_fleet": false,
    "use_walking_time_to_reduce_time_windows": false,
    "time_dependent_transit": false,
    "optimize_quantity": "total_time",
    "max_slack": null,
    "use_lifo_order_check": false,
    "lifo_order_check_on_all_vehicles": true,
    "mutually_exclusive_groups": [
    "string"
    ],
    "strictly_exclusive_groups": [
    "string"
    ],
    "group_crossing_penalty": 0,
    "compound_zones": [
    {
    "groups": [
    "string"
    ],
    "node_uids": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "enter_time": 0,
    "exit_time": 0
    }
    ],
    "cumulative_limitations": [
    {
    "group": [
    null
    ],
    "node_uids": [
    "3fa85f64-5717-4562-b3fc-2c963f66afa6"
    ],
    "depot_service_time": 0,
    "max_cumulative_vehicles": 0
    }
    ],
    "groups_order": {},
    "route_compactness": {
    "matrix_type": "distance",
    "ignore_first": true,
    "ignore_last": true,
    "threshold": 0,
    "relation": "greater",
    "penalty": {
    "base": 0,
    "rate": 0
    }
    },
    "scheduling_mode": "prebook",
    "calculations_mode": "sync",
    "use_vehicles_nodes": true,
    "allow_vehicle_late": false,
    "vehicle_late_penalty_coefficient": 0,
    "max_possible_lateness": 0,
    "dropoff_earlier": false,
    "pickup_later": true,
    "use_mixed_time_matrix": true,
    "matrix_timestamp_selection": "current_time",
    "use_node_weights_cost": false,
    "cvrptw_artificial_nodes_per_vehicle": -1,
    "calculate_cumulative_distance": false,
    "exclude_unroutable_booking": false,
    "use_selective_path_equalizer": false
    }