Originally posted by: JoeBen
I create a cplex C++ program to resolve a mathematical issue :
#include <ilcplex/ilocplex.h>
ILOSTLBEGIN
int main(int, char**)
{
IloEnv env;
try {
IloInt i;
IloInt NbTime=4;
IloNum Epv=0.9;
IloNum Ewt=0.9;
IloNum Ebc=0.9;
IloNum Ebd=0.8;
IloNum Eg=0.9;
IloNum Eex=0.9;
IloNum Einv=0.9;
IloNum Cpv_coef=0.9;
IloNum Cwt_coef=0.9;
IloNum Cg_coef=0.9;
IloNum Cb_coef=0.9;
IloNum Cl_coef=0.9;
IloNumVarArray Cpv(env, NbTime, 0.0, IloInfinity);
IloNumVarArray Cwt(env, NbTime, 0.0, IloInfinity);
IloNumVarArray Cg(env, NbTime, 0.0, IloInfinity);
IloNumVarArray Cb(env, NbTime, 0.0, IloInfinity);
IloNumVarArray Cl(env, NbTime, 0.0, IloInfinity);
IloModel model(env);
IloNum Ppv_max =10.0;
IloNum Pwt_max =20.0;
IloNum Pb_max =30.0;
IloNum Plac_max =40.0;
IloNum Pldc_max =35.0;
IloNum Pg_max =25.0;
IloNum Pex_max =16.0;
IloNum Ppv_lim [] = { 16, 2, 77, 40, 121 };
IloNum Pwt_lim [] = { 36, 23, 33, 40, 34 };
IloNum Pb_lim [] = { 16.0, 2.0, 46, 55, 13 };
IloNum Plac_lim [] = { 16, 2, 33, 40, 34 };
IloNum Pldc_lim [] = { 16, 2,56, 66, 12 };
IloNum Pg_lim [] = { 16, 2, 76, 12, 34 };
IloNum Pex_lim [] = { 16, 2, 88, 13, 45 };
IloFloatVarArray Pp;
IloFloatVarArray Ppv;
IloFloatVarArray Pwt;
IloFloatVarArray Pb;
IloFloatVarArray Plac;
IloFloatVarArray Pldc;
IloFloatVarArray Pl;
IloFloatVarArray Pg_buy;
IloFloatVarArray Pg_sell;
IloFloatVarArray Pex;
Ppv = IloFloatVarArray(env, NbTime, 0.00, Ppv_max);
Pwt = IloFloatVarArray(env, NbTime, 0.00, Pwt_max);
Pb = IloFloatVarArray(env, NbTime, 0.00, Pb_max);
Plac = IloFloatVarArray(env, NbTime, 0.00, Plac_max);
Pldc = IloFloatVarArray(env, NbTime, 0.00, Pldc_max);
Pl = IloFloatVarArray(env, NbTime, 0.00, Plac_max + Pldc_max);
Pg_buy = IloFloatVarArray(env, NbTime, 0.00, Pg_max);
Pg_sell = IloFloatVarArray(env, NbTime, 0.00, Pg_max);
Pex = IloFloatVarArray(env, NbTime, 0.00, Pex_max);
IloNum Pp_lim [NbTime];
IloNum Pl_lim [NbTime];
for (i=0;i<NbTime;i++){
model.add(Eg*Pg_buy[i]==Plac[i]+Eex*Pex[i]-Pwt[i]);
model.add(Eex*Pex[i]==(Pwt[i]+Ppv[i])-Pldc[i]+Ebc*Pb[i]);
model.add(Pl[i]==Pldc[i]+ Plac[i]);
}
for (i=0;i<NbTime;i++){
Pp_lim[i]=(Epv*Ppv_lim[i]+Ewt*Pwt_lim[i])/Einv;
Pl_lim[i]=Plac_lim[i]+Pldc_lim[i];
}
for (i=0;i<NbTime;i++){
if(Pp_lim[i]>Pl_lim[i]){
model.add(Pb[i]/Ebd==Pb_lim[0]+(Pp_lim[i]-Pl_lim[i]));
model.add(Pg_sell[i]/Ebc==Eg/(3600*Ebd)*(Pb_lim[i+1]-Pb_max));
Pg_buy[i].setUB(0);
}
if(Pp_lim[i]==Pl_lim[i]){
Pg_sell[i].setUB(0);
Pg_buy[i].setUB(0);
model.add(Pb[i-1]==Pb[i]);
}
if(Pp_lim[i]<Pl_lim[i]){
Pg_sell[i].setUB(0);
Pg_buy[i].setUB(0);
model.add(Pb[i]/Ebd==Pb_lim[0]+(Pl_lim[i]-Pp_lim[i]));
}
}
IloExpr Cost_pv = IloExpr(env);
IloExpr Cost_wt = IloExpr(env);
IloExpr Cost_l = IloExpr(env);
IloExpr Cost_g = IloExpr(env);
IloExpr Cost_b = IloExpr(env);
for (i=0;i<NbTime;i++){
Cost_pv+=1/3600*(Cpv[i]*Ppv[i]);
Cost_wt+=1/3600*(Cwt[i]*Pwt[i]);
Cost_l+=1/3600*(Cl[i]*Pl[i]);
Cost_g+=1/3600*(Cg[i]*Pg_sell[i]);
Cost_b+=1/3600*(Cb[i]*Pb[i]);
}
model.add(IloMinimize(env,Cost_pv+Cost_wt+Cost_l+Cost_g+Cost_b));
// Optimize
IloCplex cplex(model);
cplex.solve();
for (i=0;i<NbTime;i++){
env.out() << i << ") " << cplex.getValue(Cost_pv+Cost_wt+Cost_l+Cost_g+Cost_b) << endl;
}
}
catch (IloException& ex) {
cerr << "Error: " << ex << endl;
}
catch (...) {
cerr << "Error" << endl;
}
env.end();
return 0;
}
I get this error or no solution exist :
CPXPARAM_MIP_Strategy_CallbackReducedLP 0
Infeasible column 'x31'.
Presolve time = 0.00 sec. (0.00 ticks)
0) 0
1) 0
2) 0
3) 0
#CPLEXOptimizers#DecisionOptimization