Таким образом, вы можете получить базовую матрицу от 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 (х [я]) ''. – mlubin
IainDunning добавление '[:]' не помогло! Я все еще не мог использовать 'isinteger' с' xstar'. Кроме того, не могли бы вы сослаться на документ, описывающий разницу между JuMPArrays и Julia. И о функции 'isinteger', нехорошо иметь порог точности, чтобы он мог распознать' 0.9999' как '1'? Что-то вроде 'isinteger (значение, точность)'. – Ana
@mlubin 'iround' вещь будет работать, только если это фактически' Bin', в примере это просто непрерывная переменная. – IainDunning