如何获得包含线性表达式的矩阵的最大值?

How to get maximum value of matrix containing linear expressions?

我希望有人能帮助我。 对于优化问题的解决方案,我必须获得包含线性表达式的矩阵的最大值,以便在第二步中最小化该值。

例如我有无限决策变量 x 和 y

x.append(m.addVar(vtype=GRB.CONTINUOUS, lb=-GRB.INFINITY, ub=+GRB.INFINITY, name="x")))
y.append(m.addVar(vtype=GRB.CONTINUOUS, lb=-GRB.INFINITY, ub=+GRB.INFINITY, name="y")))

和矩阵 M = [0.25*x,0.25*x+y]。 矩阵的最大值应保存为M_max。后来 objective 是为了最小化 M_max --> m.setObjective( M_max , GRB.MINIMIZE)

当我尝试输入 M_max = amax(M) 时,我总是会返回第一个元素,这里是 0.25x。什么操作returns "real" 最大值? (当然我的模型比较复杂,但希望你能理解我的问题)

非常感谢您的帮助!

手动方法是:

introduce aux-var z (-inf, inf, cont)
add constraints
    0.25*x <= z
    0.25*x+y <= z
minimize (z)

不确定现在的gurobi是否提供一些自动方式。

编辑 似乎较新 gurobi-versions 提供了这个功能(自动重新制定),就像 here 解释的那样(python-docs;你需要检查如果这些也适用于您的界面;可能是 python)

max_ ( variables )

Used to set a decision variable equal to the maximum of a list of decision variables (or constants). You can pass the arguments as a Python list or as a comma-separated list.

 # example probably based on the assumption:
 #   import: from gurobipy import *
 m.addConstr(z == max_(x, y, 3))
 m.addConstr(z == max_([x, y, 3]))

你没有说明你用的是什么amax。如果是numpy的amax或者gurobi以外的东西,就不能用! Gurobi-vars 不表现得像经典 fp-variables 并且对那些 variable-objects 的每个操作都需要由 gurobi 支持(通常通过 operator-overloading 隐藏)否则 gurobi 无法确定它正在正式化一个有效的 mathematical-model.