一下面这个例子来说明两者的区别:
import gurobipy as gb
from gurobipy import GRB
import numpy as np
model=gb.Model("model")
x=model.addMVar(10)
obj_vector = np.array([1,2,3,4,5,6,7,8,9,0])
A=np.full((5,10),1)
print(A)
b = np.full(5, 1)
print(b)
model.setObjective(obj_vector@x, GRB.MAXIMIZE)
model.addMConstr(A, x, "=", b, name="c1") # 以矩阵的形式
#model.addConstr(A@x==b, name="c2") # 以表达式的形式
model.optimize()
for v in model.getVars():
print(f"{v.VarName} {v.X:g}")
print(f"Objective: {model.ObjVal:g}")
注意:两者的变量x和约束系数A以及等式右边的常数b均是以矩阵的形式来创建的,仅在给模型添加约束时使用的方法不同,一种是以矩阵的形式来传入约束(.addMConstr),一种是以表达式的形式传入约束(.addConstr)