哪些函数适用于 JuMPArrays?
What functions work with JuMPArrays?
有没有办法让 isinteger()
等某些函数与 JuMPArrays 一起工作?
我正在使用 Julia/JuMP 来解决优化问题,在得到解决方案后,我想检查解决方案是否为整数。所以这是我写的:
@defVar(m, 0<= x[1:3] <= 1)
...
xstar = getValue(x)
if isinteger(xstar)
...
end
我收到一条错误消息,提示 isinteger() 没有匹配 isinteger(::JuMPArray) 的方法。
谢谢
所以一般来说,您可以使用 [:]
从 JuMPArray
获取底层数组,例如
m = Model()
@variable(m, 0 <= x[1:3] <= 1)
@variable(m, 0 <= y[1:10, 1:10] <= 1)
solve(m)
xstar = getvalue(x)[:]
ystar = getvalue(y)[:,:]
请注意,这样做的原因是 JuMPArrays 不必从索引 1 开始,因此用户需要在执行操作之前明确说明他们想要一个普通的 Julia 数组。
无论如何,您不应该使用 isinteger
。求解器并不总是 return 非常精确的答案,例如他们可能会说 x[1] = 0.999996
,但实际上是 1
。你应该做类似
的事情
for i in 1:3
if getvalue(x[i]) >= 0.999
println("x[$i] is 1!")
elseif getvalue(x[i]) <= 0.001
println("x[$i] is 0!")
end
end
以确保您不会得到任何漏报。如果变量被限制为整数或二进制,请使用 iround
,例如
for i in 1:3
v = iround(getvalue(x[i]))
if v == 1
println("x[$i] is 1!")
elseif v == 0
println("x[$i] is 0!")
end
end
但在这种情况下,您似乎只是在查看解自然是 0 还是 1。
有没有办法让 isinteger()
等某些函数与 JuMPArrays 一起工作?
我正在使用 Julia/JuMP 来解决优化问题,在得到解决方案后,我想检查解决方案是否为整数。所以这是我写的:
@defVar(m, 0<= x[1:3] <= 1)
...
xstar = getValue(x)
if isinteger(xstar)
...
end
我收到一条错误消息,提示 isinteger() 没有匹配 isinteger(::JuMPArray) 的方法。 谢谢
所以一般来说,您可以使用 [:]
从 JuMPArray
获取底层数组,例如
m = Model()
@variable(m, 0 <= x[1:3] <= 1)
@variable(m, 0 <= y[1:10, 1:10] <= 1)
solve(m)
xstar = getvalue(x)[:]
ystar = getvalue(y)[:,:]
请注意,这样做的原因是 JuMPArrays 不必从索引 1 开始,因此用户需要在执行操作之前明确说明他们想要一个普通的 Julia 数组。
无论如何,您不应该使用 isinteger
。求解器并不总是 return 非常精确的答案,例如他们可能会说 x[1] = 0.999996
,但实际上是 1
。你应该做类似
for i in 1:3
if getvalue(x[i]) >= 0.999
println("x[$i] is 1!")
elseif getvalue(x[i]) <= 0.001
println("x[$i] is 0!")
end
end
以确保您不会得到任何漏报。如果变量被限制为整数或二进制,请使用 iround
,例如
for i in 1:3
v = iround(getvalue(x[i]))
if v == 1
println("x[$i] is 1!")
elseif v == 0
println("x[$i] is 0!")
end
end
但在这种情况下,您似乎只是在查看解自然是 0 还是 1。