C++用户的Cplex使用指南(一)——在VS2019中运行Cplex程序

article/2025/11/7 16:56:03

在VS2019中运行Cplex程序

前言

Cplex是IBM开发并仍在维护更新的商业求解器,也是目前使用人数最多的求解器,类似的还有Gurobi,两者各有各的特点(两家颇有渊源,感兴趣的可以了解一下)。

Cplex的一些基本概念

求解问题类型

  • 线性规划问题(Linear Programming,LP)
  • 网络流问题,是 LP 的一种特殊情况,CPLEX 可以通过利用问题结构以快得多的速度对其求解。
  • 二次规划 (QP) 问题,其中 LP 目标函数扩展为包括二次项。
  • 二次约束规划 (QCP) 问题,在约束中包括二次项。 实际上,CPLEX 可对二阶锥规划 (SOCP) 问题求解。
  • 混合整数规划 (MIP) 问题,其中任意或所有 LP、QP 或 QCP 变量都进一步限制为采用最优解法中的整数值,并且 MIP 自身扩展为包括诸如特殊有序集合 (SOS) 和半连续变量之类的构造。

Cplex官方文档

Cplex没有系统的课程,互联网上的资料又鱼龙混杂,通过官方文档学习是最可靠的途径。Cplex的官方文档主要包括:

  1. 《CPLEX 用户手册》说明 Interactive Optimizer 和 Component Library 之间的关系。 它详述使用 CPLEX 进行线性规划的各方面,并且说明如何处理二次规划 (QP) 问题、二次约束规划 (QCP) 问题、二阶锥规划 (SOCP)问题以及混合整数规划 (MIP) 问题。 它指示如何控制 CPLEX 参数,调试应用程序以及高效管理输入和输出。 它还说明如何使用并行CPLEX 优化器。
  2. 《CPLEX Callable Library 参考手册》记录 Callable Library 例程及其参数。本手册还包含有关错误代码、解法质量和解法状态的其他文档。
  3. 《CPLEX C++ API 参考手册》记录 Concert Technology 类、方法和函数的 C++ API。
  4. 《CPLEX Java API 参考手册》提供 Concert Technology 接口和 CPLEX Java 类的详细定义。
  5. 《CPLEX .NET 参考手册》记录 CPLEX 的 .NET API。
  6. 《CPLEX Python API 参考手册》记录 CPLEX 的 Python API。
  7. 《CPLEX 参数》参考手册包含可由参数例程修改的参数的文档。 它是 CPLEX 参数的用途和可允许设置的权威参考手册。
  8. 《CPLEX 文件格式》参考手册包含 CPLEX 支持的文件格式列表以及有关在应用程序中使用这些文件格式的详细信息。
  9. CPLEX Interactive Optimizer 参考手册包含 Interactive Optimizer命令,以及这些命令在《CPLEX 用户手册》中相关用例的命令选项和链接。
  10. 为 MATLAB 的 CPLEX 接口提供了一整套文档,包括用户手册和语言参考手册。 可在 MATLAB会话中以交互方式使用或联机使用。
    尽管官方声称这些文档都可以通过网络下载,但实际上非常难找,或是只找得到较老的版本。

Visual Studio 2019中Cplex运行环境的配置

首先确保VS和IBM ILOG CPLEX Optimization Studio的正确安装。Cplex的安装包在官网有下载链接,但实际上很难下成功,建议通过其他途径找包。笔者常用C++,IDE是Visual studio community 2019,Cplex版本为IBM ILOG CPLEX Optimization Studio (64 bit) 12.8.0(目前最新版本为12.10,不建议采用最新版本,因为IDE可能还不兼容)。Cplex安装完后可以在安装目录的lib文件夹下看到x64_windows_vs2015和x64_windows_vs2017,因为VS版本较新,所以我们一般采用2017的文件。
安装完按照IBM的官方文档还需要配置环境变量,实际使用发现不配置也没关系。如果有发现存在配置环境变量需要的可以参考官方文档。

新建项目

按照正常方式在VS中新建一个项目。具体步骤如下:

  1. 在VS2019中选择“文件-新建-项目- C++ -空项目”,然后在“名称”一栏自定义输入项目名称,比如"Cplex_TestCode",再自定义项目文件的“位置”。
  2. 在解决方案Cplex_TestCode的源文件夹下,新建一个cpp文件,起名为“TestCode.cpp”,并粘贴测试代码。
    这里采用 IBM官方文档中给的测试代码进行演示:
#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 <= 40vars.add(IloNumVar(env));  // 0 <= x2vars.add(IloNumVar(env));  // 0 <= x3
model.add(IloMaximize(env, vars[0] + 2 * vars[1] + 3 * vars[2])); //maximize x1 + 2 x2 + 3 x3model.add(-vars[0] + vars[1] + vars[2] <= 20);//subject to -x1 + x2 + x3 <= 20model.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;
}

此时程序还不能调试,先保存,进行下一步。

Cplex环境配置

首先用户需要知道Cplex的安装位置,一般来说默认安装位置为C:\Program Files\IBM\ILOG\CPLEX_Studio_128,下面将该位置简化为 <Install_dir>,视具体用户安装位置而定。

  1. 将VS中的配置改为“Release”,活动平台改为“x64”。VS配置
  2. 在解决方案资源管理器中右击项目并选择其属性,打开属性窗口,同时确保此时配置仍为“Release”,活动平台改为“x64”。在这里插入图片描述
  3. 属性页中,依次选择:“C/C++”—“常规”—“附加包含目录”,然后点开下拉选框,分别选择以下两个文件夹,也可以直接输入其位置,然后,选“确定”,再选“应用”。

<Install_dir>\concert\include
<Install_dir>\cplex\include

  1. 属性页中,依次选择:“C/C++”—“预处理器”—“预处理器定义”,输入如下三个定义“NDEBUG”,"_CONSOLE",“IL_STD”,一行一个,注意下划线和大写(很多时候前两个已经有了,只要输入最后一个即可)。然后,选“确定”,再选“应用”。在这里插入图片描述
  2. 属性页中,依次选择:“c/c++” -“代码生成”-“运行库”,确认设置为“多线程 DLL (/MD)”。
  3. 属性页中,依次选择:“链接器"-“常规”-“附加库目录”,选择或输入两个文件夹:

<Install_dir>\concert\lib\x64_windows_vs2017\stat_mda
<Install_dir>\cplex\lib\x64_windows_vs2017\stat_mda

  1. 属性页中,依次选择:“链接器"-“输入”-“附加依赖项”,然后输入如下三个文件的路径,确认。

<Install_dir>\cplex\lib\x64_windows_vs2017\stat_mda\cplex1280.lib
<Install_dir>\cplex\lib\x64_windows_vs2017\stat_mda\ilocplex.lib
<Install_dir>\concert\lib\x64_windows_vs2017\stat_mda\concert.lib

  1. 一般到这Cplex环境就配置好了,但在实际使用中仍存在问题,比如遇到“意外的令牌”错误而无法运行,此时需要在属性页中,依次选择:“C/C++”-“语言”-“符合模式”,改成"否"。调试过程中若出现”warning LNK4099: 未找到 PDB“concert.pdb”的警告,事实上这个并不会影响程序的运行结果,我们可以将其屏蔽,处理办法为: 链接器—调试—“生成调试信息”选择“否”。在这里插入图片描述在这里插入图片描述
    至此,VS中的Cplex环境配置完成。

运行测试代码

调试运行测试代码。该代码求解线性规划问题如下:
m i n x 1 + 2 x 2 + 3 x 3 − x 1 + x 2 + x 3 ≤ 20 x 1 − 3 x 2 + x 3 ≤ 30 0 ≤ x 1 ≤ 40 x 2 ≥ 0 x 3 ≥ 0 min\quad x_1+2x_2+3x_3\\-x_1+x_2+x_3\le20\\x_1-3x_2+x_3\le30\\0\le x_1\le40\\x_2\ge0\\x_3\ge0 minx1+2x2+3x3x1+x2+x320x13x2+x3300x140x20x30
运行结果如下:
在这里插入图片描述
至此,就能愉快地在VS中写Cplex的代码。

