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

问题描述 投票:0回答:1

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

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

enter image description here

我使用了这个完美的代码:

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))

由于上面的实现取得了成功,我尝试将代码调整为一个新问题:

enter image description here

我知道经典线性编程问题和明确定义整数值的问题之间的差异。

为了简单起见,我将问题视为浮点问题,考虑到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.

我试图改变一些事情并阅读文档。尽管如此,对我来说,宏似乎是一个奇怪的概念。

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

提前致谢。

macros julia modeling linear-programming julia-jump
1个回答
1
投票

我认为这个信息很清楚。所以尝试类似的东西:

@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)
© www.soinside.com 2019 - 2024. All rights reserved.