我正在使用cvxopt矩阵,以便在picos库中使用它们。一般来说,我想取一个矩阵,在某个向量上求它,减去一些东西,然后取其条目的最大绝对值。
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)(这里b是作为cvxopt矩阵处理的一些向量。)但是,我得到的错误如下:
TypeError Traceback (most recent call last)
<ipython-input-11-8884e5cb14dc> in <module>
3 theta
4
----> 5 P.add_constraint(max(abs(M*theta - b.T)) < 45)
6 P.minimize(theta)
7
TypeError: 'Norm' object is not iterable我想知道是否有其他方法可以让这些计算被cvxopt接受?
发布于 2019-12-18 19:33:51
(除了几年前的小实验外,从未真正使用过这个库)
这看起来像罪魁祸首是那些高度复杂的自动转换建模系统工具中隐藏魔法的经典案例。
abs(M*theta - b) 中的absNorm (基于picos的类型)。
max max(abs(M*theta - b.T)) 中,picos可能不会超载Norm对象;但是它不能像错误显示的那样迭代
另见:重载运算符列表
在我看来,这个特性max缺失了。你可以手动线性化,但是.太烦人了。
如果您不需要一些特殊的picos,cvxpy是非常相似的,并且也支持abs和max (并且是基于scipy的稀疏矩阵+numpy-数组;谢天谢地!)
https://stackoverflow.com/questions/59398822
复制相似问题