VROOM-Project / vroom

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

Problem in input and output data #1157

Open AlirezaAzizi14 opened 1 week ago

AlirezaAzizi14 commented 1 week ago

Hi I have an issue with the output using this input data. My problem is that I'm passing this data to the algorithm, but unfortunately, despite having 3 vehicles, all the jobs are being assigned to vehicle number 1. What do you think could be the cause of this problem?

input_data = { "vehicles": [ { "id":1, "start_index":0, "end_index":3, "start":[2.35044, 48.71764], "end":[2.35066, 48.71777] }, { "id":2, "start_index":0, "end_index":3, "start":[3.35044, 49.71764], "end":[3.35096, 49.71747] }, { "id":3, "start_index":0, "end_index":3, "start":[1.35044, 47.71764], "end":[1.35096, 47.71747] } ], "jobs": [ { "id":1414, "location_index":1, "location": [1.98935, 47.701], "priority":1 }, { "id":1515, "location_index":2, "location": [2.03655, 48.61128], "priority":2 }, { "id":1616, "location_index":3, "location": [3.03655, 49.61128], "priority":3 }, { "id":1717, "location_index":3, "location": [4.03655, 50.61128], "priority":0 }, { "id":1818, "location_index":3, "location": [1.03655, 45.61128], "priority":1 },{ "id":1919, "location_index":3, "location": [2.03655, 44.61128], "priority":4 } ], "matrices": { "car": { "durations": [ [0,2104,197,1299], [2103,0,2255,3152], [197,2256,0,1102], [1299,3153,1102,0] ] } } }

Output from Vroom : { "code": 0, "summary": { "cost": 5461, "routes": 1, "unassigned": 0, "setup": 0, "service": 0, "duration": 5461, "waiting_time": 0, "priority": 11, "distance": 2016365, "violations": [], "computing_times": { "loading": 0, "solving": 0, "routing": 14 } }, "unassigned": [], "routes": [ { "vehicle": 1, "cost": 5461, "setup": 0, "service": 0, "duration": 5461, "waiting_time": 0, "priority": 11, "distance": 2016365, "steps": [ { "type": "start", "location": [ 2.35044, 48.71764 ], "location_index": 0, "setup": 0, "service": 0, "waiting_time": 0, "arrival": 0, "duration": 0, "violations": [], "distance": 0 }, { "type": "job", "location": [ 1.98935, 47.701 ], "location_index": 1, "id": 1414, "setup": 0, "service": 0, "waiting_time": 0, "job": 1414, "arrival": 2104, "duration": 2104, "violations": [], "distance": 144015 }, { "type": "job", "location": [ 2.03655, 48.61128 ], "location_index": 2, "id": 1515, "setup": 0, "service": 0, "waiting_time": 0, "job": 1515, "arrival": 4359, "duration": 4359, "violations": [], "distance": 261059 }, { "type": "job", "location": [ 2.03655, 44.61128 ], "location_index": 3, "id": 1919, "setup": 0, "service": 0, "waiting_time": 0, "job": 1919, "arrival": 5461, "duration": 5461, "violations": [], "distance": 799000 }, { "type": "job", "location": [ 1.03655, 45.61128 ], "location_index": 3, "id": 1818, "setup": 0, "service": 0, "waiting_time": 0, "job": 1818, "arrival": 5461, "duration": 5461, "violations": [], "distance": 1006395 }, { "type": "job", "location": [ 4.03655, 50.61128 ], "location_index": 3, "id": 1717, "setup": 0, "service": 0, "waiting_time": 0, "job": 1717, "arrival": 5461, "duration": 5461, "violations": [], "distance": 1699383 }, { "type": "job", "location": [ 3.03655, 49.61128 ], "location_index": 3, "id": 1616, "setup": 0, "service": 0, "waiting_time": 0, "job": 1616, "arrival": 5461, "duration": 5461, "violations": [], "distance": 1884711 }, { "type": "end", "location": [ 2.35066, 48.71777 ], "location_index": 3, "setup": 0, "service": 0, "waiting_time": 0, "arrival": 5461, "duration": 5461, "violations": [], "distance": 2016365 } ], "violations": [],

jcoupey commented 1 week ago

The purpose of route optimization is to minimize the cost of serving all jobs. In your example, doing everything with a single vehicle is overall cheaper, so this is the expected solution.

In general, if not all jobs can be served by a single vehicle, then it means there are underlying business constraints: capacity, timing etc. You have to take those into account in order to improve the model and have the solutions match your workflow.

AlirezaAzizi14 commented 1 week ago

How should I apply a constraint? I want the constraint to be such that no courier is assigned more than 5 orders. How can I implement this?

jcoupey commented 1 week ago

How should I apply a constraint?

First by looking up existing options in the docs: https://github.com/VROOM-Project/vroom/blob/master/docs/API.md#input.

no courier is assigned more than 5 orders.

That is supported, please refer to the vehicle object documentation.