python 中的 Gurobi 计算 lp 范数
Gurobi in python to calculate lp norm
python 中的 Gurobi 计算 l1 范数
我正在尝试使用 python 中的 Gurobi 计算 l1 范数。由于我是 python 和 Gurobi 的新手,所以我在这里寻求帮助。
型号是:
minimize 1^T(r+ + r-)
s.t. y - X beta = r+ - r-
r+ >= 0 and r- >= 0
其中 y 是一个 n 向量,X 是一个 n×p 矩阵。 r+, r- 是 n 向量,beta 是 p 向量
这是我的代码,我不知道哪里出了问题,有人可以帮我吗?
row col = X.shape
# import Gurobi
from gurobipy import *
# model
m = Model("l1-norm")
# create decision variables
r_plus = []
for i in range(row):
r_plus = m.addVar(name="r_plus%d" % i)
r_minus = []
for i in range(row):
r_minus = m.addVar(name = "r_minu%d" % i)
beta = []
for j in range(col):
beta = m.addVar(name = "beta%d" % j)
# Update model to integrate new variables
m.update()
# set objective
m.setObjective(sum(r_plus) + sum(r_minus), GRB.MINIMIZE)
# add model constraint
for i in range(row):
m.addConstr(y[i] - quicksum(X[[i], j] * beta[j] for j in range(col)) == r_plus[i] - r_minus[i])
# solve
m.optimize()
您创建的变量数组有误,应该是
r_plus = []
for i in range(row):
r_plus.append(m.addVar(name="r_plus%d" % i))
r_minus = []
for i in range(row):
r_minus.append(m.addVar(name = "r_minu%d" % i))
beta = []
for j in range(col):
beta.append(m.addVar(name = "beta%d" % j))
或更简短
r_plus = [m.addVar(name="r_plus%d" % i) for i in range(row)]
r_minus = [m.addVar(name="r_minu%d" % i) for i in range(row)]
beta = [m.addVar(name = "beta%d" % j) for j in range(col)]
我正在尝试使用 python 中的 Gurobi 计算 l1 范数。由于我是 python 和 Gurobi 的新手,所以我在这里寻求帮助。
型号是:
minimize 1^T(r+ + r-)
s.t. y - X beta = r+ - r-
r+ >= 0 and r- >= 0
其中 y 是一个 n 向量,X 是一个 n×p 矩阵。 r+, r- 是 n 向量,beta 是 p 向量 这是我的代码,我不知道哪里出了问题,有人可以帮我吗?
row col = X.shape
# import Gurobi
from gurobipy import *
# model
m = Model("l1-norm")
# create decision variables
r_plus = []
for i in range(row):
r_plus = m.addVar(name="r_plus%d" % i)
r_minus = []
for i in range(row):
r_minus = m.addVar(name = "r_minu%d" % i)
beta = []
for j in range(col):
beta = m.addVar(name = "beta%d" % j)
# Update model to integrate new variables
m.update()
# set objective
m.setObjective(sum(r_plus) + sum(r_minus), GRB.MINIMIZE)
# add model constraint
for i in range(row):
m.addConstr(y[i] - quicksum(X[[i], j] * beta[j] for j in range(col)) == r_plus[i] - r_minus[i])
# solve
m.optimize()
您创建的变量数组有误,应该是
r_plus = []
for i in range(row):
r_plus.append(m.addVar(name="r_plus%d" % i))
r_minus = []
for i in range(row):
r_minus.append(m.addVar(name = "r_minu%d" % i))
beta = []
for j in range(col):
beta.append(m.addVar(name = "beta%d" % j))
或更简短
r_plus = [m.addVar(name="r_plus%d" % i) for i in range(row)]
r_minus = [m.addVar(name="r_minu%d" % i) for i in range(row)]
beta = [m.addVar(name = "beta%d" % j) for j in range(col)]