CVXOpt op参数错误

时间:2014-03-26 14:40:28

标签: python-2.7 syntax-error cvxopt

我正在使用以下模型测试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,...)写入此处所示的同一行时会出现语法错误,那将会很好。相反,我必须为每个使用不同的线。

1 个答案:

答案 0 :(得分:1)

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

>>> 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 )