我正在使用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接受这些计算?
答案 0 :(得分:1)
(几年前从未真正使用过这个lib,除了较小的实验)
在这些高度复杂的自动转换建模系统工具中,罪魁祸首就是隐藏魔术的经典案例。
abs
中abs(M*theta - b)
Norm
(基于picos的类型)max
中的max(abs(M*theta - b.T))
重载
Norm
对象;但这不是错误显示的可重复操作另请参阅:list of overloaded operators
在我看来,此功能max
丢失了。您可以手动将其线性化,但这很烦人。
如果您不需要特殊的picos,cvxpy非常相似,还支持abs
和max
(并且基于scipy的稀疏矩阵+ numpy数组;谢谢上帝!)。