【问题标题】:AMPL to JuMP (Julia)AMPL 到 JuMP (Julia)
【发布时间】:2020-03-10 19:44:53
【问题描述】:

我需要将 AMPL 代码转换为 JuMP。

param f;

set R := 1..N;
set R_OK := 1..M;
set V := 1..N;

param tMax;
set T := 1..tMax;

var primary{R,V}, binary;
var SendPrepReq{T,R,V}, binary;

"param f" 将是一个 int。我知道该怎么做的变量。但是套装呢?它在 JuMP 中的等价物是什么?

【问题讨论】:

    标签: optimization julia mathematical-optimization modeling julia-jump


    【解决方案1】:

    最相关的文档之一可能是Quickstart guide,以了解 JuMP 的基本工作原理。

    对于您的示例,您可以直接声明参数:

    using JuMP
    
    # declare some parameters
    f = 3
    N = 10
    M = 5
    R = 1:N
    V = 1:N
    R_OK = 1:M
    
    Tmax = 33
    T = 1:Tmax
    
    # create the model
    m = Model()
    # add variables
    @variable(m, primary[R,V], Bin)
    @variable(m, SendPrepReq[T,R,V], Bin)
    

    编辑

    您可能希望像在 AMLP 中那样提供独立于模型声明的参数。 Julia 中最直接的方法是在一个函数中构建和求解模型,该函数采用参数中的问题参数:

    function build_model(f, N, M, Tmax)
        R = 1:N
        V = 1:N
        R_OK = 1:M
        T = 1:Tmax
    
        # create the model
        m = Model()
        # add variables
        @variable(m, primary[R,V], Bin)
        @variable(m, SendPrepReq[T,R,V], Bin)
    
        return (m, primary, SendPrepReq)
    end
    

    【讨论】:

    • 参数只是其他编程语言中的简单变量。如果你想稍后给它们值,最简单的方法是将优化放在一个以参数为参数的函数中
    • 正确地说“ var prepReqSendPerNodeAndView{R,V}, integer, >= 0; ” 将是“ @varible(m, prepReqSendPerNodeAndView[R,V] >=0, Int ) "
    • 是的,没错,注意@variable中的拼写错误
    • 在AMPL代码中,有一个叫做“时间零约束”的部分,它们就像:“initializeSendPrepareReq{i in R, v in V}: SendPrepReq[1, i, v] = 0;"和“initializeRecvCV{i in R, j in R, v in V}: RecvCV[1, i, j, v] = 0;”我从指南中得到了一些想法,但我不知道该怎么做。
    • 这对应于将变量固定为一个值,这在 JuMP 中使用 fix 函数完成:JuMP.fix(SendPrepReq[1, i, v], 0)
    猜你喜欢
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多