当前位置 博文首页 > XXXX的博客:社交网络影响力最大化 | RIS

    XXXX的博客:社交网络影响力最大化 | RIS

    作者:[db:作者] 时间:2021-09-07 16:37

    RIS

    # -*- coding:utf8 -*-
    import numpy as np
    import time
    from igraph import *
    import random
    import copy
    
    import matplotlib.pyplot as plt
    from random import uniform, seed
    import pandas as pd
    import time
    from collections import Counter
    
    def generate_p(num):
        p = np.random.rand(num)
        return p
    
    def get_RRS(G, p):
    
        source = random.choice(np.unique(G['source']))  # 随机选择一个节点
    
        g = G.copy().loc[np.random.uniform(0, 1, G.shape[0]) < p]  # 获取子图
    
        new_nodes, RRS0 = [source], [source]
    
        while new_nodes:
            temp = g.loc[g['target'].isin(new_nodes)]
            print('+'*10, 'temp\n', temp)
    
            temp = temp['source'].tolist()
            print('+'*10, 'temp2\n', temp)
    
            RRS = list(set(RRS0 + temp))
    
            new_nodes = list(set(RRS) - set(RRS0))
            print('+'*10, 'new_nodes', new_nodes)
    
            RRS0 = RRS[:]
    
        return (RRS)
    
    
    def RIS(G, k, p=0.5, mc=1000):
        start_time = time.time()
        R = [get_RRS(G, p) for _ in range(mc)]
    
        print('R\n', R)
    
        SEED = []
        timelapse = []
        for _ in range(k):
            flat_map = [item for subset in R for item in subset]
    
            seed = Counter(flat_map).most_common()[0][0]
            print('#'*10, Counter(flat_map).most_common())
            print(seed)
            SEED.append(seed)
            print('RRRR', R)
    
            for i, sub in enumerate(R):
                if seed in sub:
                    sub.remove(seed)
    
            print('RRRR', R)
    
            timelapse.append(time.time() - start_time)
    
        return (sorted(SEED), timelapse)
    
    
    data = pd.read_csv('../data/facebook1.csv')
    
    print('G', data)
    
    p = generate_p(data.shape[0])
    
    RRS = get_RRS(data, p)
    
    (seed_set, time) = RIS(data, 5, p, mc=5)
    
    print('seed sets',seed_set, '\ntime', time)

    ?

    cs