Visual Studio(VS2017/VS2019) C++ 配置 CPLEX 教程

article/2025/1/15 14:00:52

文章目录

  • 一、涉及软件
  • 二、配置效果
  • 三、配置步骤
    • 1、首先选择代码运行的环境
    • 2、打开项目的属性项
    • 3、修改C/C++附加包含目录
    • 4、修改C/C++预处理器中的预处理器定义项
    • 5、修改C/C++代码生成中的运行库
    • 6、修改链接器常规项中的“附加库目录项”
    • 7、修改链接器输入中的“附加依赖项”
    • 8、 点击确定,点击应用,大功告成!
  • 四、运行测试代码
    • 1、下面给出CPLEX官方测试文档中的`cutstock`代码进行测试
    • 2、首先编译代码,出现下面截图说明配置成功辽
    • 4、运行结果如下:
  • THE END
  • 谢谢观看,欢迎批评指正

一、涉及软件

Visual Studio 2017、Visual Studio 2019
CPLEX 12.9.0

二、配置效果

1、可以实现C++调用CPLEX求解线性规划,混合整数规划等;
2、可以在debug和release两种模式下进行调试或者运行代码

三、配置步骤

1、首先选择代码运行的环境

在这里插入图片描述
(1)、将平台设置为x64或者(活动)x64,此处一定需要修改!不能使用x32平台模式
(2)、配置的设置可以根据需要自行选择release模式或者debug模式(作者建议两种都进行配置一下,方便后续使用)

2、打开项目的属性项

打开项目的属性

3、修改C/C++附加包含目录

修改C++常规项中的附加包含目录
这里找到CPLEX的安装目录(根据自己的安装目录进行修改),如本人的是:
(注:下述若不做特殊说明,均需要将目录替换为自己的目录,若安装时没进行修改,从IBM/ILOG/…的目录同下述目录应该相同)

//CPLEX安装目录
D:\Program Files\IBM\ILOG\CPLEX_Studio129\concert\include
D:\Program Files\IBM\ILOG\CPLEX_Studio129\cplex\include

将上述两项加入到附加目录之中,点击确定,效果如下:
添加成功,点击确定

4、修改C/C++预处理器中的预处理器定义项

修改预处理器定义
添加下述命令到预处理器定义中(此处无需进行修改,直接复制粘贴就好):

NDEBUG
_CONSOLE
IL_STD

5、修改C/C++代码生成中的运行库

多线程DLL(/MD)
将此处的改为多线程DLL(/MD)或者多线程调试DLL(/MDd)

6、修改链接器常规项中的“附加库目录项”

在这里插入图片描述
将下述两个目录添加到“附加库目录项”中,目录地址同上述CPLEX安装目录相同

D:\Program Files\IBM\ILOG\CPLEX_Studio129\concert\lib\x64_windows_vs2017\stat_mda
D:\Program Files\IBM\ILOG\CPLEX_Studio129\cplex\lib\x64_windows_vs2017\stat_mda

7、修改链接器输入中的“附加依赖项”

在这里插入图片描述
将下述两个目录添加到“附加库目录项”中,目录地址同上述CPLEX安装目录相同

D:\Program Files\IBM\ILOG\CPLEX_Studio129\concert\lib\x64_windows_vs2017\stat_mda\concert.lib
D:\Program Files\IBM\ILOG\CPLEX_Studio129\cplex\lib\x64_windows_vs2017\stat_mda\cplex1290.lib
D:\Program Files\IBM\ILOG\CPLEX_Studio129\cplex\lib\x64_windows_vs2017\stat_mda\ilocplex.lib

8、 点击确定,点击应用,大功告成!

四、运行测试代码

1、下面给出CPLEX官方测试文档中的cutstock代码进行测试

