首页>软件资讯>常见问题

常见问题

Gurobi-第三章Gurobi参数修改和自动调整方法

发布时间:2024-03-19 09:54:27人气:343

一、Gorubi参数修改方法


    对于Gorubi参数的修改有3种方法:一种是 setParam(paramname,newvalue)方法,其中param-name还有两种方法,一种是参数的字符串,比如“TimeLimit”,一种是完整的类属性,比如“gkb.CRB.param.TimeLimit”;第三种方法是直接修改类的属性,写法是model.Paramsxxx,代码如下所示。


import gurobipy as grb

model = grb.Mode1()

#设定求解时间的方法

#方法1

model.setParam('TimeLimit',600)

#方法2

model.setParam(GRB.param.TimeLimit, 600)

#方法3

model.Params.TimeLimit = 600


二、Gorubi参数修改的例子


    代码选自 Gurobi安装目录下的 example 下的 paramspy,演示了如何在优化器启动前修改timeLimit 参数和MIP模型的 MIPFocus 参数。通过这个例子可以了解到修改和调整 Gurobi的运行参数并不难,同时还学习了如何比较不同参数下模型求解的结果。


import gurobipy as grb


# 读取模型文件

model_file = 'xxx.lp'

m = grb.read(model_file)


# 参数设定1:设定优化器求解时间限定为2秒

m.Params.timeLimit = 2


# 复制模型

bestModel = m.copy()

bestModel.optimize()


# 修改模型参数比较不同参数下的求解结果

for i in range(1, 4):

    m.reset()  # 将所有参数重置为默认值

    m.Params.MIPFocus = i  # 参数设定2:修改 MIPFocus 参数

    m.optimize()

    if bestModel.MIPGap > m.MIPGap:

        bestModel, m = m, bestModel  # swap models


# 最后将运行参数修改为默认值,重新运行模型

del m

bestModel.Params.timeLimit = "default"

bestModel.optimize()

print('Solved with MIPFocus: %d' % bestModel.Params.MIPFocus)


三、、Gorubi自动调优


    在上面的例子中,使用for 循环来判断模型结果更优就是一种参数调优方法,然而 Gurobi提供了另一种模型自动调优的方法。通过下面的例子观察 Gurobi是如何进行参数调优的,这个例子取自Gurobi安装目录下example文件夹中的tune.py参数。


    从代码中可以看到,model是一个类,其方法getTuneResult0会将其返回的属性赋值给内部的 self属性,相当于覆盖模型内部的默认属性,如代码所示。


import gurobipy as grb


# 读取模型

model = grb.read('tune_model.lp')


# 将返回最优参数组合数设置为1

model.Params.tuneResults = 1


# 开始自动调参

model.tune()


# 如果找到最优参数组合数大于0

if model.tuneResultCount > 0:

    # 获取最优参数组合

    # 注意到getTuneResult会覆盖内部默认属性

    # 参数组合按最优到最差降序排序,最好的结果序号是0

    model.getTuneResult(0)

    # 将调参后的参数组合保存到文件

    model.write('tune.prm')

    # 用获取到的最优参数组合再次求解模型

    model.optimize()



上一条:Gurobi-第二章Gurobi常用参数

下一条:Gurobi-第四章Gurobi属性和修改方法