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
相关产品推荐
相关产品推荐

