如何使用 Julia 的 JuMP 包正确使用匿名构造语法来解决具有多重限制的优化问题?

How to properly use anonymous construction syntax for an optimization problem with multiple restrictions using Julia's JuMP package?

我正在使用 Julia 1.0 和 JuMP 包来解决优化问题。这是我使用该语言的第一天。因此,我对语法不是很满意。

Quick Start Guide 之后,我能够解决以下问题:

我使用了这段代码,效果很好:

using JuMP

using GLPK

model = Model(with_optimizer(GLPK.Optimizer))

@variable(model, 0 <= x <= 6000)

@variable(model, 0 <= y <= 4000)

@objective(model, Max, (25*x) + (30*y))

@constraint(model, con, ((1/200)*x) + ((1/140)*y) <= 40)

optimize!(model)

termination_status(model)

primal_status(model)

dual_status(model)

println(objective_value(model))

println(value(x))

println(value(y))

由于上述实施的成功,我尝试调整代码以适应新问题:

我知道经典线性规划问题与仅明确定义整数值的问题之间的区别。

为了简单起见,我将问题视为一个浮点数,考虑到 x1 大于 0 且小于 6。

我决定让问题的整数方面作为以后的步骤。

这是我的代码:

using JuMP

using GLPK

model = Model(with_optimizer(GLPK.Optimizer))

@variable(model, 0 <= x <= 6)

@variable(model,  y>=0 )

@objective(model, Max, (x) + (2*y))

@constraint(model, con, x + y <= 8)
@constraint(model, con, -x + y <= 2)
@constraint(model, con, x - y <= 4)


optimize!(model)

termination_status(model)

primal_status(model)

dual_status(model)

println(objective_value(model))

println(value(x))

println(value(y))

出于某种原因,我收到以下错误消息:

ERROR: LoadError: An object of name con is already attached to this model. If this is intended, consider using the anonymous construction syntax, e.g., x = @variable(model, [1:N], ...) where the name of the object does not appear inside the macro.

我尝试更改一些内容并阅读文档。尽管如此,宏对我来说似乎是一个奇怪的概念。

经过一番尝试,我决定寻求帮助。

提前致谢。

我觉得这个信息已经很清楚了。所以尝试这样的事情:

@constraint(model, con1, x + y <= 8)
@constraint(model, con2, -x + y <= 2)
@constraint(model, con3, x - y <= 4)

当然在真实模型中你应该使用有意义的名字。

匿名意味着没有名字。例如:

@constraint(model, x + y <= 8)
@constraint(model, -x + y <= 2)
@constraint(model, x - y <= 4)