层次分析法(AHP)--代码书写部分
层次分析法(AHP)–代码书写部分
在正常的层次分析法的过程中,如果判断矩阵是一致矩阵,就直接进行权重计算就可以了。但是如果判断矩阵是非一致性矩阵,我们是先进行一致性检验,再进行判断矩阵的权重计算。但是在一致性检验的时候需要计算一致性指标CI,在CI中需要计算最大特征值λmax\lambda_{max}λmax,而λmax\lambda_{max}λmax是在计算判断矩阵权重时计算的。
CI=λmax−nn−1CI=\frac{\lambda_{max}-n}{n-1}CI=n−1λmax−n
所以我们在代码中先进行判断矩阵权重的计算,再进行一致性检验。接下来开始我们的代码书写:
输入判断矩阵
%% 输入判断矩阵
clear;clc
disp{'请输入判断矩阵A'} %disp为输出函数,类似c语言中的printf函数
A=[1 1 4 1/3 3;1 1 4 1/3 3;3 3 3 1 3;1/3 1/3 2 1/3 1]
算数平均法求权重
第一步:因为判断矩阵归一化是判断矩阵的每一个元素除以其列的和,所以我们构造一个和判断矩阵相同大小的各列和的矩阵,再利用“./”来实现归一化。
%% 对判断矩阵进行归一化
Sum_A=sum(A) %对A进行各行相加(按列求和),得到一个行向量
[n,n]=size(A) %% 因为判断矩阵是一个方阵,所以这里的r(行)和c(列)相同,我们用一个字母n代替
SUM_A=repmat(Sum_A,n,1) % 这里的repmat函数是将Sum_A重复n行一列,得到新的矩阵。
Stand_A=A./SUM_A
第二步:
%% 将归一化的各列相加(按行求和)
sum(Stand_A,2)%%这里的2是各列相加的意思(默认是1,各行相加)
第三步:
disp('算数平均法求权重的结果为:')
disp(sum(Stand_A,2)/n)
%首先对标准化的矩阵按照行求和,得到一个列向量
%然后再将这个列向量的每个元素同时除以n即可
代码总结:
Sum_A=sum(A)
[n,n]=size(A)
SUM_A=repmat(Sum_A,n,1)
Stand_A=A./SUM_A
sum(Stand_A,2)
disp('算数平均法求权重的结果为:')
disp(sum(Stand_A,2)/n)
几何平均法求权重
第一步:将A的元素的各列相乘,得到一个新的列向量
% 将A的元素的各列相乘,得到一个新的列向量
clc;A
Prduct_A=prod(A,2)
% prod函数和sum函数类似,不过是用于乘法,dim=2表示维度,各列相乘。
第二步:将得到的列向量每一个元素开n次方
%将第一步得出的列向量的每个分量开n次方
Prduct_n_A=Prduct_A.^(1/n)
% 这里对每一个元素进行乘方操作,因此需要加.,
% ^号代表乘方,这里是开n次方,所以等价于求1/n次方
第三步:将开过n次方的列向量元素进行归一化
% 将开方后的列向量中的每一个元素除以这个列向量的和
disp('几何平均法求得的权重的结果为:')
disp(Prduct_n_A./sum(prduct_n_A))
代码总结:
clc;A
Prduct_A=prod(A,2)
Prduct_n_A=Prduct_A.^(1/n)
disp('几何平均法求得的权重的结果为:')
disp(Prduct_n_A./sum(prduct_n_A))
特征值法求权重
第一步:求出矩阵A的最大特征值以及其对应的特征向量
clc
[V,D]=eig(A)%V是特征向量,D是由特征值构成的对角矩阵(除了对角线元素,其余位置元素全为0)
Max_dig=max(max(D)) %max函数求每一列的最大值得到一个行向量,再进行一次max操作就可以得到最大特征值了
% 这里也可以写成 max(D(:))
%接下来需要找到最大特征值所对应的特征向量,用到find函数,但是find函数只能找到矩阵中不为0元素的位置
%所以我们先将矩阵中不是最大特征值的位置的元素变为0,再使用find函数
D==Max_eig
[r,c]=find(D==Max_dig,1)
%找到D中与最大特征值相等的位置,记录它的行和列
第二步:对求出的特征向量进行归一化即可得到我们的权重
disp('特征值法求权重的结果为:');
disp(V(:,c)./sum(V(:,c)))
%这里的V(:,c)表示取第c列(最大特征值所在列)的全部元素
代码总结:
clc
[V,D]=eig(A)
Max_dig=max(max(D))
D==Max_eig
[r,c]=find(D==Max_dig,1)
disp('特征值法求权重的结果为:');
disp(V(:,c)./sum(V(:,c)))
计算一致性比例CR
计算一致性指标CI和查找平均随机一致性指标RI,最后计算一致性比例CR
CI=λmax−nn−1CI=\frac{\lambda_{max}-n}{n-1}CI=n−1λmax−n
n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
RI | 0 | 0 | 0.52 | 0.89 | 1.12 | 1.26 | 1.36 | 1.41 | 1.46 | 1.49 | 1.52 | 1.54 | 1.56 | 1.58 | 1.59 |
clc
CI=(Max_eig-n)/(n-1);
RI=[0 0 0.52 0.89 0.12 0.26 1.36 1.41 1.46 1.49 1.52 1.54 1.56 1.58 1.59];
%这里RI最多支持n=15
CR=CI/RI(n);disp(['一致性指标CI=',num2str(CI)]);
disp('一致性比例RI='):disp(CR);
%这里输出使用了两种方法,第一种是以向量的形式输出,第二种是直接使用disp函数输出
if CR<0.01disp('因为CR<0.10,所以该判断矩阵A的一致性可以接受!');
elsedisp('注意:CR>=0.10,因此该判断矩阵A需要进行修改!')
到这里我们层次分析法的代码部分就结束了,下面是总的代码:
Sum_A=sum(A)
[n,n]=size(A)
SUM_A=repmat(Sum_A,n,1)
Stand_A=A./SUM_A
sum(Stand_A,2)
disp('算数平均法求权重的结果为:');
disp(sum(Stand_A,2)/n);Prduct_A=prod(A,2)
Prduct_n_A=Prduct_A.^(1/n)
disp('几何平均法求得的权重的结果为:');
disp(Prduct_n_A./sum(prduct_n_A));[V,D]=eig(A)
Max_dig=max(max(D))
D==Max_eig
[r,c]=find(D==Max_dig,1)
disp('特征值法求权重的结果为:');
disp(V(:,c)./sum(V(:,c)));CI=(Max_eig-n)/(n-1);
RI=[0 0 0.52 0.89 0.12 0.26 1.36 1.41 1.46 1.49 1.52 1.54 1.56 1.58 1.59];
CR=CI/RI(n);
disp(['一致性指标CI=',num2str(CI)]);
disp('一致性比例RI='):disp(CR);
if CR<0.01disp('因为CR<0.10,所以该判断矩阵A的一致性可以接受!');
elsedisp('注意:CR>=0.10,因此该判断矩阵A需要进行修改!');
层次分析法(AHP)--代码书写部分相关推荐
- 层次分析法AHP - 代码注释多 - ( 数据建模 Python代码)
实际生活中,往往有一些很复杂的系统,我们没办法直观草率的确定权重,比如甲.乙.丙三人竞选总统,严谨的说,需要从三人的社交能力.管理能力.经济能力等方面来考虑,在每个方面,三位候选人的得分也不同,那么到 ...
- 数学建模——层次分析法Python代码
数学建模--层次分析法Python代码 import numpy as np class AHP: """ 相关信息的传入和准备 """ d ...
- 熵权法EW与层次分析法AHP之数学原理及实例
1.概述 对于多指标或多目标决策问题,由于涉及到多个指标或属性,在对实测数据进行评价时,需要确定这些指标之间的相互权重,各指标权重的客观性与合理性也会大大影响到最终的评价结果.目前对于指标权重确定的方 ...
- ahp层次分析法matlab代码_(案例)AHP层次决策分析Matlab编码计算
"层次聚类分析Matlab编码计算" 01 - AHP层次决策分析计算函数 求判断矩阵最大特征根和归一化特征向量: function [maxEigVal,w] = maxEigV ...
- ahp层次分析法matlab代码_Matlab数据分析实战,基于AHP高校食堂满意度调查分析
层次分析法(Analytical Hierachy Process,AHP)是匹兹堡大学T.L.Saaty教授在20世纪70年代初期提出对定性问题进行定量分析的一种渐变灵活的多准则决策方案. 其特点是 ...
- 2010年高教社杯全国大学生数学建模竞赛题目B题解析及层次分析法AHP在其中的应用
2010年高教社杯全国大学生数学建模竞赛题目 B题 2010年上海世博会影响力的定量评估 2010年上海世博会是首次在中国举办的世界博览会.从1851年伦敦的"万国工业博览会"开始 ...
- 多准则决策问题评估方法 | 层次分析法(含代码)
目前多准则决策问题的评估方法主要分为定性分析方法和定量分析方法两类.定性分析方法主要包括专家咨询.熵权法.案例研究和德尔菲法等:定量分析法主要包括层次分析法.主成分分析法.因子分析法.模糊综合评价法. ...
- 【数学建模】层次分析法(AHP)-Python实现
1 前言 本文主要讲解层次分析法(AHP)的python实现,后续会跟进实例分析 2 代码实现 导入包 import numpy as np 2.1 构造判断矩阵 判断矩阵一般采用专家意见法,也就是德 ...
- R语言应用实战-基于R语言的综合评价(层次分析法AHP为例)
一.综合评价的基本概念 对一个事物的评价往往会涉及多个因素或者多个指标,评价是在多个因素相互作用下的一个综合判断.多指标综合评价方法具有以下的特点:包含若干个指标,分别说明被评价对象的不同方面,评价方 ...
- 【数学建模】层次分析法AHP(评价与决策)
文章目录 一.算法介绍 二.适用问题 三.算法总结 1. 步骤 2. 如何构建层次结构模型 3. 如何构建成对比较矩阵 4. 如何进行一致性检验 四.应用场景举例(旅游问题) 1. 建模 2. 构造成 ...
最新文章
- 一篇比较深刻的讲FP特性的文章
- js parsefloat
- Spring Boot配置文件放在jar外部
- quality center 支持的平台
- 点到点链路的滑动窗口协议
- html5option的js代码,ng-option(示例代码)
- 深度学习实践经验汇总
- MapReduce源码刨析
- 强迫症设计师最爱的对称构图,促销模板
- wordpress 后台慢_WordPress网站优化加速的5个技巧
- 对象当前正在其他地方使用_2019 为什么我们还会继续使用 PHP ?
- erlang 变量存储在哪里_erlang中变量作用域
- 蚁群算法求TSP问题matlab代码
- java Thread.yield()用法详解
- MongoDB数据导入 JSON
- 实验室设备管理系统SQL代码
- python文件自动化处理 -- 读写文件
- Linux ubuntu 20.04安装unrar
- PHP实现opentracing链路追踪
- 500以内降噪蓝牙耳机推荐,2023年热门降噪蓝牙耳机推荐
热门文章
- html广告拦截网吧,python模拟网吧浏览器劫持网页弹广告
- OTP-638D2热电堆开发指南
- Binding表达式虽然同是mode two way写的位置不同效果不同
- 微信小程序 java网上宠物用品商城系统springboot
- Matlab 制作《最炫民族风》弱爆了,附代码
- 2023美赛数学建模文章润色
- 百度推广 计算机访问url,介绍一下百度推广显示URL与访问URL
- 特斯拉、波音等巨头惨遭“撕票”,竟缘于一个名不见经传的新勒索软件
- 故障:塑壳漏电保护器跳闸分析
- python之matplotlib绘制函数z=x^2+y^2三维图