VROOM-Project / vroom

Vehicle Routing Open-source Optimization Machine
http://vroom-project.org/
BSD 2-Clause "Simplified" License
1.31k stars 328 forks source link

Vroom API: Partial deliveries / Full truck loads / Priority #1146

Closed heiko86 closed 1 day ago

heiko86 commented 2 weeks ago

Hello,

I'm running a python/django/react project for tour planning and optimization for my own business purpose. There's a postgresql database with locations (along with restrictions like opening times, Truck lift requirements... ) and vehicles (7 trucks so far). The goods I'm shipping are pallets only with dimensions larger than 1200x800mm each.

I am using the vroom API.

There are 3 issues I have so far: 1) partial deliveries: I'm splitting the jobs into smaller jobs which I give to vroom for optimization. So I have like 3 jobs for the same customer splitted into more smaller jobs. As a result vroom does partial deliveries quite often. Is there any other way to handle this issue with vroom directly?

Vroom creates a tour with like 4 to 5 stops and all stops are partial deliveries. Wouldn't it make more sense to reduce the amounts of stops by adding more partial jobs of the same job until the car reaches its maximum load capacity?

2) Full truck loads: When having full truck loads (13.6 loading meters) splitted into smaller jobs, vroom refuses to make a whole truck for one customer even though it would be the economically best solution. Any idea how to handle that?

3) Priority: Every job is submitted to the vroom API with priority 0. For fixed-date-deliveries vroom gets the job with priority 50. In the tour creation screen I am able to mark transports I need to ship with the tour. These Transports receive priority 100.

The created tour barely includes the priority 100 job. Any idea how to handle this issue?

Thank you!

jcoupey commented 2 weeks ago

As a result vroom does partial deliveries quite often. Is there any other way to handle this issue with vroom directly?

If you expect not to get partial deliveries in the solution, what about not splitting jobs in the first place?

vroom refuses to make a whole truck for one customer even though it would be the economically best solution

If you think you have a situation with a suboptimal solution, please share a reproducible instance along with what you consider the "right" solution.

The created tour barely includes the priority 100 job. Any idea how to handle this issue?

Same here, if you think you get a solution that is suboptimal with regard to priority score, please share a reproducible instance.

heiko86 commented 2 weeks ago

Thank you for your fast reply.

If you expect not to get partial deliveries in the solution, what about not splitting jobs in the first place?

I need to do partial deliveries. The average transport size ist about 6 Pallets. So if you have 3 jobs with 6 pallets without partial deliveries you would end up using 12 of 17 pallet spots in the truck. So partial deliveries is in fact what I want.

Let's stay in our example:

Job 1: Client A: 1 Job with 6 Pallets divided into 2 internal jobs with 3 pallets each Job 2: Client A: 1 Job with 9 Pallets divided into 3 internal jobs with 3 pallets each Job 3: Client A: 1 Job with 7 Pallets divided into 3 internal jobs with 3 pallets (2x) and 1 pallet (1x)

These jobs are in the query with another 60 jobs. I'm planning one vehicle. Now vroom comes along and picks one subjob from Job 1 (3 Pallets) and 1 subjob from Job 3 (1 pallet) und mixes these up with jobs from other clients.

Why doesn't it fill up the truck with jobs from one client? Is there a solution on the vroom side to handle partial deliveries itself without splitting up the job into subjobs?

This evening I can send you a reproducible instance for the other issues I realized. Thanks in advance,

kind regards

jcoupey commented 2 weeks ago

Why doesn't it fill up the truck with jobs from one client?

Again, it is impossible to give a precise answer without looking at the instance and solution, along with the "solution" you'd expect.

jcoupey commented 1 day ago

Closing as stale, feel free to re-open with additional input.