Линейное программирование с большой матрицей - все еще возникают проблемы с памятью
Всем привет и заранее спасибо! У меня было немного интересное путешествие с этой проблемой. Здесь я понял, как создать большую матрицу на основе файла, используя bigmemory
пакет. Эта строка 7062 на матрицу столбца 364520 является матрицей ограничений в задаче линейного программирования, которую я пытаюсь решить, используя Rsymphony
пакет. Код ниже и матрица ограничений называется mat
:
Rsymph <- Rsymphony_solve_LP(obj
,mat[1:nrow(mat),1:ncol(mat)]
,dir
,rhs
,types="B",max=F, write_lp=T)
К сожалению, когда я запускаю это, Rsymphony
пытается перенести матрицу с файловой поддержкой в память, и у меня недостаточно ОЗУ. Единственная причина, почему я даже создал большую матрицу с bigmemory
в первую очередь было использовать как можно меньше оперативной памяти. Можно ли как-нибудь с этим кодом или с помощью другой функции линейного программирования дополнить это объемом доступной памяти? Благодарю.
1 ответ
Это было моей заботой раньше. Запустив mat[...]
вы конвертируете big.matrix
в регулярный matrix
, Функция должна быть переписана так, чтобы она была совместима с big.matrix
объекты. Если вы посмотрите на исходный код R_symphony_solve_LP
Вы найдете следующий звонок:
out <- .C("R_symphony_solve",
as.integer(nc),
as.integer(nr),
as.integer(mat$matbeg),
as.integer(mat$matind),
as.double(mat$values),
as.double(col_lb),
as.double(col_ub),
as.integer(int),
if(max) as.double(-obj) else as.double(obj),
obj2 = double(nc),
as.character(paste(row_sense, collapse = "")),
as.double(rhs),
double(),
objval = double(1L),
solution = double(nc),
status = integer(1L),
verbosity = as.integer(verbosity),
time_limit = as.integer(time_limit),
node_limit = as.integer(node_limit),
gap_limit = as.double(gap_limit),
first_feasible = as.integer(first_feasible),
write_lp = as.integer(write_lp),
write_mps = as.integer(write_mps))
Эта функция C должна быть переписана для совместимости с big.matrix
объекты. Если использование этой функции критически важно для вас, есть несколько примеров того, как big.matrix
объекты на сайте галереи Rcpp с использованием Rcpp и RcppArmadillo. Я сожалею, что сейчас нет простого решения. Вам нужно либо получить больше оперативной памяти, либо начать писать больше кода.