Gurobi加快求解速度之设置初始可行解

当gurobi死活找不到一个可行解:如下图所示:
在这里插入图片描述
可以通过给定初始可行解加快求解速度。

https://blog.csdn.net/sinat_41348401/article/details/133547827
这个时候上面链接里的文章提出了三种方法:
1、决策变量的Start属性直接设置变量的初始值
2、设置决策变量的Hint属性,为求解器提供提示
3、使用求解器的callback方法
同时给出了详细的步骤。这里只针对方法1【对决策变量的Start属性直接设置变量的初始值】进行详细阐述。

过程

这里假定有两个模型,gurobi先求解出model1后,将model1的最优解设为model2的初始可行解。model1、model2的变量命名一致
model1的求解算例代码为:

import gurobipy as gp
from gurobipy import GRB

# 创建第一个模型 model1
model1 = gp.Model("model1")

model1.setParam('OutputFlag', 0)

# 添加变量
x1 = model1.addVar(vtype=GRB.CONTINUOUS, name="x1")
x2 = model1.addVar(vtype=GRB.CONTINUOUS, name="x2")

# 设置目标函数
model1.setObjective(2 * x1 + 3 * x2, sense=GRB.MAXIMIZE)

# 添加约束
model1.addConstr(3 * x1 + 4 * x2 <= 25)
model1.addConstr(2 * x1 + 5 * x2 <= 20)

# 解决模型1
model1.optimize()

这个时候将model1的决策变量求解结果导出到字典initial_solution = {}中。具体代码为:

initial_solution = {}
    for var in model1.getVars():
        initial_solution[var.varName] = var.x

输出initial_solution 结果:

print(initial_solution)

在这里插入图片描述
把这个作为可行解写入到model2中

 # 创建第二个模型 model2
 model2 = gp.Model("model2")

#不要输出求解过程
 model2.setParam('OutputFlag', 0)
 # 添加变量
 x1 = model2.addVar(vtype=GRB.CONTINUOUS, name="x1")
 x2 = model2.addVar(vtype=GRB.CONTINUOUS, name="x2")

 # 设置目标函数
 model2.setObjective(3 * x1 + 2 * x2, sense=GRB.MAXIMIZE)

 # 添加约束
 model2.addConstr(2 * x1 + 3 * x2 <= 15)
 model2.addConstr(4 * x1 + 2 * x2 <= 16)

#更新模型,这条很重要!
 model2.update()
 # 将第一个模型的解作为初始可行解应用于第二个模型的变量
 for var in model2.getVars():
     if var.varName in initial_solution:
         var.Start=initial_solution[var.varName]
 # 解决模型2
 model2.optimize()

这个时候我们查看model2的初始可行解是否和model1的最优解一致。

查看model2初始可行解
if model2.status == GRB.OPTIMAL:
    print("Optimal solution found in model2")
    for var in model2.getVars():
        print(f"{var.VarName}: {var.Start}")

输出为这样就成功改变了初始可行解:
在这里插入图片描述
否则,x1、x2的初始可行解为1e101。

参考

更多关于Gurobi加快求解速度之设置初始可行解方面的内容,可以查看如下几篇文章
1 [1]: https://zhuanlan.zhihu.com/p/557970852
2 [2]: https://blog.csdn.net/sinat_41348401/article/details/133547827
2[3]: https://mp.weixin.qq.com/s/-dxL4DBJK–LORh6-7pkWA
2[4]: https://mp.weixin.qq.com/s/tkw-mtPecIMYvMS72icskw

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值