Originally posted by: SystemAdmin
[nidhi said:]
void LRprob(IloEnv env, IloInt M, IloIntArray wlp, NumMatrix qjmlp, NumMatrix duedates,int **blmlp, NumMatrix remainingtime,
NumMultiDimensional lamda, NumMultiDimensional delta,int **aljmlp, int *jm)
{
IloInt ilp,jlp,klp;
IloInt L = wlp.getSize();
IntMatrix ylmlp(env,L);
IntVarMultiDimensional zljmlp(env,L);
IntVarMultiDimensional xljmlp(env,L);
ilp=0; jlp = 0;
std::cout<<"inside LRProb"<<endl;<br /> for(ilp=0;ilp<L;ilp++)<br /> ylmlp[ilp] = IloIntArray(env,M,0,1);
IloSolution solxljmlp(env);
solxljmlp = solveSP1(env,M,lamda,wlp,jm,qjmlp);
std::cout<<solxljmlp.getValue(xljmlp[0][0][0]);<br />
// ylmlp = solveSP2(env,delta,blmlp,aljmlp,L,jm,M);
for(ilp=0;ilp<L;ilp++)<br /> {
zljmlp[ilp] = IntVarMatrix(env,M);
for(jlp=0;jlp<M;jlp++)<br /> zljmlp[ilp][jlp] = IloIntVarArray(env,jm[jlp],0,1);
}
//zljmlp =
for(ilp=0;ilp<M;ilp++)<br /> solveSP3(M, jm, wlp, lamda, remainingtime, duedates, aljmlp, ilp);
}
IloSolution solveSP1(IloEnv env, IloInt M,NumMultiDimensional lamda, IloIntArray wlp, int *jmlp, NumMatrix qjmlp)
{
IloModel model(env);
IloInt ilp, jlp,klp;
IloInt temp;
IloInt L = wlp.getSize();
IntVarMultiDimensional xljmlp(env,L);
for(ilp=0;ilp<L;ilp++)<br /> {
xljmlp[ilp] = IntVarMatrix(env,M);
for(jlp=0;jlp<M;jlp++)<br /> xljmlp[ilp][jlp] = IloIntVarArray(env,jmlp[jlp],0,25);
}
//constraint 1
for(ilp=0;ilp<M;ilp++)<br /> for(jlp=0;jlp<jmlp[ilp];jlp++)<br /> {
IloExpr cons1(env);
for(klp=0;klp<L;klp++)<br /> cons1 = cons1 + xljmlp[klp][ilp][jlp];
model.add(cons1 == qjmlp[ilp][jlp]);
}
//Constraint 2
for(ilp=0;ilp<L;ilp++)<br /> {
IloExpr cons2(env);
for(jlp=0;jlp<M;jlp++)<br /> for(klp=0;klp<jmlp[jlp];klp++)<br /> cons2 = cons2 + xljmlp[ilp][jlp][klp];
model.add(cons2 <= wlp[ilp]);<br /> }
IloExpr spobj1(env);
for(ilp=0;ilp<L;ilp++)<br /> for(jlp=0;jlp<M;jlp++)<br /> spobj1 = IloScalProd(lamda[ilp][jlp],xljmlp[ilp][jlp]);
spobj1 = spobj1 * (-1);
IloObjective spobj = IloMinimize(env,spobj1);
model.add(spobj);
spobj1.end();
IloCplex cplex1(env);
cplex1.extract(model);
if(!cplex1.solve())
env.error()<<"failed to optimize lp. "<<endl;<br /><br /> std::fstream write_data; <br /> write_data.open("input.txt",ios::out);
write_data<<L;<br /> write_data<<" "<<M;<br /> for(int i=0;i<M;i++)<br /> write_data<<jmlp[i]<<" ";
write_data<<endl;<br /> IloSolution solution(env);
solution.add(spobj);
solution.setValue(spobj, cplex1.getObjValue());
std::cout<<"vlaues of xljmlp are :"<<endl;<br /> for(ilp=0;ilp<L;ilp++)<br /> {for(jlp=0;jlp<M;jlp++)<br /> for(klp=0;klp<jmlp[jlp];klp++)<br /> {
solution.add(xljmlp[ilp][jlp][klp]);
solution.setValue(xljmlp[ilp][jlp][klp], cplex1.getValue(xljmlp[ilp][jlp][klp]));
std::cout<<cplex1.getValue(xljmlp[ilp][jlp][klp])<<" "; <br /> write_data<<cplex1.getValue(xljmlp[ilp][jlp][klp])<<" ";
}
std::cout<<endl; write_data<<endl;}<br /> write_data.close();
return solution;
}
the code works without error and solves SP1 but terminates abnormally after writing the values inside function SP1 i.e it does not execute after returning from the function.
Can anyone help.
#DecisionOptimization#OPLusingCPLEXOptimizer