学习内容:

1、 了解和掌握层次分析法的有关内容
2、 通过层次分析法的例题,掌握AHP解决评价类问题的方法
3、 matlab代码实现


学习时间:

2020.12.06


学习产出:

图片来源于b站:https://www.bilibili.com/video/BV1DW411s7wi?p=3
代码为原创。
1、 了解和掌握层次分析法的有关内容




2、 通过层次分析法的例题,掌握AHP解决评价类问题的方法




















3.matlab代码实现计算权重

%**********************************************************************************************************
clear;clc;
disp("算数平均法=========================================================================================")
%输入判断矩阵
disp("判断矩阵A为:");
A = [1,2,5;1/2,1,2;1/5,1/2,1];
disp(A)
judge = AHP_Tool1(A);  %判断矩阵A是不是正互反矩阵
if judge  ==  true  %如果是disp("A是正互反矩阵!!!");%获取A的行数n = size(A,1);%计算判断矩阵每一列之和sumA = sum(A,1);%将sumA复制为n行的矩阵sumA2 = repmat(sumA,n,1);%用判断矩阵A中的每一项除以sumA2对应的一项standardA = A./sumA2;%把上一步得到的结果,每一行求和并除以列数,即求得每一行的平均值sumStandardA = sum(standardA,2)./size(A,2);  % sum(standardA,2)表示每一行求和 ; size(A,2)表示A的列数disp("算术平均法求得的权重向量为:");disp(sumStandardA);
elsedisp("A不是正互反矩阵!!!请重新运行!!!");
end
%*********************************************************************************************************
clear;clc;
disp("几何平均法=======================================================================================")
%输入判断矩阵
disp("判断矩阵A为:");
A  =  [1,2,5;1/2,1,2;1/5,1/2,1];
disp(A)
judge  =  AHP_Tool1(A);  %判断矩阵A是不是正互反矩阵
if judge  ==  truedisp("A是正互反矩阵!!!");%将A的元素按照行相乘得到一个新的列向量prodA = prod(A,2);%获得A的行数(列数)n = size(A,1);%将新的向量的每个分量开n次方prodA_n = prodA.^(1/n);%对该列向量进行归一化,得到权重向量prodA_n_e = prodA_n./sum(prodA_n,1);disp("几何平均法求得的权重向量为:");disp(prodA_n_e);
elsedisp("A不是正互反矩阵!!!请重新运行!!!");
end
%*********************************************************************************************************
clear;clc;
disp("特征值法==========================================================================================")
%输入判断矩阵
disp("判断矩阵A为:");
A  =  [1,2,5;1/2,1,2;1/5,1/2,1];
disp(A)
judge  =  AHP_Tool1(A);  %判断矩阵A是不是正互反矩阵
if judge  == truedisp("A是正互反矩阵!!!");%求出判断矩阵的最大特征值,eig(A)表示A所有特征值组成的列向量maxValue = max(eig(A));%D是A的特征向量组成的对角阵;V是A的特征向量组成的矩阵[V,D] = eig(A);%利用矩阵的判断,将D中除了最大特征值之外的元素全部变为0D = (D == maxValue);%利用find寻找非零元素的位置,r--->该元素所在行数,c--->该元素所在列数[r,c] = find(D);%用r或者c在V中找出最大特征值对应的特征向量ans = V(:,c);%把ans中每一个元素除以ans那一列的总和,得到归一化后的权重向量result = ans./sum(ans,1);disp("特征值法求得的权重向量为:");disp(result);
elsedisp("A不是正互反矩阵!!!请重新运行!!!");
end
%**********************************************************************************************************
%求出判断矩阵的一致性比例
clear;clc;
disp("判断矩阵A为:");
A = [1,2,5;1/2,1,2;1/5,1/2,1];
disp(A)
disp("判断一致性结果为:")
%算出A的最大特征值
maxValue = max(eig(A));
%算出A的行数或者列数(因为A为方阵,所以行数列数都可以)
n = size(A,1);
%CI=(最大特征值-n)/(n-1)
CI = (maxValue-n)/(n-1);
%RI表格☆☆☆注意哦,这里的RI最多支持 n = 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];
%算出一致性比例CR=CI/RI
CR=CI/RI(n);
%进行判断:CR小于0.1则可接受;否则不可接受!
if CR<0.1disp("CR="+CR+"<0.1,所以,该判断矩阵A的一致性可以接受!!!");
elsedisp("CR="+CR+">=0.1,所以,该判断矩阵A的一致性不能接受!!!");
end

所用函数:
AHP_Tool1.m

%判断矩阵A是不是正互反矩阵
function [judge] = AHP_Tool1(A)
n = size(A,1);
for i=1:nfor j=1:na = A(i,j);b = A(j,i);if a*b==1continue;elsejudge = false;return;endend
end
judge = true;
end

AHP_Tool2.m

function [] = AHP_Tool2(A) %判断矩阵的一致性比例disp("判断矩阵A为:");A = [1,2,5;1/2,1,2;1/5,1/2,1];disp(A)disp("判断一致性结果为:")%算出A的最大特征值maxValue = max(eig(A));%算出A的行数或者列数(因为A为方阵,所以行数列数都可以)n = size(A,1);%CI=(最大特征值-n)/(n-1)CI = (maxValue-n)/(n-1);%RI表格☆☆☆注意哦,这里的RI最多支持 n = 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]; %算出一致性比例CR=CI/RICR=CI/RI(n);%进行判断:CR小于0.1则可接受;否则不可接受!if CR<0.1disp("CR="+CR+"<0.1,所以,该判断矩阵A的一致性可以接受!!!");elsedisp("CR="+CR+">=0.1,所以,该判断矩阵A的一致性不能接受!!!");end
end

