1、主要内容

  • Cplex 简介
  • 安装Visual Studio 2017 (64位)
  • 安装cplex12.9 (64位)
  • 在 Windows 上设置 Cplex
  • 在 Visual Studio 中将 Cplex 链接
  • 代码逻辑介绍

2、Cplex简介

  • Cplex是IBM公司开发的一款商业版的优化引擎;
  • 该引擎专门用于求解大规模的线性规划(LP)、二次规划(QP)、带约束的二次规划(QCQP)、二阶锥规划(SOCP)等四类基本问题,以及相应的混合整数规划(MIP)问题;
  • 软件IBM ILOG CPLEX Optimization Studio中自带该优化引擎;
  • 并且与众多优化软件及语言兼容(与C++,JAVA,EXCEL,Matlab等都有接口),因此在西方国家应用十分广泛;
  • 本次将介绍使用visual studio(C++) & IBM ILOG CPLEX(Cplex) 解决线性规划问题
  • Matlab & Cplex 搭配也很常用,感兴趣的同学可以自行了解

CPLEX具有的优势

  • 能解决一些非常困难的行业问题;
  • 求解速度非常快;
  • 有时还提供超线性加速功能的优势。

3、安装Cplex 12.9

因版权问题,CPLEX安装教程忽略

测试是否安装成功
Windows+R 打开命令符 ,输入cmd,键入 cplex 若出现下图界面则安装成功;
在这里插入图片描述

4、在 Windows 上设置 CPLEX

  • 从“开始”菜单中,选择“控制面板”。
  • 在“控制面板”中,选择“系统”。
  • 在“系统”对话框中,选择“高级”选项卡。
  • 在“高级”选项卡上,单击“环境变量”按钮。
  • 添加或扩展 PATH 环境变量。 如果 PATH 环境变量已存在,请将其扩展,如下所示:
    Name: PATH
    Value: %PATH%;C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\bin\x64_win64
  • 重新启动 Visual Studio 和其他应用程序以使操作系统中的此更改生效。

在vs2017中选择“文件-新建-项目-visual C+±空项目”,然后在“名称”一栏输入项目名称“CplexTest”,选择项目文件的“位置”,点“确定” 。
在这里插入图片描述
在“名称”一栏输入项目名称“CplexTest”,选择项目文件的“位置”,点“确定” 。
在这里插入图片描述
在解决方案CplexTest的源文件夹下,新建一个cpp文件。
在这里插入图片描述
将cpp文件起名为“TestCode”,并粘贴附上的测试代码。
在这里插入图片描述

5、测试代码

对应LP问题:

min x1 + 2 x2 + 3 x3
s.t. -x1 + x2 + x3 ≤ 20
x1 - 3 x2 + x3 ≤ 30
0 ≤ x1 ≤ 40
0 ≤ x2
0 ≤ x3

代码:

#include <ilcplex/ilocplex.h>
#include <stdio.h>
using namespace std;

ILOSTLBEGIN
int main(void *) {
	IloEnv env;
	try {
	IloModel model(env);
	IloNumVarArray vars(env);
	vars.add(IloNumVar(env, 0.0, 40.0));  // 0 <= x1 <= 40
	vars.add(IloNumVar(env));  // 0 <= x2
	vars.add(IloNumVar(env));  // 0 <= x3
model.add(IloMaximize(env, vars[0] + 2 * vars[1] + 3 * vars[2])); //maximize x1 + 2 x2 + 3 x3
	model.add(-vars[0] + vars[1] + vars[2] <= 20);//subject to -x1 + x2 + x3 <= 20
	model.add(vars[0] - 3 * vars[1] + vars[2] <= 30);//x1 - 3 x2 + x3 <=30
IloCplex cplex(model);
		if (!cplex.solve()) {
			env.error() << "Failed to optimize LP." << endl;
			throw(-1);  }
		IloNumArray vals(env);
		env.out() << "Solution status = " << cplex.getStatus() << endl;
		env.out() << "Solution value = " << cplex.getObjValue() << endl;
		cplex.getValues(vals, vars);
		env.out() << "Values = " << vals << endl;
	}
	catch (IloException & e) { cerr << "Concert exception caught: " << e << endl; }
	catch (...) { cerr << "Unknown exception caught" << endl; }
	env.end();
system("pause");
	return 0;
}

将状态栏中的配置改为“Release”,活动平台改为“x64”。
在这里插入图片描述
选中解决方案“CplexTest”,右键-“属性”,打开该方案的属性选项页面。同样要保证:配置中为“活动(Release)”,平台为“活动(x64)”。
在这里插入图片描述
在属性页中依次选择:“C/C++”-“常规” ,选中“附加包含目录”,点开右侧下拉选框,分别选择以下两个文件夹,
Cplex安装位置\cplex\include
Cplex安装位置\concert\include
点击 “确定”,再点击“应用”。
在这里插入图片描述
在属性页中依次选择:“C/C++”-“预处理器” ,选中“预处理器定义”,点开右侧下拉选框,输入如下三个定义 “NDEBUG”,“_CONSOLE”,“IL_STD”,一行一个,注意下划线和大写。然后点击“确定”,再点击“应用”。
在这里插入图片描述
在属性页中依次选择:“C/C++”-“代码生成” ,将“运行库”设置为“多线程 DLL (/MD)” ,点击“应用”。
在这里插入图片描述
在属性页中依次选择:“链接器”-“常规” ,选中“附加库目录”,点开右侧下拉选框,分别选择以下两个文件夹,点击 “确定”-“应用”。
C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\lib\x64_windows_vs2015\stat_mda
C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\concert\lib\x64_windows_vs2015\stat_mda

在属性页中依次选择:“链接器”-“输入” ,选中“附加依赖项”,点开右侧下拉选框,输入以下三个路径(可复制),点击 “确定”-“应用”。
C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\lib\x64_windows_vs2015\stat_mda\cplex1290.lib
C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\lib\x64_windows_vs2015\stat_mda\ilocplex.lib
C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\concert\lib\x64_windows_vs2015\stat_mda\concert.lib

点击状态栏中的“本地Windows调试器”,出现下图则链接成功。
在这里插入图片描述
在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