如何使用变量引用在定点计算表达式?

问题描述 投票:0回答:1

我对 julia 和 JuMP 还很陌生,我很困惑如何在固定点有效地评估模型中的目标或表达式。

谷歌搜索让我找到了朱莉娅话语中的这个解决方案,其中字典用于保存固定变量值:

using JuMP
model = Model()
@variables(model, begin
    -1 <= x[1:5] <= 1
    -5 <= y[1:3] <= 8
    -30 <= z <= 5
end)
ex = @NLexpression(model, sum(x[i] for i=1:4) - y[1] * y[2] + z)
@NLconstraint(model, ex <= 10)


inp = Dict(x[1] => 1, x[2] => 2, x[3] => 3, x[4] => 4, y[1] => 5, y[2] => 6, z => 7)

value(i -> get(inp, i, 0.0), ex) 

但是,我将固定值保存在多个数组中,每个数组对应一个数组:

last_x = Containers.DenseAxisArray(vcat(1:4), vcat(1:4))
last_y = Containers.DenseAxisArray([5,6], vcat(1:2))
last_z = Containers.DenseAxisArray([7], 1)

如何计算模型的表达式 ex ,使得模型的每个变量引用都指向数组中的相应值?我正在考虑从变量中获取索引,然后循环遍历数组可能是一种方法,但我只能获取整个变量引用:

model[:x] 
for key in eachindex(model[:x]) # will give only the variable reference
    println((model[:x][key]))
end

我可以像链接的解决方案中那样构造一个字典,但正在寻找一种方法来避免这个中间步骤。 感谢您的任何建议!

julia julia-jump
1个回答
0
投票

只需制作字典即可。

请注意,

@NL
语法现在已被保留。您可以删除以支持
@expression
@constraint

© www.soinside.com 2019 - 2024. All rights reserved.