问题标签 [pulp]
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 - 为整数线性规划设计目标函数
我正在努力为整数线性规划模型设计一个目标函数。目标是确定两个基因的拷贝数以及是否发生了基因转换事件(其中一个拷贝被另一个覆盖,看起来一个被删除但净拷贝数没有改变)。
该问题涉及两个数据向量,P_A
和P_B
。这些向量包含大于零的连续值,这些值对应于在每个位置进行的拷贝数的测量。P_{A,i}
不一定是整个基因的同一个点P_{B,i}
,因为每个拷贝的位置都是唯一的(并且可以映射到基因组中的绝对位置)。
鉴于此,我的计划是尝试最小化我的决策变量和跨不同基因组窗口的测量数据之间的差异,为我提供对应于同一区域的两个数据向量的不同切片。
决策变量:
然后,目标是最小化以下等式左右两侧的差异:
受到一些限制,例如2 <- A_w + B_w <= 4
但我不确定如何将其公式化为最小化的函数。我有两个不是真正函数的方程,决策变量没有系数。
我也不确定如何处理C_w
.
我也不确定如何将结果重新组合在一起;在我解决每个窗口中的 LP 之后,我仍然需要将其合并到一个全基因调用中(并且理想地确定哪些窗口具有非零值C_w
.
python - 写入 COIN-OR CBC 日志文件
我正在使用 COIN-OR 的 CBC 求解器来解决一些数值优化问题。我正在通过 PuLP 在 Python 中构建优化问题。
我注意到像 GUROBI 和 CPLEX 这样的求解器会创建日志文件,但我似乎无法弄清楚如何让 CBC 创建日志文件(而不是将优化器的进度打印到屏幕上)。
有人知道 CBC 中设置日志文件的选项吗?将所有标准输出重定向到一个文件对我不起作用,因为我正在并行解决一堆问题并且希望将它们的日志文件分开。
这是我如何调用求解器的示例。这很好用,并将进度打印到终端。
以下是我认为应该如何构建解决方案的方式(尽管显然LogFileName不是有效的 CBC 选项)。
对此的任何帮助将不胜感激。我已经通过互联网、文档和 CBC 交互会话数小时试图弄清楚这一点。
python - 添加许多约束时纸浆非常慢
我正在尝试使用 PuLP,但添加 4000 个约束(包含 67 个变量)需要50 秒。解决问题只需要几分之一秒。
我们希望使用 PuLP 轻松测试大量问题的多个求解器。
纸浆需要这么长时间吗?直接使用 PyGLPK 只需要几分之一秒,包括设置和求解,所以我希望不会。我可以做些什么来提高纸浆中这一步的效率?
更新
我的约束矩阵非常稀疏,我能够通过仅包含非零系数将这个特定问题的设置时间减少到 4 或 5 秒。我仍然能够编写自己的 .lp 或 .mps 格式的文件,使用 cbc 或 glpsol 子进程解决问题,并且比 PuLP 更有效地解析解决方案,这仅仅是因为我可以在 PuLP 时在几毫秒内编写输入文件需要几秒钟。我仍然不确定为什么会这样。
python - 如何将纸浆中的弹性子问题用作约束?
在 Python PuLP 中,线性规划约束可以转化为弹性子问题。
http://www.coin-or.org/PuLP/pulp.html?highlight=lpsum#elastic-constraints
解决子问题优化了与目标值的距离。
当然,目标值是这个子问题的最优解,但是弹性化的全部意义在于我们相信这个解可能是不可行的。
如何将子问题纳入整体问题?我尝试以添加约束的方式将其添加到问题中,这引发了类型错误。我尝试将其放入目标函数中,但这也不起作用。
我在上面的文档或此处托管的示例中找不到任何内容:
https://code.google.com/p/pulp-or/wiki/OptimisationWithPuLP?tm=6
这是我制定的子问题:
这是我认为我必须将其合并到 LP 目标中最接近的东西:
...
python - 现有约束推断的无效元组数
我已经处理这个问题好几天了,但仍然没有解决方案。让我通过一个简单的例子来解释它。
假设有一个长度为 8 的整数数组。每个单元格都可以取某些值。前 4 个单元格可以取 0 或 1,另一半可以取 0、1 或 2。这 3 个数组可以是一些示例。
但是,构造数组有一些限制,如下所示:
为了更好地理解;
问题是我需要从这些约束中找到推断的 t 元组(t 长度)的数量。例如,假设调用了一个不违反任何约束的生成数组myArray
。如果你看constraint1
,它表示如果myArray[0]
是0,无论什么myArray[1]
都必须是1。因为myArray[1]
只能取0和1,如果它得到0,那就违反了constraint1
。因此;
现在如果我们看constraint2
,它说如果myArray[1]
是 1 则myArray[2]
不能是 0。因为在我们的例子中我们已经选择了myArray[1]
1,myArray[2]
它将是 0。
当这些含义结合在一起时,又形成了一个约束:
我想严格强调,这是一个非常简单的例子,只是为了说明问题。就我而言,数组的长度在 50-200 之间变化。数量限制可以是 0 到 500(甚至更多)之间的任何值。我还想强调,我所需要的只是推断约束的数量,无需找到它们。
以下是我尝试过的一些方法;
1) 找出至少有一个共同选项相同的约束选项的真值表。然后,查找所有 t 元组。原来,空间很大。
2)找到所有不违反mathematica约束的解决方案(可满足问题),然后查找缺少哪些t元组。它甚至找不到一种解决方案。
问题是,在这些方法中,我试图生成我不需要的整个空间。在不枚举整个空间的情况下找到 t 元组(约束)的数量是否有更好的想法?
python - 纸浆求解器错误
我正在尝试在 puLP (Python) 中解决 MILP,但我不断收到以下错误:
对于我的线性规划问题,我试图将不同向量的总和作为约束,我想我一定是做错了,因为一个更简单的问题可以顺利解决。我附上了代码(C
是一个 N × Nnumpy
数组)。
python - 更改 PuLP(对于 Python)的约束容差
我正在使用 Python 的 PuLP 线性编程模块来解决线性问题。
我设置了问题、约束,并使用了 PuLP 提供的默认求解器,即 CBC(出于显而易见的原因,我的 mac 上的求解器可执行文件称为cbc-osx-64 )。运行此可执行文件时:
好的,我通过 PuLP 运行求解器并获得解决方案。在验证约束是否得到满足时,我得到了解决方案和我要求的(对于某些约束,不是全部)之间的差异,它小于 1e-6 但大于 1e-7(例如 1.6e-7) .
当然,有一个约束容差是有意义的,这很好。但我需要能够控制这一点,我认为这应该是任何 LP 任务中非常核心和重要的参数?
因此,让我们看看 CBC 求解器的“帮助”(运行可执行文件并输入“?”),这些是我可以更改的参数:
这些参数的值具有以下值:
唯一可能与约束容差相关且与我的观察一致的参数是“integerTolerance”。
因此,我将此容差更改为 1e-8,但得到了相同的结果(即,解决方案与基本事实的差异超过 1e-7)。
问题: 任何人都可以对此有所了解吗?特别是,有没有办法设置约束容差(找到的解决方案与我们要求的解决方案之间的差异)?如果不是 CBC,您是否知道可以设置此数量的任何其他求解器(GLPK、Gurobi 等)?
谢谢。
python - PuLP 生成可通过命令行 CBC 解决的 LP 文件,但 PuLP 报告未定义的解决方案
我有以下由 PuLP 生成的 LP 文件:
我手动重新创建代码以一次生成一个问题进行测试(请参阅本文底部),并发现虽然 PuLP 报告此问题的解决方案为未定义,但 CBC 本身可以产生最佳解决方案:
加拿大广播公司:
为什么纸浆没有找到相同的答案,使用相同的求解器?这个问题,从视觉上看,似乎很明显它有一个最优解。
以下是生成 LP 文件的手动代码:
python-2.7 - 纸浆不保留整数类别
所以在我的代码中,我正在为不同类型的变量编写一个线性程序。有 6 个。第一个是产品的“x”变量,其余 5 个是盒子的“w”变量(五个不同大小的盒子)。我需要所有这些都是整数,但是,在我的输出中,我将 x 变量设为整数,但框大小都是非整数。我已经尝试了 100 种不同的东西,但我无法弄清楚这一点。
对于 varset 中的 ind:
python - 如何在纸浆中找到概率的最大值
我正在尝试解决 PuLP 中的线性问题,以最小化成本函数。成本函数本身是成本函数最大值的函数,例如,我有一个每日成本,我试图最小化每月成本,即每日成本加上当月最大每日成本的总和. 我不认为我在最终解决方案中捕获了函数的最大值,而且我不确定如何解决这个问题。代码的基本大纲如下:
变量 max_revenue 始终等于 c_0 - d_0 + price[0] 即使 price[0] 不是 price 的最大值并且 c_0 和 d_0 都等于 0。有谁知道如何确保将动态最大值插入到问题中?谢谢!