Find the most efficient routes for a fleet of vehicles.
| Name | Level | Description |
|---|---|---|
| Vehicle capacity | Hard | The total demand of all visits assigned to a vehicle must not exceed its capacity. |
| Service finished after max end time | Hard | A visit must be serviced before its maximum end time. |
| Maximize visits assigned | Medium | As many visits as possible should be assigned to a vehicle. |
| Minimize travel time | Soft | Minimize the total travel time of all vehicles. |
Tip
Check out our off-the-shelf model for Field Service Routing. This model goes beyond basic Vehicle Routing and supports additional constraints such as priorities, skills, fairness and more.
- Install Java and Maven, for example with Sdkman:
$ sdk install java $ sdk install maven
-
Git clone the timefold-quickstarts repo and navigate to this directory:
$ git clone https://github.com/TimefoldAI/timefold-quickstarts.git ... $ cd timefold-quickstarts/java/vehicle-routing -
(Optional) If you want to run a licensed edition (Plus / Enterprise), set up your license key first. See the Timefold license tool for instructions.
-
Start the application with Maven:
-
Community Edition
$ mvn quarkus:dev
-
Plus / Enterprise Edition: The profile sets up the correct Maven artifacts to run the licensed version. See the
pom.xmlfor the implementation details.$ mvn quarkus:dev -Denterprise
-
-
Visit http://localhost:8080 in your browser.
-
Click on the Solve button.
Then try live coding:
- Make some changes in the source code.
- Refresh your browser (F5).
- Notice that those changes are immediately visible.
When you're done iterating in quarkus:dev mode, package the application to run as a conventional jar file.
-
Compile it with Maven:
$ mvn package
-
Run it:
$ java -jar ./target/quarkus-app/quarkus-run.jar
Note
To run it on port 8081 instead, add-Dquarkus.http.port=8081. -
Visit http://localhost:8080 in your browser.
-
Click on the Solve button.
-
Build a container image:
$ mvn package -Dcontainer
The container image name
-
Run a container:
$ docker run -p 8080:8080 --rm $USER/vehicle-routing:1.0-SNAPSHOT
To increase startup performance for serverless deployments, build the application as a native executable:
-
Compile it natively.
This takes a few minutes:$ mvn package -Dnative
-
Run the native executable:
$ ./target/*-runner -
Visit http://localhost:8080 in your browser.
-
Click on the Solve button.
Visit timefold.ai.
