我试图将我在纸浆中的乘法约束线性化。
它看起来像这样:
prob += (1 - Y) * (3 - X)
等于:
prob += 3 - 3*Y - X + X*Y
其中Y是二元变量,在公式中,除了以下部分外,一切都是线性的:Y*X
。我试图通过使用我在另一个问题中找到的公式来解决这个问题:
所以我尝试使用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。有没有办法使用公式图像中给出的第一个减法方法来解决这个问题?
答案 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通常将它们的内部数字存储为浮点数