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

glpk.js存在可行解却返回无原始可行解问题求助

GLPK.js求解含负整数变量ILP时返回无解的问题解决

问题核心结论

你的问题并非需要开启负整数解支持——GLPK.js的generals(一般整数变量)默认允许所有整数取值(正、负、零),无需额外配置。真正的原因是你在构建约束时犯了参数配置错误,导致约束冲突,求解器才返回无解。

具体错误分析

1. p变量的非负约束配置错误

你的基础ILP要求p0 >= 0、p1 >=0等,但在JSON配置的c0-c7约束中,你错误地设置了:

{"name":"c0","vars":[{"name":"p0","coef":1}],"bnds":{"type":2,"ub":0,"lb":0}}

GLPK中type:2对应下界约束(GLP_LO),但你同时将ub设为0,这等价于强制p0=0(0 ≤ p0 ≤0)。而你在第二个案例的额外约束中又要求p0=1(c21),这直接造成约束冲突,求解器自然返回无解。

正确配置:只设置下界为0,不限制上界(或设为极大值):

{"name":"c0","vars":[{"name":"p0","coef":1}],"bnds":{"type":2,"lb":0}}

或使用双向约束类型(type:4),上界设为极大值:

{"name":"c0","vars":[{"name":"p0","coef":1}],"bnds":{"type":4,"lb":0,"ub":1e9}}

2. 总和约束配置错误

你的基础ILP要求p0+p1+...+p7 >=1,但JSON的c8约束错误设置为:

{"name":"c8","vars":[...],"bnds":{"type":2,"ub":0,"lb":1}}

type:2是下界约束,仅需指定lb,ub会被忽略,但你错误设置的ub:0会被GLPK解析为矛盾约束(要求总和≥1且≤0)。

正确配置:

{"name":"c8","vars":[{"name":"p0","coef":1},{"name":"p1","coef":1},...],"bnds":{"type":2,"lb":1}}

验证修正效果

修正上述约束后,第二个案例中p0=1、其余p变量=0、rise0=-1的解将满足所有约束:

  • 所有p变量≥0(符合修正后的非负约束)
  • p变量总和=1≥1(符合总和约束)
  • 代入c9约束:p1 - p0 - rise0 = 0 -1 - (-1) =0(满足等式)
  • 其余rise变量为0,对应约束全部满足

此时GLPK.js将正常返回该可行解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:50:52