这是李登峰老师《直觉模糊集决策与对策分析方法》第三章的topsis方法,对于给出的算例进行独立重复实验。
相比实数域上的topsis方法,我们可以通过拆分矩阵,拼接矩阵对齐运算等方式实现直觉模糊下的矩阵运算。贴出来供大家学习参考。
关键环节有注释解释,代码如下

import pandas as pd
import numpy as np
from matplotlib.cbook import flatten
def finpis(df):#寻找正负理想解df1=df.iloc[:,::2]df2=df.iloc[:,1::2]df3=df1.max()df4=df1.min()df5=df2.max()df6=df2.min()#准备工作,用很多个切片操作为之后做准备,其实可以优化,看起来确实不美观df7=list(flatten(zip(df3,df6)))       #这里是百度到的如何奇偶项交错插入数列方法df8=list(flatten(zip(df4,df5)))df11 = df7[0::2]df12 = df7[1::2]c1 = [1-df11[i] - df12[i] for i in range(len(df11))]c1= pd.Series(c1)df7= pd.Series(df7)df13 = df8[0::2]df14 = df8[1::2]c2 = [1-df13[i] - df14[i] for i in range(len(df13))]c2= pd.Series(c2)#c1,c2就是寻找到的正负理想解,考虑到矩阵运算的时候需要犹豫度运算,因此还要找到犹豫度连接到数列头部df8= pd.Series(df8)zheng = pd.concat([c1,df7])fu= pd.concat([c2,df8])return zheng,fu#带有犹豫度的正负理想解,但并不是需要的def normalize_matrix(df):#矩阵也需要犹豫度参与运算,因此把犹豫度拼接到头部,只要位置和正负理想解对齐,线性运算就不会出错df2=df.iloc[:,1::2]df1=df.iloc[:,::2]pai=1-df1.values-df2.valuespai =pd.DataFrame(pai)f=[pai,df]f= pd.concat(f,axis=1)return f
def ranks(df,pis,nis):#排名方法,原封不动可以使用实数域的方法代码pistemp = df.sub(pis, axis=1)pistempsum = (pistemp ** 2).sum(axis=1)nistemp = df.sub(nis, axis=1)nistempsum = (nistemp ** 2).sum(axis=1)return np.sqrt(nistempsum)/(np.sqrt(pistempsum)+np.sqrt(nistempsum))
if __name__ == '__main__':#主函数列出需要的矩阵,没有使用excel导入df = [[0.1875, 0.325, 0.21, 0.55, 0.24, 0.72],[0.20, 0.3625, 0.238, 0.52, 0.135, 0.825],[0.1, 0.5875, 0.2625, 0.43, 0.18, 0.755]]df = pd.DataFrame(df)pis,nis=finpis(df)#一个方法返回两个结果,方便使用f= normalize_matrix(df)print('方案收益值为\n ',ranks(f, pis,nis))

10.25进行代码优化。三个函数分别实现寻找正负理想解,计算犹豫度和计算排名的功能。

def finpn(df):df=dfpis = df.max()nis = df.min()for i in range(1,df.shape[1],2):temp = pis[i]pis[i] = nis[i]nis[i] = tempreturn pis, nis
def add_matrix(df):df=dfdf2=df.iloc[:,1::2].T.reset_index(drop=True).Tdf1=df.iloc[:,::2].T.reset_index(drop=True).Tdf3=1-df1-df2df4= pd.concat([df,df3],axis=1).T.reset_index(drop=True).Treturn df4def ranks(df,pis,nis):#排名方法df=dfpis=pisnis=nispis1=1-pis[0::2].reset_index(drop=True)-pis[1::2].reset_index(drop=True)nis1=1-nis[0::2].reset_index(drop=True)-nis[1::2].reset_index(drop=True)pis2=pis.tolist()+pis1.tolist()nis2=nis.tolist()+nis1.tolist()print(pis2,nis2)pistemp = df.sub(pis2, axis=1)pistempsum = (pistemp ** 2).sum(axis=1)nistemp = df.sub(nis2, axis=1)nistempsum = (nistemp ** 2).sum(axis=1)return np.sqrt(nistempsum) / (np.sqrt(pistempsum) + np.sqrt(nistempsum))if __name__ == '__main__':#主函数列出需要的矩阵,没有使用excel导入df = [[0.1875, 0.325, 0.21, 0.55, 0.24, 0.72],[0.20, 0.3625, 0.238, 0.52, 0.135, 0.825],[0.1, 0.5875, 0.2625, 0.43, 0.18, 0.755]]df = pd.DataFrame(df)pis,nis=finpn(df)df=add_matrix(df)print(df)print('方案收益值为\n ',ranks(df, pis,nis))

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

