Gurobi——用python建数学规划模型

一、导入方式

from gurobipy import * # 在Python中调用gurobi求解包
import numpy as np    # 一般会用到numpy库
import scipy as sp    # 也可能用到scipy库

二、创建模型

model = Model(name="model_MP")   # 创建模型

三、添加变量
添加单个变量
addVar ( lb=0.0, ub=float(‘inf’), obj=0.0, vtype=GRB.CONTINUOUS, name=“”, column=None )
lb (optional): 变量下界
ub (optional): 变量上界
obj (optional): 在目标函数中的系数
vtype (optional): 变量的数据类型
name (optional): 变量名字
column (optional): 暂时不懂

x = model.addVar()        # 默认参数

添加多个变量
addVars ( *indices, lb=?, ub=?, obj=?, vtype=?, name=“?” )
1.Gurobi默认变量下界为0,上下界如果定为无穷,容易出错,所以一般设定一个确定的值
2.变量的数据类型
Gurobi中常用的变量类型 vtype=
GRB.CONTINUOUS——连续变量(Gurobi默认变量类型,可以省略)
GRB.BINARY——二进制变量(0-1)
GRB.INTEGER——整数变量
3.变量的key索引形式
数组

x = model.addVars(2, 3)   # 变量以2行3列数组的形式访问,x[0,0], x[0,1], x[0,2], x[1,0], x[1,1], and x[1,2]

列表(列表里的元素只能是数字或者字符串)

x = model.addVars([3, 7], ['a', 'b', 'c']) # 产生6个变量:x[3,'a'],x[3,'b'], x[3,'c'],  x[7,'a'],  x[7,'b'],  x[7,'c']

元组(元组里的元素只能是数或者字符串)

x = model.addVars([(3,'a'), (3,'b'), (7,'b'), (7,'c')]) # 产生4个变量:x[3,'a'],x[3,'b'],  x[7,'b'],  x[7,'c']

4.强烈不建议使用包含空格的name,因为它们不能写入LP格式文件。
5.参数(lb、ub、obj等)可以采用多种形式。如果提供标量值(或使用默认值),则每个变量都将使用该值。
6.如果indices参数是单个列表,则可以为name参数提供相同长度的Python列表。对于每个变量,它将从列表中的相应位置提取值。
7.如果为name提供标量参数,则该参数将被转换为具有与关联变量的索引对应的下标。

x = model.addVars(2,3,name="x")      # 变量名为:x[0,0], x[0,1]等

添加numpy数组形式的变量
addMVar ( shape, lb=0.0, ub=float(‘inf’), obj=0.0, vtype=GRB.CONTINUOUS, name=“” )
可用于构造线性/二次的目标函数/约束
shape: 数组的形状,一个int或一个int的元组
1.lb、ub、obj和vtype参数的值可以是标量、列表或数组。它们的形状应该与新的MVar对象的形状相匹配,或者它们应该可以广播到给定的形状
2.name参数可以是一个字符串,用作通用基名,每个变量的后缀都是它的索引,也可以是一个字符串数组,与新MVar对象的形状相匹配。

  x = model.addMVar((4,2), vtype=GRB.BINARY)    # 添加4行2列矩阵的二元变量
  y = model.addMVar((3,), lb=[-1, -2, -1])     # 添加含3个变量的向量

四、添加约束
Gurobi 不支持严格大于或者严格小于的约束条件
Gurobi 模型中约束条件只支持 >=, <= 或者== 表达,不支持严格 > 或者 < 表达。如果需要表达严格大于或者小于,可以设定一个小的阈值,然后用 >= 或者 <= 表达。所以下述所有sense中的<或>均等同于<=或>=。

1.线性表达式LinExpr
LinExpr()

expr = LinExpr(2.0

你可能感兴趣的:(python,数学建模,开发语言)