Связанная проблема возникает из сети Grid в Германии. У меня есть сеть подстанций, которые связаны по линиям. Самый короткий путь от точки A до B был рассчитан с использованием функции graphshortestpath. Результатом является путь с использованием идентификаторов подстанции. Меня интересует идентификатор линии, поэтому я написал последовательный код, чтобы выяснить используемые Line_ID для каждого пути.matlab: проверьте, какие линии пути используются - graphshortestpath
Этот алгоритм использует два для циклов. Первый for-loop для доступа к пути из массива ячеек, второй for-loop смотрит на каждое соединение и ищет Line_ID из массива.
Вопрос: Есть ли лучший способ кодирования этого? Я ищу Line_ID, метод graphshortest возвращает только идентификаторы узлов.
Вот основной код:
for i = i_entries
path_i = LKzuLK_path{i_entries};
if length(path_i) > 3 %If length <=3 no lines are used.
id_vb = 2:length(path_i) - 2;
for id = id_vb
node_start = path_i(id);
node_end = path_i(id+1);
idx_line = find_line_idx(newlinks_vertices, node_start, ...
node_end);
Zuordnung_LKzuLK_pathLines(ind2sub(size_path,i),idx_line) = true;
end
end
end
Примечание: первая и последняя enrty из path_i находятся следующие идентификаторы, чтобы они не смотрели на для поиска в line_id в
function idx_line = find_line_idx(newlinks_vertices, v_id_1, v_id_2)
% newlinks_vertices includes the Line_ID, and then the two connecting substations
% Mirror v_id's in newlinks_vertices:
check_links = [newlinks_vertices; newlinks_vertices(:,1), newlinks_vertices(:,3), newlinks_vertices(:,2)];
tmp_dist1 = find(check_links(:,2) == v_id_1);
tmp_dist2 = find(check_links(tmp_dist1,3) == v_id_2,1);
tmp_dist3 = tmp_dist1(tmp_dist2);
idx_line = check_links(tmp_dist3,1);
end
Примечание: Я уже пытался сократить первую поисковую процедуру путем индексации списка ссылок. Этот шаг вернет короткий список, содержащий только релевантные записи ссылок. Таким образом, алгоритм сокращается из первой и наиболее трудоемкой функции поиска. Результат был не намного лучше, время вычисления все еще составляло приблизительно 7 часов для соединений 401 * 401, поэтому слишком долго для реализации.