python实现直觉模糊的TOPSIS方法相关推荐

  1. python实现《直觉模糊集决策与对策分析方法》08直觉模糊数的矩阵对策解法

    这是李登峰老师<直觉模糊集决策与对策分析方法>第九章支付值为直觉模糊数的矩阵对策及其解法. 第一种解法是截集解法,判断直觉模糊数a和b的大小,仅需要比较某一具体截集,而不必比较所有截集.相 ...

  2. 前景理论、灰靶决策的直觉模糊多属性决策方法及matlab应用

    1.前景理论 Kahneman和Tversky提出的前景理论修正了传统决策的期望效用理论,并构建了一种新的决策框架模型.它假设险决策过程由编辑和评价两个阶段构成.在第一个阶段中,个体凭借框架(fram ...

  3. 直觉模糊有计算机知识嘛,多源直觉模糊信息系统的知识获取方法

    摘要: 人工智能是当前信息科学理论和应用研究中的一个热点领域.随着计算机科学与技术的快速发展,特别是计算机网络的飞速发展,人类生产生活的各个领域都产生了大量数据信息.这些数据信息的类型日渐复杂,且规模 ...

  4. Part III.S1. 基于离差最大化的直觉模糊多属性决策方法

    1.1 属性权重完全未知情形下的直觉模糊多属性决策方法 1.1.1 问题描述   设某多属性决策问题有 m m m个方案 Y i ( i = 1 , 2 , - m ) Y_{i}\left(i=1, ...

  5. Part III.S3. 对方案有偏好的直觉模糊多属性决策方法

    3.1 问题描述   设某多属性决策问题有 m m m个方案 Y i ( i = 1 , 2 , ⋯ , m ) Y_{i}\left(i=1,2,\cdots,m\right) Yi​(i=1,2, ...

  6. 直觉模糊有计算机知识嘛,基于直觉模糊集理论的IDS方法研究-计算机科学.PDF

    基于直觉模糊集理论的IDS方法研究-计算机科学 第 卷 第 期 计 算 机 科 学 45 11A Vol.45No.11A 年 月 2018 11 COMPUTER SCIENCE Nov.2018 ...

  7. 直觉模糊的TODIM多属性决策方法及matlab应用

    直觉模糊的TODIM多属性决策方法及matlab应用 TODIM 方法是根据决策者对收益和损失的不同偏好反映,构造方案两两比较的优势度矩阵,通过个体优势度集结,形成各个待评价方案的总体优势度,最后根据 ...

  8. 区间直觉模糊多属性决策方法及matlab应用

    对原有的区间直觉模糊得分函数进行改进,定义了带风险偏好的得分函数,然后根据得分函数度区间直觉模糊多属性问题进行决策. 一.原理 在矩阵中,决策值为区间直觉模糊数,例如决策值([0.6,0.7],[0. ...

  9. pillow是python的图像处理标准库_详解Python图像处理库Pillow常用使用方法

    pil(python image library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了. 其官方主页为:pil. pil ...

最新文章

  1. php开发编程中心,Php编程
  2. python精进之路 -- open函数
  3. 万物互联时代 能效管理是怎样一个玩法?
  4. 什么是关键字驱动框架(自动化测试)
  5. nginx可以负载均衡多个tomcat,nginx主机挂了怎么办?Keepalived
  6. Aerospike NoSQL 数据库介绍
  7. python新手如何度过小白期,不再当菜鸟程序员?
  8. CNN中常用的卷积核:锐化卷积核模板
  9. SAP License:孔乙己,一名ERP顾问
  10. 那年我整理的SE面试题
  11. 多益网络 2016 春季实习校招笔试回顾(C++游戏后台)
  12. Httpd-2.2.0虚拟主机目录权限问题
  13. 《中国人工智能学会通讯》——7.10 总结和展望
  14. 卡巴斯基最新Key下载 生成卡巴斯基Key的工具下载 卡巴斯基Key下载
  15. 【教程下载】QGIS的安装及中文配置教程.pdf
  16. android转移数据到苹果手机号码,苹果电话号码怎么转到新手机(简单教你两招轻松搞定)...
  17. ADAS常见缩略词(FCW/LKA/LCA/LDW...)
  18. 工业机器人的TCP点
  19. python 方法加强@ pytho中@ python@
  20. 高德地图 瓦片地图上画圆,线段等

热门文章

  1. datagrip和idea查询数据库 ctrl+enter 查询快捷键设置
  2. JavaScript - 唤醒 app store 跳转到苹果商店内下载指定应用页面 安卓跳转默认浏览器应用页面
  3. 标题标签、段落标签、文本格式化标签
  4. 【知识网络分析】作者合作网络(Co-authorship)
  5. 朴素贝叶斯解决公园凉鞋问题
  6. Foxmail 添加QQ邮箱失败 提示密码错误
  7. 我的爱好作文玩计算机800,我的兴趣爱好
  8. 为什么要用babylonJS
  9. 2000年-2020年全球人口密度格点数据集(不同时间空间分辨率)
  10. python中使用xlrd、xlwt操作excel表格详解