julia - 如何在 Julia+JuMP 中定义 AMPL(如集合和参数)?

标签 julia julia-jump

我需要在 Julia+JuMP 中定义一些常量参数,类似于您在 AMPL 中定义时所做的事情

set A := a0 a1 a2;

param p :=
a0 1
a1 5
a2 10 ;

如何在 Julia 中定义诸如 Ap 之类的内容?

最佳答案

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/

相关文章:

从 Julia 调用 div C 函数

julia - Julia 的广义旅行商问题

julia - 如何在用户空间创建一个类似 `()`的对象

methods - 如何向 Julia 中的现有函数添加方法?

julia - 如何使用 JuMP 寻求 MIP 的第二最佳解决方案

julia - 如何将 JuMP 约束设置为等于数组中的值?

optimization - 约束数组 Julia

multidimensional-array - Julia 跳跃 : define a multidimensional variable when a dimension depends on other dimension

dataframe - 查找具有某些缺失值的数据框列的子集

visual-studio-code - 如何在 Julia 中开发包时调试单元测试