Add Optimization with Orders Sequences
The example covers the following features:
- Adding an optimization where certain orders must be visited in a specific sequence (not fixed).
- Defining orders with various fields (e.g., time windows, packages, weights).
- Setting up vehicles with specific constraints.
- Displaying the optimized solution on a map.
In this optimization, some orders must be visited in a specific sequence, but the sequence is not fixed, allowing for flexibility in route planning.
When you run the example application:
- An optimization is created and saved.
- The optimized solution is returned and displayed on the map.
Create Customers and Orders
Each order must have a customer associated with it. You can either:
- Create a new customer and assign it to the order.
- Use an existing customer (refer to the Get Customer example).
Initializing and Adding Customers
- Initialize a
ProgressListenerandvrp::Service. - Create twelve
vrp::Customerobjects and set the desired fields, and add them to the database. - Call the
addCustomer()method from thevrp::Serviceusing thevrp::CustomerandProgressListenerand wait for the operation to be done.
Initializing and Adding Orders
- Create a
vrp::OrderListand add orders to it. Each order must have a customer associated with it. - Create twelve
vrp::Orderobjects and associate one customer for each, set the desired fields, and add them to the database. - Call the
addOrder()method from thevrp::Serviceusing thevrp::OrderandProgressListenerand wait for the operation to be done.
Create Departure
Departures define the starting points for vehicle routes. These locations serve as the origin of a route and can impact optimization by influencing travel distance and time.
- Create a
vrp::Departureobject for the vehicle's starting point.
Create Vehicles and Define Vehicle Constraints
Initializing and adding vehicles
Vehicles are the resources that will be used to fulfill the orders. Each vehicle can have specific constraints and capabilities.
- Create a
vrp::VehicleListand add vehicles to it. - Create a
vrp::Vehicleobject and set the desired fields, such as name, type, status, and capacity. - Call the
addVehicle()method from thevrp::Serviceusing thevrp::VehicleandProgressListenerand wait for the operation to be done.
Define Vehicle Constraints
Vehicle constraints define the limitations and requirements applied to a vehicle during the route optimization process. Ensure that the vehicle operates within its capabilities, such as time windows, capacity, distance, and revenue. There are two ways of defining the constraints. Each vehicle will have a different contraints or we set only one vehicle constraints that will apply to all vehicles.
- Create a
vrp::VehicleConstraintsobject and set the desired constraints. - Add these constraints to a
vrp::VehicleConstraintsList.
Define Order Sequences
Order sequences define the specific order in which certain orders must be visited. This allows for custom routing logic where some orders must be visited in a particular sequence.
- Create a
vrp::OrdersSequenceMapand define the sequence of orders. - Add the sequence to the
vrp::ConfigurationParameters.
Create the Optimization
An optimization represents a set of orders, vehicles, constraints, and other parameters that define a routing problem.
- Create a
vrp::Optimizationobject. - Assign the
OrderList,ConfigurationParameters,VehicleList,VehicleConstraintsList, andDepartureto the optimization.
Displaying Orders on the Map
Once the orders have been added, we can display them on the map.

Initialize Map Components
- Create a
MapServiceListener,OpenGLContext, andMapView.
Highlight Orders and Departures
- Create a
LandmarkListandCoordinatesListusing theOrderListandDeparture. - Instruct the
MapViewto highlight the landmarks (orders and departure). - For better visibility, create a
PolygonGeographicAreafrom theCoordinatesList, and center theMapViewon this area.
Run the Optimization
- Call the
addOptimization()method fromvrp::Service, passing theOptimizationobject and theProgressListener. - After the operation is finished, a solution for optimization will be generated. To view the solution, you need to call the
getSolutionmethod from the optimization, which will return avrp::RouteListcontaining the optimization results.
Display Routes on the Map
Once the optimization is complete and a solution has been found, we can display the solution on the map.

- Ensure that the operation was done, and a solution was found.
- Create a
MarkerCollectionof typePolylinefor the route. - Add the route shape to the
MarkerCollection. - Set the
MarkerCollectionin the map view preferences. - After highlighting on the map, center the screen over the route.