问题标签 [cplex]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
721 浏览

c++ - 获取当前节点的节点深度

我做了一个用户剪切回调,为我正在处理的模型添加了一些剪切。这工作得很好。我想将这些剪切添加到搜索树的顶部节点。问题是,我无法弄清楚如何检索当前节点的深度。我做了一个节点回调,每次调用它时都会增加一个整数变量。这意味着当这个整数超过某个数字时,我不能在 cut 回调中做任何事情。但是,如果 cplex 有 fx,我现在没有。仅在左分支上创建节点,这意味着不向右分支上的节点添加任何剪切,反之亦然。
查看节点回调的文档
http://pic.dhe.ibm.com/infocenter/cosinfoc/v12r4/index.jsp?opic=%2Filog.odms.cplex.help%2Frefpythoncplex%2Fhtml%2Fcplex.callbacks.NodeCallback-类.html
我看到有一个 getDepth() 方法,它将节点标识符作为参数。但是如何获得这个标识符,我根本想不通。

0 投票
3 回答
716 浏览

algorithm - 在优化中找到所有可能的次优(不是最优!!!)解决方案

我正在编写一个 CPLEX 优化代码来生成一个矩阵,该矩阵将 r 和 n 作为命令行参数,但现在可能假定它们为 2 和 4。

生成矩阵的条件是任意行或任意列的元素之和应等于10,其中元素为0到10之间的整数。(即双随机矩阵)

我把这个条件变成了约束,并生成了矩阵,但它只给出了一个有 10 和 0 的矩阵。

我认为这是因为 CPLEX 总是找到“最佳”解决方案,但对于我想要解决的问题,这并没有太大帮助。

我想要剩下的矩阵有 6、7、8、9、10 和 0~5。

我想生成满足这种条件的所有可能的矩阵(以及稍后添加的更多条件),以便我可以测试所有这些矩阵并穷举案例。

我怎样才能做到这一点?

我正在研究这个解决方案池的事情,这并不容易..

还,

cplex.out() << "解决方案数 = " << cplex.getSolnPoolNsolns() << endl;

这给出了 1... 意味着只有一个解决方案,而我知道有数百万个这样的矩阵。

如果您对如何生成所有“次优”矩阵有任何想法,请帮助我。

谢谢你。

我在 IPGenMat.cpp 中附加了我的代码,aa.sol 是它给我的解决方案。

我也在下面复制了它。

(简而言之,有两个问题:1. 我怎样才能找到“不太理想”的解决方案?2. 我怎样才能找到所有这些解决方案?)

0 投票
1 回答
1271 浏览

matlab - CPLEX 原始不可行性

我正在使用 CPLEX API 在 MATLAB 上运行 CPLEX(版本 125)。我正在尝试解决一个约束二次规划问题,但我遇到了一个根本不可行的问题。特别是,该问题的 MATLAB 代码是:

这对应于问题:

但是,ystar返回的解决方案cplexqcp是这样的:

我想减少这种不可行的差距。我试图改变最初的可行性界限,但似乎没有任何效果:

如何配置求解器以平衡不可行性?求解器提供以下诊断消息:

因此,该解决方案的原始不可行性似乎是2.19e-08;但是,似乎该解决方案并不那么可行。

更新:我将等式和不等式约束标准化如下:

(注意:没有任何元素phi是零或接近零。这样,所有元素都phi变为1-1。)和

我现在得到的不可行性5.577e-07计算为max(F*ystar-phi)(对于更新的归一化矩阵Fphi)。CPLEX 是否使用内点求解器?如果是的话,应该没有任何不可行性。

更新 2:我已经上传了这个问题的数据和一个测试用例HERE

0 投票
1 回答
2707 浏览

visual-studio-2012 - visual studios 2012 配置 x64 编译器的问题

我正在尝试将CPLEXVisual Studio 2012一起使用,我必须配置 VS 来编译 64 位应用程序。我从 dreampark.com 下载了整个软件,所以我几乎可以肯定我安装了编译器。但是,当我尝试按照microsoft 的分步说明进行操作时,我无法比第 5 步更进一步,因为下拉列表中没有 64 位平台选项。

我尝试编写 x64 并按照其他说明进行操作,但在构建时出现错误。看日志,我猜可能是VS 2010和VS 2012之间的冲突,但是在我安装VS12之前,我上帝摆脱了VS2010(可能我忘记了什么?我删除了环境变量并卸载了软件)无论如何,这是日志:

