我正在尝试参数化 CVXPY 程序,因为我需要反复解决问题,但我注意到当我的参数是复数时,CVXPY 会在每次迭代中对问题进行建模。例如,假设我想解决以下问题:
其中,,和。
我不需要重复解决这个问题,但我强制这样做是为了检查我是否可以考虑将作为参数?
下面是代码:
import cvxpy as cp
import numpy as np
m = 4
n = 3
A = np.random.randn(n,m)+1j*np.random.randn(n,m)
b = np.random.randn(n)+1j*np.random.randn(n)
x = cp.Variable((m,),complex=True)
gamma = cp.Parameter((1,m),complex=True)
obj = cp.norm(A@x-b)+cp.abs(gamma@x)
prob = cp.Problem(cp.Minimize(obj))
for iIter in range(5):
gamma.value = np.random.randn(1,m)+1j*np.random.randn(1,m)
prob.solve(verbose=True)
我从详细中看到的是,CVXPY 首先在每次迭代中对我的问题进行建模,然后解决它。另一方面,如果我假设,它会绕过下一次迭代的建模。为什么会这样?我们不允许创建复值参数吗?