Pyomo调用IPOPT:0-1变量给出小数解

问题背景

这几天搭建了一个纯整数规划模型,因为规模太大,测试时发现用Pyomo调用SCIP求解太慢了。于是我抖了个机灵,因为我除了SCIP,之前也装好了IPOPT的环境,所以反手就把求解器改成了IPOPT,惊喜的发现速度快了很多,简单case测试的解也没啥问题,以为问题解决了,但是高兴的太早了…

在测试某个case时,模型求出了一个我百思不得其解的方案,排查了半天发现是我定义的binary variable,模型竟然算出了一个小数解!而且非常巧妙的满足了我给的约束条件

在这里插入图片描述

问题分析

一开始问GPT说是我initialize=0不对,一本正经的胡说八道… 然后谷歌到有人遇到和我一样的问题:PYOMO:Binary variable giving float values with IPOPT.,看到下面有人给出的解答是:

IPOPT(Interior Point Optimizer)是一个用于非线性规划(NLP)问题求的优化求解器,而不是整数规划问题。改成SCIP后就解决了!但是性能问题又回来了。

这里有两个值得深钻的问题:

  1. 建立好运筹模型后,如何选择合适的求解器?
  2. 对于大规模的整数规划问题,怎么提高其求解速度。

后面会调研一下,单独出两篇文章回答这两个问题!

反思

选择求解器要小心,如果给自己的问题匹配了并不合适的求解器,很可能就此埋下了隐患,务必小心验证求出的解是否符合预期。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值