0

我正在尝试线性化我在纸浆中的乘法约束。

它看起来像这样:

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. 有没有办法使用公式图像中给出的第一种替换方法来解决这个问题?

4

1 回答 1

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 通常将其内部数字存储为浮点数

于 2016-11-16T23:45:04.257 回答