-
Notifications
You must be signed in to change notification settings - Fork 338
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Flipped order inside vehicle array impacts result quality (problem instance included). #671
Comments
Hi, thank you for you bug report. I can reproduce the problems exactly as you describe them. I looked a bit into Problem A and identified commit 575d389 as the first vroom version where it occurs. |
Fwiw, I managed to reproduce problem A with a somewhat smaller instance: |
First, thanks @PattyDePuh for sharing a detailed descriptions and instances, it makes it much easier to look at! I think it all comes down to the solving path being changed across various inputs and We're always ending up in a local minimum, which is fine as long as users can't easily come up with a better solution. Here the new Now on why this happens, it's in a way quite similar to what we experienced with priorities in #319. I think this is related to the fact that in instance Regarding the B and C points: any change applied to the input is bound to change the search path and it so happens that the ones you tried lead to one more assigned job. That's just a better local minimum, though I definitely don't want to have to explain situation B to a client. ;-) |
Easiest way to fix this I can think of off the top of my head would be to somehow order vehicles based on the number of jobs they can actually perform (including skills filtering). This would have the additional advantage of removing the vehicles shuffling side-effect from situation C above.
|
Quick update on the numbered ideas from previous comment.
I think both are good to have overall regardless of the exact effect on the particular instances discussed here. |
Greetings!
*TLDR:
Description
Given the following problem instance from the zip-folder:
4_instances_on_v8_and_latest.zip
And its alterations:
And the same instaces as above, but order of vehicles inside the array is flipped:
For all given 4 instances, there are VROOM outputs from version 1.8 and "latest".
In the scenario of those problem instances, a solution is considered "good",
if all jobs are getting assigned - observeable by the "unassigned" key inside the result JSON.
The overall cost optimization is not relevant.
The three phenomena occurring:
A) Worse solution with latest build.
On instance "46_jobs.json"
we find a good solution with VROOM v1.8 - using 9 from 10 available vehicles -
while the "latest" build is only capable to assign all jobs but one.
B) Adding one more jobs results in a good solution
On instance "47_jobs.json"
both vroom versions are capable to find a good solution - both using only 9 from 10 available vehicles.
It shall be mentioned, that the added job (id:0) could be served by the unused vehicle.
Considering the "bad" solution from "46_jobs.json", this is quite troubling as logically it's hard to explain to anyone that a more complicated instance achieves a good result but a less complicated instance doesn't.
C) Changing the vehicle order
If changing the vehicle order - as in "46_jobs_flipped.json" and "47_jobs_flipped.json" respectively -
none VROOM version is capable to reproduce the "good" solution.
Thoughts
While problem C is problematic for consistency and reproduction purposes/debugging,
it is to some degree explainable: Input different - output different.
Problem A and B however are troubling.
Questions
Would you consider these behaviours as acceptable or can this already be considered as bug?
I get that I could use an existing solution as input for a following optimization, but that is hard to decide in advance when gradually adding more jobs as you don't know in advance when you should use an existing solution or rather leave VROOM more freedom.
The text was updated successfully, but these errors were encountered: