文章目录

  • 1、主要内容
  • 2、Cplex简介
    • CPLEX具有的优势
  • 3、安装Cplex 12.9
  • 4、在 Windows 上设置 CPLEX
  • 5、测试代码

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 <= 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;
}

将状态栏中的配置改为“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调试器”,出现下图则链接成功。

Cplex入门教程(一)相关推荐

  1. Kafka入门教程与详解

    1 Kafka入门教程 1.1 消息队列(Message Queue) Message Queue消息传送系统提供传送服务.消息传送依赖于大量支持组件,这些组件负责处理连接服务.消息的路由和传送.持久 ...

  2. 【CV】Pytorch一小时入门教程-代码详解

    目录 一.关键部分代码分解 1.定义网络 2.损失函数(代价函数) 3.更新权值 二.训练完整的分类器 1.数据处理 2. 训练模型(代码详解) CPU训练 GPU训练 CPU版本与GPU版本代码区别 ...

  3. python tornado教程_Tornado 简单入门教程(零)——准备工作

    前言: 这两天在学着用Python + Tornado +MongoDB来做Web开发(哈哈哈这个词好高端).学的过程中查阅了无数资料,也收获了一些经验,所以希望总结出一份简易入门教程供初学者参考.完 ...

  4. python向量计算库教程_NumPy库入门教程:基础知识总结

    原标题:NumPy库入门教程:基础知识总结 视学算法 | 作者 知乎专栏 | 来源 numpy可以说是 Python运用于人工智能和科学计算的一个重要基础,近段时间恰好学习了numpy,pandas, ...

  5. mysql query browswer_MySQL数据库新特性之存储过程入门教程

    MySQL数据库新特性之存储过程入门教程 在MySQL 5中,终于引入了存储过程这一新特性,这将大大增强MYSQL的数据库处理能力.在本文中将指导读者快速掌握MySQL 5的存储过程的基本知识,带领用 ...

  6. python tensorflow教程_TensorFlow入门教程TensorFlow 基本使用T

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 TensorFlow入门教程 TensorFlow 基本使用 TensorFlow官方中文教程 TensorFlow 的特点: 使用图 (graph) 来 ...

  7. air调用java,AIR2.0入门教程:与Java应用交互

    在之前的一篇文章中,我介绍了如何使用AIR2.0新增的NativeProcess类与本地进程进行交互和通讯,在那个例子里面我们使用了C++ 的代码,实际上只要是基于命令行的标准输入输出,AIR2.0的 ...

  8. 【Arduino】开发入门教程【一】什么是Arduino

    Arduino Arduino 是一款便捷灵活.方便上手的开源电子原型平台,包含硬件(各种型号的arduino板)和软件(arduino IDE).它适用于艺术家.设计师.爱好者和对于"互动 ...

  9. python 三分钟入门_Cython 三分钟入门教程

    作者:perrygeo 译者:赖勇浩(http://laiyonghao.com) 原文:http://www.perrygeo.net/wordpress/?p=116 我最喜欢的是Python,它 ...

  10. BIML 101 - ETL数据清洗 系列 - BIML 快速入门教程 - 序

    BIML 101 - BIML 快速入门教程 做大数据的项目,最花时间的就是数据清洗. 没有一个相对可靠的数据,数据分析就是无木之舟,无水之源. 如果你已经进了ETL这个坑,而且预算有限,并且有大量的 ...

最新文章

  1. php iis6 安装ssl证书,在IIS下部署SSL证书实现HTTPS
  2. jdk动态代理实例和cglib动态代理实例_CGLib 动态代理 原理解析
  3. python 装饰器分类_Python 装饰器(Decorators) 超详细分类实例
  4. 理解zookeeper的一致性及缺点
  5. Nginx + Tomcat Windows下的负载均衡配置
  6. Linux 0.11内核分析01:概述
  7. java聊天室源工程文件_socket实现java聊天室,公告等功能,前后端分离(附源码)...
  8. js动态创建Form表单并提交
  9. 创建自己的uboot-基于IMX6
  10. 如何提高机器学习模型预测准确率
  11. 阿里云轻量应用型服务器防火墙端口开放了还是无法访问问题@林
  12. 孙式无极桩站桩要领--林泰年
  13. 抓取taobao的IP库
  14. mysql 浏览器打开闪退,win10系统使用360浏览器出现闪退的详细方法
  15. 大数据写入到Oracle数据库(批量插入数据)
  16. js 中日期 转换成时间戳 例如2013-08-30 转换为时间戳
  17. javascript js jsp接收servlet传送的数组ArrayList的一种简单的非ajax方法
  18. 使用Bundle校验接口入参
  19. C语言逻辑操作符的巧妙用法:an anagram of a palindrome
  20. 彻底卸载Websphere

热门文章

  1. Fiddler中文版汉化插件 0.1
  2. IE浏览器调用ocx控件实现PDF、图片文件打印
  3. gyp verb ensuring that file exists: C:\Python27\python.exe
  4. 手机微信如何设置浏览器打开时提醒
  5. 刘意JavaSE 学习笔记 Day19-Day21——异常,IO(File类/字符流/字节流)
  6. python物业管理系统_住宅小区物业管理系统分析与设计
  7. Java If Else 语句
  8. MySQL数据类型有哪些?
  9. 初级python程序实例
  10. Jenkinsfile脚本实现master、slave节点(agent)共享内容