簡體   English   中英

如何在創建 julia JuMP 參數或變量容器時優雅地初始化起始值或參數值?

[英]How does one elegantly initialize start values or parameter values when creating a julia JuMP parameter or variable container?

希望 Julia 或 JuMP 專家可以幫助我如何執行以下操作(抱歉,因為我是該語言的新手並嘗試了所有資源但無法找到解決此問題的方法)

創建 JuMP 變量容器時,我試圖初始化所有變量的起始值。

我有一個 function 定義如下:

function sam(i, j)
    if i == "BRD" && j == "CAP"
        return 5
    elseif i == "BRD" && j == "LAB"
        return 10
    elseif i == "MLK" && j == "CAP"
        return 20
    elseif i == "MLK" && j == "LAB"
        return 15
    elseif i == "CAP" && j == "HOH"
        return 25
    elseif i == "HOH" && j == "BRD"
        return 15
    elseif i == "HOH" && j == "MLK"
        return 35
    else
        return nothing
    end
end

我想初始化幾個 model 變量,比方說產品的家庭消費。

@variable(model, 0.001 <= Xᵢ[h, g]) # where h = ["HOH"] and g = ["BRD", "MLK"]

這個變量可以使用上面的 function 初始化。 它應該是"HOH" -> "BRD""HOH" -> "MLK" 所以分別是 15 和 35。

我可以通過這樣做來完成這些初始化:

set_start_value(Xᵢ["HOH", "BRD"], sam("HOH", "BRD"))
set_start_value(Xᵢ["HOH", "MLK"], sam("HOH", "MLK"))

但是,我希望有更好的方法可以使用start選項來執行此操作。 我嘗試了以下但沒有成功。

@variable(model, 0.001 <= Xᵢ[h, g], start = sam(h, g)) # option 1
@variable(model, 0.001 <= Xᵢ[h, g], start = sam.(h, g)) # option 2
@variable(model, 0.001 <= Xᵢ[h, g], start = sam.(permute(h), g)) # option 3
@variable(model, 0.001 <= Xᵢ[h, g], start = [sam(h,g) for h in h, for g in g]) # option 4

同樣的問題同樣適用於@NLparameter` 的創建。 如何為參數執行此操作。 選項嘗試如下:

@NLparameter(model, 0.001 <= FFᶠ[f][h] == sam(f, h))
@NLparameter(model, 0.001 <= FFᶠ[f][h] == sam.(f, h))
@NLparameter(model, 0.001 <= FFᶠ[f][h] == sam.(permute(f), h))
@NLparameter(model, 0.001 <= FFᶠ[f][h] == [sam(f,h) for f in f, for h in h])

一個更簡單的例子:

我有一些 function f = x^2 + y^2和 arrays x=[1,2,3,4,5,6]y=[1,2,3,4,5,6]我怎么寫:

@variable(model, v[x,y], start=f(x,y))

這樣value(v[1, 2])起始值將等於1^2 + 2^2因此5

做類似的事情:

julia> using JuMP

julia> h, g = ["HOH"], ["BRD", "MLK"]
(["HOH"], ["BRD", "MLK"])

julia> model = Model()
A JuMP Model
Feasibility problem with:
Variables: 0
Model mode: AUTOMATIC
CachingOptimizer state: NO_OPTIMIZER
Solver name: No optimizer attached.

julia> function sam(i, j)
           if i == "HOH" && j == "BRD"
               return 15
           else
               return nothing
           end
       end
sam (generic function with 1 method)

julia> @variable(model, 0.001 <= X[i=h, j=g], start = sam(i, j))
2-dimensional DenseAxisArray{VariableRef,2,...} with index sets:
    Dimension 1, ["HOH"]
    Dimension 2, ["BRD", "MLK"]
And data, a 1×2 Matrix{VariableRef}:
 X[HOH,BRD]  X[HOH,MLK]

julia> start_value.(X)
2-dimensional DenseAxisArray{Union{Nothing, Float64},2,...} with index sets:
    Dimension 1, ["HOH"]
    Dimension 2, ["BRD", "MLK"]
And data, a 1×2 Matrix{Union{Nothing, Float64}}:
 15.0  nothing

我想我們可以在文檔中更明確地說明這一點。 我已經打開了一個問題來解決這個問題: https://github.com/jump-dev/JuMP.jl/issues/3147

暫無
暫無

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

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