【发布时间】:2017-03-31 08:43:48
【问题描述】:
我正在尝试线性化我在纸浆中的乘法约束。
看起来像这样:
prob += (1 - Y) * (3 - X)
等于:
prob += 3 - 3*Y - X + X*Y
其中 Y 是一个二进制变量,在公式中,除了以下部分之外,所有内容都是线性的:Y*X。我试图通过使用我在另一个问题中找到的公式来解决这个问题:
所以我尝试使用X1*X2 = Y,使用我的代码得到X*Y = A。我使用了日志替换方法。这给了我以下代码:
prob += math.log(float(A)) = math.log(float(X)) + math.log(float(y))
还有另一个约束:
prob += 3 - 3*Y - X + A
只有这似乎不起作用,因为浮点数只能是字符串或数字,而不是LpVariable。有没有办法使用公式图像中给出的第一种替换方法来解决这个问题?
【问题讨论】:
-
您在表格中显示的转换是非线性的。 PuLP 要求用变量之间的线性关系来表示约束。因此,不幸的是,它们是不可实现的。还有其他潜在的线性转换可用,但您需要包含有关原始问题的更多信息。
标签: python constraints multiplication pulp