我正在尝试使用斯坦福大学斯蒂芬博伊德小组实施的 CVX MATLAB 包解决凸优化问题。
代码如下:
k = 500;
d = 2;
theta=ones(d,1);
X = rand(d,k);
X(:,1) = ones(d,1);
Y = X(:,1) - X;
cvx_begin
variable a(k)
A = X*diag(ones(1,k).*a')*X';
variable z
minimize z
subject to
for i = 2:k
z >= matrix_frac(Y(:),A)/(theta'*Y(:))^2;
end
a'*ones(k,1) == 1;
a >= 0;
cvx_end
代码有效,但问题在于效率。
特别是,约束中的 for 循环使其效率非常低,因为约束的数量随参数 k 线性增长。有没有更有效的方法来合并约束。在避免这个for循环的问题中?
谢谢!