import pandas as pd import numpy as np import networkx as nx # 读取Excel文件中的邻接矩阵 adjacency_matrix = pd.read_excel('output.xlsx', index_col=0) # 将邻接矩阵转换为numpy数组 adjacency_matrix = adjacency_matrix.to_numpy() # 创建有向图对象 G = nx.DiGraph(adjacency_matrix) def preprocess(G): p = 0 directedGraph = nx.DiGraph() for u in G.nodes(): for v in G.neighbors(u): if (v != u): # propProb = G.number_of_edges(u, v) / G.in_degree(v) propProb = G.number_of_edges(u, v) / G.degree(v) directedGraph.add_edge(u, v, pp=propProb) # p += propProb # print(propProb) # print('平均阈值:', p/2939) return directedGraph def simulate(G, seedNode, propProbability): newActive = True currentActiveNodes = copy.deepcopy(seedNode) newActiveNodes = set() activatedNodes = copy.deepcopy(seedNode) # Biar ga keaktivasi 2 kali influenceSpread = len(seedNode) while (newActive): for node in currentActiveNodes: for neighbor in G.neighbors( node): # Harus dicek udah aktif apa belom, jangan sampe ngaktifin yang udah aktif if (neighbor not in activatedNodes): if (G[node][neighbor]['pp'] > propProbability): # flipCoin(propProbability) newActiveNodes.add(neighbor) activatedNodes.append(neighbor) influenceSpread += len(newActiveNodes) if newActiveNodes: currentActiveNodes = list(newActiveNodes) newActiveNodes = set() else: newActive = False # print("activatedNodes",len(activatedNodes),activatedNodes) return influenceSpread def flipCoin(probability): return random.random() < probability解释一下这个代码
时间: 2024-02-14 15:30:38 浏览: 67
详解pandas库pd.read_excel操作读取excel文件参数整理与实例
这代码是一个传播模型的实现,用于模拟信息在一个有向图中的传播过程。首先,它读取一个Excel文件,其中包含了一个邻接矩阵,表示图中节点之间的连接关系。然后,将邻接矩阵转换为numpy数组,并创建一个有向图对象。
preprocess函数用于预处理图对象,它遍历所有节点,并计算每条边的传播概率(propProbability),然后将这些边添加到有向图中。
simulate函数用于模拟信息的传播过程。它接受一个种子节点(seedNode)和传播概率(propProbability)作为输入。通过迭代算法,不断将新激活的节点加入到currentActiveNodes集合中,并计算影响范围(influenceSpread)。直到没有新激活的节点时,传播过程结束。
最后,flipCoin函数用于模拟抛硬币的过程,以给定的概率返回True或False。在simulate函数中,它用于判断节点是否被激活。
总体上,这段代码实现了一个简单的信息传播模型,并可以根据传播概率和种子节点模拟信息在有向图中的传播过程。
阅读全文