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

OR-Tools GLOP求解器与LpSolve求解线性规划问题结果不一致的原因咨询

OR-Tools GLOP求解器与LpSolve求解线性规划问题结果不一致的原因咨询

嗨,针对你遇到的这个问题,我整理了几个可能导致结果不一致的常见原因,你可以逐一排查:

  • 求解器算法实现细节差异
    虽然GLOP和LpSolve都基于单纯形法,但两者的具体实现细节有不少区别:比如 pivot 规则的选择(Bland规则/最大增量规则等)、退化问题的处理逻辑、浮点数运算的精度控制方式等。这些细节会影响求解路径,可能导致最终得到的变量取值有细微差异——不过如果问题的最优目标值是唯一的,两个求解器算出的目标函数值应该是一致的。

  • 数值精度容差设置不同
    所有线性规划求解器都会存在浮点数运算的精度误差,而GLOP和LpSolve默认的精度容差(比如原问题可行性容差、对偶可行性容差)可能不一样。如果你的问题本身接近退化状态,这种精度差异会被放大,看起来结果就会有明显不同。你可以尝试调整其中一个求解器的精度参数,比如GLOP可以通过GLOPSolverParameters来修改容差,看看是否能对齐结果。

  • 你可能没正确获取C#代码的求解结果
    看你的代码,只调用了solver.Solve()但没有输出变量取值和目标值,有可能求解是正确的,但你没拿到结果。建议在求解后添加结果输出代码:

    if (resultStatus == Solver.ResultStatus.OPTIMAL)
    {
        Console.WriteLine($"最优目标值: {solver.Objective().Value()}");
        Console.WriteLine($"x1: {x1.SolutionValue()}");
        Console.WriteLine($"x2: {x2.SolutionValue()}");
        Console.WriteLine($"x3: {x3.SolutionValue()}");
        Console.WriteLine($"t1: {t1.SolutionValue()}");
        Console.WriteLine($"t2: {t2.SolutionValue()}");
        Console.WriteLine($"u1: {u1.SolutionValue()}");
        Console.WriteLine($"v1: {v1.SolutionValue()}");
    }
    else
    {
        Console.WriteLine("未找到最优解");
    }
    

    这样才能和LpSolve的结果做准确对比。

  • 问题本身存在无穷多最优解
    如果你的线性规划问题本身有多个最优解(即最优解是一个区间/区域),不同求解器可能会返回这个区域里的不同点,但目标函数值一定是相同的。你可以先对比两个求解器的目标函数值,如果目标值一致,只是变量取值不同,那就是这种情况,属于正常现象。

另外,我仔细核对了你的C#代码和LpSolve脚本,变量上下界、约束条件、目标函数的定义完全一致,这部分应该没有问题~

备注:内容来源于stack exchange,提问作者mantissa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 09:49:49