Originally posted by: SystemAdmin
[anahana said:]
Thank you for getting back to me.
As you said, all vehicles are obviously included in the solution, and non are deactivated using the constraint "next(firstVist) == lastVisit". I also tried passing an array of vehicles, but with no luck; only the vehicles that were used in the initial solution are used to insert new visits (or what ever can fit in those vehicles).
Below are the codes for the "createVehiles" and "addNewVisits" methods, and the output I get when running the code; you will notice in the output that I displayed the solution after the insertion of each visit hoping to know what the problem is, the solution outputs just fine up until IloInsetVisit attempts to insert visit66, it fails and so does all visits after it.
Hope you can help me...
void RoutingModel::createVehicles(char* vehicleFileName)
{
IloCsvReader csvVehicleReader(_env, vehicleFileName);
IloCsvReader::LineIterator it(csvVehicleReader);
while(it.ok())
{
IloCsvLine line = *it;
char * namefirst = line.getStringByHeader("first");
char * namelast = line.getStringByHeader("last");
char * name = line.getStringByHeader("name");
IloNum capacity = line.getFloatByHeader("capacity");
IloNum openTime = line.getFloatByHeader("open");
IloNum closeTime = line.getFloatByHeader("close");
IloNode node1 = IloNode::Find(_env, namefirst);
IloNode node2 = IloNode::Find(_env, namelast);
IloVisit first(node1, namefirst);
_mdl.add(first.getCumulVar(_weight) == 0);
_mdl.add(first.getCumulVar(_time) >= openTime);
IloVisit last(node2, namelast);
_mdl.add(last.getCumulVar(_time) <= closeTime);<br />
IloVehicle vehicle(_env, name);
vehicle.setFirstVisit(first);
vehicle.setLastVisit(last);
vehicle.setCost(_time, 1.0);
vehicle.setCost(_distance, 1.0);
vehicle.setCapacity(_weight, capacity);
_mdl.add(vehicle);
_vehicleArray.add(vehicle);
++it;
}
csvVehicleReader.end();
}
IloBool RoutingSolver::addNewVisit (IloVisitArray _pickupArray, IloVisitArray _deliveryArray)
{
IloVehicleIterator vIt(_mdl);
for(int i = 0; i < _dispatcher.getNbOfVehiclesUsed(); i++)<br /> {
IloVehicle dyVehicle = *vIt;
// if (_dispatcher.getRouteSize(dyVehicle) == 0)
// _solution.add(dyVehicle);
IloDispatcher::RouteIterator rIt(_dispatcher, dyVehicle);
for(int j = 0; j <= 2; j++)<br /> {
if (rIt.ok())
{
IloVisit nextVisit = _dispatcher.getNext(rIt.operator *());
_mdl.add(rIt.operator *().getNextVar() == nextVisit);
}
++rIt;
}
++vIt;
}
for (int i = 25; i <= _pickupArray.getSize() - 1; i++)<br /> {
IloGoal insertPickupVisit = IloInsertVisit(_env, _pickupArray[i], _solution, _instantiateCost);
if (!_solver.solve(insertPickupVisit))
{
_solver.out() << "Cannot insert new pickup visit in solution" << endl;<br /> cout << _pickupArray[i] << endl;<br />// return IloFalse;
}
else
{
_solution.add(_pickupArray[i]);
_mdl.add(IloOrderedVisitPair(_env, _pickupArray[i], _deliveryArray[i]));
IloGoal insertDeliveryVisit = IloInsertVisit(_env, _deliveryArray[i], _solution, _instantiateCost);
if (!_solver.solve(insertDeliveryVisit))
{
_solver.out() << "Cannot insert new delivery visit in solution" << endl;<br /> cout << _deliveryArray[i] << endl;<br />// return IloFalse;
}
else
{
_solution.add(_deliveryArray[i]);
_solution.store(_solver);
cout << IloTerse(_dispatcher) << endl;<br /> }
}
}
for(IloDispatcher::UnperformedVisitIterator uvIt(_dispatcher); uvIt.ok(); ++uvIt)
cout << *uvIt << endl;<br />
return IloTrue;
}
IloBool RoutingSolver::addNewVisit (IloVisitArray _pickupArray, IloVisitArray _deliveryArray)
{
IloVehicleIterator vIt(_mdl);
for(int i = 0; i < _dispatcher.getNbOfVehiclesUsed(); i++)<br /> {
IloVehicle dyVehicle = *vIt;
IloDispatcher::RouteIterator rIt(_dispatcher, dyVehicle);
for(int j = 0; j <= 2; j++)<br /> {
if (rIt.ok())
{
IloVisit nextVisit = _dispatcher.getNext(rIt.operator *());
_mdl.add(rIt.operator *().getNextVar() == nextVisit);
}
++rIt;
}
++vIt;
}
for (int i = 25; i <= _pickupArray.getSize() - 1; i++)<br /> {
IloGoal insertPickupVisit = IloInsertVisit(_env, _pickupArray[i], _solution, _instantiateCost);
if (!_solver.solve(insertPickupVisit))
{
_solver.out() << "Cannot insert new pickup visit in solution" << endl;<br /> cout << _pickupArray[i] << endl;<br />// return IloFalse;
}
else
{
_solution.add(_pickupArray[i]);
_mdl.add(IloOrderedVisitPair(_env, _pickupArray[i], _deliveryArray[i]));
IloGoal insertDeliveryVisit = IloInsertVisit(_env, _deliveryArray[i], _solution, _instantiateCost);
if (!_solver.solve(insertDeliveryVisit))
{
_solver.out() << "Cannot insert new delivery visit in solution" << endl;<br /> cout << _deliveryArray[i] << endl;<br />// return IloFalse;
}
else
{
_solution.add(_deliveryArray[i]);
_solution.store(_solver);
cout << IloTerse(_dispatcher) << endl;<br /> }
}
}
return IloTrue;
}
***output***
***First Solution***
Solver Information...
Number of fails : 25
Number of choice points : 1114
Number of variables : 2393
Number of constraints : 562
Reversible stack (bytes) : 176248
Solver heap (bytes) : 1025308
Solver global heap (bytes) : 145684
And stack (bytes) : 32068
Or stack (bytes) : 48088
Search Stack (bytes) : 16048
Constraint queue (bytes) : 11152
Total memory used (bytes) : 1454596
Running time since creation : 0.5625
---------------
Dispatcher Information...
Number of nodes : 66
Number of visits : 80
Number of vehicles : 15
Number of dimensions : 3
Number of accepted moves : 0
---------------
Total Cost : 2018.99
Number of vehicles used : 5
Number of visits performed : 80
Solution :
Unperformed visits : None
vehicle1 Route : depot -> visit21 -> visit22 -> visit15 -> visit16 -> visit7 -> visit8 -> visit5 -> visit6 -> visit1 -> visit3 -> visit2 -> visit4 -> depot
vehicle2 Route : depot -> visit45 -> visit47 -> visit46 -> visit48 -> visit11 -> visit12 -> visit9 -> visit19 -> visit10 -> visit20 -> depot
vehicle3 Route : depot -> visit27 -> visit28 -> visit23 -> visit41 -> visit35 -> visit29 -> visit24 -> visit42 -> visit36 -> visit30 -> visit13 -> visit17 -> visit14 -> visit18 -> depot
vehicle4 Route : depot -> visit49 -> visit50 -> visit31 -> visit33 -> visit32 -> visit34 -> visit25 -> visit39 -> visit26 -> visit40 -> depot
vehicle5 Route : depot -> visit43 -> visit44 -> visit37 -> visit38 -> depot
vehicle6 : Unused
vehicle7 : Unused
vehicle8 : Unused
vehicle9 : Unused
vehicle10 : Unused
vehicle11 : Unused
vehicle12 : Unused
vehicle13 : Unused
vehicle14 : Unused
vehicle15 : Unused
../../../examples/data/pdp/nodes2.csv // prompt for the new nodes' file
../../../examples/data/pdp/nodes2.csv // new nodes' file
../../../examples/data/pdp/visits2.csv // prompt for new visits' file
../../../examples/data/pdp/visits2.csv // new visits' file
Unperformed visits : None
vehicle1 Route : depot -> visit21 -> visit22 -> visit15 -> visit16 -> visit7 -> visit8 -> visit5 -> visit6 -> visit1 -> visit3 -> visit2 -> visit4 -> depot
vehicle2 Route : depot -> visit45 -> visit47 -> visit46 -> visit48 -> visit11 -> visit12 -> visit9 -> visit19 -> visit51 -> visit10 -> visit20 -> visit52 -> depot
vehicle3 Route : depot -> visit27 -> visit28 -> visit23 -> visit41 -> visit35 -> visit29 -> visit24 -> visit42 -> visit36 -> visit30 -> visit13 -> visit17 -> visit14 -> visit18 -> depot
vehicle4 Route : depot -> visit49 -> visit50 -> visit31 -> visit33 -> visit32 -> visit34 -> visit25 -> visit39 -> visit26 -> visit40 -> depot
vehicle5 Route : depot -> visit43 -> visit44 -> visit37 -> visit38 -> depot
vehicle6 : Unused
vehicle7 : Unused
vehicle8 : Unused
vehicle9 : Unused
vehicle10 : Unused
vehicle11 : Unused
vehicle12 : Unused
vehicle13 : Unused
vehicle14 : Unused
vehicle15 : Unused
Unperformed visits : None
vehicle1 Route : depot -> visit21 -> visit22 -> visit15 -> visit16 -> visit7 -> visit8 -> visit5 -> visit6 -> visit1 -> visit3 -> visit2 -> visit4 -> depot
vehicle2 Route : depot -> visit45 -> visit47 -> visit46 -> visit48 -> visit11 -> visit12 -> visit9 -> visit19 -> visit51 -> visit10 -> visit20 -> visit52 -> depot
vehicle3 Route : depot -> visit27 -> visit28 -> visit23 -> visit41 -> visit35 -> visit29 -> visit24 -> visit42 -> visit36 -> visit30 -> visit13 -> visit17 -> visit14 -> visit18 -> depot
vehicle4 Route : depot -> visit49 -> visit50 -> visit31 -> visit33 -> visit53 -> visit32 -> visit34 -> visit54 -> visit25 -> visit39 -> visit26 -> visit40 -> depot
vehicle5 Route : depot -> visit43 -> visit44 -> visit37 -> visit38 -> depot
vehicle6 : Unused
vehicle7 : Unused
vehicle8 : Unused
vehicle9 : Unused
vehicle10 : Unused
vehicle11 : Unused
vehicle12 : Unused
vehicle13 : Unused
vehicle14 : Unused
vehicle15 : Unused
Unperformed visits : None
vehicle1 Route : depot -> visit21 -> visit22 -> visit15 -> visit16 -> visit7 -> visit8 -> visit5 -> visit6 -> visit1 -> visit3 -> visit2 -> visit4 -> depot
vehicle2 Route : depot -> visit45 -> visit47 -> visit46 -> visit48 -> visit11 -> visit12 -> visit9 -> visit19 -> visit51 -> visit55 -> visit10 -> visit20 -> visit52 -> visit56 -> depot
vehicle3 Route : depot -> visit27 -> visit28 -> visit23 -> visit41 -> visit35 -> visit29 -> visit24 -> visit42 -> visit36 -> visit30 -> visit13 -> visit17 -> visit14 -> visit18 -> depot
vehicle4 Route : depot -> visit49 -> visit50 -> visit31 -> visit33 -> visit53 -> visit32 -> visit34 -> visit54 -> visit25 -> visit39 -> visit26 -> visit40 -> depot
vehicle5 Route : depot -> visit43 -> visit44 -> visit37 -> visit38 -> depot
vehicle6 : Unused
vehicle7 : Unused
vehicle8 : Unused
vehicle9 : Unused
vehicle10 : Unused
vehicle11 : Unused
vehicle12 : Unused
vehicle13 : Unused
vehicle14 : Unused
vehicle15 : Unused
Unperformed visits : None
vehicle1 Route : depot -> visit21 -> visit22 -> visit15 -> visit16 -> visit7 -> visit8 -> visit5 -> visit6 -> visit1 -> visit3 -> visit2 -> visit4 -> depot
vehicle2 Route : depot -> visit45 -> visit47 -> visit46 -> visit48 -> visit11 -> visit12 -> visit9 -> visit19 -> visit51 -> visit55 -> visit10 -> visit20 -> visit52 -> visit56 -> depot
vehicle3 Route : depot -> visit27 -> visit28 -> visit23 -> visit41 -> visit35 -> visit29 -> visit24 -> visit42 -> visit36 -> visit30 -> visit13 -> visit17 -> visit14 -> visit18 -> depot
vehicle4 Route : depot -> visit49 -> visit50 -> visit31 -> visit33 -> visit53 -> visit57 -> visit32 -> visit34 -> visit54 -> visit58 -> visit25 -> visit39 -> visit26 -> visit40 -> depot
vehicle5 Route : depot -> visit43 -> visit44 -> visit37 -> visit38 -> depot
vehicle6 : Unused
vehicle7 : Unused
vehicle8 : Unused
vehicle9 : Unused
vehicle10 : Unused
vehicle11 : Unused
vehicle12 : Unused
vehicle13 : Unused
vehicle14 : Unused
vehicle15 : Unused
Unperformed visits : None
vehicle1 Route : depot -> visit21 -> visit22 -> visit15 -> visit16 -> visit7 -> visit8 -> visit5 -> visit6 -> visit1 -> visit3 -> visit2 -> visit4 -> depot
vehicle2 Route : depot -> visit45 -> visit47 -> visit46 -> visit48 -> visit11 -> visit12 -> visit9 -> visit19 -> visit51 -> visit59 -> visit55 -> visit10 -> visit20 -> visit52 -> visit60 -> visit56 ->
depot
vehicle3 Route : depot -> visit27 -> visit28 -> visit23 -> visit41 -> visit35 -> visit29 -> visit24 -> visit42 -> visit36 -> visit30 -> visit13 -> visit17 -> visit14 -> visit18 -> depot
vehicle4 Route : depot -> visit49 -> visit50 -> visit31 -> visit33 -> visit53 -> visit57 -> visit32 -> visit34 -> visit54 -> visit58 -> visit25 -> visit39 -> visit26 -> visit40 -> depot
vehicle5 Route : depot -> visit43 -> visit44 -> visit37 -> visit38 -> depot
vehicle6 : Unused
vehicle7 : Unused
vehicle8 : Unused
vehicle9 : Unused
vehicle10 : Unused
vehicle11 : Unused
vehicle12 : Unused
vehicle13 : Unused
vehicle14 : Unused
vehicle15 : Unused
Unperformed visits : None
vehicle1 Route : depot -> visit21 -> visit22 -> visit15 -> visit16 -> visit7 -> visit8 -> visit5 -> visit6 -> visit1 -> visit3 -> visit2 -> visit4 -> depot
vehicle2 Route : depot -> visit45 -> visit47 -> visit46 -> visit48 -> visit11 -> visit12 -> visit9 -> visit19 -> visit51 -> visit59 -> visit55 -> visit10 -> visit20 -> visit52 -> visit60 -> visit56 ->
depot
vehicle3 Route : depot -> visit27 -> visit28 -> visit23 -> visit41 -> visit35 -> visit29 -> visit24 -> visit42 -> visit36 -> visit30 -> visit13 -> visit17 -> visit14 -> visit18 -> depot
vehicle4 Route : depot -> visit49 -> visit50 -> visit31 -> visit33 -> visit53 -> visit61 -> visit57 -> visit32 -> visit34 -> visit54 -> visit62 -> visit58 -> visit25 -> visit39 -> visit26 -> visit40 -
> depot
vehicle5 Route : depot -> visit43 -> visit44 -> visit37 -> visit38 -> depot
vehicle6 : Unused
vehicle7 : Unused
vehicle8 : Unused
vehicle9 : Unused
vehicle10 : Unused
vehicle11 : Unused
vehicle12 : Unused
vehicle13 : Unused
vehicle14 : Unused
vehicle15 : Unused
Unperformed visits : None
vehicle1 Route : depot -> visit21 -> visit22 -> visit15 -> visit16 -> visit7 -> visit8 -> visit5 -> visit6 -> visit1 -> visit3 -> visit2 -> visit4 -> depot
vehicle2 Route : depot -> visit45 -> visit47 -> visit46 -> visit48 -> visit11 -> visit12 -> visit9 -> visit19 -> visit51 -> visit59 -> visit55 -> visit10 -> visit20 -> visit52 -> visit60 -> visit56 ->
depot
vehicle3 Route : depot -> visit27 -> visit28 -> visit23 -> visit41 -> visit35 -> visit29 -> visit24 -> visit42 -> visit36 -> visit30 -> visit13 -> visit17 -> visit14 -> visit18 -> depot
vehicle4 Route : depot -> visit49 -> visit50 -> visit31 -> visit33 -> visit63 -> visit53 -> visit61 -> visit57 -> visit32 -> visit34 -> visit64 -> visit54 -> visit62 -> visit58 -> visit25 -> visit39 -
> visit26 -> visit40 -> depot
vehicle5 Route : depot -> visit43 -> visit44 -> visit37 -> visit38 -> depot
vehicle6 : Unused
vehicle7 : Unused
vehicle8 : Unused
vehicle9 : Unused
vehicle10 : Unused
vehicle11 : Unused
vehicle12 : Unused
vehicle13 : Unused
vehicle14 : Unused
vehicle15 : Unused
Cannot insert new delivery visit in solution
Visit[visit66] node : Node[node66] X = 35 Y = 22 Z = 0
Cannot insert new pickup visit in solution
Visit[visit67] node : Node[node67] X = 35 Y = 36 Z = 0
Cannot insert new pickup visit in solution
Visit[visit69] node : Node[node69] X = 37 Y = 31 Z = 0
***Solution including new visit***
Solver Information...
Number of fails : 9
Number of choice points : 4
Number of variables : 2853
Number of constraints : 0
Reversible stack (bytes) : 192268
Solver heap (bytes) : 1217548
Solver global heap (bytes) : 756284
And stack (bytes) : 32068
Or stack (bytes) : 48088
Search Stack (bytes) : 16048
Constraint queue (bytes) : 11152
Total memory used (bytes) : 2273456
Running time since creation : 0
---------------
Dispatcher Information...
Number of nodes : 86
Number of visits : 100
Number of vehicles : 15
Number of dimensions : 3
Number of accepted moves : 0
---------------
Total Cost : -1.#INF
Number of vehicles used : 0
Number of visits performed : 100
Solution :
Unperformed visits : None
vehicle1 : Incomplete
vehicle2 : Incomplete
vehicle3 : Incomplete
vehicle4 : Incomplete
vehicle5 : Incomplete
vehicle6 : Incomplete
vehicle7 : Incomplete
vehicle8 : Incomplete
vehicle9 : Incomplete
vehicle10 : Incomplete
vehicle11 : Incomplete
vehicle12 : Incomplete
vehicle13 : Incomplete
vehicle14 : Incomplete
vehicle15 : Incomplete
#CPOptimizer#DecisionOptimization