4.13.2017 更新。注:找到一个更快的方法,对于 Visual Studio 的用户几乎是免配置直接用。

步骤就一步:

直接用 Visual Studio 打开 C:\Program Files\IBM\ILOG\CPLEX_Studio1271\cplex\examples\x64_windows_vs2015\stat_mdd\blend.vcxproj,然后 build。

当然,具体路径应根据自己电脑的安装路径修改。但是有个不方便的地方是,blend.vcxproj 所指向的 blend.cpp 文件并不在同一个地方。为了方便以后写代码,可以这么做:

  • 用记事本打开 blend.vcxproj,翻到最后,把 <ClCompile Include="..\..\src\cpp\blend.cpp" /> 替换为 <ClCompile Include="blend.cpp" />
  • 将 blend.cpp 文件拷贝到 blend.vcxproj 所在文件夹即可。
  • 用这两个文件作为模板,写自己的代码。这两个文件可以拷贝到系统的任何地方。

以下为原文,写于 2.14.2016


以前使用 CPLEX 都是在 CPLEX Studio 里用 OPL 语言,或者用 AMPL 调用 CPLEX solver。这类建模语言特别容易上手。然而做 research 毕竟还是需要更灵活的使用 CPLEX,稍微混合几个算法就实现不了。

尝试在 VS 2012 中调用 CPLEX 接口,硬是从第一步 #include <ilcplex/ilocplex.h> 就卡住。为了让示例程序跑起来,配置过程中又不断发现坑。网上竟然也没有一个完整的 step by step 的指导(注,后来在中文网络倒是发现不少博文)。折腾了一下午终于妥了。决定把这个坑爹的过程记录一下。

Before that,先把 IBM 的几个非常有用的 CPLEX 教程传送一下:

  • Getting Started with CPLEX 使用 CPLEX 以及 Concert Technology(也就是 IBM ILOG 给各大编程语言,如 C++, Java, C#, Python,写的 API) 必须看的第一个文档,要细看。
  • CPLEX User’s Manual 算是中阶用户需要看的文档,也是关于 CPLEX 的 API,也推荐细看。
  • CPLEX Parameters Reference Manual 具体微调 CPLEX 各项参数需要参考的文档,用的时候再查就行了。
  • OPL Language User's Manual OPL (the IBM ILOG Optimization Programming Language) 的教程,跟之前三个文档完全是不相干的另一个体系, OPL 语言只能用在 CPLEX Studio 里头。

以下正文开始。


如何配置 Visual Studio C++ 调用 CPLEX 接口

软件版本:Visual Studio 2012, CPLEX 12.5.1

注:以下文件路径需要根据 CPLEX 在自己电脑上的安装路径相应修改。

  1. 新建默认的 C++ Win32 Console Application 项目。
  2. 源码加入头文件 #include <ilcplex/ilocplex.h> 和 一条宏命令 ILOSTLBEGIN,后者其实就是用来调用 C++ 的 STL。
  3. BUILD -> Configuration Manager, 把 win32 改成 x64 平台。这一步我猜测是因为我的 CPLEX 版本是 64 位的,所以必须要改。总之 C++ 和 CPLEX 在平台上要一致。
  4. 接下来需要让 C++ 的 Linker 知道 CPLEX 以及 Concert Technology 的库在哪里。Project -> [你的项目名] Properties -> Configuration Properties -> Linker -> Input -> Additional Dependencies 添加:
  • C:\Program Files\IBM\ILOG\CPLEX_Studio1251\cplex\lib\x64_windows_vs2012\stat_mda\cplex1251.lib
  • C:\Program Files\IBM\ILOG\CPLEX_Studio1251\cplex\lib\x64_windows_vs2012\stat_mda\ilocplex.lib
  • C:\Program Files\IBM\ILOG\CPLEX_Studio1251\concert\lib\x64_windows_vs2012\stat_mda\concert.lib
  1. 然后 include 的各种路径也要添加进去。Project -> [你的项目名] Properties -> Configuration Properties -> C/C++ -> General -> Additional Include Directories 添加:
  • C:\Program Files\IBM\ILOG\CPLEX_Studio1251\concert\include
  • C:\Program Files\IBM\ILOG\CPLEX_Studio1251\cplex\include
  1. Preprocessor 中要添加一些指令,最重要的自然是 IL_STD。 Project -> ... Properties -> Configuration Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions 添加:
  • WIN64 (注:如果是 32 位的,此处应该是 WIN32)
  • _CONSOLE
  • IL_STD
  • _CRT_SECURE_NO_WARNINGS
  1. 最后 check 下 debug 功能是否开启了,不然没法 debug。Project -> ... Properties -> Configuration Properties -> Linker -> Debugging -> Generate Debug Info 改成 YES