我对 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
我可以像链接的解决方案中那样构造一个字典,但正在寻找一种方法来避免这个中间步骤。 感谢您的任何建议!
只需制作字典即可。
请注意,
@NL
语法现在已被保留。您可以删除以支持 @expression
和 @constraint
。