Julia-在@variable和@constraint表达式中按名称访问Dict值

Julia-在@variable和@constraint表达式中按名称访问Dict值,julia,julia-jump,Julia,Julia Jump,我想知道是否可以通过以下表达式中的名称访问Dict值: @objective( premex, Min, sum((u["cap"] - PRODAMOUNT[op, u, t]) * u["util_cost1"] for op in _ORDER_PRODUCTS, u in UNITS, t in TIME)) _订购产品: Dict{String,Dict{String,Any}}("o18-p2

我想知道是否可以通过以下表达式中的名称访问Dict值:

@objective(
    premex,
    Min,
    sum((u["cap"] - PRODAMOUNT[op, u, t]) * u["util_cost1"]
        for op in _ORDER_PRODUCTS, u in UNITS, t in TIME))
_订购产品:

Dict{String,Dict{String,Any}}("o18-p25" => Dict("order" => "o18","value" => 3000.0f0,"product" => "p25"),"o18-p36" => Dict("order" => "o18","value" => 63.0f0,"product" => "p36"),"o23-p39" => Dict("order" => "o23","value" => 204.75f0,"product" => "p39"),"o16-p32" => Dict("order" => "o16","value" => 336.0f0,"product" => "p32"),"o22-p37" => Dict("order" => "o22","value" => 50.0f0,"product" => "p37"),"o1-p5" => Dict("order" => "o1","value" => 60.0f0,"product" => "p5"),"o11-p28" => Dict("order" => "o11","value" =....
单位:

UNITS = Dict(["CINTAS" => Dict(["cap" => 1000, "mincap" => 50, "dcap" => 24830, "util_cost1" => 1000, "maxprodr" => 24830]), "BUHLER1" => Dict(["cap" => 1500, "mincap" => 60, "dcap" => 37245, "util_cost1" => 1000, "maxprodr" => 37245]), ...
当我运行此命令时,出现了一个错误:

错误:LoadError:MethodError:没有与getindex匹配的方法(::Pair{String,Dict{String,Integer},::String)

当我把u[“cap”]替换成一个数字时,它就起作用了。

我自己找到了答案(…):

有三个因素需要注意:

  • 无法使用dictionary对象索引变量,因此它必须是Int或String
  • 这是迭代Dict:for(key1,op)in_ORDER_产品的方法
  • 这是只获取索引变量的键的方法:opin键(_ORDER_PRODUCTS)

  • 如果你解决了它,你应该接受你自己的答案。@MatějRačinský谢谢,我会立即接受它,但正如你已经知道的那样=这是不可能的,因此我把它留到以后,正如你已经知道的那样=在我忘记它之后:)
        @variable(premex, PRODAMOUNT[op in keys(_ORDER_PRODUCTS), u in keys(UNITS), t in TIME])
    
        @objective(
            premex,
            Min,
            sum((u["cap"] - PRODAMOUNT[key1, key2, t]) * u["util_cost1"]
                for (key1, op) in _ORDER_PRODUCTS, (key2, u) in UNITS, t in TIME
                    ))