【数学建模】最优旅游城市的选择问题:层次分析模型(含MATLAB代码)

层次分析法(The analytic hierarachy process,简称AHP)是一种常用的决策分析方法,其基本思路是将复杂问题分解为多个组成部分,然后对这些部分进行逐一评估和比较,最后得出最优解决方案。(例如:选择哪种方案最好、哪位运动员或员工表现得更优秀)

要解决评价类问题,要解决以下三个问题:

1、我们评价的目标是什么?

2、我们为了达到这个目标有哪几种可选方案?

3、评价的准则或者说指标是什么?

一般来说,前两个问题的答案是显而易见的,第三个问题的答案需要我们根据题目中的背景材料、常识或者网上搜集到的参考资料进行结合,从中筛选最合适的指标。

案例:请选择合适的指标,为小明选取一个最适合他的城市。

本题需要我们选择最优的旅游城市,首先上网搜索几个比较重要的指标:景点景色、旅游花费、居住环境、饮食情况、交通便利程度。选取想去的城市分别为:苏州、威海、桂林。我们先来绘制一张权重表。

指标权重

苏州

威海

桂林

景色

花费

居住

饮食

交通

现在的关键就是求出这张权重表。

确定影响某因素的诸因子在该因素中所占的比重时,遇到的主要困难是这些比重常常不易定量化。此外,当影响某因素的因子较多时,直接考虑各因子对该因素有多大程度的影响时,常常会因考虑不周全、顾此失彼而使决策者提出与他实际认为的重要性程度不相一致的数据,甚至有可能提出一组隐含矛盾的数据。

