【问题标题】:Python Linear ProgrammingPython 线性规划
【发布时间】:2016-06-08 20:53:49
【问题描述】:

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

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.

【问题讨论】:

  • 并非所有问题都需要代码,但在这种情况下,看起来更像是您只是放弃了问题并希望有人为您编写解决方案。这实际上不是编程问题,而是数学问题。您需要对 Python 有基本的了解,然后这里的任何答案都可能对您有所帮助。
  • 是的,我对 python 的了解不只是初步的。就示例或某些此类事情而言,我只是希望有人指出我正确的方向,因为我对优化或线性编程领域以及python中的相应包完全缺乏任何理解。
  • 听起来你需要一个教程,因为这是一个 XY 问题。您真正的问题似乎是“我如何在 Python 中执行线性编程”,它看起来太宽泛了。一个快速的谷歌搜索出现了this tutorial about PuLP,这可能会对你有所帮助。
  • @AdamSmith 我已经看到了。但他们似乎没有在目标中使用二次项,而这正是我在目标函数中所拥有的。

标签: python optimization linear-programming pulp


【解决方案1】:

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

【讨论】:

  • 感谢您的意见。我目前正在使用cvxpy.org/en/latest,但是当我尝试输入以下目标函数时出现错误:A = np.array([[29,29,79],[28,28,48],[9,40,0]]) objective=Minimize(x.T*A*x) 我看到的错误是Forming a nonconvex expression (affine)*(affine). warnings.warn("Forming a nonconvex expression (affine)*(affine).")。知道我该如何解决吗?还是我做错了什么?
  • Cvxopt 是针对凸问题的,看来你试图传递一个非凸问题。
  • 嗯,对,但我不明白的是,如果问题本质上是非凸的,或者我是否可以实际修改目标函数的表示以使其凸出?意思是我可以以某种方式重新制定问题以使其凸出吗? @erwinkalvelagen
  • 1.取决于Q矩阵中的数据,2。如果你知道怎么做,可能会有诺贝尔奖等着你。
  • :) 哈哈,我明白了。你指的是什么Q矩阵?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-13
  • 1970-01-01
  • 2016-01-31
相关资源
最近更新 更多