#include <ilcplex/ilocplex.h>ILOSTLBEGIN#define RC_EPS 1.0e-6static void readData(const char* filename, IloNum& rollWidth,IloNumArray& size, IloNumArray& amount);
static void report1(IloCplex& cutSolver, IloNumVarArray Cut,IloRangeArray Fill);
static void report2(IloAlgorithm& patSolver,IloNumVarArray Use,IloObjective obj);
static void report3(IloCplex& cutSolver, IloNumVarArray Cut);/// MAIN PROGRAM ///int main(int argc, char **argv)
{IloEnv env;try {IloInt  i, j;IloNum      rollWidth;IloNumArray amount(env);IloNumArray size(env);if (argc > 1)readData(argv[1], rollWidth, size, amount);elsereadData("cutstock.dat",rollWidth, size, amount);/// CUTTING-OPTIMIZATION PROBLEM ///IloModel cutOpt(env);IloObjective   RollsUsed = IloAdd(cutOpt, IloMinimize(env));IloRangeArray  Fill = IloAdd(cutOpt,IloRangeArray(env, amount, IloInfinity));IloNumVarArray Cut(env);IloInt nWdth = size.getSize();for (j = 0; j < nWdth; j++) {Cut.add(IloNumVar(RollsUsed(1) + Fill[j](int(rollWidth / size[j]))));}IloCplex cutSolver(cutOpt);/// PATTERN-GENERATION PROBLEM ///IloModel patGen(env);IloObjective ReducedCost = IloAdd(patGen, IloMinimize(env, 1));IloNumVarArray Use(env, nWdth, 0.0, IloInfinity, ILOINT);patGen.add(IloScalProd(size, Use) <= rollWidth);IloCplex patSolver(patGen);/// COLUMN-GENERATION PROCEDURE ///IloNumArray price(env, nWdth);IloNumArray newPatt(env, nWdth);/// COLUMN-GENERATION PROCEDURE ///for (;;) {/// OPTIMIZE OVER CURRENT PATTERNS ///cutSolver.solve();report1(cutSolver, Cut, Fill);/// FIND AND ADD A NEW PATTERN ///for (i = 0; i < nWdth; i++) {price[i] = -cutSolver.getDual(Fill[i]);}ReducedCost.setLinearCoefs(Use, price);patSolver.solve();report2(patSolver, Use, ReducedCost);if (patSolver.getValue(ReducedCost) > -RC_EPS) break;patSolver.getValues(newPatt, Use);Cut.add(IloNumVar(RollsUsed(1) + Fill(newPatt)));}cutOpt.add(IloConversion(env, Cut, ILOINT));cutSolver.solve();cout << "Solution status: " << cutSolver.getStatus() << endl;report3(cutSolver, Cut);}catch (IloException& ex) {cerr << "Error: " << ex << endl;}catch (...) {cerr << "Error" << endl;}env.end();return 0;
}static void readData(const char* filename, IloNum& rollWidth,IloNumArray& size, IloNumArray& amount)
{ifstream in(filename);if (in) {in >> rollWidth;in >> size;in >> amount;}else {cerr << "No such file: " << filename << endl;throw(1);}
}static void report1(IloCplex& cutSolver, IloNumVarArray Cut,IloRangeArray Fill)
{cout << endl;cout << "Using " << cutSolver.getObjValue() << " rolls" << endl;cout << endl;for (IloInt j = 0; j < Cut.getSize(); j++) {cout << "  Cut" << j << " = " << cutSolver.getValue(Cut[j]) << endl;}cout << endl;for (IloInt i = 0; i < Fill.getSize(); i++) {cout << "  Fill" << i << " = " << cutSolver.getDual(Fill[i]) << endl;}cout << endl;
}static void report2(IloAlgorithm& patSolver, IloNumVarArray Use,IloObjective obj)
{cout << endl;cout << "Reduced cost is " << patSolver.getValue(obj) << endl;cout << endl;if (patSolver.getValue(obj) <= -RC_EPS) {for (IloInt i = 0; i < Use.getSize(); i++) {cout << "  Use" << i << " = " << patSolver.getValue(Use[i]) << endl;}cout << endl;}
}static void report3(IloCplex& cutSolver, IloNumVarArray Cut)
{cout << endl;cout << "Best integer solution uses "<< cutSolver.getObjValue() << " rolls" << endl;cout << endl;for (IloInt j = 0; j < Cut.getSize(); j++) {cout << "  Cut" << j << " = " << cutSolver.getValue(Cut[j]) << endl;}
}

2、首先编译代码,出现下面截图说明配置成功辽

在这里插入图片描述

3、给出输入文件信息如下:

115
[25, 40, 50, 55, 70]
[50, 36, 24, 8, 30]

4、运行结果如下:

在这里插入图片描述

THE END

谢谢观看,欢迎批评指正


http://chatgpt.dhexx.cn/article/WChoTl8g.shtml

相关文章

cplex java_【CPLEX教程03】java调用cplex求解一个TSP问题模型

00 前言 前面我们已经搭建好cplex的java环境了,相信大家已经跃跃欲试,想动手写几个模型了。今天就来拿一个TSP的问题模型来给大家演示一下吧~ CPLEX系列教程可以关注我们的公众号哦!获取更多精彩消息! 01 TSP建模 关于TSP建模,就不多解释了。以及什么是TSP问题,也不要问我…

cplex java_【CPLEX教程02】配置Cplex的Java环境以及API说明

00 前言 因为小编一般用的C和Java比较多&#xff0c;而且现在开发大型算法用这类面向对象的编程语言也方便得多。基于上面的种种考虑&#xff0c;加上时间和精力有限&#xff0c;所以就暂时只做C和Java的详细教程辣。关于matlab和python的也许后续会补上的吧。 然后在开始之前&…

最新最易上手IntelliJ IDEA配置CPLEX详细步骤

目录 一、CPLEX安装 1.CPLEX安装包下载 2.CPLEX安装 二、IDEA配置CPLEX 1.将CPLEX安装目录的cplex.jar包添加到项目文件中&#xff1a; 2.将CPLEX的x64_win64文件夹添加到IDEA的VM options中 三、在IDEA中检验是否安装成功 一、CPLEX安装 1.CPLEX安装包下载 由于IBM公司的…

Cplex安装与环境配置步骤(C++与Python)

一、Cplex简介 Cplex是IBM公司的一个优化问题求解器。主要用于求解线性规划&#xff0c;混合整数规划、二次规划等问题。 Cplex求解速度快&#xff0c;使用简单易上手。除了自带的语言外&#xff0c;cplex可以利用C、Java、Python等语言使用。对于运筹优化方向的问题求解事半功…

形状-自适应椭圆

自适应椭圆 根据内容自适应宽高&#xff0c;如果宽高相等&#xff0c;显示为一个圆&#xff0c;宽高不等显示为椭圆&#xff0c;如下图所示&#xff1a; 自适应椭圆实现 想要达到上图所示的效果&#xff0c;我们必须先了解border-radius 的两个特性 border-radius可以单独…

112.(leaflet篇)leaflet椭圆修改

地图之家总目录(订阅之前请先查看该博客) 地图之家:cesium+leaflet+echart+地图数据+地图工具等相关内容的介绍 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: 下面献上完整代码,代码重要位置会做相应解释 <!DOCTYPE html> …

java panel画椭圆_如何在Java 2D中绘制椭圆?

在Ellipse2D类定义由成帧矩形定义的椭圆。您可以使用double或float值创建椭圆。使用双精度值创建椭圆时&#xff0c;请使用Ellipse2D.Double类。对于浮点值&#xff0c;您可以使用Ellipse2D.Float该类。package org.nhooo.example.geom; import javax.swing.*; import java.awt…

AEJoy —— 随机运动表达式之球面上的随机运动(四)

效果图 原理与代码 现在我们已经掌握了产生随机运动的技巧,让我们做一些有趣的事情。 我们的目标是看看我们是否能在球面上创造随机运动。我们会看到,通过一些几何学,一些三角学和我们的随机运动算法,我们可以解决一些看似不可能的问题。 首先让我们看一看几何学和涉及的…

椭圆伸缩之思考

我们讨论的椭圆缩放基于二维空间&#xff0c;首先给出以下定义及性质&#xff1a; 1 基点&#xff1a;如果选择一个能控制图形比例&#xff08;缩放&#xff09;变换的点&#xff0c;使该点再变换后仍保持不变&#xff0c;则称其为基点&#xff08;不动点&#xff09;。 2 比例…

自由落体java编程_java模拟自由落体运动源代码

简单做了一个 import java.awt.borderlayout; import java.awt.button; import java.awt.color; import java.awt.frame; import java.awt.graphics; import java.awt.panel; import java.awt.point; import java.awt.event.actionevent; import java.awt.event.actionlistener…

点旋转的java算法_点和椭圆(旋转)位置测试:算法

另一种选择是将所有内容都放入2D旋转椭圆的等式中&#xff0c;并查看结果是否小于1 . 因此&#xff0c;如果以下不等式为真&#xff0c;则在椭圆内部有一个点 其中(xp&#xff0c;yp)是点坐标&#xff0c;(x0&#xff0c;y0)是椭圆的中心 . 我实施了一个小的Mathematica程序&am…

(转载)在Eclipse中使用JUnit4进行单元测试(中级篇)

<原文地址如下&#xff1a;http://blog.csdn.net/andycpp/archive/2006/10/09/1327147.aspx> 我们继续对初级篇中的例子进行分析。初级篇中我们使用Eclipse自动生成了一个测试框架&#xff0c;在这篇文章中&#xff0c;我们来仔细分析一下这个测试框架中的每一个细节&…

用Python模拟小球的平抛运动,及其在落地后的运动轨迹

废话不多说&#xff0c;先上效果演示&#xff08;doge&#xff09;: 1、需求分析 给定一个小球&#xff0c;在离地某高度处给予一初始速度&#xff0c;当其撞击到地面后&#xff0c;速度衰减为原来的α倍&#xff0c;当其速度衰减为初始速度的1%后&#xff0c;运动结束。 2、运…

【达内课程】Eclipse中的junit测试

文章目录 简介使用测试1测试2生成测试报告 简介 使用 下载junit 新建一个java项目&#xff0c;把junit jar包放入项目&#xff0c;右键项目&#xff0c;选择properties&#xff0c;把jar包加进来 测试1 创建如下文件 在这里插入代码片如果出错 如果成功 测试2 新建H…

java斜椭圆_JAVA 任意椭圆方向画法

展开全部 使用32313133353236313431303231363533e4b893e5b19e31333332636266 AffineTransform 把Ellipse2D 旋转一下就可以了。 import java.awt.image.BufferedImage; import java.awt.geom.AffineTransform; import java.awt.geom.Ellipse2D; import java.awt.Color; import …

从STL的视角,了解下Map、Set、Tuple和Initializer_List的区别

&#x1f4d6;作者介绍&#xff1a;22级树莓人&#xff08;计算机专业&#xff09;&#xff0c;热爱编程&#xff1c;目前在c&#xff0b;&#xff0b;阶段>——目标Windows&#xff0c;MySQL&#xff0c;Qt&#xff0c;数据结构与算法&#xff0c;Linux&#xff0c;多线程&…

用Java模拟行星的运动

这段时间都在寝室里自学Java,就想自己写个小程序玩一玩。同时&#xff0c;我也是个三体迷&#xff0c;就想着能不能用学的Java来模拟一下三体运动。这个程序算是我正式写模拟三体运动前的一个尝试。 一、程序分析 首先来百度一番查一下太阳、水星、金星和地球的各种参数(非精确…

java课程设计旋转的行星_Java编程实现的模拟行星运动示例

本文实例讲述了Java编程实现的模拟行星运动。分享给大家供大家参考&#xff0c;具体如下&#xff1a; 期待了很久的Java语言程序设计也拉下了帷幕&#xff0c;在几个月的时间里基本掌握了java的简单用法&#xff0c;学习了java的主要基础知识&#xff0c;面向对象思想&#xff…

JS-圆,椭圆等轨迹相关算法

圆 公式 (x0, y0) 圆心坐标 r&#xff1a;半径 x x0 cos(angle) * r y y0 sin(angle) * r 1、轨迹 <div id"div" style"position:relative; width: 20px; height: 20px; background: cadetblue;"></div><script>/*** 圆心 (x0, y0…

精确绘制椭圆

本文首发于微信公众号「3D视觉工坊」。 前言 圆特征在测量领域中应用广泛&#xff0c;比如&#xff1a;相机标定、位姿估计、目标跟踪等方面。圆经过透视投影&#xff0c;当成像平面与圆平面不平行时&#xff0c;圆经过透视投影为椭圆&#xff0c;圆心的透视投影点与椭圆的中…