python中带等式约束的L1凸优化

2024-04-24 09:33:25 发布

您现在位置:Python中文网/ 问答频道 /正文

根据Mx=y,我需要最小化L_1(x)

x是维数为b的向量,y是维数为a的向量,M是维数为(a,b)的矩阵。在

读了一段之后,我决定用scipy.optimize.minimize.最小化公司名称:

import numpy as np
from scipy.optimize import minimize

def objective(x):     #L_1 norm objective function
    return np.linalg.norm(x,ord=1)

constraints = [] #list of all constraint functions
for i in range(a):
    def con(x,y=y,i=i):
        return np.matmul(M[i],x)-y[i]
    constraints.append(con)

#make constraints into tuple of dicts as required by scipy 
cons = tuple({'type':'eq','fun':c} for c in constraints)

#perform the minimization with sequential least squares programming
opt = minimize(objective,x0 = x0,
                        constraints=cons,method='SLSQP',options={'disp': True})

首先, x0可以用什么?x是未知的,我需要一个满足约束M*x0=y的x0:如何找到满足约束的初始猜测?M是独立高斯变量的矩阵(~N(0,1)),如果有帮助的话。在

其次, 我的设置方式有问题吗?当我对x0使用真正的x(我在开发阶段就知道了),我希望它能很快返回x=x0。相反,它返回一个零向量x=[0,0,0…,0]。这种行为出乎意料。在

编辑:

下面是一个使用cvxpy**求解min(L_1(x))且Mx=y的解决方案:

^{pr2}$

Tags: importnormdefasnp矩阵scipy向量