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

Julia优化模型约束中数组列求和代码报错的解决方法

修复JuMP约束中的MethodError问题

错误原因

原代码中collect(A[:,:,1])将JuMP的DenseAxisArray转为普通数组,后续sum(..., dims=2)得到2维数组,而y[:,1]是1维的DenseAxisArray,直接用.==广播时,两种数组类型的广播机制不兼容,触发类型匹配错误。

修复方法

提供两种可行的修复方式:

方法1:按索引循环定义约束(推荐,代码更清晰)

直接针对每个索引i,对j维度求和后与y[i,1]建立等式:

I = 1:5; J = 1:5; K = 1:5;

m = Model(HiGHS.Optimizer)
@variable(m, A[i in I, j in J, k in K] >= 0)
@variable(m, y[i in I, k in K] >= 0)

@constraint(m, [i in I], sum(A[i, j, 1] for j in J) == y[i, 1])

方法2:去除sum结果的多余维度

使用dropdims将sum(A[:,:,1], dims=2)生成的2维数组转为1维,与y[:,1]维度匹配后建立约束:

I = 1:5; J = 1:5; K = 1:5;

m = Model(HiGHS.Optimizer)
@variable(m, A[i in I, j in J, k in K] >= 0)
@variable(m, y[i in I, k in K] >= 0)

@constraint(m, dropdims(sum(A[:,:,1], dims=2), dims=2) .== y[:,1])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:25:37