当前位置: 首页 > article >正文

Gurobi基础语法之 LinExpr 类

        优化问题中普遍出现的一种类型的约束就是线性约束,线性约束形如\sum ai * xi \leq b,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(f'e{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(name="x")
y = m.addVar(name="y")

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(name="x")
y = m.addVar(name="y")

expr = gp.LinExpr([1, 1], [x, y])  # 表达式 x + y

expr.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 中设计的一个方法,可以把传入的可迭代对象中的元素一一相加,并且返回一个 线性表达式,其类型是 LinExpr

m = gp.Model("IAddExample")

x = m.addVar(name="x")
y = m.addVar(name="y")

expr = gp.quicksum([1 * x, 2 * y])

m.update()
print(expr)

 运行结果:x + 2.0 y


http://www.kler.cn/a/523160.html

相关文章:

  • FortiOS 存在身份验证绕过导致命令执行漏洞(CVE-2024-55591)
  • 2025春招 SpringCloud 面试题汇总
  • 低代码产品表单渲染架构
  • 2024年个人总结
  • 一个简单的自适应html5导航模板
  • Julius AI 人工智能数据分析工具介绍
  • AI学习指南Ollama篇-Ollama的多模态应用探索
  • Codeforces Round 276 (Div. 1) B. Maximum Value(数学+二分)【2100】
  • 53. 常见TCP端口号及其功能
  • 基于微信小程序的电子竞技信息交流平台设计与实现(LW+源码+讲解)
  • 【踩坑日常,已解决】彻底修改IDEA项目的JDK版本,8改为17
  • 脚本运行禁止:npm 无法加载文件,因为在此系统上禁止运行脚本
  • LeetCode题练习与总结:标签验证器--591
  • 手写一个深克隆!!
  • LeetCode:70. 爬楼梯
  • 排序算法- H指数
  • 【C语言分支与循环结构详解】
  • 如何下载SQLServer
  • fprintf(‘parametric_vector:\n‘); disp(parametric_vector);
  • 损失函数 Loss Function
  • 【番外篇】鸿蒙扫雷天纪:运混沌灵智勘破雷劫天局
  • 深入探索 HTML5 拖拽效果 API:打造流畅交互体验
  • 27.收益的定义是什么?
  • 2024年终总结——今年是蜕变的一年
  • 砥砺奋进,展望新程0114
  • Webpack 打包性能优化全解