Привет всем, мне нужна помощь для реализации алгоритма для модели коллективного влияния [CI = (Ki - 1) * sum (Kj -1)] в Matlab.Эта модель вычисляет значения коллективного влияния каждого узла в сети.Он задается произведением степеней узла i на 1 и суммы степеней ближайших ближайших соседей узла i на 1, как указано на расстоянии d.'d' может быть из 2-х, 3-х или более прыжков из узла i.
Идея состоит в том, чтобы определить узлы с наибольшим влиянием на сеть, которые способны разрушить или полностью фрагментировать сеть при их удалении.После первой итерации значение CI рассчитывается и сортируется в порядке убывания.Узел с самым высоким значением CI удаляется, и вычисление повторяется, и CI снова сортируется, чтобы определить узел со следующим самым высоким значением CI.Цикл продолжается до тех пор, пока сеть не будет полностью фрагментирована с наименьшим количеством самых крупных компонентов.
До сих пор я пытался реализовать эту модель с использованием встроенных синтаксисов Matlab.Я могу получить доступ к следующим ближайшим соседям узла i, но когда я вычисляю значения его степени, он также включает в себя прямых соседей узла i и узла i.См. Код ниже:
Изображение примера сети
for i=1:gg
Neb = neighbors(G,i); %Calculates the neighbours of node i
degNodi=degree(G,i); %Calculates the degree of node i
d=distances(G); %Calculates distances of all nodes from each pivot
%note
for m=1:length(Neb) %Calculates the length of of node i's neighbours
%at each iteration
NNN=neighbors(G,Neb(m)); %Finds the neighbours of the neighbours of
%node i or next nearest neighbours
if NNN==Neb(m) || NNN==G(i)
NNN=find(NNN~=Neb) & find(NNN~=G(i));
end
Kj=degree(G,NNN); %Calculates the degrees of the next
%nearest neighbours of node i
end
end
Моя задача с помощью приведенного выше кода состоит в том, чтобы получить доступ и вычислить значения степени для узла i 2-прыжок или больше соседей прыжка, исключая прямые соседние узлы i и узла i.
Q: Какую строку кода я могу использовать, чтобы избавиться от прямых соседей узла i и узла i после того, как я вычислю значения степени узлая являюсь соседями по 2 прыжкам?
Я также попробовал другой код, но не смог получить нужный мне результат.
load('simp10net.mat');
networkA=A;
N=size(networkA,1);
mmm=0;
for i=1:N
neb1=length(kmin_neighbors(networkA,i,1));
neb2=kmin_neighbors(networkA,i,2);
m=length(neb2);
for m1=1:m
for q=1:m
NN(find(networkA(neb2(m),m1)))=1;
end
end
mmm=NN-1;
Kjall=sum(mmm);
collInf(i)=((neb1 - 1)* Kjall);
end
В приведенном выше коде я смог получить доступ кСоседи по 2 прыжкам узла i, но я не знаю правильный синтаксис или строку кода, которые я могу использовать, чтобы позволить мне вычислить значения степени.Я не получаю ожидаемого результата после его запуска.
Какая строка кода может помочь мне сделать это?
Q: Как я могу сохранить идентификаторы / теги каждого узла после удаленияузел с самым высоким значением CI на каждой итерации, сеть меньше узла, и нумерация меняется?
Любая помощь или совет о том, как сделать этот код более эффективным, будет очень цениться.
Спасибо