本文章参考Gurobi官方手册,内容上为更适合入门者学习,有所删减。
下载和调用gurobipy库
进入Python环境,下载名为“gurobi”的软件包,并且在每次使用Gurobi求解时,需要引入这个软件包。
from gurobipy import *
与Gurobi-Python中其他接口相比,全局函数不需要Gurobi对象来调用。
multidict() 函数
- 功能:将一个字典分割成多个字典
- 输入:Python字典
- 输出:一个列表,其中第一个列表包含字典中的共享“键”,其余列表包含从输入字典中按列拆分形成的新字典
# 示例
keys, dict1, dict2 = multidict({
'key1': [1, 2],
'key2': [1, 3],
'key3': [1, 4]})
print(keys) # ['key1', 'key2', 'key3']
print(dict1) # {'key1': 1, 'key2': 1, 'key3': 1}
print(dict2) # {'key1': 2, 'key2': 3, 'key3': 4}
paramHelp() 函数
- 功能:获取Gurobi参数的相关信息
- 输入:参数名
- 输出:参数信息
- 说明:除准确输入参数名,还可以使用“*”或者“?”通配符。如果有多个参数匹配,将列出所哟匹配的参数信息
# 示例
paramHelp("Cuts")
paramHelp("Heu*")
paramHelp("*cuts")
quicksum() 函数
- 功能:求和函数,在计算大型Gurobi表达式时,效率高于Python自带的sum() 函数
- 输入:需要求和的各项列表
- 输出:求和值
- 说明:示例中的代码暂时跑不了,因为需要定义Model对象和相关变量
# 示例
expr = quicksum([2*x, 3*y+1, 4*z*z])
expr = quicksum(model.getVars())
read() 函数
- 功能:从文件中阅读模型
- 输入:文件名。支持包含如下后缀的文件:.mps, .rew, .lp, .rlp, .dua, .dlp, .ilp, or .opb。支持压缩文件:.gz, .bz2, .zip, or .7z。同时也支持通配符查询,若同时匹配到许多个文件,仅读取第一个文件
- 输出:从文件中读取的模型
- 说明:该函数还包含另一个与环境有关的输入
env
,其默认值是defaultEnv
,作为初学者可以不做了解,后续使用时再讲述
# 示例
m = read("afiro.mps") # 读取名为afiro的文件中的模型,并定义为m
m.optimize() # 对模型m进行优化
readParams() 函数
- 功能:从文件中阅读一组参数设置
- 输入:文件名。文件必须为PRM格式
- 输出:无,仅读取
# 示例
readParams("params.prm")
resetParams() 函数
- 功能:将所有参数重置为默认参数值
- 输入:无
- 输出:无
- 说明:现有模型中,存储在Python数据结构内(列表、字典等)或内部用户类中的参数均不受影响
# 示例
resetParams()
setParam() 函数
- 功能:给一个参数设置一个新的参数值
- 输入:参数名,新的参数值
- 输出:无
- 说明:现有模型中,存储在Python数据结构内(列表、字典等)或内部用户类中的参数均不受影响。参数名可以使用通配符对参数进行批量设置,参数值也可以使用“default”将其设置为默认参数值
# 示例
setParam("Cuts", 2)
setParam("Heu*", 0.5)
setParam("*Interval", 10)
writeParams() 函数
- 功能:将模型参数值写入一个文件内,该文件是PRM格式
- 输入:写入文件名
- 输出:模型参数文件
# 示例
writeParams("params.prm") # 将模型参数写入名为params的参数文件