下回预告

随缘更新,准备结合Cplex自带的示例程序讲讲怎么用C++编写Cplex的求解程序。


http://chatgpt.dhexx.cn/article/1kGO3rgD.shtml

相关文章

CPLEX相关问题汇总

求解流程 1&#xff09;定义常量&#xff1a;可以通过float、int、boolean定义常量。定义范围是为了便于对数组进行操作。 //定义常量 int F ...;//定义整型 float R...;//定义浮点型 int m...; int B ...;//定义范围 range nF1..F; range Machs 1..m;定义常量数组 //定义…

c++调用cplex的基本配置问题

1.创建c空项目 2.修改运行环境 为release以及x64 3.创建cpp文件 4。鼠标右键点击项目中的属性 5.点击c/c&#xff0c;点击第一项常规&#xff0c;配置附加库目录 5.添加文件索引&#xff0c;主要用于把路径导进来 6.这一步要添加的目录与你安装的cplex的目录有关系 F:\program…

cplex python安装及入门

cplex python安装及入门 1. cplex安装2. cplex学习资源3. 百度网盘资源 笔者最近学习cplex&#xff0c;从安装到入门走了不少弯路&#xff0c;现在提供一个相对全面的cplex学习博文。 1. cplex安装 可以参考这篇博文DOcplex系列&#xff08;二&#xff09;——怎样成功安装和调…

CPLEX求解器入门案例

其他文章&#xff1a; 通过0-1背包问题看穷举法、贪心算法、启发式算法&#xff08;JAVA) 模拟退火(SA)算法实例介绍&#xff08;JAVA) 遗传算法&#xff08;GA&#xff09;实例介绍&#xff08;JAVA) CPLEX求解器入门案例 java集成Cplex&#xff1a;Cplex下载、IDEA环境搭…

Cplex入门教程(二)

一、写在前面 在文章《Cplex入门教程&#xff08;一&#xff09;》的基础上&#xff0c;补充代码的部分 二、如何写代码 代码头&#xff0c;请无脑直接抄。 #include <ilcplex/ilocplex.h> #include <stdio.h> using namespace std;ILOSTLBEGIN声明环境&#x…

【 CPLEX安装】

系列文章目录 提示&#xff1a;版本匹配matlab2019bcplex12.10.0.0 版本查询网址&#xff1a; https://www.ibm.com/software/reports/compatibility/clarity/productsForPrereq.html 一、CPLEX安装 python E:\software\Cplex\python\setup.py install file:///E:/software/…

Cplex求解器

博主个人博客 在求解整数线性规划问题是,Matlab下yalmip+cplex的组合会让如虎添翼。本人是在研究早晚班排班过程中才发现的这一工具。其能够求解各种整数规划模型。在matlab中使用cplex求解时,还可以使用yalmip工具进行建模,比直接使用cplex建模方便很多。 在正式开始使用…

Cplex入门教程(一)

文章目录 1、主要内容2、Cplex简介CPLEX具有的优势 3、安装Cplex 12.94、在 Windows 上设置 CPLEX5、测试代码 1、主要内容 Cplex 简介安装Visual Studio 2017 (64位)安装cplex12.9 (64位)在 Windows 上设置 Cplex在 Visual Studio 中将 Cplex 链接代码逻辑介绍 2、Cplex简介…

Cplex的安装和使用实例

最近有文章复现需要用到Cplex&#xff0c;所以捣鼓了一下&#xff0c;看其他博客感觉不解渴&#xff0c;所以索性在这里记录一些key point 1&#xff09;下载与安装&#xff1a;Cplex的下载可以在官方网站下载&#xff0c;学生是免费下载使用的&#xff0c;非学生可以在网上找…

运筹优化学习19:Cplex中文教程与实例详解

目录 1 绪论 1.1 Cplex简介 1.1.1 基本界面介绍 1.1.2 处理流程介绍 1.2 OPL语言 1.2.1 OPL的主要关键字 1.2.2 数据文件 1.3 如何调用Cplex 1.3.1 使用AMPL脚本语言调用 1.3.2 IBM CPLEX Studio IDE 1.3.3 Cplex with Concert Technology 2 官方gas示例演示 2.1 导…

