数学建模之层次分析法(matlab版)

 

目录

一、概述

 应用:

二、基本原理

三、步骤和方法

1、建立层次结构模型

2、构建判断(成对比较)矩阵

 3、层次单排序及其一致性检验

 4、层次总排序及其一致性检验

 四、优点和缺点

1、层次分析法的优点

2、层次分析法的局限性

五、代码实现


一、概述

层次分析法(AHP法) 是一种解决多目标的复杂问题的定性与定量相结合的决策分析方法。该方法将定量分析与定性分析结合起来,用决策者的经验判断各衡量目标能否实现的标准之间的相对重要程度,并合理地给出每个决策方案的每个标准的权数,利用权数求出各方案的优劣次序,比较有效地应用于那些难以用定量方法解决的课题。

 应用:

• (1)用于最佳方案的选取(选择运动员、选择地址)
• (2)用于评价类问题(评价水质状况、评价环境)
• (3)用于指标体系的优选(兼顾科学和效率)

二、基本原理

根据问题的性质和要达到的总目标,将问题分解为不同的组成因素,并按照因素间的相互关联影响以及隶属关系将因素按不同层次聚集组合,形成一个多层次的分析结构模型,从而最终使问题归结为最低层(供决策的方案、措施等)相对于最高层(总目标)的相对重要权值的确定或相对优劣次序的排定。

三、步骤和方法

(1)建立层次结构模型
(2)构造判断(成对比较)矩阵
(3)层次单排序及其一致性检验
(4)层次总排序及其一致性检验

1、建立层次结构模型

• 将决策的目标、考虑的因素(决策准则)和决策对象按它们之间的相互关系分为最高层、中间层和最低层,绘出层次结构图。
最高层:决策的目的、要解决的问题。
最低层:决策时的备选方案。
中间层:考虑的因素、决策的准则。
• 对于相邻的两层,称高层为目标层,低层为因素层。
下面举例说明。

最高层:总目标,通常只有一个总目标。


中间层:准则层、指标层:表示采取某种措施、政策、方案等实现预定总目标所涉及的中间环节;又分为准则层、指标层、策略层、约束层等。


最低层:方案层。表示将选用的解决问题的各种措施、政策、方案等。通常有几个方案可选。
每层有若干元素,层间元素的关系用相连直线表示。

2、构建判断(成对比较)矩阵

判断矩阵是表示本层所有因素针对上一层某一个因素的相对重要性的比较。

使用一致矩阵法,即:
1.不把所有因素放在一起比较,而是两两相互比较
2.对此时采用相对尺度,以尽可能减少性质不同的诸因素相互比较的困难,以提高准确度。
心理学家认为成对比较的因素不宜超过9个,即每层不要超过9个因素。

 

 3、层次单排序及其一致性检验

 

 CI=0,有完全的一致性
CI 接近于0,有满意的一致性
CI 越大,不一致越严重

 

 

 

 

 4、层次总排序及其一致性检验

• 计算某一层次所有因素对于最高层(总目标)相对重要性的权值,称为层次总排序。
• 这一过程是从最高层次到最低层次依次进行的。

 

 

 

当CR<0.1时,认为层次总排序通过一致性检验。层次总排序具有满意的一致性,否则需要重新调整那些一致性比率高的判断矩阵的元素取值。
到此,根据最下层(决策层)的层次总排序做出最后决策。

归纳一下步骤:
1.建立层次结构模型
该结构图包括目标层,准则层,方案层。

2.构造成对比较矩阵
从第二层开始用成对比较矩阵和1-9尺度。

3.计算单排序权向量并做一致性检验
对每个成对比较矩阵计算最大特征值及其对应的特征向量,利用一致性指标、随机一致性指标和一致性比率做一致性检验。若检验通过,特征向量(归一化后)即为权向量;若不通过,
需要重新构造成对比较矩阵。

 4.计算总排序权向量并做一致性检验

计算最下层对最上层总排序的权向量

进行检验。若通过,则可按照总排序权向量表示的结果进行决策,否则需要重新考虑模型或重新构造那些一致性比率较大的成对比较矩阵。

 四、优点和缺点

1、层次分析法的优点

(1)系统性.把所研究的问题看成一个系统,按照分解、比较判断、综合分析的思维方式进行决策分析,也是实际中继机理分析方法、统计分析方法之后发展起来的又一个重要的系统分析工具。
(2)实用性.把定性与定量方法结合起来,能处理许多传统的优化方法无法处理的实际问题,应用范围广.而且将决策者和决策分析者联系起来,体现了决策者的主观意见,决策者可以直接应它进行决策分析,增加了决策的有效性和实用性.

