2023年12月27日发(作者:)
node_k_in = len(neighbors & self._nodes) node_k_out = len(neighbors) - node_k_in old_k_in = new_k_in - 2*node_k_in old_k_out = new_k_out - node_k_out + node_k_in old_fitness = old_k_in/(old_k_in+old_k_out)** new_fitness = new_k_in/(new_k_in+new_k_out)** return new_fitness-old_fitness
def recalculate(self): for vid in self._nodes: fitness = _remove_fitness(vid) if fitness < 0.0: return vid return None
def get_neighbors(self): neighbors = set() for node in self._nodes: (set(ors(node)) - self._nodes) return neighbors
def get_fitness(self): return float(self._k_in)/((self._k_in+self._k_out) ** self._alpha)class LFM():
def __init__(self, G, alpha): self.G = G = alpha
def execute(self): communities = [] node_not_include = list(())[:] while(len(node_not_include) != 0): c = Community(self.G, ) # randomly select a seed node seed = (node_not_include) _node(seed)
to_be_examined = _neighbors() while(to_be_examined): #largest fitness to be added m = {} for node in to_be_examined: fitness = _add_fitness(node) m[node] = fitness to_be_add = sorted((),key=lambda x:x[1],reverse = True)[0] #适应度降序排列 #stop condition if(to_be_add[1] < 0.0): break _node(to_be_add[0])
to_be_remove = ulate() while(to_be_remove != None): _node(to_be_remove) to_be_remove = ulate()
to_be_examined = _neighbors()
for node in c._nodes: if(node in node_not_include): node_not_(node) (c._nodes) return communities
import randomimport networkx as nximport as pltimport zipfile#import t as urllibclass Community(): ''' use set operation to optimize calculation '''
def __init__(self,G,alpha=1.0): self.G = G = alpha self._nodes = set() self._k_in = 0 self._k_out = 0
def add_node(self,node): neighbors = set(ors(node)) node_k_in = len(neighbors & self._nodes) node_k_out = len(neighbors) - node_k_in self._(node) self._k_in += 2*node_k_in self._k_out = self._k_out+node_k_out-node_k_in
def remove_node(self,node): neighbors = set(ors(node)) community_nodes = self._nodes node_k_in = len(neighbors & community_nodes) node_k_out = len(neighbors) - node_k_in self._(node) self._k_in -= 2*node_k_in self._k_out = self._k_out - node_k_out+node_k_in
def cal_add_fitness(self,node): neighbors = set(ors(node)) old_k_in = self._k_in old_k_out = self._k_out vertex_k_in = len(neighbors & self._nodes) vertex_k_out = len(neighbors) - vertex_k_in
new_k_in = old_k_in + 2*vertex_k_in new_k_out = old_k_out + vertex_k_out-vertex_k_in new_fitness = new_k_in/(new_k_in+new_k_out)** old_fitness = old_k_in/(old_k_in+old_k_out)** return new_fitness-old_fitness
def cal_remove_fitness(self,node): neighbors = set(ors(node)) new_k_in = self._k_in new_k_out = self._k_out node_k_in = len(neighbors & self._nodes) node_k_out = len(neighbors) - node_k_in old_k_in = new_k_in - 2*node_k_in old_k_out = new_k_out - node_k_out + node_k_in old_fitness = old_k_in/(old_k_in+old_k_out)** new_fitness = new_k_in/(new_k_in+new_k_out)** return new_fitness-old_fitness
def recalculate(self): for vid in self._nodes: fitness = _remove_fitness(vid) if fitness < 0.0: return vid return None
def get_neighbors(self):
发布者:admin,转转请注明出处:http://www.yc00.com/news/1703632617a1307063.html
评论列表(0条)