2016-11-16 93 views
0

我正在线性化我在纸浆中的乘法约束。约束条件下的乘法 - 求解纸浆(python)

它看起来是这样的:

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。我使用日志替换方法。这给了我下面的代码:

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

和其他约束:

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

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

回答

0

根据他们的PyPi页面上的文档,它看起来像你可能需要的只是调用你的LpVariable的值。这会给你的数值,然后可以在使用你的计算

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

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

值(X): 2.0

所以你的功能可能能够被重新写为

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

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

+0

谢谢,但是当我这样做时,它说:'float()参数必须是字符串或数字,而不是'NoneType',如果我删除了float '需要浮动'。我不认为记录LpVariable是可能的。 – WhatTheShrimp

+0

挖掘到模块的源代码,获取值是一个不同的呼叫抱歉。从他们的代码在这里 - https://github.com/coin-or/pulp/blob/master/src/pulp/pulp.py - 在LpVariable类中: def value(self): return self.varValue 所以得到一个变量的值是x.value()而不是值(x),它应该给你你的值,假设该变量有一个赋值给它的值。您将需要保留float()部分,但内部没有将值分配给LpVariable类中的浮点类型。 – huma474