Gekko中间变量求和约束下MINLP整数规划无解问题求助
问题原因
- 成本函数混用了Numpy运算和GEKKO变量:
objective_inverse中使用np.real处理GEKKO变量类型的输入xi,会导致计算结果脱离GEKKO的运算图,求解器无法正确识别成本计算逻辑,得到的总约束值远高于实际值,误判为无可行解。 - 冗余的分支判断:你提供的
reg_feats参数中所有c值均为正数,c==0的判断没有实际作用,且如果后续有c为0的场景,这种普通数值分支也无法适配GEKKO的符号运算逻辑。 - 严格小于约束的数值兼容问题:求解器APOPT处理整数规划时,严格小于
<容易受浮点数精度影响出现误判,建议改成<=。
修复方案
1. 重写成本函数,完全适配GEKKO运算
移除Numpy依赖,直接使用GEKKO内置的运算符完成计算,保证运算图完整:
def objective_inverse(x, a, b, c): # 线索数x为非负整数,c为正参数,计算结果必然为实数,无需np.real return a + (x/c)**(1/b)
2. 调整约束写法
把严格小于约束改为小于等于,避免数值精度导致的误判:
# 移除冗余的Const定义,直接写约束更清晰 m.Equation(m.sum(sums) <= max_budget)
3. 可选:降低求解收敛难度
如果还是出现收敛问题,可以先修改求解器参数先跑NLP版本确认可行解存在,再切回MINLP求解整数解:
# 先将MINLP作为NLP求解,确认可行解存在 'minlp_as_nlp 1'
内容的提问来源于stack exchange,提问作者VincFort
相关产品推荐
相关产品推荐

