如何在cvx中形成以下约束?

计算科学 优化 简历
2021-12-13 17:08:10

优化问题是

minxKhx2
其中
K={vRn:λ0 v1=v2==vk=λ and |vi|λ for i=k+1,,n}
,其中h,k,n都是已知的。

有人能告诉我如何在 cvx 中写下这个约束吗?我想不出一种方便的方法来指定定义凸集K的约束。

1个回答

这是你需要的吗?(λ未知)

# INPUT
N,K = 5,3
h=[1.1,1.2,1.7,0.5,0.3]

Xk = cp.Variable()# unknown Lambda
Xn = [cp.Variable() for i in range(N-K)]
constraints = []
for x in Xn:
    constraints.append(cp.abs(x)<=Xk)                

X = [Xk]*K+Xn
obj = cp.Minimize(cp.sum([(h[i]-X[i])**2 for i in range(N)]))        
prob = cp.Problem(obj, constraints)
rez = prob.solve()       

for i in range(K):
    print("{:.1f}".format(Xk.value))
for i in range(N-K):
    print("{:.1f}".format(Xn[i].value))

print("Objective function : {:.1f}".format(rez))

结果:1.3 1.3 1.3 0.5 0.3 目标函数:0.2