Python线性编程

时间:2016-06-08 20:53:50

标签: python optimization linear-programming pulp

我正在尝试解决以下等式:

maximize x^{T}Ax其中x是要最大化的变量的3 X 1向量,A3 X 3值矩阵。

所以基本上x^{T} = [a,b,c]是最大化的未知数,A可能是

A = [ [29, 29, 79], [28, 28, 48], [9, 40, 0 ]]

有人能告诉我如何使用PuLP或python中的其他线性编程包以最大化问题的形式表示这个吗?

非常感谢任何帮助。我对这个领域非常陌生,并且不知道如何开始代表这个方案。

到目前为止,我尝试使用CVXPY来建模此功能。 我有以下代码,但看到错误:

    [1] A = np.array([[29,29,79],[28,28,48],[9,40,0]])
    [2] x=Variable(3)
    [3] objective=Minimize(x.T*A*x)
     Warning: Forming a nonconvex expression (affine)*(affine).
  warnings.warn("Forming a nonconvex expression (affine)*(affine).")
    [4] constraints=[0<=x,x<=1,sum_entries(x)==1] #what I'm trying to say is each entry of x should be between 0 and 1 and all entries should add up to 1.
    [5] prob = Problem(objective, constraints)
    [6] prob.solve()
    DCPError: Problem does not follow DCP rules.

1 个答案:

答案 0 :(得分:0)

我不相信PuLP支持二次规划(QP)。您的模型是二次的,PuLP仅适用于线性编程模型(LP和MIP)。在Python中表达QP有很多选择。高性能商业解算器通常提供Python绑定,否则您可以查看示例CVXOPT。请注意,只有凸QP才能“轻松”解决。如果你有一个非凸QP的东西变得更加困难,你可能需要查看一个全局求解器(没有那么多类型的求解器)。非凸QP可以通过KKT条件重新表示为线性MIP模型,尽管这些模型可能并不总是表现良好。