Я использую функцию all_simple_paths
из пакета igraph
R: (1) для генерации списка всех простых путей в сетях (объект List_paths_Mp
);и (2) для вычисления общего числа простых путей (объект n_paths
).
Я использую функцию в виде:
pathsMp <- unlist(lapply(V(graphMp), function(x)all_simple_paths(graphMp, from = x)), recursive =FALSE)
List_paths_Mp <- lapply(1:length(pathsMp), function(x)as_ids(pathsMp[[x]]))
n_paths<-length(List_paths_Mp)
Где: Mp
этоквадратная матрица со значениями 1
или 0
, а graphMp
- это график igraph
, полученный с помощью функции graph_from_adjacency_matrix
.
Функция делает то, что мне нужно, но с увеличением числа переменных и взаимодействий время обработки для идентификации и хранения различных single paths
в сети становится слишком большим, и для получениярезультаты.
В частности, при использовании сети с 11 переменными и 60 взаимодействиями существует всего 146338
возможных простых путей.И это уже занимает много времени, чтобы вычислить.Использование более крупной сети с 13 переменными и 91 взаимодействием приводит к тому, что программе требуется еще больше времени для обработки (через 2 часа функция все еще не работает, а при ее вызове для остановки происходит сбой R).
Есть ли способ повысить эффективность задачи (т.е. получить результаты быстрее)?Кто-нибудь сталкивался с подобной проблемой и нашел решение?И, я знаю, я мог бы использовать процессор с более высокой вычислительной мощностью, но суть в том, чтобы иметь функцию эффективной работы (насколько это возможно) на обычном персональном компьютере.
Редактировать: здесь я делаювычисления из объекта графа, но если у кого-то есть идея сделать то же самое из матрицы смежности, я бы тоже это приветствовал!