代码运行截图:




总结

以上就是今天要讲的内容,本文仅仅简单介绍了AHP的意义以及使用,还介绍了matlab代码部分,matlab提供大量函数让我们快速便捷地处理数据求得权重。喜欢的朋友可以点个赞点个关注哦~

【数学建模】层次分析法(AHP)+Matlab实现相关推荐

  1. 数学建模 --- 层次分析法(AHP模型)

    层次分析法 评价类问题 该问题思路 选出相关指标,求各个指标之间的权重 和 对某个指标而言各个选择权重(分而治之思想) 计算每个方案的得分 层次分析法 层次分析法第一步 --- 层次结构图 层次分析法 ...

  2. 数学建模——层次分析法Python代码

    数学建模--层次分析法Python代码 import numpy as np class AHP: """ 相关信息的传入和准备 """ d ...

  3. [清风数学建模]层次分析法(AHP)笔记及代码实现

    本文章是学习清风老师数学建模视频后所做的笔记,其中一些图片及代码实现来源于清风老师的B站视频: [强烈推荐]清风:数学建模算法.编程和写作培训的视频课程以及Matlab等软件教学_哔哩哔哩_bilib ...

  4. 数学建模层次分析法例题及答案_斩获国际特等奖!兰理工数学建模团队为百年校庆献礼...

    近日,2019年美国大学生数学建模竞赛(MCM-ICM)成绩正式公布. 兰州理工大学数学建模团队再创佳绩,分别获得国际特等奖(Outstanding Winner)1项.一等奖(Meritorious ...

  5. 数学建模 层次分析法

    层次分析法介绍 层次分析法是对一些较为复杂而且模糊的问题做出分析的一种简易方法,它适用于解决难以完全定量的问题. 该方法在数学建模中运用较多,但是主观因素很大,特别是构造成对比较矩阵的时候,必须要有完 ...

  6. 数学建模层次分析法一致性检验建立

    2023年2月11日,备赛美赛复习建模需要使用的算法.在复习层次分析法的过程可以发现,层次分析法建立判断矩阵时具有强主观性,这个时候就需要建立一致性检验,对模型的差异性进行评估. 计算一致性比例: ​ ...

  7. 数学建模-层次分析法

    决策 层次分析法原理 相对重要权值的确定 算法步骤 目标层 准则层 方案层 层次分析法解决旅游问题 B1~B5表示 5个属性对于三地的各个重要性 通过层次分析矩阵 得到 各个属性相对于目标的权重. 最 ...

  8. 数学建模|层次分析法笔记

    一.什么是层次分析法?  定义: 由目标.方案.指标三部分组成. 框架图: 1.含子准则: 2.方案多种(方案交叉): 3.一对多(一准则多方案,方案不交叉): 二.层次分析法如何设计? 层次分析法步 ...

  9. 数学建模层次分析法例题及答案_【热门推荐】影响力意志力创新力、数学建模简明教程...

    <影响力•意志力•创新力> 索书号:B848.4-49/1028 作者:邢群麟编著 出版社:浙江工商大学出版社,2018 馆藏地:新馆304室 简介:本书在总结众多成功人士经验的基础上, ...

  10. 数学建模 层次分析法 python计算权重

    这里用python语言来计算判断矩阵的权重,网上大部分是matlab语言,里面也包含一致性检验的函数,具体各函数使用方法详见代码注释的部分 import numpy as np a=np.array( ...

最新文章

  1. 从0开始搭建编程框架——插件
  2. 动画库NineOldAndroids
  3. js数据结构和算法(8)-图
  4. 018_switch语句
  5. mysql主从脚本_shell脚本部署mysql主从
  6. Oracle分组取出每组的第一笔数据
  7. 数据分析:JSON格式数据
  8. Linux网络编程 之 广播(五)
  9. html表格高度适应屏幕,Table的自适应高度
  10. 【专升本计算机】2021年甘肃省专升本计算机全真模拟试题(四)
  11. MQ问题集(kafka主从同步与高可用,MQ重复消费、幂等)
  12. html body最小高度,CSS网页布局中的最小高度问题的解决方法
  13. Springboot自动配置原理入门
  14. win7一直显示正在关机_LG可编程控制器一直显示正在通信维修选凌科公司规模大...
  15. Atitit.atijson 类库的新特性设计与实现 v3 q31
  16. 有才的人全败给“傲”,平庸的人皆输在“懒”!
  17. 空中交通通信控制设备的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  18. 现代大学英语精读第二版(第三册)学习笔记(原文及全文翻译)——6B - They Dared Cocaine—and Lost(尝试可卡因后,他们迷失了)
  19. vs2010无法打开项目文件,此安装不支持该项目类型解决方法
  20. c#中https通讯如何添加证书

热门文章

  1. 阿里第九版Java系统架构师+应用架构师面试突击宝典
  2. [Spring实战系列](2)Maven创建Spring-HelloWorld项目
  3. TeamTalk服务器编译与部署
  4. 软件定义 硬件驱动,云计算的Hybrid时代
  5. 常平计算机培训班,东莞常平十大CAD培训班排名(如何为初学者学习CAD)
  6. 自动化报表,标准化流程---“JSL”(JMP编程语言),与重复操作说拜拜
  7. 用U盘PE启动安装系统教程
  8. 微PE安装win10系统 GPT、BOOTMGR PBR、EFI PART红色
  9. HDOJ 2027 统计元音
  10. 好用的python工具_Python哪些工具好用?老男孩Python开发