模糊层次分析法(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 al、am和au分别为下届、中值和上届,其隶属函数表示如下:
μ 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~=⎩ ⎨ ⎧am−alx−al,al≤x≤amam−aua−au,am≤x≤au0,其他
\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)
| 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 C1→C2取三角模糊数 ( 2 , 3 , 4 ) (2,3,4) (2,3,4), C 1 ← C 2 C1\leftarrow C2 C1←C2取三角模糊数 ( 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~21k⋮d~n1kd~12kd~22k⋮d~n2k……⋱…d~1nkd~2nk⋮d~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~=K∑k=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=1∏nd~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 然后,通过将每个备选权重与相关标准相乘,计算每个备选的分数。根据这些结果,向决策者建议得分最高的备选方案。
参考
- 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.
- 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.
- Ruoning, X. and Xiaoyan, Z. (1992). Extensions of the Analytic Hierarchy Process in Fuzzy Environment. Fuzzy Sets and System,52(3),251-257.
- 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.
- 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.
- 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.
- 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的几个问题:…...
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和&*…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
