社交网络影响力最大化 | RIS

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)

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值