(3)简洁性.具有中等文化程度的人都可以学习掌握层次分析法的基本原理和步骤,计算也比较简便,所得结果简单明确,容易被决策者了解和掌握.

2、层次分析法的局限性

局限性时粗略、主观的,他的比较、判断和结果都是粗糙的,不适于精度要求很高的问题;其次是从建立层次结构图到给出两两比较矩阵,人的主观因素作用很大,使决策结果较大程度地依赖于决策人的主观意志,可能难以为众人所接受.


五、代码实现

disp('请输入准则层判断矩阵A(n阶)');
A=input('A=');
[n,n]=size(A);
[V,D]=eig(A);%求得特征向量和特征值
            %求出最大特征值和它所对应的特征向量
tempNum=D(1,1);%特征值的初值
pos=1;%标记的第一个数
for h=1:n 
    if D(h,h)>tempNum
        tempNum=D(h,h);
        pos=h;
    end
end    
w=abs(V(:,pos));
w=w/sum(w);
t=D(pos,pos);
disp('准则层特征向量w=');disp(w);disp('准则层最大特征根t=');disp(t);
         %以下是一致性检验
CI=(t-n)/(n-1);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 1.60 1.61 1.615 1.62 1.63];
CR=CI/RI(n);
if CR<0.10
    disp('此矩阵的一致性可以接受!');
    disp('CI=');disp(CI);
    disp('CR=');disp(CR);
else disp('此矩阵的一致性验证失败,请重新进行评分!');
end

disp('请输入方案层各因素对准则层各因素权重的成对比较阵');
for i=1:n
    disp('请输入第');disp(i);disp('个准则层因素的判断矩阵B');disp(i);

使用方法
(1)构造判断矩阵A
(2)将下文代码复制粘贴到Matlab中即可
例如:A=[1 3 5;0.33 1 3;0.2 0.33,1]

请输入准则层判断矩阵A(n阶)
A=[1 3 5;0.33 1 3;0.2 0.33,1]
准则层特征向量w=
    0.6376
    0.2578
    0.1046

准则层最大特征根t=
    3.0330

此矩阵的一致性可以接受!
CI=
    0.0165

CR=
    0.0318

请输入方案层各因素对准则层各因素权重的成对比较阵

......

  • 2
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
层次分析法是一种常用的决策分析方法,可以用于处理多个因素之间的复杂关系。以下是一个与层次分析法相关的数学建模题,并提供了MATLAB代码来实现。 问题描述: 某公司计划购买新的生产机器,他们需要在4种不同的机器中进行选择,包括机器A、机器B、机器C和机器D。他们希望选出最适合他们需求的一台机器。他们将考虑以下6个因素来进行评估:成本、生产效率、质量、可靠性、维护成本和售后服务。现在需要通过层次分析法进行权重的计算,以选择最佳的机器。 解决方案: 1. 构建层次结构:通过对问题的分析,我们可以建立以下层次结构: 层次1:选择机器 层次2:因素权重 层次3:成本、生产效率、质量、可靠性、维护成本和售后服务 2. 构建判断矩阵:根据专家意见或数据分析,我们可以构建一个3×3的判断矩阵来衡量因素之间的相对重要性。例如,我们可以根据专家意见将生产效率、质量和可靠性相对地评为9、5和7,那么判断矩阵如下: 1 9 7 1/9 1 3/5 1/7 5/3 1 3. 计算权重:根据判断矩阵,我们可以通过计算特征向量和特征值的方法来计算权重。这里可以使用MATLAB中的eig函数来计算判断矩阵的特征向量和特征值,并归一化得到权重向量。 4. 评估选择:根据每个机器的因素权重,可以通过加权求和来评估每个机器的总权重,并选择最高的一台机器作为最佳选择。 MATLAB代码示例: ``` % 构建判断矩阵 A = [1 9 7; 1/9 1 3/5; 1/7 5/3 1]; % 计算特征向量和特征值 [~, eig_vals] = eig(A); % 获取最大特征值 max_eig_val = max(max(eig_vals)); % 获取最大特征值对应的特征向量 max_eig_vec = eig_vals(:, max(eig_vals) == max_eig_val); % 归一化计算权重向量 weights = max_eig_vec ./ sum(max_eig_vec); % 各机器得分 machine_scores = [0.6, 0.7, 0.8, 0.9]; % 假设都是随机得分 % 计算各机器的总权重 weighted_scores = machine_scores * weights; % 找到最高得分机器 [~, max_index] = max(weighted_scores); % 输出结果 disp(['最佳机器是机器', num2str(max_index)]); ``` 以上代码可以帮助解决该问题,根据输入的判断矩阵和各机器的得分,计算出每个机器的总权重,并选出最优机器。请根据具体的需求和数据进行修改和适配。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值