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

MIP模型中求矩阵列最大值报错的修复方案咨询

问题修复与MIP模型实现

报错原因

你遇到的Error 59和Error 256根源在于:smax属于非线性表达式,而MIP(混合整数规划)模型要求所有约束必须是线性的,无法直接支持这类非线性操作符。

修复方案

要在MIP中实现“求解矩阵各列最大值存入last(i)”的需求,需要通过线性化约束替代非线性的smax操作,具体步骤如下:

1. 变量定义调整

确保last(i)为连续变量(若EM是整数变量,也可定义为整数变量),同时引入二进制辅助变量标记取到最大值的位置:

Variables
    EM(f,t,i)    '正决策变量'
    last(i)      '各列最大值';
Positive Variables EM;

Binary Variables
    delta(f,t,i) '辅助二进制变量,标记对应EM(f,t,i)是否为列最大值';

2. 线性化约束实现最大值逻辑

用两组线性约束替代原有的eq2:

  • 下限约束:保证last(i)不小于当前列的所有EM(f,t,i)值
    eq2_lower(f,t,i).. last(i) =g= EM(f,t,i);
    
  • 上限约束+二进制变量约束:保证last(i)等于当前列的某个EM(f,t,i)值(即最大值)
    首先定义一个足够大的常数M(需大于EM可能的最大取值,示例中取10即可):
    Scalar M /10/;
    
    然后添加约束:
    eq2_upper(f,t,i).. last(i) =l= EM(f,t,i) + M*(1 - delta(f,t,i));
    eq2_delta(i).. sum(f,t, delta(f,t,i)) =e= 1;
    
    其中eq2_delta确保每个列i下有且仅有一个delta变量取1,标记该位置的EM为列最大值。

特殊情况:若EM是已知参数

如果EM是已知的固定参数而非决策变量,无需构建MIP模型,直接通过参数计算即可:

Parameters
    EM(f,t,i)    '给定的EM取值'
    last(i)      '各列最大值';

* 初始化EM参数(你的示例数据)
EM('f1','t1','i1') =7; EM('f1','t1','i2')=5; EM('f1','t1','i3')=6; EM('f1','t1','i4')=0; EM('f1','t1','i5')=6;
EM('f1','t2','i1') =8; EM('f1','t2','i2')=4; EM('f1','t2','i3')=6; EM('f1','t2','i4')=1; EM('f1','t2','i5')=6;
EM('f1','t3','i1') =6; EM('f1','t3','i2')=7; EM('f1','t3','i3')=3; EM('f1','t3','i4')=2; EM('f1','t3','i5')=4;
EM('f2','t1','i1') =8; EM('f2','t1','i2')=7; EM('f2','t1','i3')=5; EM('f2','t1','i4')=3; EM('f2','t1','i5')=1;
EM('f2','t2','i1') =0; EM('f2','t2','i2')=5; EM('f2','t2','i3')=5; EM('f2','t2','i4')=7; EM('f2','t2','i5')=0;
EM('f2','t3','i1') =0; EM('f2','t3','i2')=8; EM('f2','t3','i3')=0; EM('f2','t3','i4')=5; EM('f2','t3','i5')=9;

* 直接计算各列最大值
last(i) = smax((f,t), EM(f,t,i));

结果验证

无论采用哪种方式,最终都会得到你需要的结果:
last('i1')=8, last('i2')=8, last('i3')=6, last('i4')=7, last('i5')=9

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 07:31:27