问题标签 [coin-or-cbc]
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.
optimization - PuLP - COIN-CBC 错误:如何添加具有双重不等式和松弛的约束?
我想添加这组约束:
-M(1-X_(i,j,k,n) )≤S_(i,j,k,n)-ToD_(i,j,k,n)≤M(1-X_(i,j,k,n) ) ∀i,j,k,n
其中 M 是一个大数,S 是一个整数变量,取值介于 0 和 1440 之间。ToD 是一个 4 维矩阵,它从 Excel 工作表中取值。X i 对偶变量,取值 0-1。
我尝试在代码中实现如下:
和另一个约束如下:
根据我的经验,在代码中,这两个约束完全等同于我们想要的。问题是 PuLP 和 CBC 不会接受它们。产生以下错误:
纸浆:
和加拿大广播公司:
不知道是什么问题,求大神帮忙?我是新手,如果信息不够,请告诉我应该添加什么。
mathematical-optimization - COIN-OR:有界正整数变量在 CBC 解决的优化过程中取什么值?
我尝试用 PuLP 和 CBC 解决 MILP 问题。
除了问题的其余部分,我面临一组正整数变量的问题。我有一个松弛约束,这意味着正整数变量中的一些变量由于约束而没有固定为某个值。
因此,换个说法,在一组正整数约束中,一些因约束而获得值,但是当这个相同的约束放松(大 M 松弛)时,其余变量不必获得某个值。
由 CBC 赋予他们价值。它们中的大多数变为 0,但其中一些得到变量上限的值,即 1440。这是为什么呢?CBC 是否随机地将这些值赋予这些变量?sovler 是否遵循任何规则?
如果您不明白某些内容,请告诉我,以便我添加信息或改写,我对此很陌生。谢谢你。
c++ - 使用 C++ 将向量数组转换为 .MPS 文件
我正在尝试使用 Coin-OR 的线性规划 (LP) 软件来解决一系列线性程序。每个程序的大部分数据都包含在几个 .csv 文件中,但每次运行线性优化时都需要修改一些数据。
看起来我只能让 Coin-OR 的 LP 求解器读取 .MPS 文件,并且可以使用 AMPL 之类的程序单独构建一个 .MPS 文件。但是考虑到我正在尝试运行这些优化的自动化、迭代系列,仅使用 AMPL 或 Gurobi 构建单个问题实例然后在生成的 .MPS 文件上调用求解器是不可行的;我需要根据每个问题更改文件,可能是数千或数百万次。
那么有人知道是否有可以将向量数组或其他标准 C++ 数据结构转换为 .MPS 文件的 C++ 库吗?或者,有没有办法可以将这些数据结构指定为 Coin-OR 的 LP 求解器的输入?
python - 具有冗余约束的不可行解决方案 - PuLP 和 COIN-OR
我在 python 中使用PuLP
with处理 LP 模型CBC
。该模型有很多约束,当然其中许多是多余的。我将展示一个例子。
结果是:
当然,在这个例子中,这两个约束显然都是多余的,而且在我解决的问题中,很难看出约束是多余的。
我不知道问题是否出在求解器(CBC
)上,所以我可以使用也许CPLEX
来解决冗余约束的问题,或者问题是PuLP
我需要使用另一个库。或者,也许我需要对问题进行建模以使其成为冗余证明。
任何指导?谢谢!
编辑:我尝试使用开放式求解器(在 excel 中)CBC
并且它有效,所以我认为这一定是实现的问题PuLP
,或者我做错了什么,或者可能没有办法在其中添加冗余约束PuLP
c++ - 硬币或线性规划:ClpPlusMinusOneMatrix 表示
我正在使用硬币或线性规划库。我想构造一个ClpPlusMinusOneMatrix。它的构造函数是:
目前还不清楚什么startPositive
和startNegative
是。如果它与此处描述的另一个类的概念相同,那么矩阵如何区分 +1 和 -1 值?
例如,如果我想实现 1x4 矩阵:[1 -1 1 -1]
. Clp 如何知道最后两个元素的值?
谢谢
julia - JuMP (Julia) 中约束的影子价格
我有以下 LOP。
我正在使用 cbc 求解器并使用 julia 来解决这个问题。但是,我想获得约束的影子价格。特别是,我想获得约束、assemblyCondition 和 testingCondition 的影子价格。
有人知道执行此操作的代码/功能吗?我试过 getdual() 但它没有用。
mathematical-optimization - 建议 ILP 求解器的下限
我有一个整数线性规划问题,我尝试过的求解器(CPLEX、CBC)需要很长时间才能解决,即使他们很早就找到了最优解。他们只需要永远充分证明这一点。
为我的最小化问题的目标值计算一个微不足道的下限很容易,但在 CPLEX 的输出(Best Bound 列)中,我可以看到它甚至在很长很长时间内都没有接近。它几乎可以立即找到非常好的解决方案,但它错误地认为最佳解决方案可能会好得多。
现在我不得不承认我真的不知道这些求解器是如何工作的,但看起来他们正在浪费时间试图改进可笑的弱下限,寻找不可能乐观的解决方案。所以我的问题是:
告诉求解器一个不错的目标下限可以帮助它更快地运行吗?
如果是这样,哪些求解器可以接受作为附加输入提供的已知下限?
作为说明,我粘贴了示例运行中 CPLEX 输出的前几行(运行时间更长,目标没有任何进一步的改进,最佳界限的改进也非常缓慢):
我希望我可以告诉求解器不要费心寻找目标低于 10 的解决方案(因为我可以用更简单的方法证明这一点),尤其是没有负目标值的解决方案(因为在我的模型中甚至不可能)。
julia - 如何使用 JuMP 请求 MIP 的次优解决方案
我有一个混合整数编程问题。我可以使用 JuMP 找到最佳解决方案。但是我怎样才能找到第二好的解决方案呢?或三等奖等。
这可能是另一个同样最优的解决方案,或者它可能是一个更差的解决方案,或者它可能是:Infeasible
- 可能没有大多数解决方案。
我知道对于类似 TSP 的问题,我可以通过逐步删除最佳路径上的链接来找到其他解决方案(即将某些城市之间的距离设置为无限)。对于调度类型的问题,我可以类似地逐步设置在最佳路径中使用的时隙的可用性被禁止。
但是有没有一种通用的方法来做到这一点,而无需编写自己的问题特定方法来禁止此解决方案?
python - PuLP:将 LpVariable 或 LpAffineExpression 转换为整数
在我的优化问题中,我有一个条件,即特定组中的项目数量(LpInteger)不得超过项目总数的百分比。为此,我编写了以下代码:
这种方法的问题是我的最大值和最小值变成了浮点数(LpContinuous)。这反过来使解决方案infeasible
。
如何确保每个 max_d 和 min_d 值都是整数?最好,我还想四舍五入 max_d,同时截断 min_d。
编辑
我infeasible
通过更改total = lpSum([num[i].varValue for i in ind])
为total = lpSum([num[i] for i in ind])
. 但是,最小值和最大值仍然是浮点数。如果有人知道如何将这些转换为整数,仍然会非常感谢您的回答。
c++ - Coin-or-CBC solver performance: command line utility vs. compiled c++ program
I'm learning the C++ API of CBC, and I'm having trouble matching the performance of a compiled C++ program that loads an MPS file and solves it using the CbcModel class when compared to just opening the CBC command line utility, importing the same file and using solve
. The cmd line utility solves the MIP in 1 second, and the C++ program doesn't terminate in <10 minutes.
I figured the problem is that when I'm using C++ API I have to configure all the parameters explicitly and It seems that the default parameters used by the cmd line utility are pretty well rounded for your average MIP model.
Is there a list of the default parameters for the presolve, heuristics and cuts that are used by the cmd line utility and which I should activate in my C++ program to match the performance. Maybe someone has played around with these parameters and found a good set of parameters empirically.
The C++ program is:
The MIP model in question can be downloaded from HERE. Optimal objective value: -771.2957.
Cbc command line utility log that indicates all kinds of advances features are activated (preprocessing, primal heuristics and strong branching):