SCIP求解器给模型变量赋初值

最近在项目中使用到scip求解器(公司没有商业版求解器),因为规模比较大,模型求解时间比较长,分析求解日志,发现求解器在初始可行解的寻找部分耗时较多,思考:如果我这边给求解器提供初始值,是否能加速求解器对模型的求解?基于此,就开始求解器求解优化。
解决问题过程:
(1)使用启发式对模型求解,得到可行解;
(2)将启发式得到的可行解,赋值给求解器中变量的初始值;

那么问题来了,gurobi中可以参考张一白等在运小筹的文章,已经写的很好了,可是现实很骨感,我这边是SCIP,没有值得参考的文章,甚至问过很多人,都说是行不通的,郁闷中就在论坛中找到Joao-Dionisio 这个老哥,他刚好做过这块,就给一个比较好的方式,今天就整理一下。
原问题:
先看看求解器自己寻找初始值的过程:
在这里插入图片描述在小规模上测试中,求解器进行初始值寻找的过程就花费32s;
优化后的求解过程
在这里插入图片描述将启发式得到的可行解作为求解器求解过程中的初始值,可以看到在开始求解时就已经得到一个比较好的可行解,自己认为这么做,可以大大提升求解器的求解速度。
如果上面两个对比没有疑问的话,就可以看怎么实现了:
SCIP版本需在4.0之上

md = Model("schedule")
mcp = md.createPartialSol() 
md.setSolVal(mcp,x,values)
md.addSol(mcp)
md.optimize()

代码是什么意思就不过多解释,如果有疑问,可以分享一下我最近正在学习的SCIP的doc.
希望对使用scip求解器的各位有帮助!

如需使用,希望标明出处!

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值