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

Julia JuMP用元组数组做变量索引报UndefVarError如何解决?

问题原因

JuMP的@variable宏没有内置元组自动拆包的语法支持,你写的δ[(i,j)=Ω]中的i、j属于未被宏识别的声明变量,因此触发UndefVarError。你尝试的...展开语法是Julia的参数解构/展开语法,不适用于优化变量的索引声明场景。

修正方案

方案1:直接用元组作为单索引(最简单)

不需要对Ω做额外处理,直接将整个元组作为变量的单维索引即可,代码如下:

Ω = [(i,j) for i in V, j in tildeV if i != j && ŷ[i] < .5 && s[i,j] == sim_i[i]]
@variable(m, δ[Ω] >= 0)

调用变量时用元组作为下标即可,示例:δ[(1,2)]。
你提供的最小复现示例修正后可直接运行:

using JuMP
m = Model()
Ω = [(i,j) for i in 1:5, j in 1:5]
@variable(m, δ[Ω] >= 0)

方案2:保留双下标访问格式

如果你习惯用δ[i,j]的双下标调用方式,可以先提取Ω中所有的i、j取值集合,再通过索引过滤条件声明变量:

Ω = [(i,j) for i in V, j in tildeV if i != j && ŷ[i] < .5 && s[i,j] == sim_i[i]]
I = unique(first.(Ω))
J = unique(last.(Ω))
@variable(m, δ[i=I, j=J; (i,j) in Ω] >= 0)

该写法只会生成Ω中存在的索引对对应的变量,不会生成多余的无效变量,同时支持双下标访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:06:04