Originally posted by: Allexandre
Hi Daniel,
I had few progress, but I found the local where I have the Error: IloExtractable 722 IloNumVarI has not been extracted by IloAlgorithm 0x5fd32e0
It is this piece of code:
double solve_sp(DAT &d, MP_CPX_DAT &mp, SP_CPX_DAT &sp){
IloEnv env = sp.cplex.getEnv();
sp.cplex.solve();
sp._fo = sp.cplex.getObjValue();
//sp.cplex.getValues(sp.x_,sp.x);
for (int i = 0; i <= (d.n-1); i++){
for (int j = 1; j <= d.n; j++){
if(i != j){
if (!((i == 0) && (j == d.n))){
if(i != 0){
for (int o = 1; o <= (d.Q - d.oferta[j]); o++){
cout << "i=" << i << ", j=" << j << ", o=" << o << endl;
getchar();
sp.x_[d.n*d.Q*(i) + d.Q*(j-1) + (o)] = sp.cplex.getValue(sp.x[d.n*d.Q*(i) + d.Q*(j-1) + (o)]);
cout << "x[" << i << ", " << j <<", "<< o <<"] = " << sp.x_[d.n*d.Q*(i) + d.Q*(j-1) + (o)] << endl;
//{(i,j) in A, o in 0..C: i != 0 and o + o_i[j] <= C and o > 0}
}
}
else{ // i == 0 and o == 0
//cout << i<<", "<<j<<", "<< 0 << endl;
//getchar();
sp.x_[d.n*d.Q*(i) + d.Q*(j-1) + (0)] = sp.cplex.getValue(sp.x[d.n*d.Q*(i) + d.Q*(j-1) + (0)]);
cout << "x["<<i<<", "<<j<<", "<< 0 <<"] = " << sp.x_[d.n*d.Q*(i) + d.Q*(j-1) + (0)] << endl;
//union {(i,j) in A, o in 0..0: i = 0}
}
}
}
}
}
//*/
if(sp.cplex.getStatus() != IloAlgorithm::Optimal){
cout << "Error Subproblem" << endl;
exit(1);
}
else{
cout << "SP is optimal!, FOSP = " << sp._fo << endl;
}
//*/
return 0.0;
}
When my indexes are i=1, j=2, o=1 (first time inside for (int o = 1; o <= (d.Q - d.oferta[j])) it returned this error. On the model, I declare in this way:
void cg_sp_create_model(DAT &d, SP_CPX_DAT &spe){
IloEnv env = spe.cplex.getEnv();
spe.x = IloNumVarArray(env, d.n3, 0.0, 1.0, ILOINT);
spe.x_ = IloNumArray(env, d.n3);
spe.pi_ = IloNumArray(env, d.n);
spe.constraints = IloRangeArray(env);
IloExpr spfoe(env);
for (int i = 0; i <= (d.n-1); i++){
for (int j = 1; j <= d.n; j++){
if(i != j){
if (!((i == 0) && (j == d.n))){
if(i != 0){
for (int o = 1; o <= (d.Q - d.oferta[j]); o++){
if (j != d.n){
//sum{(i,j,o) in Ac: j in Vplus}(-pi_j[j])*x[i,j,o]
spfoe += (-spe.pi_[(j-1)]) * spe.x[d.n*d.Q*(i) + d.Q*(j-1) + (o)];
}
else{
//sum{(i,0,o) in Ac}(c[i,0,o])*x[i,0,o]
spfoe += d.c[i][j]*spe.x[d.n*d.Q*(i) + d.Q*(j-1) + (o)];
}
}
}
else{ // i == 0 and o == 0
spfoe += (-spe.pi_[(j-1)]) * spe.x[d.n*d.Q*(i) + d.Q*(j-1) + (0)];
//union {(i,j) in A, o in 0..0: i = 0}
}
}
}
}
}
spfoe -= spe.pi0_; // -pi_0
spe.fo = IloAdd(spe.mod, IloMinimize(env, spfoe));
spfoe.end();
Why there is a variable x, I think it is empty, if in its declaratio, x should be 0 or 1??
Thanks a lot!
#CPLEXOptimizers#DecisionOptimization