2

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

你能帮我做这个转换吗?

4

2 回答 2

2

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

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

setcategory(x, :Bin)

在再次调用求解之前更改变量边界和类。

于 2015-01-04T08:20:30.623 回答
0

在较新版本的 JuMP 中,您需要使用与setcategory. 您正在寻找的方法是:

  • set_binary将二进制约束添加到变量。
  • unset_binary从变量中删除二元约束。
  • set_integer将整数约束添加到变量。
  • unset_integer从变量中删除整数约束。

可以在此处找到有关此的文档。

于 2021-02-11T10:43:31.893 回答