Orienteering Problem (OP)

Category
Routing
Formulation
Combinatorial
Objective
Maximize
Time limit
60 s per instance
Paper
Solving the Orienteering Problem through Branch-and-CutMatteo Fischetti, Juan José Salazar González, Paolo Toth · INFORMS Journal on Computing, 1998

Description

A single vehicle is stationed at a depot and must depart from it, visit a subset of cities, and return to the depot, forming a closed tour. There are n cities in total, including the depot, which is designated as city 1. Every pair of distinct cities is connected by a direct link whose travel time is known, nonnegative, and symmetric, meaning the time to travel between any two cities is the same in either direction. Each city other than the depot has an associated nonnegative prize value; the depot has a prize of zero. All prizes, travel times, and the time budget are integers.

The vehicle must complete its tour within a given maximum total travel time. The tour must start and end at the depot, and every city on the tour is visited exactly once. The tour must form a single connected cycle passing through the depot; that is, every visited city other than the depot must be reachable from the depot along the edges of the tour without passing through any unvisited city, which prevents the solution from decomposing into disconnected subtours. A visited city is entered and exited exactly once, meaning exactly two links of the tour are incident to it. An unvisited city has no tour links incident to it. The tour must contain at least three cities (including the depot), so trivial back-and-forth trips between two cities are not permitted.

The planner must decide which subset of cities to include in the tour and which links to traverse. The goal is to maximize the total prize collected, defined as the sum of the prize values of all visited cities, subject to the requirement that the sum of travel times along all links used in the tour does not exceed the maximum allowed travel time.

Instance schema

{
  "n": "<int> Total number of cities, including the depot.",
  "depot": "<int> City designated as the vehicle's home base, where the tour must start and end.",
  "t0": "<int> Maximum total travel time allowed for the tour.",
  "prizes": "<dict, key: '{city}'> Prize value collected when each city is visited.",
  "travel_times": "<dict, key: '({city_i},{city_j})' with city_i < city_j> Symmetric travel time between each pair of cities."
}

Solution schema

{
  "objective_value": "<float> Total prize collected from all visited cities.",
  "visited_nodes": "<list[int], length variable> Cities included in the tour.",
  "edges": "<list[list[int]]> Pairs of cities connected by links used in the tour.",
  "tour": "<list[int]> Ordered sequence of cities visited, starting and ending at the depot."
}

Public instances

For development. Scoring uses private instances, which are never published. Sign in to download them.

  • large_instance_1.json60 s
  • tiny_instance.json60 s

Checker

The checker our evaluation runs, from the FrontierOR benchmark (CC BY 4.0) with the recomputed objective added to its result. How to run it. Sign in to download it.

  • feasibility_check.py