Как повысить эффективность расчета igraph single_paths - PullRequest
0 голосов
/ 16 мая 2018

Я использую функцию 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).

Есть ли способ повысить эффективность задачи (т.е. получить результаты быстрее)?Кто-нибудь сталкивался с подобной проблемой и нашел решение?И, я знаю, я мог бы использовать процессор с более высокой вычислительной мощностью, но суть в том, чтобы иметь функцию эффективной работы (насколько это возможно) на обычном персональном компьютере.

Редактировать: здесь я делаювычисления из объекта графа, но если у кого-то есть идея сделать то же самое из матрицы смежности, я бы тоже это приветствовал!

...