cplex基础入门(一)

这边文章会以纯新手小白的视角&#xff0c;教会大家如何快速的搭建自己的cplex模型&#xff0c;做到求解模型不求人。 目录 一、引言 1、掌握数据类型及数据结构 2、常规Cplex编程方法 3、Cplex编程步骤 4、cplex 程序框架 5、创建模型 二、规划建模的入门求解案例 1、…

Cplex安装教程与使用介绍

软件可以在ShareApps上下载&#xff0c;小伙伴们嫌麻烦可以用提取链接。 学术版 Cplex12.10 64位Windows 更新一下链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1jD9Xved2aWPHtRd-_PLI5Q 提取码&#xff1a;n4og 具体步骤&#xff1a; 下载完成后直接运行就可…

CPLEX入门

求解线性规划、整数线性规划、二次规划等较为经典的优化软件 Cplex专门用于求解大规模的线性规划&#xff08;LP&#xff09;、二次规划&#xff08;QP&#xff09;、带约束的二次规划&#xff08;QCQP&#xff09;、二阶锥规划&#xff08;SOCP&#xff09;等四类基本问题&…

html meta标签使用总结

目录(?)[] 之前学习前端中&#xff0c;对meta标签的了解仅仅只是这一句。 <meta charset"UTF-8"> 但是打开任意的网站&#xff0c;其head标签内都有一列的meta标签。比如我博客的。 但是自己却很不熟悉&#xff0c;于是把meta标签加入了寒假学习计划的最前方…

html标签-meta

之前学习前端中&#xff0c;对meta标签的了解仅仅只是这一句。 <meta charset"UTF-8">但是打开任意的网站&#xff0c;其head标签内都有一列的meta标签。比如我博客的。 但是自己却很不熟悉&#xff0c;于是把meta标签加入了寒假学习计划的最前方。 简介 在查阅…

话说HLS,HTTP,RTSP,RTMP协议的主要区别

HLS,HTTP,RTSP,RTMP协议的区别&#xff1a; 视频全终端观看  用HTTP方式&#xff1a; 先通过服务器将FLV下载到本地缓存&#xff0c;然后再通过NetConnection的本地连接来播放这个FLV&#xff0c;这种方法是播放本地的视频&#xff0c;并不是播放服务器的视频。因此在本地缓…

Web前端后7天

Web前端后7天 1.概念 2.步骤 3.执行原理 4.生命周期 5.Servlet3.0 注解配置 6.Servlet的体系结构 servlet --接口 GenericServlet–抽象类 GenericServlet&#xff1a;将Servlet接口中其他的方法做了默认空实现&#xff0c;只将service()方法作为抽象&#xff0c; 将来定义Ser…

同等画质不同编码的压缩比_视频的编码与封装

视频的编码与封装 【容器——封装格式】 avi——基本都能被软件兼容&#xff0c;但过于老旧&#xff0c;不兼容目前的很多编码方式H.264&#xff0c;其编码方式有也很多&#xff0c;若真要用到&#xff0c;推荐xvid编码&#xff08;对DIVX编码方式的复仇&#xff09;【所谓的a片…

二、实践与视频解决方案

一、视频解决方案 说明&#xff1a; 公司下户拍摄视频&#xff0c;上传存储一直用的优酷云(视频压缩、解码、播放)当然还支持水印。 现在场景&#xff0c;我们公司内部买服务器&#xff0c;下户拍摄视频上传到我们自己服务内&#xff0c;需要解决的问题&#xff0c;下户拍摄视频…

Servlet应用——JavaWeb教案(四)

文章目录 JavaWeb组件1. ServletRequest1. 介绍Request体系**获取请求消息数据****获取请求行**获取请求头获取超链接的所有头信息防盗链操作 获取请求体 其他功能1. 获取请求参数通用方式2. 请求转发:1. 转发给servlet2. 转发给jsp页面 3. 共享数据1. 转发给servlet2. 转发给J…