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

如何在JuMP中编写等于数组取值的求和约束

约束编写错误修正说明

报错根因

  • 维度逻辑颠倒:需求规则为对所有j、k,i维度求和等于W_jk,你写的代码逻辑为循环i,对j、k维度求和,和需求完全不符。
  • 变量作用域错误:你代码中j、k的有效范围仅在sum()内部的生成器中,W[j,k]写在sum外部时,找不到对应的j、k变量,因此触发未定义报错。
  • 约束类型不匹配:需求是等式约束,你写的是大于等于约束。

正确代码实现

这里提供两种JuMP框架下的正确写法:

写法1:显式循环写法

N = 10
W = [11 12 13 14 15 16 17;
     9 14 21 21 12 15 16;
     14 21 15 13 12 17 17]

# 对每一组j、k单独加约束,i维度求和
for j in 1:size(W, 1), k in 1:size(W, 2)
    @constraint(m, sum(x[i, j, k] for i in 1:N) == W[j, k])
end

如果你的x是已定义的三维变量数组,也可以直接用切片简化求和逻辑:

@constraint(m, sum(x[:, j, k]) == W[j, k])

写法2:JuMP向量化写法(更简洁)

无需手写循环,直接用JuMP的索引约束语法:

@constraint(m, [j in 1:3, k in 1:7], sum(x[i, j, k] for i in 1:N) == W[j, k])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:54:06