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

Julia JuMP中定义维度依赖的多维线性规划变量问题

解决JuMP中按关联索引定义变量的问题

方案1:修正@variable宏的索引语法

你之前用了列表推导式的写法,这不符合JuMP @variable 宏的语法要求,改成i in 集合的索引声明形式就能直接关联i对应的j范围:

using JuMP
# 初始化模型
m = Model()
# 定义索引集合
I = 1:3
J = [1:2, 1:5, 1:3]
# 正确定义变量
@variable(m, e[i in I, j in J[i]])

这样定义后,就能正常调用e[1,1]、e[2,5]、e[3,3]这类变量,JuMP会自动生成所有合法的索引组合,不存在的组合(比如e[1,3])会直接报错,完全符合你的需求。

方案2:预先生成合法索引对(兼容旧版本JuMP)

如果你的JuMP版本较低,方案1无法生效,可以先手动生成所有合法的(i,j)索引对,再基于这个集合定义变量:

using JuMP
m = Model()
I = 1:3
J = [1:2, 1:5, 1:3]
# 生成所有合法的索引组合
valid_pairs = [(i, j) for i in I for j in J[i]]
# 定义变量
@variable(m, e[valid_pairs])

这种方式下变量调用形式是e[(1,1)],如果想要保持e[1,1]的调用格式,可以借助AxisArrays包转换:

using AxisArrays
# 转换为轴数组,支持二维索引调用
e_axis = AxisArray(e, Axis{:i}(I), Axis{:j}(vcat(J...)))
# 此时可直接用e_axis[1,1]访问变量

优先推荐方案1,这是JuMP的标准写法,只要版本在0.21及以上都能正常使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 07:20:27