Julia 什么功能适用于跳线阵列?
是否有办法使某些函数(如Julia 什么功能适用于跳线阵列?,julia,julia-jump,Julia,Julia Jump,是否有办法使某些函数(如isinteger()与JumpArray一起工作? 我使用Julia/JuMP来解决一个优化问题,在得到解决方案后,我想检查解决方案是否为整数。下面是我写的: @defVar(m, 0<= x[1:3] <= 1) ... xstar = getValue(x) if isinteger(xstar) ... end @defVar(m,0,因此通常您可以通过使用[:]从JuMPArray获取底层数组,例如 m = Model() @variable(
isinteger()
与JumpArray一起工作?
我使用Julia/JuMP来解决一个优化问题,在得到解决方案后,我想检查解决方案是否为整数。下面是我写的:
@defVar(m, 0<= x[1:3] <= 1)
...
xstar = getValue(x)
if isinteger(xstar)
...
end
@defVar(m,0,因此通常您可以通过使用[:]
从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)[:,:]
为确保不会出现任何误报。如果变量被限制为整数或二进制,请使用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。实际上,我们建议使用iround(x[i])
没有帮助!我仍然无法将isinteger
与xstar
一起使用。另外,请您参考一份文档,描述跳线阵列和Julia阵列之间的区别。关于isinteger
函数,设置一个精确阈值,以便它能够将0.9999
识别为1
,这是不好的?类似于isinteger(值、精度)
@mlubin在iround
中,只有当它实际上是Bin
时,它才会起作用,在这个例子中,它只是一个连续变量。@Anaisinteger
可能应该有一个精确的参数-你可以在Julia GitHub页面上提出一个问题,建议这样做。据我所知,还没有一个文档描述这些差异,我们我已经重写了我的答案,希望能让事情变得更清楚。我试图在JuliaBox(julia 0.5)上运行,但是在上如果iround(x_val[I,j,k])==1
我得到了错误UndervarError:iround未定义
(删除iround(),至少在GLPK上是有效的)
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