1

我正在使用以下模型测试 CVXOpt

>>> from cvxopt.modeling import op
>>> x = variable()
>>> y = variable()  
>>> c1 = ( 2*x+y >> c2 = ( x+2*y >> c3 = ( x >= 0 )
>>> c4 = (y >= 0 )
>>> lp1 = op(-4*x-5*y, [c1,c2,c3,c4])

但是,我遇到两个问题:

  1. 最后一行代码的约束参数无效。我检查了 CVXOpt 文档,编码方式似乎是正确的方法。
  2. 不太重要,但如果有人能告诉我为什么在此处显示的同一行中编写所有约束(c1,c2,..)时出现语法错误,那将是很好的。相反,我不得不为每个使用不同的行。
4

1 回答 1

3

您使用的语法似乎存在一些问题。另外请始终确保您的代码被剪断允许运行代码。编写优化问题的正确方法是:

>>> from cvxopt.modeling import op
>>> from cvxopt.modeling import variable
>>> x = variable()
>>> y = variable()
>>> c1 = ( 2*x+y <= 7)      # You forgot to add the (in-) equality here and below
>>> c2 = ( x+2*y >= 2)
>>> c3 = ( x >= 0 )
>>> c4 = (y >= 0 )
>>> lp1 = op(-4*x-5*y, [c1,c2,c3,c4])
>>> lp1.solve()
     pcost       dcost       gap    pres   dres   k/t
 0: -1.0900e+01 -2.3900e+01  1e+01  0e+00  8e-01  1e+00
 1: -1.3034e+01 -2.0322e+01  9e+00  1e-16  5e-01  9e-01
 2: -2.4963e+01 -3.5363e+01  3e+01  3e-16  8e-01  3e+00
 3: -3.3705e+01 -3.3938e+01  2e+00  3e-16  4e-02  4e-01
 4: -3.4987e+01 -3.4989e+01  2e-02  5e-16  4e-04  5e-03
 5: -3.5000e+01 -3.5000e+01  2e-04  3e-16  4e-06  5e-05
 6: -3.5000e+01 -3.5000e+01  2e-06  4e-16  4e-08  5e-07
Optimal solution found.

在第五行和第六行,您忘记添加 (in-) 等式。您必须明确说明您要比较的内容,即不等号和您要比较的值。

如果使用分号分隔它们,则可以将所有(in-)等式写在一行上。同样,请注意您的语法,您忘记在示例代码中关闭一些括号。

>>> c1 = ( 2*x+y <= 7); c2 = ( x+2*y >= 2); c3 = ( x >= 0 ); c4 = (y >= 0 )
于 2014-07-28T16:34:39.540 回答