You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Soplex求解零目标函数?报_rationalLP != 0错误如何修复?

问题修复方案

报错的核心原因是默认初始化的SoPlex实例仅开启了实数(double)求解模式,没有分配有理数求解所需的_rationalLP实例指针,调用addColRational接口时触发了断言校验失败。

修复方案一:直接使用有理数类型求解器实例(推荐)

把默认的SoPlex对象定义替换为SoPlexRational类型,初始化时直接进入有理数求解模式:

// 原代码
// SoPlex mysoplex;
// 修改为
SoPlexRational mysoplex;

修改后后续所有Rational后缀的接口都可以正常调用,不需要额外配置。

修复方案二:手动切换到有理数模式

如果需要保留原有实数模式的部分逻辑,可以在调用任何Rational接口前,手动触发模式切换:

SoPlex mysoplex;
mysoplex.setIntParam(SoPlex::OBJSENSE, SoPlex::OBJSENSE_MINIMIZE);
// 新增这一行切换到有理数模式
mysoplex.switchToRational();

切换完成后再调用addColRational等接口即可正常运行。

注意事项

  • 切换到有理数模式后,所有增列、增行、参数配置操作都要使用带Rational后缀的对应接口,不要和Real后缀的实数接口混用,避免出现类型不匹配异常。
  • 有理数接口使用精确分数运算,仅在原实数接口因为数值稳定性问题导致迭代次数过多时,才会出现求解速度提升的效果。如果本身模型数值没有问题,有理数运算开销会高于实数运算,若后续速度不达预期可以优先检查模型稀疏性优化。

内容的提问来源于stack exchange,提问作者Chia Teck Yan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 07:36:02