【Gurobi】学习笔记 | (二)Model Part1 适用于Python

本文详细介绍了Gurobi中的Model对象,包括其构造、常用方法如optimize和addConstr系列,以及如何添加不同类型(线性、二次、逻辑、绝对值等)的约束。此外,还概述了函数约束的构造,如GenConstrMax、GenConstrMin等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

本文章参考Gurobi官方手册,内容上为更适合入门者学习,有所删减。

Model是Gurobi中最重要的对象,其包含许多常用方法,包括optimize优化模型、printStats打印关于模型的统计信息、printAttr打印属性值、write将有关模型的信息写入文件、addVar添加新变量、addVars添加多个新变量、addMVar添加Numpy变量、addConstr添加新约束和addConstrs添加多个新约束等。

首先还是老规矩,提醒大家先调用gurobipy的库。

下载和调用gurobipy库

进入Python环境,下载名为“gurobi”的软件包,并且在每次使用Gurobi求解时,需要引入这个软件包。


from gurobipy import *

Model()

  • 语句:Model( 'name', env=defaultEnv )
  • 功能:模型构造函数
  • 输入:新模型的名称、环境(有默认参数,可不输入)
  • 输出:新的模型对象,不包含任何变量和约束
  • 说明:新模型的名称将被存储为ASCII码的字符串,因此不允许出现非ASCII码字符,也不允许出现空格
# 示例

m = Model("NewModel") # 定义名为NewModel的模型对象
x0 = m.addVar() # 向模型对象中添加变量x0
# Model ( name="", env=defaultEnv ) 这是一般格式,env可以省略

Model.addConstr()

  • 语句:Model.addConstr( TempConstr, name='' )
  • 功能:为模型添加约束
  • 输入:TempConstr作为第一个参数(下面有解释),第二个参数是可选参数,为约束名称
  • 输出:新的约束对象
  • 说明:新模型的名称将被存储为ASCII码的字符串,因此不允许出现非ASCII码字符,也不允许出现空格;一个约束只能有一个比较运算符,虽然1 <= x + y <= 2看起来很像一个约束,但是Model.addConstr()方法不会接受
# 示例

model.addConstr(x + y <= 2.0, "c1")
model.addConstr(x*x + y*y <= 4.0, "qc0")
model.addConstr(x + y + z == [1, 2], "rgc0")
model.addConstr(A @ t >= b)
model.addConstr(z == and_(x, y, w), "gc0")
model.addConstr(z == min_(x, y), "gc1")
model.addConstr((w == 1) >> (x + y <= 1), "ic0")

TempConstr

  • 功能:Gurobi临时约束对象,用于创建各种不同类型的约束
    • 线性约束:(不)等号两端可以是线性表达式对象、变量对象或者常量,不能都是常量
    • 范围线性约束:“线性表达式 == [常量1, 常量2]”的形式,说明线性表达式的值在区间[常量1, 常量2]
    • 二次约束:(不)等号两端可以是二次表达式对象、线性表达式对象、变量对象或者常量,至少两端之一是二次表达式,否则就是线性约束
    • 线性矩阵约束:(不)等号两端至少有一个是线性矩阵表达式对象
    • 二次矩阵约束:(不)等号两端至少有一个是二次矩阵表达式对象
    • 绝对值约束:“x == abs_(y)”的形式,xy都是变量
    • 逻辑约束:“x == op_(y)”的形式,x是二值变量(即只有两种取值),y是二值变量、二值变量列表或者二值变量元组字典(tupledict,这个后面的内容里会提到,先有个印象就行);op_可以是and_或者 or_
    • 最大或最小约束:“x == op_(y)”的形式,x是变量对象,y可以是变量、变量和常量的列表、或者变量的元组字典;op_min_ 或者max_
    • 指示约束:“(x == b) >>(线性表达式)”的形式,符号>>两端的式子都需要用()括起来。x是二值变量,b01。例如,(x == 1) >> (y + w <= 5)中,当x等于1时,右端的线性约束y + w <= 5必须成立
  • 说明:这个类没有成员函数
# 示例

# 线性约束
x + y <= 1 + z
x + y == 5
# 范围线性约束
x + y + z == [1, 2]
# 二次约束
x*x + y*y <= 3
x*</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值