【发布时间】:2017-11-23 14:16:53
【问题描述】:
我正在使用遗传算法进行社区检测。社区以基于位点的表示形式表示,每个索引(基因)及其值都在同一个社区中。
例如在下图中,如果染色体是 (b),则社区将是 (d)
所以要从染色体中提取社区,我需要迭代地找到索引和值,为此,我编写了以下代码:
while (SumComms)~=nVar
j=find(Sol>0,1,'first');%find the first node which has not placed in any community
Com=[j,Sol(j)];%index of the node and it's value
Comsize=0;
while Comsize<numel(Com)
Comsize=numel(Com);
x=find(ismembc(Sol,sort([Com,Sol(Com)])));%Indexes which Com occure in Sol
Com=unique([Com,x,Sol(x)]);
end
Sol(Com)=0;
i=i+1;
SumComms=SumComms+numel(Com);
Communities{i}=Com;
end
但x=find(ismembc(Sol,sort([Com,Sol(Com)]))) 即使在中型网络中也非常耗时。你知道更快的方法吗?
【问题讨论】:
-
是的,你的图片是为我显示的。
-
提供
SumComms、nVar和Sol开头的示例,并提供并解释这些变量的输出结果 -
SumCumms是集群节点数,nVar是总节点数,所以终止条件是while (SumComms)~=nVar,也就是说,直到所有节点都放入一个社区循环将运行。Sol是染色体 -
例如在图片中,
Sol是基因型,nVar是 9(0 到 8)。SumComms在循环中增长直到 9,(nVar) -
@SardarUsama,一个数字数组。(代表基因)