问题标签 [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.
python - 纸浆编程输出
我正在与一个合作者合作进行某个涉及线性规划的优化项目。我们都使用 Coin-OR 分支和切割求解器来解决问题。我使用基于 Python 的 PuLP 包构建 .LP 文件。我不完全确定合作者如何创建他们的 .LP 文件(绝对不使用 Python),但本质上,我们有两个不同的系统为完全相同的问题生成 .LP 文件 - 即目标函数、变量、约束完全相同.
我通常在 Python myProblm.solve()
(接下来,我将从我的系统(Python 或命令行)获得的输出与我的合作者获得的输出进行比较。[请注意,无论是在 PuLP 中还是在命令行中解决,我这边的问题的输出都是完全相同的。]
我们之间的目标函数值匹配得很好,但其他细节并不完全匹配。例如,如果我们要解决这个 Whiskas 混合问题,成分的总成本将完全相同,但成分的比例不同。知道为什么会这样吗?
我手动比较了我们的 .LP 文件,发现了一些差异。对于初学者来说,约束和变量的顺序是不同的。换句话说,如果有 5 个约束,我的文件将它们列为C1,C2,C5,C4,C3
,而相同的约束将列为C1,C2,C3,C4,C5
。此外,我的 Python 代码将所有数字四舍五入到 10 的位置,而他的系统将它们四舍五入到 1 的位置。因此,一些变量的系数值略有不同。
这些差异是否在求解器的确切输出中起作用?
此外,下一个扩展问题是:在解决线性规划优化问题时,我们应该怎么做才能获得完全相同的输出?哪些因素会影响 LP 问题的解决方案?.LP 文件的结构等因素是否起作用?如果我在不同的计算机上以完全相同的条件运行相同的 LP 文件,我会得到完全相同的输出吗?
coin-or-cbc - 构建 CoinOR 时出错
我正在尝试构建 CoinOR,我正在按照https://projects.coin-or.org/CoinBinary上的简单说明进行操作。配置成功,所以我应该拥有所有依赖项。但是我在运行“make”命令时遇到了这个错误:
g++ -DHAVE_CONFIG_H -I。-我。
-I/home/user/CoinOR/COIN-1.8/Osi/src/Osi -I/home/user/CoinOR/COIN-1.8/CoinUtils/src -O3 -pipe -DNDEBUG -pedantic-errors -W括号 -Wreturn-type -Wcast-qual -Wall -Wpointer-arith -Wwrite-strings -Wconversion -Wno-unknown-pragmas -Wno-long-long -DFLOPCPP_BUILD -MT MP_boolean.lo -MD -MP -MF .deps/MP_boolean.Tpo -c MP_boolean .cpp -fPIC -DPIC -o .libs/MP_boolean.o 在 MP_boolean.cpp:12 包含的文件中:
MP_set.hpp:在成员函数 'flopc::MP_domain&
flopc::MP_subset::operator()(const flopc::SUBSETREF&)':
MP_set.hpp:212:9:错误:无法绑定非常量左值引用
将 'flopc::MP_domain&' 键入到 'flopc::MP_domain' 类型的右值
返回 MP_domain(s);
有人有 id 或解决方案,比如预编译的二进制文件吗?我正在运行 Arch Linux。
cplex - 当我修改约束 (GLPK) 的 RHS 时会发生什么?
我正在增加GLPK 的 MIP 问题的小于或等于约束的 RHS。但是,有时,在重新优化后,GLPK 在时限内找不到任何可行的解决方案。所以我猜它不会检查以前的解决方案是否可行。有没有人有这方面的经验?或者可以将我指向一个不是源代码本身的文档?
此外,我想知道在为任何其他求解器(例如 Gurobi、Cplex、SCIP、CBC)添加约束后的工作流程是什么,因此任何信息都会有所帮助。
干杯!
c++ - 线性规划:模约束
我正在使用 Coin-Or 的排练来实现线性规划。
我需要一个模约束。示例:x
应为 的倍数3
。
结果x
应该是 6。但是,z
设置为2.5
,这应该是不可能的,因为我将它声明为CellIntVar
.
我怎样才能强制z
成为一个整数?
pyomo - 如何从 Coin-OR 框架获取可行性泵的迭代和运行时间
我编写了一个算法,可以找到混合整数凸优化问题的可行点。现在我希望将它与MINLPlib 库中的测试平台上的混合整数非线性程序的可行性泵进行比较。
我可以通过 Pyomo 从Coin OR项目访问 BONMIN 求解器,该项目还实施了可行性泵。这是此求解器的可能选项列表。
我的问题是
以下选项对于测试(普通香草)可行性泵是否正确?
如果没有,任何提示如何正确地做到这一点表示赞赏。
- 如何访问可行性泵的迭代次数(即泵送周期)?我可以在打印输出中看到迭代信息,但如果它存储在某个变量中,这将非常有帮助。
mathematical-optimization - OSI 的传入 API(开放求解器接口)
我们希望将 COIN-OR 与其他一些优化程序一起用于研究项目,如果我们可以使用标准化 API(最好是基于 Web 的 API)从一个点启动所有求解器,那就太好了。
遗憾的是,我无法找到有关从另一个角度访问 OSI 的任何信息,所以我希望这里的人能够体验到什么是可能的,哪些是不可能的。
到目前为止,通用邮件列表无济于事,因为我的注册仍然开放,我不确定整个项目是否仍在维护。
谢谢!
c++ - 如何通过命令行工具在 COIN-OR Cbc 中设置超时?
我正在通过其命令行工具使用COIN-OR Cbccbc
,如果计算时间过长,则需要中止一些计算。
我知道我可以在 cbc 周围编写一个控制过程以在超时到期后将其杀死。我也知道我可以使用 cbc 作为 C++ 库。两者看起来都很麻烦,我正在寻找一个更简单、直接的解决方案。
这可以直接通过cbc
命令行工具吗?
如果没有,是否有使用 cbc 作为 C++ 库的简单方法?(读取*.lp
文件,应用超时,创建*.soln
文件)
optimization - .lp 文件的大小或 CBC/GLPK 中的变量数量是否有限制?
我正在尝试解决 GLPK 和/或 CBC 中的 MIP。.lp 文件有 907 兆字节,大约有 500 万个变量,但它甚至不能在 CBC 上运行,并且在 GLPK 上运行了 8 天以上,但没有找到解决方案。此外,每当我对 GLPK 设置时间限制时,它都会显示 TIME LIMIT EXCEEDED;SEARCH TERMINATED 并想知道是否可以使用 CMD 窗口或 python 获得输出。
linear-programming - Pulp & coin-or-cbc:SOS 权重的含义是什么?
当使用纸浆定义混合整数线性规划问题时,可以这样定义 sos:
(“sos”或特殊排序的集合是一种特殊约束,指定集合中只有一个变量可以是非零的)。
我们看到这允许为 sos 变量(在本例中为 1,2)指定权重。大概它们定义了每个变量的优先级,即在分支时哪些变量首先允许为非零。
但是权重究竟是如何定义的呢?
底层求解器是 coin-or-cbc,我找不到任何关于他们如何使用 SOS 权重的信息。
python - PuLP CBC 多线程不适用于 COIN_CMD
我正在使用 PuLP 和 Python 进行一些优化,因为我的数据很大,所以我决定尝试多线程,因为我的问题很大,即选择
但是,在测试主要问题的一小部分(10k 而不是 1M 人)时,我无法让多线程实际使用多个线程。
我按照说明使用Coin-OR 网站上描述../configure --enable-cbc-parallel
的标志从源代码构建求解器;一切都很好,所有的测试都通过了。我检查了 CBC 配置登录,它在第 845 行有消息,所以它肯定可以工作。build/Cbc/config.log
configure:30105: Cbc multithreading enabled
系统:
- Mac OS X 10.14.3
- i7-4870HQ 四核
- Python 3.6.7 w/Anaconda
- 在 Jupyter 和从命令行在 Python 解释器中运行时都会出现问题
代码,类似于此处的示例:
如果我指定了多线程求解器或者我只使用了默认求解器,那么那个时间大致相同。
在运行时的 CBC 消息中有一行:
还有以下几行:
这意味着所有线程都已创建但未使用?
我想到但不知道如何解决的一种解决方案:也许我的求解器路径是错误的,即 COIN_CMD 求解器不应该被定向到.../cbc
其他东西。我还没有找到任何东西。
那么我做错了什么?我找不到有关如何使用线程的任何其他文档。希望这是一个简单的解决方案的愚蠢问题。谢谢你的帮助。