python实现直觉模糊的TOPSIS方法
这是李登峰老师《直觉模糊集决策与对策分析方法》第三章的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方法相关推荐
- python实现《直觉模糊集决策与对策分析方法》08直觉模糊数的矩阵对策解法
这是李登峰老师<直觉模糊集决策与对策分析方法>第九章支付值为直觉模糊数的矩阵对策及其解法. 第一种解法是截集解法,判断直觉模糊数a和b的大小,仅需要比较某一具体截集,而不必比较所有截集.相 ...
- 前景理论、灰靶决策的直觉模糊多属性决策方法及matlab应用
1.前景理论 Kahneman和Tversky提出的前景理论修正了传统决策的期望效用理论,并构建了一种新的决策框架模型.它假设险决策过程由编辑和评价两个阶段构成.在第一个阶段中,个体凭借框架(fram ...
- 直觉模糊有计算机知识嘛,多源直觉模糊信息系统的知识获取方法
摘要: 人工智能是当前信息科学理论和应用研究中的一个热点领域.随着计算机科学与技术的快速发展,特别是计算机网络的飞速发展,人类生产生活的各个领域都产生了大量数据信息.这些数据信息的类型日渐复杂,且规模 ...
- Part III.S1. 基于离差最大化的直觉模糊多属性决策方法
1.1 属性权重完全未知情形下的直觉模糊多属性决策方法 1.1.1 问题描述 设某多属性决策问题有 m m m个方案 Y i ( i = 1 , 2 , - m ) Y_{i}\left(i=1, ...
- 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, ...
- 直觉模糊有计算机知识嘛,基于直觉模糊集理论的IDS方法研究-计算机科学.PDF
基于直觉模糊集理论的IDS方法研究-计算机科学 第 卷 第 期 计 算 机 科 学 45 11A Vol.45No.11A 年 月 2018 11 COMPUTER SCIENCE Nov.2018 ...
- 直觉模糊的TODIM多属性决策方法及matlab应用
直觉模糊的TODIM多属性决策方法及matlab应用 TODIM 方法是根据决策者对收益和损失的不同偏好反映,构造方案两两比较的优势度矩阵,通过个体优势度集结,形成各个待评价方案的总体优势度,最后根据 ...
- 区间直觉模糊多属性决策方法及matlab应用
对原有的区间直觉模糊得分函数进行改进,定义了带风险偏好的得分函数,然后根据得分函数度区间直觉模糊多属性问题进行决策. 一.原理 在矩阵中,决策值为区间直觉模糊数,例如决策值([0.6,0.7],[0. ...
- pillow是python的图像处理标准库_详解Python图像处理库Pillow常用使用方法
pil(python image library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了. 其官方主页为:pil. pil ...
最新文章
- php开发编程中心,Php编程
- python精进之路 -- open函数
- 万物互联时代 能效管理是怎样一个玩法?
- 什么是关键字驱动框架(自动化测试)
- nginx可以负载均衡多个tomcat,nginx主机挂了怎么办?Keepalived
- Aerospike NoSQL 数据库介绍
- python新手如何度过小白期,不再当菜鸟程序员?
- CNN中常用的卷积核:锐化卷积核模板
- SAP License:孔乙己,一名ERP顾问
- 那年我整理的SE面试题
- 多益网络 2016 春季实习校招笔试回顾(C++游戏后台)
- Httpd-2.2.0虚拟主机目录权限问题
- 《中国人工智能学会通讯》——7.10 总结和展望
- 卡巴斯基最新Key下载 生成卡巴斯基Key的工具下载 卡巴斯基Key下载
- 【教程下载】QGIS的安装及中文配置教程.pdf
- android转移数据到苹果手机号码,苹果电话号码怎么转到新手机(简单教你两招轻松搞定)...
- ADAS常见缩略词(FCW/LKA/LCA/LDW...)
- 工业机器人的TCP点
- python 方法加强@ pytho中@ python@
- 高德地图 瓦片地图上画圆,线段等