gpt4 book ai didi

python - 在 Gurobi 目标函数中添加许多二次项

转载 作者:行者123 更新时间:2023-12-01 07:27:04 24 4
gpt4 key购买 nike

我有一个包含许多决策变量的大目标函数。即 $$\sum_{i=0}^100 Z_i^2$$。我想知道是否有一种有效的方法可以在目标函数中添加多个二次项,或者有效地构造具有多个项的二次表达式,例如用于线性约束的内置方法 addConstrs () 。

如下example ,仅添加一些二次项。最简单的扩展是运行一个循环来将二次项一项一项相加。

最佳答案

gurobipy 包通常可以很好地配合 Python 的理解语法和内置函数,并且变量集是字典的实例。所以你可以这样做:

model = gurobipy.Model()
x = model.addVars(100)
model.update()
obj = sum(variable * variable for variable in x.values())

或者

obj = sum(x[i] * x[i] for i in x.keys())

或者(如果你真的有很多很多变量):

obj = gurobipy.quicksum(x[i] * x[i] for i in x.keys())
<小时/>

编辑

如果您需要合并 numpy 数组中的系数,以下是如何完成此操作的示例。关键是首先为变量创建一个兼容 numpy 的容器。然后就可以应用大多数算术 numpy 运算。

model = gurobipy.Model()
x = model.addVars(100)
model.update()

# make numpy-compliant container for x
x_np = np.array([x[i] for i in range(100)])

# 2-D matrix of random coefficients
Q = np.random.random(size=(100, 100))

# 1-D vector of random coefficients
c = np.random.random(size=100)

# x^T * Q * x
expr = np.sum(Q * np.outer(x_np, x_np))

# (diagonal of Q) * x
expr = np.dot(Q.diagonal(), x_np)

# c * x
expr = np.dot(c, x_np)

关于python - 在 Gurobi 目标函数中添加许多二次项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57394059/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com