约束中的乘法 - 用纸浆(python)求解

时间:2016-11-16 23:30:58

标签: python constraints multiplication linear pulp

我试图将我在纸浆中的乘法约束线性化。

它看起来像这样:

prob += (1 - Y) * (3 - X)

等于:

prob += 3 - 3*Y - X + X*Y

其中Y是二元变量,在公式中,除了以下部分外,一切都是线性的:Y*X。我试图通过使用我在另一个问题中找到的公式来解决这个问题:

Link to the picture

Link to the question

所以我尝试使用X1*X2 = Y,使用我的代码,这会给X*Y = A。我使用了log substition方法。这给了我以下代码:

    prob += math.log(float(A)) = math.log(float(X)) + math.log(float(y))

和另一个约束:

    prob += 3 - 3*Y - X + A

只有这似乎不起作用,因为浮点数只能是字符串或数字而不是LpVariable。有没有办法使用公式图像中给出的第一个减法方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

根据PyPi页面上的文档,您可能需要的是调用LpVariable的值。这将为您提供可在计算中使用的数字值

https://pypi.python.org/pypi/PuLP

您可以使用value()获取变量的值。例如:

值(x): 2.0

所以你的功能可以重写为

prob += math.log(float(value(A))) = math.log(float(value(X))) + math.log(float(value(y)))

float()声明也可能是不必要的,因为它看起来像LpVariables通常将它们的内部数字存储为浮点数