Cplex在VS2017下的C++配置以及使用

Cplex安装

论文需要使用线性规划,推荐使用Cplex。

环境配置

编译器使用是vs2017,使用的是Cplex C++ 12.9的api,可以使用学校的邮箱申请使用无阉割版。

配置过程

  • 参考
  • 导入#include <ilcplex/ilocplex.h>看是否可以编译。
  • 宏命令ILOSTLBEGIN,可以调用C++的STL。
  • 调试过程,选择解决方案配置release以及解决方案平台模式x64

调试问题

  • 描述:error C2760: 语法错误: 意外的令牌“标识符”,预期的令牌为“;”
    解决方法:配置属性 > C/C++ > 语言 > 符合模式改成否

简易使用教程

问题描述:求无权无向图的最小顶点覆盖

对于网络 G ( V , E ) G(V,E) G(V,E) 线性规划方程:
m i n ∑ i = 1 , . . . , n a i 1 ≤ a i + a j ≤ 2 , ( i , j ) ∈ E 0 ≤ a i ≤ 1 , i ∈ V , i = 1 , . . . , n . min\sum_{i=1,...,n}a_{i} \\ 1\le a_{i}+a_{j} \le 2,(i,j)\in E \\0\le a_{i}\le1,i\in V , i=1,...,n. mini=1,...,nai1ai+aj2,(i,j)E0ai1,iV,i=1,...,n.

代码

void    VertexCoverLP() {
	IloEnv          env;//定义环境
	IloModel        model(env);//定义模型

	IloIntVar       Ud(env, 0, SIZE);//定义Ud的范围,我这里整形运算
	IloIntVarArray  a(env, SIZE, 0, 1);//定义变量a[1..n],范围[0,1]为整数
	IloRangeArray   constraints(env, EdgeNum, 1, 2);//添加边约束,范围为[1,2]

	model.add(constraints);//添加约束

	IloExpr expr=Ud;//IloExpr 一定要初始化
	for (int i = 0; i < SIZE; i++) {
		expr += a[i];
	}
	model.add(IloMinimize(env, expr));//添加最小约束

	for (int i = 0; i < EdgeSIZE; i++) {//添加边约束
		IloExpr expr = a[edges[i].head] + a[edges[i].tail];
		constraints[i].setExpr(expr);
	}

	IloCplex Solver(model);//定义解题器
	Solver.setOut(env.getNullStream());//不输出求解日志
	Solver.solve();

	for (int i = 0; i < SIZE; i++) {
		if (Solver.getValue(a[i]) == 1) vertices[i].state = 0;
		else  vertices[i].state = 1;
	}
	env.end();
}

参考资料

[1]C++调用Cplex例子(程序基本来源于getting started with Cplex)

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值