所以一般来说,你可以通过使用[:]
,例如[:]
,从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,因此用户需要明确地说,他们希望做的事情之前正常朱莉娅阵列。
无论如何,你不应该使用isinteger
。求解器并不总是返回非常精确的答案,例如他们可能会说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
实际上,我们建议使用''iround(X [1])''。 – mlubin
IainDunning添加'[:]'没有帮助!我仍然无法使用'isinteger'和'xstar'。另外,请你向我介绍一份描述JuMPArrays和Julia的区别的文件。 关于'isinteger'函数,是不是有一个精确的阈值,以便它可以识别'0.9999'为'1'?像'isinteger(value,precision)'。 – Ana
@mlubin'iround'只会在其实际的'Bin',在这个例子中它只是一个连续变量。 – IainDunning