Matlab+gurobi求解出现数值问题:numerical problems

本文讲述了在使用MATLAB和YALMIP配合Gurobi解决MILP问题时遇到的数值问题,分析了原因(不良数据和浮点数值精度),提供了改良模型和调整NumericFocus参数的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本来以为matlab+gurobi求解只会出现unfeasible的问题,没想到今天遇到了numerical problem?!

 在使用matlab+yalmip+gurobi求解MILP问题时,可以求得解(解有数值,但解不满足约束)出现了报错“numerical problems”。

 原因分析:

数值问题(不良数据)

打印警告信息如下: 

 在yalmip官网上发现相关的解释,当模型中出现坏数据时(极大数和极小数,或者没有定义范围引起的大小数,1e9),求解器工作可能会出现数值问题。

这是因为求解器以浮点数值的有限精度工作,这意味着大多数计算一直到加法和减法,都只是近似值。当求解器工作时,这些小错误会累积起来,在某些数据错误的模型中,这可能会导致失败,即numerical problems。链接如下: Debugging numerical problems - YALMIP

 解决方案:

 1.改良模型或消除不良模型

 例如,定义更合适的变量范围;或者,给没有定义范围的变量添加范围。

  2.修改求解器的NumericFocus参数

然而,由于模型是根据实际问题建立的,很多时候一些系数无法修改。这时,为了避免数值问题,提高求解的精度,可以修改 NumericFocus参数。

NumericFocus参数控制代码尝试检测和管理数字问题的程度。数值越大,数值计算更加精确,但花费时间也更多。默认为0,范围:0-3。可以通过以下代码修改:ops=sdpsettings('solver','gurobi','verbos',0,'gurobi.NumericFocus' , 3);

至此,问题解决。日志如下:

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值