如何使用 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)
我正在使用 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)