问题标签 [mixed-integer-programming]
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 - 为优化创建条件目标函数
上下文: xi 和 xj 对应于出发和到达时间。fij 给了我们对应于 ij 组合的等待时间。如果在抵达之前出发,我们会在差价上增加 1 天。目标是最小化与 ij 对应的等待时间和负载的总和。
是否可以将此函数建模为线性程序。
mathematical-optimization - If then else 约束 - 整数线性规划 - Gurobi
我想通过 Python API 使用 Gurobi 在一组约束中表达if then else语句,其中 B 和 A 是二元决策变量。
这是我坚持的声明:
如果(B[r,u,v,x,y])那么A[r,u,x] 或 A[r,v,y]
否则 ,当 A[r,u,x] =1 和 A[r,v,x] 时,设置 B[r,u,v,x,y] == 0
我知道如何将if then的第一部分表达为:
B[r,u,v,x,y] >= A[r,u,x]
B[r,u,v,x,y] >= A[r,v,u]
但不确定如何制定约束:当 B[r,u,v,x,y] 为 0 如果 A[r,u,x] 和 A[r,v,y] 在 else 中设置为 1部分。
谢谢
constraints - MIP/LP - 建模“如果 b=1 则 x=y”约束
我有一个混合整数规划 (MIP) 问题,目前在 Python 的 PuLP 库中建模。然而,我的问题非常笼统,语法在这里不起作用。
我想为我的模型添加一个约束,如下所示:
该变量b
是取值为 0 或 1 的二进制变量x
,y
是表示当前库存水平的变量。x
作为一个连续变量,y
作为一个整数变量。
我知道约束只能以以下格式建模:
我希望有一些解决方法可以对上述if b then x equals y
约束进行建模。
到目前为止,这是我的方法:
对于 2 个二进制变量 x 和 y,以下情况成立:
我猜这个解决方案涉及一个大的 M 常数,甚至可能是更多的辅助变量。
一点背景:我想模拟一个库存问题,具有连续的库存水平。然而,订单决定应该只能是整数。因此,我需要用浮点数对库存水平进行建模。在顺序点 (b==1) 但是整数。
我希望有人可以在这里提供帮助,即使这是理论上的,而不是直接与编码相关的。对可能有帮助的进一步资源的提示也受到高度赞赏。
linear-programming - 线性规划:非重叠约束?
我想在线性程序(或必要时的 MIP)中编写一个非重叠约束(即 2 个矩形不重叠)。我知道如何在约束编程中做到这一点:
对于对象 i 和 j:
x[i]+dx[i]<=x[j] 或 y[i]+dy[i]<=y[j] 或 x[j]+dx[j]<=x[i] 或 y[ j]+dy[j]<=y[i] 其中 x 和 y 是包含对象坐标的数组,dx 和 dy 是对象的维度。
知道在 LP/MIP 中执行此操作的最佳方法吗?谢谢!
python - 切割平面法:使用python
我想在 python 中使用内置改进的单纯形方法实现切割平面方法,然后在其上应用切割平面方法(使用 scipy.linprog 或纸浆来实现单纯形方法以获得可行的解决方案)
问题是需要显示所有方程和画面的单纯形解决方案,以便我可以解决切割平面方法的额外约束。但是,Linprog 只为我提供了 x 和松弛变量的最佳值的解决方案,它没有给我整个方程组(画面),我可以在这些方程组上选择一个非整数方程,然后应用切割。有没有一种方法可以让我在 Python 中使用内置的单纯形法,然后自己实现切割平面?
(我不想在纸浆中实现整数约束以获得整数解,我想自己在单纯形表的顶部实现切割平面)。
非常感谢您的帮助!
python - 和/或约束的混合整数线性规划
我希望使用 PuLP 来满足一组约束,但我不确定如何设置变量来做到这一点。
例如,我将如何为以下约束设置变量:
((x_1 < x_2) AND (x_1 < x_3)) OR ((x_1 > x_2) AND (x_1 > x_3))
变量 x_1 要么小于要么大于 x_2 和 x_3。
任何帮助,将不胜感激。谢谢!
python-3.x - 第一次在 Python 中使用 Scipy.optimize.linprog
你好,
我第一次使用 Scipy.optimize.linprog。
我的问题是这样的:
我不知道如何使用代码,但这些是我要优化的变量:
我需要有 8 名球员,总薪水最高为 50,000。它应该由 y_pred 优化。
结果将是 y_pred 得分最高且保持在 50,000 以下的 8 名玩家。
我可以使用以下代码导入 linprog:
我试过这个,但是,我再次不熟悉代码:
我收到以下错误:
更新:
找到了这段代码,它与我正在尝试做的事情完美配合(在 DraftKings 阵容中获得 8 名最佳球员):
python - MINLP中的Python外部约束函数
是否可以在 Python 的混合整数非线性编程库中添加一个外部自定义函数作为动态约束?我正在使用布尔变量和 Numpy 矩阵(大小 mxn),我想最小化请求的总值的总和(例如 tot_vals = 2,3......n)。因此,我想添加一些“空间”约束,我创建了函数(基于布尔索引)并尝试在我的优化过程中实现它们。在 CVXPY 中,它失败了,因为我只能添加 CVXPY 的格式化约束(据我所知),PULP 失败,因为它仅适用于 LP 问题,也许可以选择 Pyomo、OpenOpt 或 PySCIPopt?
预先感谢您的帮助
python - 使用 Python Pulp 在约束中使用 mod 函数
我正在写一个 LpProblem,我需要创建一个约束,其中一些变量的总和是 100 的倍数... 100、200、300...
我正在尝试使用 mod()、round() 和 int() 的下一个表达式,但没有一个有效,因为它们不支持 LpAffineExpression。
probl += lpSum([vars[h] for h in varSKU if h[2] == b]) % 100 == 0
probl += lpSum([vars[h] for h in varSKU if h[2] == b]) / 100 == int(lpSum([vars[h] for h in varSKU if h[2] == b] ) / 100)
probl += lpSum([vars[h] for h in varSKU if h[2] == b]) / 100 == round(lpSum([vars[h] for h in varSKU if h[2] == b] ) / 100)
你能给我一些写这个约束的想法吗?
谢谢!
if-statement - 整数线性规划中的 If-then 约束
我有一个 30*40 的矩阵。假设矩阵中的组件用“P”指定,每个“P”的行和列的相关编号由“X”和“Y”相应地指定。我有一个模型,输出应该为我们提供 P、X 和 Y。如何定义将 P 与其确切的 X 和 Y 连接起来的约束(用于求解单纯形)?例如,我想说:
如果 X=1 且 Y=1 则 P= 0.1
如果 X=1 且 Y=2 则 P= 0.5
如果 X=1 且 Y=3 则 P= 0.8 依此类推。
我不希望模型返回与其在矩阵中的位置不匹配的 P。我怎样才能做到这一点? 这是目标函数