--选自司守奎[kuil老师的《数学建模算法与应用教材》 

一次性去考虑五个指标的关系,往往考虑不周;而两个两个指标进行比较,最终根据两两比较的结果来推算出权重。

标度

含义

1

表示两个因素相比,具有相同重要性

3

表示两个因素相比,一个因素比另一个因素稍微重要

5

表示两个因素相比,一个因素比另一个因素明显重要

7

表示两个因素相比,一个因素比另一个因素强烈重要

9

表示两个因素相比,一个因素另一个因素极端重要

2,4,6,8

上述两相邻判断的中值

倒数

A和B相比如果标度3,那么B和A相比就是1/3

 重要性可以理解为满意程度

景色

花费

居住

饮食

交通

景色

1

1/2

4

3

3

花费

2

1

7

5

5

居住

1/4

1/7

1

1/2

1/3

饮食

1/3

1/5

2

1

1

交通

1/3

1/5

3

1

1

我们知道景色与景色属于同一元素,满意程度为1,其他亦是如此(根据自己对这几个指标的判断确定权重)。

总结:上面这个表是一个5*5的方阵,我们记为A,对应的元素为aij,这个方针有如下特征:

(1)aij表示的意义是,与指标j相比,i的重要程度。

(2)当i=j时,两个指标相同,因此同等重要记为1,这就解释了主对角元素为1.

(3)aij>0且满足aij*aji=1(我们称满足这一条件的矩阵为正互反矩阵)

实际上,上面这个矩阵就是层次分析法中的判断矩阵。

接下来我们则需要填写5个判断矩阵(我们可以通过与小明一问一答的形式,来填写,当然在论文中我们直接给出即可)

景色苏州威海桂林
苏州125
威海1/212
桂林1/51/21
花费苏州威海桂林
苏州11/31/8
威海311/3
桂林831
居住苏州威海桂林
苏州113
威海113
桂林1/31/31
饮食苏州威海桂林
苏州134
威海1/311
桂林1/411
交通苏州威海桂林
苏州111/4
威海111/4
桂林441

需要注意的是:在这里我们应该把表格里的数字理解为可接受度(即满意程度)。

我们在书写时也有可能会有bug。比如说:苏州=A  威海=B 桂林=C 苏州比威海景色好则A>B 苏州和桂林景色一样好则A=C 威海比桂林景色号则B>C如此便出现了矛盾

什么是一致矩阵呢? 

景色苏州威海桂林
苏州124
威海1/212
桂林1/41/21

5fe82a2747ca4a51884965fc878e4aa4.png

也就说只要各行各列满足成倍数的关系即为一致矩阵

一致矩阵:若矩阵中每个元素 aij>0且满足 aij*aji=1,则我们称该矩阵为正互反矩阵。在层次分析法中,我们构造的判断矩阵均是正互反矩阵。若正互反矩阵满足aij*ajk=aik,则我们称其为一致矩阵。

注意:在使用判断矩阵求权重之前,必须对其进行一致性检验。

8b77f42cc8794f0f8673b396b2715ab3.jpeg

引理:n阶正互反矩阵A为一致矩阵时当且仅当最大特征值eq?ℷmax=n且当正互反矩阵A非一致时,一定满足eq?ℷmax>n.

景色苏州威海桂林
苏州12a
威海1/212
桂林1/a1/21

 cc4a78b2ab104e65867ad9d1df58689f.jpeg

判断矩阵越不一致,最大特征值与n就相差越大

第一步:计算一致性指标

93845d12949a46db8c1ecaf1426483b2.png

第二步:查找对应的平均随机一致性指标RI 

n123456789101112131415
RI000.520.891.121.261.361.411.461.491.521.541.561.581.59

注:在实际运用中,n很少超过10,如果指标的个数大于10,可以考虑建立二级指标体系

第三步:计算一致性比例CR

ba7c709508a34e4bb7adb11e4b6c9c70.png

如果CR<0.1,则可认为判断矩阵的一致性可以接受;否则需对判断矩阵进行修正。

求指标权重及城市在各个指标上的得分

1、算数平均法

先对景色指标进行对第一列归一化处理,得出权重

苏州=1/(1+0.5+0.2)=0.5882

威海=0.5/(1+0.5+0.2)=0.2941

桂林=0.2/(1+0.5+0.2)=0.1177 

 使用第二列的数据,计算出来的权重

苏州=2/(2+1+0.5)=0.5714

威海=1/(2+1+0.5)=0.2857

桂林=0.5/(2+1+0.5)=0.1429

使用第三列数据,计算出来的权重

苏州=5/(5+2+1)=0.625

威海=2/(5+2+1)=0.25

桂林=1/(5+2+1)=0.125

综合上述三列,算术平均求权重:

苏州=(0.5882+0.5714+0.625)/3=0.5949

威海=(0.2941+0.2857+0.25)/3=0.2766

桂林=(0.1177+0.1429+0.125)/3=0.1285

基本步骤:将判断矩阵按照列归一化,将归一化的各列相加,最后将相加后得到的向量中每个元素除以n即可得到权重向量

fb84b3add72641a38eade44b4c75b273.jpeg

2、几何平均法

第一步:将A的元素按照行相乘得到一个新的列向量

第二步:将新的向量的每个分量开n次方

第三步:对该列向量进行归一化即可得到权重向量

6d20981f68824ba0ad183b07b23dac22.jpeg

算数平均法权重几何平均法权重
苏州0.59490.5954
威海0.27660.2764
桂林0.12850.1283

注意:权重和应为1,这里由于四舍五入所以会有可以忽略的差距。

3、特征值法求权重

89d266c09e564c9d9b5c722ce02125b8.jpeg

假若我们的判断矩阵一致性可以接受,那么我们可以仿照一致矩阵求权重的方法。

第一步:求出矩阵A的最大特征值以及其对应的特征向量

第二步:对求出的特征向量进行归一化即可得到我们的权重

景色苏州威海桂林
苏州125
威海1/212
桂林1/51/21

 最大特征值为3.0055,一致性比例CR=0.0053对应的特征向量:[-0.8902,-0.4132,-0.1918]对其归一化:[0.5954,0.2764,0.1283]

算术平均法几何平均法特征值法
苏州0.59490.59540.5954
威海0.27660.27640.2764
桂林0.12850.12830.1283

以特征值法为例(我们可以借助MATLAB来求权重,下面我们会介绍到):

指标权重苏州威海桂林
景色0.26360.59540.27640.1283
花费0.47580.08190.23630.6817
居住0.05380.42860.42860.1429
饮食0.09810.63370.19190.1744
交通0.10870.16670.16670.6667

此时我们便可以求出每一个城市的得分情况:

苏州=0.5954*0.2636+0.0819*0.4758+0.4286*0.0538+0.6337*0.0981+0.1667*0.1087=0.299

同理我们也可以得出剩下两个城市的得分情况为威海0.245,桂林0.455

因此我们就可以认为最佳旅游城市是桂林(可以用EXCELL简化运算)

e67c56eae97d4b0fa543ef0475508f8b.png

以往的论文利用层次分析法解决实际问题时,都是采用其中某一种方法求权重,而不同的计算方法可能会导致结果有所偏差。为了保证结果的稳健性本文采用了三种方法分别求出了权重,再根据得到的权重矩阵计算各个方案的得分,并进行排序和综合分析,这样避免了采用单一方法所产生的偏差,得出的结论将更全面、更有效。

层次分析法的局限性:

(1)评价的决策层不能太多,太多的话n会很大,判断矩阵和一致矩阵差异可能会很大。(一般n最多不能超过15)

(2)如果决策层中的指标的数据是已知的,应该如何利用数据使得评价更准确?

因此层次分析法存在很大局限性。

下面我们来看代码部分内容:

disp('请输入判断矩阵A')
A=input('A=');
[n,n] = size(A);
% % % % % % % % % % % % %方法1: 算术平均法求权重% % % % % % % % % % % % %
Sum_A = sum(A);
SUM_A = repmat(Sum_A,n,1);
Stand_A = A ./ SUM_A;disp('算术平均法求权重的结果为:');
disp(sum(Stand_A,2)./n)
% % % % % % % % % % % % %方法2: 几何平均法求权重% % % % % % % % % % % % %
Prduct_A = prod(A,2);
Prduct_n_A = Prduct_A .^ (1/n);
disp('几何平均法求权重的结果为:');
disp(Prduct_n_A ./ sum(Prduct_n_A))
% % % % % % % % % % % % %方法3: 特征值法求权重% % % % % % % % % % % % %
[V,D] = eig(A);
Max_eig = max(max(D));
[r,c]=find(D == Max_eig , 1);
disp('特征值法求权重的结果为:');
disp( V(:,c) ./ sum(V(:,c)) )
% % % % % % % % % % % % %下面是计算一致性比例CR的环节% % % % % % % % % % % % %
CI = (Max_eig - n) / (n-1);
RI=[0 0.0001 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];  %注意哦,这里的RI最多支持 n = 15
% 这里n=2时,一定是一致矩阵,所以CI = 0,我们为了避免分母为0,将这里的第二个元素改为了很接近0的正数
CR=CI/RI(n);
disp('一致性指标CI=');disp(CI);
disp('一致性比例CR=');disp(CR);
if CR<0.10disp('因为CR<0.10,所以该判断矩阵A的一致性可以接受!');
elsedisp('注意:CR >= 0.10,因此该判断矩阵A需要进行修改!');
end

层次分析法在实际应用中有局限性,比如判断矩阵的主观性较强,可能导致结果的不稳定性。因此,在使用层次分析法时,应尽可能确保判断矩阵的客观性和准确性,并结合实际情况进行考虑。

本次分析就到这里,欢迎大家在评论区补充更正,相信大家一定会有所收获。感谢大家的关注及观看! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/727.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM知识点总结二

参考文章&#xff1a;【Java面试题汇总】JVM篇&#xff08;2023版&#xff09;_jvm面试题2023-CSDN博客 1、说说你了解的JVM内存模型&#xff1a; JVM由三部分组成&#xff1a;类加载子系统、运行时数据区、执行引擎 JVM内存模型&#xff1a; 内存模型里的运行时数据区&#…

ruby 配置代理 ip(核心逻辑)

在 Ruby 中配置代理 IP&#xff0c;可以通过设置 Net::HTTP 类的 Proxy 属性来实现。以下是一个示例&#xff1a; require net/http// 获取代理Ip&#xff1a;https://www.kuaidaili.com/?refrg3jlsko0ymg proxy_address 代理IP:端口 uri URI(http://www.example.com)Net:…

机器学习 | 使用Scikit-Learn实现分层抽样

在本文中&#xff0c;我们将学习如何使用Scikit-Learn实现分层抽样。 什么是分层抽样&#xff1f; 分层抽样是一种抽样方法&#xff0c;首先将总体的单位按某种特征分为若干次级总体&#xff08;层&#xff09;&#xff0c;然后再从每一层内进行单纯随机抽样&#xff0c;组成…

Django项目使用uwsgi+nginx部署上线

Django项目使用uwsginginx部署上线 前言settings 配置安装uwsgi 和配置uwsgi推荐配置文件启用wsgi不使用nginx的配置&#xff08;不推荐&#xff09;使用nginx的配置 安装 nginx和配置niginx 配置 运行参考资料 前言 代码已经开发完成&#xff0c;正式部署上线 settings 配置…

Redmi Turbo 3新品发布,天星金融(原小米金融)优惠加持护航新机体验

Redmi新十年使命不变&#xff0c;挑战不断升级。Redmi Turbo 3&#xff0c;作为Turbo系列的开篇之作&#xff0c;将自身定位为新生代性能旗舰&#xff0c;决心重塑中端性能新格局。据悉&#xff0c;Redmi Turbo 3于4月10日已正式发布。预售期间更是连续数日&#xff0c;蝉联小米…

SSL证书在HTTP与HTTPS中的角色差异是什么?

在互联网的广泛应用背景下&#xff0c;随着网络攻击和数据泄露事件频发&#xff0c;保障用户的数据安全已成为至关重要的议题。传统的HTTP协议在传输数据时不进行加密处理&#xff0c;导致数据在传输过程中暴露于潜在的窃听和篡改风险中&#xff0c;安全性薄弱。而通过引入SSL/…

解决Keil V5.38 和 ST-Link V3 Debug不能运行问题

目录 概述 1 问题描述 1.1 情况一 1.2 情况二 1.3 情况三 2 解决方法 2.1 认识Keil Mico Lib 2.2 使能Keil Mico Lib 3 验证 3.1 进入C程序Main验证 3.2 断点验证 3.3 上电重启验证 4 结论 笔者使用的验证代码下载地址&#xff1a; stm32-freeRTOS-queue资源-CSD…

微信小程序日期增加时间完成订单失效倒计时(有效果图)

效果图 .wxml <view class"TimeSeond">{{second}}</view>.js Page({data: {tiem_one:,second:,//倒计时deadline:,},onLoad(){this.countdown();},countdown(){let timestamp Date.parse(new Date()) / 1000;//当前时间戳let time this.addtime(2024…

k8s 部署 kube-prometheus监控

一、Prometheus监控部署 1、下载部署文件 # 使用此链接下载后解压即可 wget https://github.com/prometheus-operator/kube-prometheus/archive/refs/heads/release-0.13.zip2、根据k8s集群版本获取不同的kube-prometheus版本部署 https://github.com/prometheus-operator/k…

VSCode断点调试(ROS)

0、安装ros插件 在扩展商店中安装ROS插件&#xff08;Microsoft&#xff09; 1、修改CMakeList.txt # set(CMAKE_BUILD_TYPE "Release") // 注释Release模式 set(CMAKE_BUILD_TYPE "Debug") // 设置为Debug模式 # set(CMAKE_CXX_FLAGS_RELEASE &…

递归、搜索与回溯算法:回溯,决策树

回溯算法是⼀种经典的递归算法&#xff0c;通常⽤于解决组合问题、排列问题和搜索问题等。 回溯算法的基本思想&#xff1a;从⼀个初始状态开始&#xff0c;按照⼀定的规则向前搜索&#xff0c;当搜索到某个状态⽆法前进时&#xff0c;回退到前⼀个状态&#xff0c;再按照其他…

Hadoop3:大数据的基本介绍

一、什么是大数据 1、大数据的4v特点 Volume&#xff08;大量&#xff09; Velocity&#xff08;高速&#xff09; Variety&#xff08;多样&#xff09; Value&#xff08;低价值密度&#xff09; 2、大数据部门间的工作岗位 第三部分&#xff0c;其实就是JavaWeb 二、…

用 element ui 实现季度选择器

由于在数据项目中经常以各种时间条件查询数据&#xff0c;所以时间选择器&#xff08;DatePicker&#xff09;组件是很常用的组件。但是在我使用的 Element UI 中&#xff0c;缺少了季度选择器的功能。 简易实现 一开始我根据时间范围使用 select 去遍历,如 2024-Q1、2023-Q4…

cdp集群Hbase组件HRegionServer服务停止原因以及排查

前言&#xff1a;重启集群后某一节点HRegionServer服务停止&#xff0c;重启前所有服务均正常 去查看日志&#xff1a; 日志报错 ERROR HRegionServer Master rejected startup because clock is out of sync org.apache.hadoop.hbase.ClockOutOfSyncException: org.apache.h…

Spark-Scala语言实战(17)

我带着大家一起来到Linux集群环境下&#xff0c;学习我们的spark。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢。 Spark-Scala语言实战&#xff08;16&#x…

linux 基础命令docker及防火墙iptables详解

应用场景&#xff1a; web应用自动打包和发布 自动化测试&#xff0c;持续集成、发布 在服务环境中部署后台应用 搭建paaS平台 安装应用 apt install docker.io#kali中 配置docker源&#xff0c;文件位置/etc/docker/daemon.json { "registry-mirrors": [ "h…

机器学习和深度学习-- 李宏毅(笔记于个人理解)Day 21

Day 21 Self- Attention 选修部分 ​ 学完自适应 再回来看看 Sequence Labling 假如我们现在有一个需要读完全部句子才能解的问题&#xff0c; 那么red window 就需要变得是最大的&#xff08;最长的句子&#xff09;&#xff1b; 其实这里大家有没有想过&#xff0c;这个玩意…

死磕GMSSL通信-java/Netty系列(二)

死磕GMSSL通信-java/Netty系列(二) 在上一篇文章中,我们探讨了如何利用C/C++实现国密通信。而本文将聚焦于Java环境下,特别是基于Netty框架,如何实现与国密系统的安全通信。为了确保新项目遵循最新的国密标准,我们将优先推荐使用GB/T 38636-2020(TLCP)协议。对于Java开…

45、二叉树-二叉树的右视图

思路 层序遍历 从左向右遍历每一层取最后一个数&#xff0c;代码如下&#xff1a; public List<Integer> rightSideView(TreeNode root) {if (rootnull){return new ArrayList<>();}Queue<TreeNode> queue new LinkedList<>();List<Integer> …

一例Mozi僵尸网络的挖矿蠕虫分析(workminer)

概述 这是一个Linux平台的挖矿蠕虫&#xff0c;使用了go和C混合编译而成&#xff0c;主要通过爆破SSH口令进行传播&#xff0c;属于Mozi僵尸网络。其中GO代码负责SSH相关的爆破传播&#xff0c;以及对Config的处理&#xff0c;C代码则负责处理加入Mozi P2P网络&#xff0c;拉取…