0 投票
1 回答
924 浏览

c#-4.0 - CPLEX 错误 1016:受限版本

我使用 C# 开发了一个应用程序,它加载一个 Cplex 模型来解析一个线性系统(或程序,如果它是这样拼写的)。我得到的问题是标题中提出的错误。但是当我尝试使用 Opl studio 9.0 中的模型解决问题时,它工作正常。不知道是版本有限还是C#有问题。如果有任何人可以帮助我,我将不胜感激。有什么方法可以从 C# 加载 Cplex 模型而无需手动填充(通过代码)。

0 投票
1 回答
702 浏览

python - 在 python 2.7 中导入 cplex 12.5 模块会产生 unicode 错误

我在 RHEL6.3 机器(x86 64 位)上安装了 CPLEX 12.5,它似乎运行良好。但是,当我尝试使用Python API时,出现以下错误:

关于我可能做错了什么的任何指示?

0 投票
1 回答
289 浏览

optimization - AMPL 中的操作顺序

我的模型文件中有以下问题:我想 CPLEX 求解器首先在括号中执行操作,然后相乘。和通常的数学一样....但是当我使用这个约束运行我的模型文件时:

其中 E,K,O 是集合;delta, f 是二进制变量;休息是参数。我有我之前用这个括号描述的问题:“(1-f [l,o])”。当我尝试解析示例数据文件时,我收到以下错误:

在这里,您会看到 CPLEX 求解器首先将括号中的元素乘以 b[l,e],然后尝试将它们相加。我的问题是:如何避免这种情况?

0 投票
1 回答
584 浏览

java - 使用 Java 程序启动 CPLEX

我有一个线性问题,我需要通过改变值多次解决。所以我在 ILOG CPLEX OPL 中编写了一个运行良好的程序。现在我想用 Java 程序启动这些程序。在第一次运行 Java 后应该使用输出并更改它。然后应该开始另一个 Cplex 求解。

我尝试了一个 Windows 脚本,该脚本启动 Cplex Optimization Studio,开始求解,更改 excel 中的数据并再次启动 Cplex Studio,但此解决方案无法正常工作。我的问题是我不想将我在 Ilog Cplex OPL 中编写的代码更改为 Java。我只想让 Java 开始求解。

0 投票
2 回答
2275 浏览

java - 并发 CPLEX 进程比单个进程慢很多

我正在使用带有 Java 的单线程 CPLEX(在 Linux 下)对线性程序 (LP) 进行建模和求解。我的目标是在并行线程中解决多个小型 LP,理想情况下每个内核独立解决一个 LP。

问题是并行求解两个或多个 LP 比求解单个 LP 慢得多。在一个非常简单的测试中,我同时启动了多个相同的进程来解决相同的 LP。启动单个进程和启动多个进程之间的运行时差异是巨大的:

  • 1 个过程:180 秒
  • 2 个进程:225 秒
  • 3 个过程:280 秒

同样,从同一进程启动多个线程以同时解决多个 LP 比解决单个 LP 慢得多。

我怀疑内存访问可能是瓶颈,但测试一段经常读写内存的代码会产生类似的运行时:

  • 1 个过程:87 秒
  • 2 个过程:85 秒
  • 3 道工序 88 秒

知道什么可能导致缓慢吗?

我正在运行的机器有 6 个内核和足够的内存以避免任何交换。IBM ILOG Cplex 库是 12.5 版。

0 投票
1 回答
2393 浏览

memory-management - Cplex C++ 接口。如何清理内存?

背景: IBM ILOG Cplex 的 C++ 接口非常规地分配和取消分配内存:

声明 ILO 环境IloEnv environment;,然后在此环境中构建模型和求解器,然后所有这些对象(包括环境)超出范围会导致内存泄漏。请注意,我没有使用过new运算符。避免这种情况的一种方法是environment.end();在对象超出范围之前调用。

设置:现在,我有一个课程,其目的是解决特定的 ILP。这个类有一些成员变量:

这些成员变量在构造函数的初始化列表中被初始化:

析构函数取消分配所有内存(已由对成员变量进行操作的类的成员函数分配):

问题:我如何实现一个成员函数void clear()来取消分配内存并将类恢复到其初始状态?以下是我所做的两个相当天真的尝试,但没有奏效: