我正在尝试解决以下等式:
maximize x^{T}Ax
其中x
是要最大化的变量的3 X 1
向量,A
是3 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.
答案 0 :(得分:0)
我不相信PuLP支持二次规划(QP)。您的模型是二次的,PuLP仅适用于线性编程模型(LP和MIP)。在Python中表达QP有很多选择。高性能商业解算器通常提供Python绑定,否则您可以查看示例CVXOPT。请注意,只有凸QP才能“轻松”解决。如果你有一个非凸QP的东西变得更加困难,你可能需要查看一个全局求解器(没有那么多类型的求解器)。非凸QP可以通过KKT条件重新表示为线性MIP模型,尽管这些模型可能并不总是表现良好。