如何对cvxopt矩阵执行运算?

时间:2019-12-18 19:23:54

标签: python numpy numpy-ndarray cvxopt

我正在使用cvxopt矩阵,以便在picos库中使用它们。通常,我想获取一个矩阵,对某个向量求值,减去一些,然后取其条目的最大绝对值

   <extensions>
      <add assembly="Custom.NLog.NUnit" />
   </extensions>
   <targets>
      <target name="logfile"
              xsi:type="File" 
              layout="${longdate}|${message}" 
              fileName="${basedir}\ATF\web\utils\reports\${shortdate}\${nunit-testname:whenEmpty=UnknownTest}.txt"  />
   </target>

(这里b是被视为cvxopt矩阵的某些向量。)但是,我得到的错误如下:

import picos as pic
import cvxopt as cvx
import numpy as np

(...)

P = pic.Problem()
theta = P.add_variable('theta', size=k, vtype='continuous', lower=-10, upper=10)
theta

P.add_constraint(max(abs(M*theta - b)) <= 5)
P.minimize(theta)

我想知道是否有另一种方法可以使cvxopt接受这些计算?

1 个答案:

答案 0 :(得分:1)

(几年前从未真正使用过这个lib,除了较小的实验)

在这些高度复杂的自动转换建模系统工具中,罪魁祸首就是隐藏魔术的经典案例。

    abs
  • picos 超载 abs(M*theta - b)
    • 请参阅:doc
    • 这导致类型为Norm(基于picos的类型)
  • picos 可能不会使max中的max(abs(M*theta - b.T))重载
    • 将使用python的max-operator(不是从picos定制的东西!),它基于对某些可迭代对象的线性搜索
    • 这里可迭代的对象是Norm对象;但这不是错误显示的可重复操作

另请参阅:list of overloaded operators

在我看来,此功能max丢失了。您可以手动将其线性化,但这很烦人。

如果您不需要特殊的picos,cvxpy非常相似,还支持absmax(并且基于scipy的稀疏矩阵+ numpy数组;谢谢上帝!)。