#include <ilcplex/ilocplex.h>
#include <vector>
using namespace std;
//不要忘记这个ILOSTLBEGIN哦,否则会出错
ILOSTLBEGIN
int main(){
IloEnv env;
try{
IloModel LP(env);
IloNumVarArray x(env, 5, 0, IloInfinity);
IloExpr obj(env);
obj += 0* x[0] + 0.1 * x[1] + 0.2 * x[2] + 0.3 *x[3] + 0.8 * x[4];
IloObjective objective(env);
//用表达式来标记目标函数的方法
objective.setExpr(IloMinimize(env, obj));
//约束类IloCinstraintArray
IloConstraintArray cons_array(env);
LP.add(objective);
//当个约束
IloConstraint cons = x[0] + 2 * x[1] + x[3] == 100;
//add相当于vector中的push_back。所以,删除某个约束的时候注意一下,否则内存溢出或者找不到对应的约束就会报错。
cons_array.add(cons);
LP.add(cons);
cons = 2 * x[2] + 2 * x[3] + x[4]== 100;
cons_array.add(cons);
LP.add(cons);
cons = 3 * x[0] + x[1] + 2*x[2] + 3*x[4] == 100;
cons_array.add(cons);
LP.add(cons);
IloCplex cplex(LP);
cplex.exportModel("LP.lp");
cplex.extract(LP);
if ( cplex.solve() )
env.out() << "Optimal value0: \t"
<< cplex.getObjValue() << endl;
LP.remove(cons_array);
cons = 2 * x[2] + 2 * x[3] + x[4]== 100;
LP.add(cons);
IloCplex cplex2(LP);
cplex2.exportModel("LP2.lp");
if ( cplex2.solve() )
env.out() << "Optimal value1: \t"
<< cplex2.getObjValue() << endl;
}
catch(...){
cerr << "Unknown exception caught in Test!" << endl;
}
env.end();
return 0;
}
如何删除目标函数,同理。主要原理是将约束和目标函数标记为变量,而不能直接删除约束式子,只能删除变量对应的约束。检查的时候可以适用 .exprotModel()。将模型输出来。然后检查。