Originally posted by: SystemAdmin
[alain.chabrier said:]
Hi,
do you have a .dat file that makes the model infeasible at the beginning but which should be feasible with more vehicles ?
Here is how I would at least change the model :
int n= ...;
int nv =...;
float Dis[1..n][1..n]=...;
float demand[1..n]=...;
int cap=...;
float t[1..n]=...;
float trat[1..n][1..n]=...;
float time=...;
dvar boolean x[1..nv][1..n][1..n];
dvar float y[2..n];
dvar boolean x2[2..n][2..n];
execute {
writeln("preprocess with nv = "+nv);
}
minimize
sum(v in 1..nv, i in 1..n, j in 1..n) Dis[i][j]*x[v][i][j];
subject to{
A:
forall(j in 2..n)
sum(i in 1..n, v in 1..nv)x[v][i][j]==1;
B:
forall(i in 2..n)
sum(j in 1..n,v in 1..nv)x[v][i][j]==1;
C:
forall(p in 1..n, v in 1..nv)
sum(i in 1..n)x[v][i][p]-sum(j in 1..n)x[v][p][j]==0;
D:
forall(v in 1..nv)
sum(i in 1..n)(demand[i]*sum(j in 1..n)x[v][i][j])<=cap;<br />E:
forall(v in 1..nv)
sum(i in 1..n)(t[i]*sum(j in 1..n)x[v][i][j])+sum(i, j in 1..n)trat[i][j]*x[v][i][j]<=time;<br />
F:
forall(v in 1..nv)
sum(j in 2..n)x[v][1][j]<=1;<br />
G:
forall(v in 1..nv)
sum(i in 2..n)x[v][i][1]<=1;<br />
H://subtour
forall(i, j in 2..n:i!=j)
sum(v in 1..nv)x[v][i][j] == x2[i][j];
I://subtour
forall(i, j in 2..n:i!=j)
y[i]-y[j]+n*x2[i][j]<=n-1; <br />
}
main{
thisOplModel.generate();
var masterDef = thisOplModel.modelDefinition;
var masterCplex = cplex;
var masterOpl0 = thisOplModel;
var masterData0 = masterOpl0.dataElements;
//masterOpl0.addDataSource(masterData0);
var numofvehicle = masterData0.nv;
var best = 999999.0;
var curr =Infinity;
while(numofvehicle <= 10){<br /> // best = curr;
//masterOpl0.addDataSource(masterData0);
var opl =new IloOplModel(masterDef, masterCplex);
opl.addDataSource(masterData0);
opl.generate();
writeln("Solve with number of vehicles = ",numofvehicle);
if(cplex.solve()){
curr = cplex.getObjValue();
writeln();
writeln("Obj = ", curr);
}
else{
writeln("No Solution");
}
// if(curr == best )break;
if (curr != Infinity) {
best = curr;
}
writeln("curr = ",curr);
writeln("best = ",best);
writeln("masterData0.nv = ",masterData0.nv);
//if(curr = Infinity)writeln("Infeasible");
numofvehicle++;
masterOpl0.dataElements.nv = numofvehicle;
masterData0.nv = numofvehicle;
writeln("masterData0.nv = ",masterData0.nv);
}
0;
}
#DecisionOptimization#OPLusingCPLEXOptimizer