簡體   English   中英

LoadError:MethodError:沒有方法匹配Value(:: Array {VariableRef,1})

[英]LoadError: MethodError: no method matching Value(::Array{VariableRef,1})

我是Julia的新手,一直在嘗試學習。 因此,我遇到了一個單位承諾問題的例子。 但是,它對我不起作用,因為出現此錯誤:

    LoadError: MethodError: no method matching 
    value(::Array{VariableRef,1})
    Closest candidates are:
    value(!Matched::NonlinearExpression) at ***\packages\JuMP\jnmGG\src\nlp.jl:1126
    value(!Matched::NonlinearParameter) at ***\packages\JuMP\jnmGG\src\nlp.jl:125
    value(!Matched::VariableRef) at ***\packages\JuMP\jnmGG\src\variables.jl:721
    ...
in expression starting at untitled-c2a2b8253aafb31b0a191c03db8d0489:41
solve_uc(::Array{Int64,1}, ::Array{Int64,1}, ::Array{Int64,1}, ::Int64, 
::Int64, ::Int64) at untitled-c2a2b8253aafb31b0a191c03db8d0489:38
top-level scope at none:0

代碼本身在這里(我從教程中獲得了它):

    using JuMP 
    using GLPK
    using MathOptInterface
    const MOI = MathOptInterface
    using Interact

    const g_max = [1000,1000];
    const g_min = [0,300];
    const c_g = [50,100];
    const c_g0 = [1000,0]
    const c_w = 50;
    const d = 1500;
    const w_f = 200;

    function solve_uc(g_max, g_min, c_g, c_w, d, w_f)
uc=Model(with_optimizer(GLPK.Optimizer)) 

@variable(uc, 0 <= g[i=1:2] <= g_max[i]) 
@variable(uc, u[i=1:2], Bin)
@variable(uc, 0 <= w  <= w_f )

@objective(uc,Min,sum(c_g[i] * g[i] for i in 1:2) + c_w * w)


for i in 1:2
    @constraint(uc,  g[i] <= g_max[i] * u[i]) 
    @constraint(uc,  g[i] >= g_min[i] * u[i]) 
end

@constraint(uc, w <= w_f)

    @constraint(uc, sum(g[i] for i in 1:2) + w == d)

    status = optimize!(myModel)


    return status, value(g), value(w), w_f-value(w), value(u), objective_value(uc)
end

    status,g_opt,w_opt,ws_opt,u_opt,obj=solve_uc(g_max, g_min, c_g, c_w, d, w_f);

謝謝。

歡迎來到SO!

由於gu是變量數組 ,因此您需要在函數名稱后的單個點( . )上廣播gu value的調用。 改變中

return status, value(g), value(w), w_f-value(w), value(u), objective_value(uc)

return status, value.(g), value(w), w_f-value(w), value.(u), objective_value(uc)

應該解決錯誤。

請注意,這是Julia中的常見樣式。 這些函數通常僅針對單個元素編寫,並將這些函數應用於元素的數組(或通常應用於集合),您可以使用點句法輕松地在數組上廣播調用。 (即f.(A) )。

盡管看起來與您得到的錯誤無關,但行status = optimize!(myModel)引用了變量myModel ,該變量未在函數的作用域中定義。 您可能應該將其更改為status = optimize!(uc)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM