我需要在 Julia+JuMP 中定义一些常量参数,类似于您在 AMPL 中定义时所做的事情
set A := a0 a1 a2;
param p :=
a0 1
a1 5
a2 10 ;
如何在 Julia 中定义诸如 A
和 p
之类的内容?
最佳答案
JuMP 本身没有为 Julia 中可用的索引集定义特殊语法。因此,例如,您可以定义
A = [:a0, :a1, :a2]
其中 :a0
定义符号。
如果你想在这个集合上索引一个变量,那么语法是:
m = Model()
@variable(m, x[A])
JuMP 也不像 AMPL 那样区分数据和模型,因此没有真正的参数概念。相反,您只需在使用时提供数据即可。如果我正确理解你的问题,你可以做类似的事情
p = Dict(:a0 => 1, :a1 => 5, :a2 => 10)
@constraint(m, sum(p[i]*x[i] for i in A) <= 20)
这将添加约束
x[a0] + 5 x[a1] + 10 x[a2] <= 20
我们将 p
定义为 Julia 字典。这里没有任何特定于 JuMP 的内容,实际上任何 Julia 表达式都可以作为系数提供。人们可以很容易地说
@constraint(m, sum(foo(i)*x[i] for i in A) <= 20)
其中 foo
是任意 Julia 函数,可以执行数据库查找、计算 pi 的数字等。
关于julia - 如何在 Julia+JuMP 中定义 AMPL(如集合和参数)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24661721/