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

Gurobi报50步模型不可行但手动有解且49步可行的原因咨询

问题核心原因

你遇到的50步场景不可行问题主要来自两个约束配置错误:

  • D更新约束的步长参数偏移错误
    你手动构造可行解时,D的更新公式用的是(step+1)/113880,但Gurobi模型里的D更新约束写的是(step)/113880,步长少了1,导致每一步D的下降幅度都比手动计算的更大,50步时D会提前跌破下界0,触发约束冲突。
  • 初始约束重复添加
    你把D[0]==1、C[0]==0.8*A、K[0]==0三个仅需执行一次的初始约束写在了for step in steps循环内部,相当于重复添加了num_steps次相同约束,虽然逻辑上不会直接导致不可行,但属于冗余配置,建议移到循环外部。

排查思路

你可以按以下步骤验证和修复:

  1. 先修复D更新约束的step偏移问题,把f.addConstr(D[step + 1] == D[step] - (K[step] + (step)/113880)*0.2, name = 'D constr')里的step改成step+1,和手动逻辑对齐,再运行看是否可行。
  2. 如果修复后仍有问题,调用Gurobi自带的不可行约束集分析工具定位冲突:
    # 求解报不可行后运行
    f.computeIIS()
    f.write("infeasible_model.ilp")
    
    生成的infeasible_model.ilp文件会列出所有互相冲突的约束,你可以直接对应检查和手动逻辑不一致的地方。
  3. 你可以把自己手动构造的可行解作为初始解传入Gurobi,验证是否满足所有约束:
    # 按你手动计算的结果给每个变量赋值
    A.start = 500
    B.start = 2
    # 其他变量依次赋值,再运行求解,Gurobi会提示哪些约束不满足
    

内容的提问来源于stack exchange,提问作者midav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:24:03