综合影响力模型InfG算法

目标

在有用节点集U 中选择k 个初始节点,使其具有最大的传播影响范围。

方法

任一社区内,首先选择影响传播范围F 值最大的节点为起始点,将其加入集合S,并标记其邻居节点。在未标记的节点中继续选择一点,满足两节点所能影响到达的节点集合的和集最大,即节点数目最多,并标记其邻居节点。依此类推,每次选择的节点均为被标记的节点,遍历每个社区,直到选取完满足条件的k’ 个节点为止。

# 参数:节点关系的文件路径,节点传播范围F值的文件路径
# 输出文件路径,领袖个数

def getLeaders(inputFileName_Node, inputFileName_TKFK, outputFileName, leaderNum):

    # 打开文件读入节点关系
    with open(inputFileName_Node, 'r') as file:

        # 保存节点关系
        node = {}
        for line in file.readlines():

            # 读出文件内容,以制表符分割
            line_s = line.strip().split('\t')

            # 如果发帖者已存在,直接将跟随者添加
            if line_s[0] in node:
                node[line_s[0]].append(line_s[1])

            # 不存在则先添加发帖者,并将跟随者添加在发帖者里
            else:
                node.setdefault(line_s[0], []).append(line_s[1])

            # 如果跟随者已经在节点里忽略,否则添加
            if line_s[1] in node:
                pass
            else:
                node.setdefault(line_s[1], [])

    # 打开文件读入传播范围F
    with open(inputFileName_TKFK,'r') as fileF:

        # 存储节点及对应的F值
        value_F = {}

        # 标记节点是否已使用
        value_Flag = {}

        # 读取文件内容
        for line in  fileF.readlines():
            line_s = line.strip().split('\t')
            value_F[line_s[0]] = float(line_s[2])
            value_Flag[line_s[0]] = False
        # 降序排序f值
        value_F_list = sorted(value_F.items(), key=lambda asb:asb[1], reverse=True)

    i = 1

    # 保存结果
    result_list = []
    while i <= leaderNum:
        for l in value_F_list:
            # 如果该节点没使用则标记该节点并放入结果里
            if not value_Flag[l[0]]:
                value_Flag[l[0]] = True
                result_list.append(l[0])

                # 标记该节点的所有邻居节点
                for u in node[l[0]]:
                    value_Flag[u] = True
                break
        i = i + 1
    # 将结果保存至文件
    with open(outputFileName, 'w')as fileLeader:
        for result in result_list:
            fileLeader.write(result + '\n')

# 使该程序既能单独运行也能作为模块导入
if __name__ == '__main__':
    getLeaders(r'D:\PycharmProjects\Demo\data\all.txt',r'D:\PycharmProjects\Demo\data\TkFk.txt',r'D:\PycharmProjects\Demo\data\leader_result.txt',20)
展开阅读全文

没有更多推荐了,返回首页