python实现TOPSIS方法

第二个决策算法,没有使用循环数组,而是通过pandas广播的功能实现算法。
9.18对代码进行和更新,支持传入一个数列,用来控制成本型收益型属性。
寻找正理想解的函数使用经典的元素对调三行代码实现。
优化后的代码体现了topsis算法的主要步骤,矩阵导入和标准化都封装在了专门的py文件中。

import pandas as pd#topsis方法实现
import numpy as np
import  IFS
import MATRIX_NOR
import myIO


def pis(df,plist):#寻找正理想解
    plist=plist
    pis = df.max()
    nis = df.min()
    print(pis)
    print(nis)

    for i in plist:
        temp=pis[i]
        pis[i]=nis[i]
        nis[i]=temp
    return pis,nis

def ranks(df,pis,nis):#排名方法
    pistemp = ((df.sub(pis, axis=1))**2).sum(axis=1)
    nistemp = ((df.sub(nis, axis=1))**2).sum(axis=1)

    return np.sqrt(nistemp)/(np.sqrt(pistemp)+np.sqrt(nistemp))
if __name__ == '__main__':
    w = pd.Series([0.00854, 0.008978, 0.241101, 0.274443, 0.243986,
                   0.049611, 0.099215, 0.008387, 0.06539
                   ], index=[1, 2, 3, 4, 5, 6, 7, 8, 9])
    url='D:\study\\test\data\\t2.xlsx'
    df =myIO.getdef(url,0)
    df =MATRIX_NOR.max(df)
    df = df.mul(w, axis=1)
    print('规范化矩阵\n',df)
    plist = [1,2,3,4]
    pis,nis = pis(df,plist)
    print('方案收益值为\n ',ranks(df, pis, nis))

数据来源是两篇知网论文,第一篇《基于供应链管理的供应商选择问题初探》
原文结果为
python实现TOPSIS方法_第1张图片
编译结果为
python实现TOPSIS方法_第2张图片

github仓库在https://github.com/rivendelltom/decision-making-study

你可能感兴趣的:(决策,python,决策)