用python复现一下论文Influence maximization in social networks based on TOPSIS 中的方法。
自己的一些理解,由于有点菜,可能不太正确和严谨。
TOPSIS是用于选择多种解决路径中最优的一种,在论文中用于选择种子节点。影响元素包括直接影响、间接影响、直接重叠、间接重叠。对于四者权重的分配,目前还没构思好。暂且用【0.3, 0.2, 0.3, 0.2】。
代码
TOPSIS的实现
import numpy as np
def topsis(data1, weight=None, n=0):
# 二维数组的矩阵转换成pandas中的数据类型dataframe
# data2 = pd.DataFrame(data1, index=[i for i in range(1, n+1)], columns=['DS', 'IDS', 'DO', 'IDO'])
# 归一化
data = data1 / np.sqrt((data1 ** 2).sum())
# 最优最劣方案
# Z是正理想解和负理想解矩阵
Z = pd.DataFrame([data.min(), data.max()], index=['负理想解', '正理想解'])
# 距离
#weight = entropyWeight(data) if weight is None else np.array(weight)
Result = data1.copy()
Result['正理想解'] = np.sqrt(((data - Z.loc['正理想解']) ** 2 * weight).sum(axis=1))
Result['负理想解'] = np.sqrt(((data - Z.loc['负理想解']) ** 2 * weight).sum(axis=1))
# 综合得分
Result['综合得分'] = Result['负理想解'] / (Resu