如何在使用JuMP时转换变量的类型

时间:2015-01-04 04:53:16

标签: type-conversion julia julia-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))

请你帮我转换一下吗?

2 个答案:

答案 0 :(得分:2)

问题是第二个@variable(m, 0 <= x <= 1, Bin)实际上在模型中创建了一个新变量,但在Julia中具有相同的名称。

要将变量从连续变为二进制,您可以执行

setcategory(x, :Bin)

在再次调用solve之前更改变量bounds和class。

答案 1 :(得分:0)

在较新版本的 JuMP 中,您需要使用与 setcategory 不同的函数。您正在寻找的方法是:

  • set_binary 为变量添加二元约束。
  • unset_binary 从变量中移除二元约束。
  • set_integer 向变量添加整数约束。
  • unset_integer 从变量中移除整数约束。

关于此的文档可以在 here 中找到。