使用 JuMP 时如何转换变量类型
How to convert type of a variable when using JuMP
我正在使用 Julia/JuMP 来实现一个算法。在一部分中,我定义了一个具有连续变量的模型并求解线性模型。我做了一些其他计算,基于这些计算我向模型添加了几个约束,然后我想解决同样的问题,但使用整数变量。我无法使用 convert()
函数,因为它不接受变量。
我尝试再次将变量定义为整数,但模型似乎没有考虑它!我在这里提供示例代码:
m = Model()
@defVar(m, 0 <= x <= 5)
@setObjective(m, Max, x)
@addConstraint(m, con, x <= 3.1)
solve(m)
println(getValue(x))
@defVar(m, 0 <= x <= 1, Bin)
solve(m)
println(getValue(x))
你能帮我做这个转换吗?
问题在于第二个 @variable(m, 0 <= x <= 1, Bin)
实际上在模型中创建了一个新变量,但在 Julia 中具有相同的名称。
要将变量从连续变量更改为二进制变量,您可以这样做
setcategory(x, :Bin)
在再次调用 solve 之前更改变量边界和 class。
在较新版本的 JuMP 中,您需要使用与 setcategory
不同的函数。您正在寻找的方法是:
set_binary
为变量添加二元约束。
unset_binary
移除变量的二元约束。
set_integer
给变量添加整数约束。
unset_integer
从变量中删除整数约束。
可以找到关于此的文档 here。
我正在使用 Julia/JuMP 来实现一个算法。在一部分中,我定义了一个具有连续变量的模型并求解线性模型。我做了一些其他计算,基于这些计算我向模型添加了几个约束,然后我想解决同样的问题,但使用整数变量。我无法使用 convert()
函数,因为它不接受变量。
我尝试再次将变量定义为整数,但模型似乎没有考虑它!我在这里提供示例代码:
m = Model()
@defVar(m, 0 <= x <= 5)
@setObjective(m, Max, x)
@addConstraint(m, con, x <= 3.1)
solve(m)
println(getValue(x))
@defVar(m, 0 <= x <= 1, Bin)
solve(m)
println(getValue(x))
你能帮我做这个转换吗?
问题在于第二个 @variable(m, 0 <= x <= 1, Bin)
实际上在模型中创建了一个新变量,但在 Julia 中具有相同的名称。
要将变量从连续变量更改为二进制变量,您可以这样做
setcategory(x, :Bin)
在再次调用 solve 之前更改变量边界和 class。
在较新版本的 JuMP 中,您需要使用与 setcategory
不同的函数。您正在寻找的方法是:
set_binary
为变量添加二元约束。unset_binary
移除变量的二元约束。set_integer
给变量添加整数约束。unset_integer
从变量中删除整数约束。
可以找到关于此的文档 here。