C++调用cplex如何添加删除约束

#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()。将模型输出来。然后检查。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值