使用纸浆在混合整数线性规划中制定函数的平方

时间:2018-07-26 11:16:06

标签: linear-programming pulp mixed-integer-programming

我有一个线性方程Ax = b。我正在尝试在Python中使用纸浆来最小化(Ax-b)^ 2。 A的尺寸为(1000,500),b的尺寸为(1000,)。

到目前为止,我已经尝试过:

import pulp
mse = pulp.LpProblem("Example_Problem", LpMinimize)
vars = pulp.LpVariable.dicts('x', range(len(A[0])), lowBound=0,upBound =1, 
                             cat='Integer')
for row, rhs in zip(A, b):
    mse += sum([row[i]*vars[i] for i in range(len(row))]) - rhs

我如何使用平方表示功能。如果我尝试:

mse += (sum([row[i]*vars[i] for i in range(len(row))]) - rhs)**2

我收到此错误:

***或pow()不支持的操作数类型:'LpAffineExpression'和'int'*

1 个答案:

答案 0 :(得分:0)

纸浆仅适用于线性模型。您创建了一个非线性模型。

理论上,您可以通过形成正规方程式来解决此问题(请参阅统计书):您可以获得线性方程组。可以使用LP解算器解决此问题,但不幸的是,此方法不是很可靠。

使用LP模型的更好方法是用偏差的绝对值代替偏差的平方。这将给您一个LP(请参阅link)。有时会使用这种方法来获得更可靠的估计,而不受异常值的影响较小。

由于增加了x必须采用整数值的约束,因此最终得到了MIP模型。