当前位置: 首页 > news >正文

模糊层次分析法(FAHP)Python实现

文章目录

  • 理论基础
    • 三角模糊数概念
    • 参考
  • Python源码
  • 测试

理论基础

\quad 模糊层次分析法( F A H P FAHP FAHP)将模糊理论( F u z z y S e t Fuzzy Set FuzzySet)嵌入到基本层次分析法( A H P AHP AHP)中。 A H P AHP AHP是一种广泛应用于各种多准则决策问题的决策工具,它将不同的备选方案与不同的标准进行成对比较,并为多标准决策问题提供了决策支持工具。在一般的AHP模型中,目标在第一层,标准和子标准分别在第二层和第三层,第四个层次为备选方案。由于基本AHP不包括个人判断的模糊性,它通过受益于模糊逻辑方法得到了改进。在FAHP中,通过语言变量对标准和备选方案进行成对比较,语言变量由三角模糊数等表示。

三角模糊数概念

\quad 定义:三角模糊数 A ~ = ( a l , a m , a u ) \tilde{A}=(a_l,a_m,a_u) A~=(al,am,au) a l 、 a m 和 a u a_l、a_m和a_u alamau分别为下届、中值和上届,其隶属函数表示如下:
μ A ~ = { x − a l a m − a l , a l ≤ x ≤ a m a − a u a m − a u , a m ≤ x ≤ a u 0 , 其他 \mu_{\tilde{A}}=\begin{cases} \frac{x-a_l}{a_m-a_l},a_l\le x\le a_m\\ \frac{a-a_u}{a_m-a_u},a_m\le x\le a_u\\ 0,其他\\ \end{cases} μA~= amalxal,alxamamauaau,amxau0,其他

\quad 运算方法: M 1 = ( l 1 , m 1 , u 1 ) M_1=\left(l_1,m_1,u_1\right) M1=(l1,m1,u1) M 2 = ( l 2 , m 2 , u 2 ) M_2=\left(l_2,m_2,u_2\right) M2=(l2,m2,u2)
{ M 1 ⨁ M 2 = ( l 1 + l 1 , m 1 + m 2 , u 1 + u 2 ) M 1 ⨂ M 2 ≈ ( l 1 l 2 , m 1 m 2 , u 1 u 2 ) 1 M 1 ≈ ( 1 u , 1 m , 1 l ) \begin{cases} M_1 \bigoplus \ M_2 = \left(l_1 + l_1, m_1 + m_2, u_1 + u_2\right) \\ M_1 \bigotimes \ M_2 \approx \left(l_1 l_2, m_1 m_2, u_1 u_2\right) \\ \frac{1}{M_1} \approx \left(\frac{1}{u},\frac{1}{m}, \frac{1}{l}\right) \\ \end{cases} M1 M2=(l1+l1,m1+m2,u1+u2)M1 M2(l1l2,m1m2,u1u2)M11(u1,m1,l1)

表1.语言术语及其对应的三角模糊数
Saaty等级定义三角模糊数
1同等重要(EI)(1,1,1)
3稍微重要(WI)(2,3,4)
5相当重要(FI)(4,5,6)
7非常重要(SI)(6,7,8)
9绝对重要(AI)(9,9,9)
2
4
6
8
两个相邻刻度之间的间歇值 (1,2,3)
(3,4,5)
(5,6,7)
(7,8,9)

\quad 如果C1比C2弱重要,则 C 1 → C 2 C1\rightarrow C2 C1C2取三角模糊数 ( 2 , 3 , 4 ) (2,3,4) (2,3,4), C 1 ← C 2 C1\leftarrow C2 C1C2取三角模糊数 ( 1 4 , 1 3 , 1 2 ) (\frac{1}{4},\frac{1}{3},\frac{1}{2}) (41,31,21)

S1. 建立三角模糊成对比较矩阵

\quad 第k个专家评价结果为:
A ~ k = [ d ~ 11 k d ~ 12 k … d ~ 1 n k d ~ 21 k d ~ 22 k … d ~ 2 n k ⋮ ⋮ ⋱ ⋮ d ~ n 1 k d ~ n 2 k … d ~ n n k ] (1) \tilde{A}^{k}= \begin{bmatrix} \tilde{d}_{11}^{k} & \tilde{d}_{12}^{k} & \ldots & \tilde{d}_{1n}^{k} \\ \tilde{d}_{21}^{k} & \tilde{d}_{22}^{k} & \ldots & \tilde{d}_{2n}^{k} \\ \vdots & \vdots & \ddots & \vdots \\ \tilde{d}_{n1}^{k} & \tilde{d}_{n2}^{k} & \ldots & \tilde{d}_{nn}^{k} \\ \end{bmatrix} \tag{1} A~k= d~11kd~21kd~n1kd~12kd~22kd~n2kd~1nkd~2nkd~nnk (1)

S2. 当存在多个决策者时,计算每个决策者的偏好( d i j k ~ \tilde{d_{ij}^{k}} dijk~)的平均值, d i j k ~ \tilde{d_{ij}^{k}} dijk~的计算表达式如下:
d i j k ~ = ∑ k = 1 K d ~ i j k K (2) \tilde{d_{ij}^{k}}=\frac{\sum_{k=1}^{K}\tilde{d}_{ij}^{k}}{K}\tag{2} dijk~=Kk=1Kd~ijk(2)

S3. 根据平均偏好,更新成对比较矩阵
A ~ = [ d 11 ~ d 12 ~ … d 1 n ~ d 21 ~ d 22 ~ … d 2 n ~ ⋮ ⋮ ⋱ ⋮ d n 1 ~ d n 2 ~ … d n n ~ ] (3) \tilde{A}= \begin{bmatrix} \tilde{d_{11}} & \tilde{d_{12}} & \ldots & \tilde{d_{1n}} \\ \tilde{d_{21}} & \tilde{d_{22}} & \ldots & \tilde{d_{2n}} \\ \vdots & \vdots & \ddots & \vdots \\ \tilde{d_{n1}} & \tilde{d_{n2}} & \ldots & \tilde{d_{nn}} \\ \end{bmatrix} \tag{3} A~= d11~d21~dn1~d12~d22~dn2~d1n~d2n~dnn~ (3)

S4. 根据Buckley,计算每个标准的模糊比较值的几何平均值 r i ~ \tilde{r_{i}} ri~(三角数)
r i ~ = ( ∏ j = 1 n d ~ i j ) 1 n , i = 1 , 2 , … , n (4) \tilde{r_{i}}={\left(\prod_{j=1}^{n}\tilde{d}_{ij}\right)}^{\frac{1}{n}},i=1,2,\ldots,n \tag{4} ri~=(j=1nd~ij)n1,i=1,2,,n(4)

S5. 计算每个标准的模糊权重:求每个 r i ~ \tilde{r_{i}} ri~的矢量和;求和向量的 − 1 -1 1次方,替换模糊三角数,使其按递增顺序排列;计算 r i ~ \tilde{r_{i}} ri~和它的逆向量的乘积
w ~ i = r i ~ ⨂ ( r 1 ~ ⨁ r 2 ~ ⨁ … ⨁ r n ~ ) − 1 = ( l w i , m w i , u w i ) (5) \tilde{w}_{i} = \tilde{r_{i}}\bigotimes {\left(\tilde{r_{1}} \bigoplus \tilde{r_{2}} \bigoplus \ldots \bigoplus \tilde{r_{n}}\right)}^{-1}=\left(lw_i,mw_i,uw_i\right) \tag{5} w~i=ri~(r1~r2~rn~)1=(lwi,mwi,uwi)(5)

S6.反模糊化计算
w i = l w i + m w i + u w i 3 (6) w_i = \frac{lw_i + mw_i + uw_i}{3} \tag{6} wi=3lwi+mwi+uwi(6)

S7. 归一化处理
n w i = w i ∑ n = 1 n w i (7) nw_i = \frac{w_i}{\sum_{n=1}^n w_i} \tag{7} nwi=n=1nwiwi(7)

\quad 然后,通过将每个备选权重与相关标准相乘,计算每个备选的分数。根据这些结果,向决策者建议得分最高的备选方案。

参考

  1. Cheng, C.H. (1997). Evaluating Naval Tactical Missile System by Fuzzy AHP Based on the Grade Value of Membership Function. European Journal of Operational Research,96(2),343-350.
  2. Cheng, C.H., Yang, L.L., and Hwang, C.L. (1999). Evaluating Attack Helicopter by AHP Based on Linguistic Variable Weight. European Journal of Operational Research,116(2),423-435.
  3. Ruoning, X. and Xiaoyan, Z. (1992). Extensions of the Analytic Hierarchy Process in Fuzzy Environment. Fuzzy Sets and System,52(3),251-257.
  4. Petkovic, J., Sevarac, Z., Jaksic, M.L., Marinkovic, S. (2012). Application of fuzzy AHP method for choosing a technology within service company. Technics Technologies Education Management,7(1),332-341.
  5. Kilic, H.S. (2011). A fuzzy AHP based performance assessment system for the strategic plan of Turkish Municipalities. International Journal of Business and Management Studies, 3(2),77-86.
  6. Kilincci, O., & Onal, S. A. (2011). Fuzzy AHP approach for supplier selection in a washing machine company. Expert Systems with Applications, 38(8),9656-9664.
  7. Ayhan, M.B.(2013). A Fuzzy AHP Approach for Supplier Selection Problem: A Case Study in A Gearmotor Company. International Journal of Managing Value and Supply Chains (IJMVSC),4(3).

Python源码

import numpy as np# Function: Fuzzy AHP
def fuzzy_ahp_method(dataset):'''dataset: 专家判断矩阵,n*n*3,n表示指标数'''row_sum = []s_row   = []f_w     = []  #模糊权重d_w     = []  #去模糊权重# 一致性检测指标inc_rat  = np.array([0, 0, 0, 0.58, 0.9, 1.12, 1.24, 1.32, 1.41, 1.45, 1.49, 1.51, 1.48, 1.56, 1.57, 1.59])# 模糊判断矩阵转为清晰判断矩阵X       = [(item[0] + 4*item[1] + item[2])/6 for i in range(0, len(dataset)) for item in dataset[i]]  #三角数转为模糊数X       = np.asarray(X)  #列表转数组X       = np.reshape(X, (len(dataset), len(dataset)))  #转为n*n矩阵# S4. 计算每个准则的模糊比较值的几何平均值r_i(公式4)for i in range(0, len(dataset)):a, b, c = 1, 1, 1for j in range(0, len(dataset[i])):d, e, f = dataset[i][j]# 计算公式(4)的括号内部分: r_s = \prod_{j=1}^n d_ija, b, c = a*d, b*e, c*frow_sum.append( (a, b, c) )L, M, U = 0, 0, 0for i in range(0, len(row_sum)):a, b, c = row_sum[i]# 计算公式(4)的括号外部分: s_r = (r_s)^(1/n)a, b, c = a**(1/len(dataset)), b**(1/len(dataset)), c**(1/len(dataset))s_row.append( ( a, b, c ) )# 计算公式(5)中⨁运算部分:R5 = r1⨁r2⨁...⨁rnL = L + aM = M + bU = U + cfor i in range(0, len(s_row)):a, b, c = s_row[i]# 计算公式公式(5)中⨂运算部分:wi = ri⨂R5a, b, c = a*(U**-1), b*(M**-1), c*(L**-1)# 模糊权重f_w.append( ( a, b, c ) )# 计算公式(6):去模糊权重d_w.append( (a + b + c)/3 )# 计算公式(7): 归一化权重n_w      = [item/sum(d_w) for item in d_w]# 计算特征根向量vector   = np.sum(X*n_w, axis = 1)/n_w# 获得平均特征根lamb_max = np.mean(vector)# 计算一致性指标cons_ind = (lamb_max - X.shape[1])/(X.shape[1] - 1)# 一致性判断rc       = cons_ind/inc_rat[X.shape[1]]return f_w, d_w, n_w, rc

测试

dataset = list([[ (  1,   1,   1), (  4,   5,   6), (  3,   4,   5), (  6,   7,   8) ],   #g1[ (1/6, 1/5, 1/4), (  1,   1,   1), (1/3, 1/2, 1/1), (  2,   3,   4) ],   #g2[ (1/5, 1/4, 1/3), (  1,   2,   3), (  1,   1,   1), (  2,   3,   4) ],   #g3[ (1/8, 1/7, 1/6), (1/4, 1/3, 1/2), (1/4, 1/3, 1/2), (  1,   1,   1) ]    #g4])
fuzzy_weights, defuzzified_weights, normalized_weights, rc = fuzzy_ahp_method(dataset)
print('模糊权重')
for i in range(0, len(fuzzy_weights)):print('g'+str(i+1)+': ', np.around(fuzzy_weights[i], 3))
print('清晰权重')
for i in range(0, len(defuzzified_weights)):print('g'+str(i+1)+': ', round(defuzzified_weights[i], 3))
print('归一化权重')
for i in range(0, len(normalized_weights)):print('g'+str(i+1)+': ', round(normalized_weights[i], 3))print('一致性判断')
print('RC: ' + str(round(rc, 2)))
if (rc > 0.10):print('The solution is inconsistent, the pairwise comparisons must be reviewed')
else:print('The solution is consistent')

输出结果为:

模糊权重
g1:  [0.428 0.61  0.859]
g2:  [0.085 0.131 0.218]
g3:  [0.117 0.196 0.309]
g4:  [0.044 0.063 0.099]
清晰权重
g1:  0.632
g2:  0.145
g3:  0.207
g4:  0.068
归一化权重
g1:  0.601
g2:  0.138
g3:  0.197
g4:  0.065
一致性判断
RC: 0.06
The solution is consistent

相关文章:

模糊层次分析法(FAHP)Python实现

文章目录 理论基础三角模糊数概念参考 Python源码测试 理论基础 \quad 模糊层次分析法( F A H P FAHP FAHP)将模糊理论( F u z z y S e t Fuzzy Set FuzzySet)嵌入到基本层次分析法( A H P AHP AHP)中。 A …...

gdb切换窗口焦点

为了辅助调试,一般会使用layout src,调起TUI显示代码: 然而这种情况下我们写命令很不方便,无法方便地使用上一条命令、退格等。 按动上下左右方向键盘只会移动代码框,然而在伪终端下,可以用鼠标滚轮来上下…...

【Spring Security】 入门实战

文章目录 一、基本概念二、Spring Security第一个程序三、Spring Security没有生效四、修改默认账号密码(appliction.yml)五、修改默认账号密码(配置类)六、Spring Security的三个configure方法七、Spring Security的三种身份的验…...

SpringBoot的Interceptor拦截器的简介和实际使用

拦截器(Interceptor) 概念:是一种动态拦截方法调用的机制,类似于过滤器。Spring框架中提供的,用来动态拦截控制器方法的执行。 作用:拦截请求,在指定的方法调用前后,根据业务需要执行…...

5个面向Python高级开发者的技巧

使用这些用于自定义类行为、编写并发代码、管理资源、存储和操作数据以及优化代码性能的高级技术来探索 Python 的深度。 本文探讨了 Python 中的五个高级主题,它们可以为解决问题和提高代码的可靠性和性能提供有价值的见解和技术。从允许您在定义类时自定义类行为的…...

Nginx简介

Nginx是什么?可以做什么事情? Nginx是高性能的HTTP和反向代理的web服务器,处理高并发的能力十分强大,能经受高负载的考研,有报告表明能能支持高达50000个并发连接数。 特点 占有内存少:一万个长连接&…...

十五分钟带你学会 Electron

文章目录 什么是 Electron为什么要选择 Electron安装 Electron桌面CSDN实战Electron 基础配置Electron 进程主进程渲染进程主进程与渲染进程的区别主进程与渲染进程的通信 Electron 跨平台问题Electron 部署打包应用程序发布应用程序 Electron 跨端原理总结 什么是 Electron E…...

设计模式-结构型模式之桥接模式

2. 桥接模式 2.1. 模式动机 设想如果要绘制矩形、圆形、椭圆、正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等,此时至少有如下两种设计方案: 第一种设计方案是为每一种形状…...

软件测试工程师为什么要写测试用例?

软件测试工程师为什么要写测试用例?相信从事软件测试行业的从业者来讲,测试用例并不陌生。因为测试用例不仅仅是一组简单的文档,它包含前提条件、输入、执行条件和预期结果等等重要内容,并且能够完成一定的测试目的和需求。下面本…...

【DAY40】VUE练习

DOS命令: DOS(Disk Operating System)是一种操作系统,它使用命令行界面(Command Prompt)进行交互。在 DOS 中,有一些常用的命令,可以用来定位目录、创建、删除、拷贝文件和目录&…...

实模式的寄存器

实模式的寄存器有8个通用寄存器,分别为AX、BX、CX、DX、SI、DI、BP和SP。通用的意思就是它们之中的大部分可以根据需要用于多种目的。 AX: accumulator,累加寄存器 BX: base,基址寄存器 CX: count,计数寄存器 SI: Source Index&am…...

【UE 控件蓝图】通过键盘选中要点击的按钮 通过Enter键点击

上一篇【UE 控件蓝图】菜单及功能实现博客已经完成了菜单的制作,但是我们只能通过鼠标来点击菜单选项,本篇博客实现的是能够通过键盘的上下键来选中按钮,然后按下“Enter”键来实现点击按钮的效果。 效果 可以看到并没有移动鼠标也可以通过…...

SSR在天猫优品大促会场的探索实践

BBC 发现其网站加载时间每增加一秒,用户便会流失 10%。为提高页面的秒开率,我们不断探索着优化策略,仅仅在浏览器领域下的优化已经满足不了我们的极致要求,开始往服务端方向不断探索。本文将讨论业务接入SSR的几个问题&#xff1a…...

WPF教程(一)---创建一个WPF程序基础知识

1.前言: 这篇主要讲WPF的开发基础,介绍了如何使用Visual Studio 2019创建一个WPF应用程序。 首先说一下学习WPF的基础知识: 1) 要会一门.NET所支持的编程语言--例如C#。 2) 会一点“标准通用标记语言”:WPF窗体程序使用的XAML语…...

【C++ 四】函数、指针

函数、指针 文章目录 函数、指针前言1 函数1.1 概述1.2 函数定义1.3 函数调用1.4 值传递1.5 函数常见样式1.6 函数声明1.7 函数分文件编写1.8 函数默认参数1.9 函数占位参数1.9 函数重载1.9.1 函数重载概述1.9.2 函数重载注意事项 2 指针2.1 指针基本概念2.2 指针变量定义和使用…...

虚拟人与娱乐传媒融合,推动综艺新模式

经过多年的更新迭代和市场的推动,虚拟人技术正在逐渐迈向成熟:3D虚拟形象的制作变得越来越精致且真实,并且出现了越来越多功能丰富使用便捷的动捕设备。因此,包括综艺影视在内的诸多领域,开始尝试将虚拟人技术融入行业…...

Linux_红帽8学习笔记分享_5

Linux_红帽8学习笔记分享_5 文章目录 Linux_红帽8学习笔记分享_51. UMASK反掩码1.1如何查看反掩码umask1.2 UMASK反掩码的作用1.2.1对于目录来说1.2.2对于文件来说 1.3如何修改UMASK反掩码1.4普通用户反掩码的测试 2.whereis的使用3. SUID权限弥补(主要针对文件,所有者执行位变…...

网络编程及项目思路

计算机和计算机之间通过网络进行数据传输 常见的软件架构: C/S:客户端/服务器 画面可以做的非常精美,用户体验好需要开发客户端,也需要开发服务端用户需要下载和更新的时候太麻烦 B/S:浏览器/服务器 不需要开发客户端,只需要…...

GD(兆易创新)系列FLASH进行FPGA和ZYNQ配置固化相操作

写在前面 本文主要针对使用GD(兆易创新)系列的FLASH做启动配置片时,遇到的相关问题进行简单整理复盘,避免后人踩坑。 本人操作固化芯片型号为:ZYNQ7045、690T(复旦微替代型号V7 690T)。 7系列…...

通过一个小例子来看一下C语言指针 p、*p、p、*p、*p分别代表什么

前言 在C语言中,指针是非常重要的概念。指针是一个变量,其值为另一个变量的地址。使用指针可以直接访问内存中的数据,这使得C语言非常灵活和强大。在学习C语言时相比大家都已经知道了&和*的区别了,但是你知道*&p和&*…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制&#xff0c;展现出显著的技术优势&#xff1a; 深层组织穿透能力&#xff1a;适用于活体组织深度成像 高分辨率观测性能&#xff1a;满足微观结构的精细研究需求 低光毒性特点&#xff1a;减少对样本的损伤…...