手机制作网站app,互联网媒体平台有哪些,专门做纪录片的网站,公司网站实用性优化问题中普遍出现的一种类型的约束就是线性约束#xff0c;线性约束形如#xff0c;Gurobi 中设计了一个 LinExpr 类来创建线性表达式。 当 i 的取值范围较小的时候#xff0c;可以直接将这个线性表达式写出来#xff0c;作为 addConstr 的参数#xff0c;以此方便的建立… 优化问题中普遍出现的一种类型的约束就是线性约束线性约束形如Gurobi 中设计了一个 LinExpr 类来创建线性表达式。 当 i 的取值范围较小的时候可以直接将这个线性表达式写出来作为 addConstr 的参数以此方便的建立起一个线性约束但是当 i 的取值范围达到上百个时使用 LinExpr 类来创建线性约束就是非常有必要的
创建线性表达式的方法
方法一调用 LinExpr 的构造函数 这是创建线性表达式最高效而且是最推荐的方式对于一个线性约束来说如果其中的变量以及变量的常数已经确定那么使用就可以调用 LinExpr 的构造函数进行创建LinExpr 中重载了多个构造函数下面将一一通过代码进行展示
e1 LinExpr(2.0)
e2 LinExpr(x)
e3 LinExpr(2 * x)
e4 LinExpr([1.0, 2.0], [x, y])
e5 LinExpr([(1.0, x), (2.0, y), (1.0, z)])
m.update()
for i, expr in enumerate([e1, e2, e3, e4, e5], 1) :print(fe{i} : {expr})
运行结果 e1 : 2.0 e2 : x e3 : 2.0 x e4 : x 2.0 y e5 : x 2.0 y z 方法二调用重载过的运算符添加表达式 LinExpr 类中重载的运算符包括 , , -, -, *, *, /, 和** (指数部分必须是 2).
m gp.Model()
x m.addVar(namex)
y m.addVar(namey)expr gp.LinExpr([1, 1], [x, y]) # 表达式 x y
expr1 expr y
expr1 x # 相当于调用 expr.__iadd__(x)
m.update()
print(expr1) 运行结果x y y x 方法三调用 LinExpr 类中的 addTerms 方法
m gp.Model()
x m.addVar(namex)
y m.addVar(namey)expr gp.LinExpr([1, 1], [x, y]) # 表达式 x yexpr.addTerms(1.0, x)
expr.addTerms([2.0, 3.0], [x, y])
m.update()
print(expr) 运行结果x y x 2.0 x 3.0 y 方法四调用quicksum quicksum 作为 gurobipy 中设计的一个方法这个方法的参数是一个 lis t类型的列表这个方法的效率比 gurobi 中所实现的 sum 方法快的多可以把传入的可迭代对象中的元素一一相加并且返回一个 线性表达式其类型是 LinExpr
m gp.Model(IAddExample)x m.addVar(namex)
y m.addVar(namey)
# 下面这句也可以写成 expr gp.quicksum([np.dot(np.array(m.getVars()), np.array([1, 2]))])
expr gp.quicksum([1 * x, 2 * y])m.update()
print(expr) 运行结果x 2.0 y