2023年数学建模B组:利用AHP层次分析法解决实际问题(Matlab)

目录

利用AHP层次分析法解决实际问题:Matlab实现

介绍

案例背景

步骤1:建立层次结构模型

步骤2:构建判断矩阵

步骤3:编写Matlab代码

分析输出结果

选择最佳方案

问题描述

解题思路

方法和步骤

示例

结果分析

敏感性分析

代码:

结论


利用AHP层次分析法解决实际问题:Matlab实现

介绍

层次分析法(Analytic Hierarchy Process,简称AHP)是一种将与决策总目标相关的元素分解成目标、准则、方案等层次,在此基础之上进行定性和定量分析的决策方法。本文将通过一个数学建模案例,介绍如何使用Matlab实现AHP。

案例背景

假设一个企业需要选择一个新的项目投资方向。在考虑的四个方向中(A、B、C、D),需要根据三个重要准则(成本、风险、收益)来决策。如何使用AHP来进行决策分析呢?

步骤1:建立层次结构模型

  1. 目标层:选择最佳投资方向
  2. 准则层:成本、风险、收益
  3. 方案层:A、B、C、D

步骤2:构建判断矩阵

为了简化问题,假设我们已经获得了准则层的判断矩阵(3x3)和每个准则对应的方案层判断矩阵(3个4x4矩阵)。具体数值可以根据实际情况或专家意见确定。

步骤3:编写Matlab代码

% 定义函数计算权重向量
function weight = calculate_weight(matrix)
    [~, eigenvector] = eig(matrix);
    weight = eigenvector(:,1) / sum(eigenvector(:,1));
end

% 构建判断矩阵
criteria_matrix = [1 2 1/3; 1/2 1 1/4; 3 4 1];
alternatives_matrix_cost = [1 1/3 1/5 1/7; 3 1 1/3 1/5; 5 3 1 1/3; 7 5 3 1];
alternatives_matrix_risk = [1 2 3 4; 1/2 1 3/2 2; 1/3 2/3 1 4/3; 1/4 1/2 3/4 1];
alternatives_matrix_return = [1 1/5 1/3 1/7; 5 1 3 1/3; 3 1/3 1 1/5; 7 3 5 1];

% 计算准则层的权重向量
criteria_weight = calculate_weight(criteria_matrix);

% 计算方案层的权重向量
alt_cost_weight = calculate_weight(alternatives_matrix_cost);
alt_risk_weight = calculate_weight(alternatives_matrix_risk);
alt_return_weight = calculate_weight(alternatives_matrix_return);

% 计算总权重
total_weight = [alt_cost_weight, alt_risk_weight, alt_return_weight] * criteria_weight;

% 输出结果
disp('方案A、B、C、D的总权重分别为:');
disp(total_weight);

以上Matlab代码定义了一个计算权重向量的函数calculate_weight,以简化代码。接下来,构建判断矩阵,并使用该函数计算准则层和方案层的权重向量。最后,通过将方案层的权重向量与准则层的权重向量相乘,得到每个方案的总权重,并输出结果。

接下来,我们将分析上述Matlab代码的输出结果,并根据总权重选择最佳方案。

分析输出结果

假设Matlab代码的输出结果如下:

方案A、B、C、D的总权重分别为:
0.1245
0.2356
0.3598
0.2801

选择最佳方案

根据输出结果,我们可以看到各个方案的总权重分别为:

  • 方案A:0.1245
  • 方案B:0.2356
  • 方案C:0.3598
  • 方案D:0.2801

总权重最大的方案C具有最高的优先级,因此我们选择方案C作为最佳方案。

这里我们介绍一道使用层次分析法(AHP)的数学建模原题。假设题目是关于选择一个合适的城市来举办重大活动。

问题描述

假设有三个城市A、B、C供选择,选手需要通过对每个城市的交通、住宿、设施、安全等方面的综合评估,确定一个最佳城市来举办重大活动。

解题思路

我们可以使用层次分析法(AHP)来解决这个问题。首先构建层次结构模型,然后进行成对比较,最后计算权重和一致性检验。

方法和步骤

  1. 构建层次结构模型。我们将问题分为三个层次:目标层(最佳城市)、准则层(交通、住宿、设施、安全)和方案层(城市A、B、C)。

  2. 成对比较。对于准则层,我们需要对各准则进行两两比较,根据它们的重要程度来确定相应的比较矩阵。对于方案层,我们需要针对每个准则对各个城市进行两两比较,构建相应的比较矩阵。

  3. 计算权重。分别计算准则层和方案层的权重向量,使用特征值法或几何平均法来计算。

  4. 合成权重。将准则层权重向量与各个方案层权重向量相乘,得到总权重。

  5. 一致性检验。分别对准则层和方案层进行一致性检验,确保模型的有效性。使用一致性指标(CI)和一致性比率(CR)进行检验,CR小于0.1时认为一致性是可以接受的。

  6. 结果分析。根据总权重,确定最佳城市。

示例

假设我们得到了如下成对比较矩阵和权重:

准则层成对比较矩阵:

交通 住宿 设施 安全
交通 1 1/3 2 3
住宿 3 1 4 5
设施 1/2 1/4 1 2
安全 1/3 1/5 1/2

1

准则层权重向量:[0.17, 0.46, 0.15, 0.22]

方案层成对比较矩阵:

交通:

A B C
A 1 3 1/2
B 1/3 1 1/4
C 2 4 1

住宿:

A B C
A 1 1/5 1/3
B 5 1 2
C 3 1/2 1

设施:

A B C
A 1 2 5
B 1/2 1 3
C 1/5 1/3 1

安全:

A B C
A 1 1/3 3
B 3 1 4
C 1/3 1/4 1

方案层权重向量:

交通:[0.49, 0.16, 0.35] 住宿:[0.16, 0.64, 0.20] 设施:[0.53, 0.31, 0.16] 安全:[0.42, 0.50, 0.08]

合成权重:

城市 权重
A 0.245
B 0.446
C 0.309

一致性检验:

假设所有的一致性比率(CR)均小于0.1,我们认为一致性可以接受。

结果分析

根据合成权重,城市B的权重最大(0.446),所以我们推荐城市B作为举办重大活动的最佳城市。

敏感性分析

虽然我们的分析表明城市B是最佳选择,但实际情况可能随着各种因素的变化而变化。为了确保我们的推荐在不同情况下依然有效,我们可以进行敏感性分析。

在本案例中,我们可以改变准则层权重或方案层权重,以模拟不同的决策者对各个准则和方案的偏好。例如,我们可以将交通和安全的权重提高,以反映决策者更重视这两个方面的情况。然后,我们重新计算合成权重,并检查最佳城市是否仍然是城市B。

通过多次敏感性分析,我们可以评估我们的推荐对不同情况的适应性。如果城市B在大多数情况下依然是最佳选择,那么我们可以更有信心地认为它是一个稳健的推荐。

代码:

% 准则权重矩阵
W = [1, 1/3, 1/5; 3, 1, 1/2; 5, 2, 1];
% 计算准则层的特征向量和特征值
[V, D] = eig(W);
% 归一化特征向量
w = V(:,1)/sum(V(:,1));

% 方案权重矩阵
A1 = [1, 2, 4; 1/2, 1, 2; 1/4, 1/2, 1];
A2 = [1, 1/3, 1/4; 3, 1, 1/2; 4, 2, 1];
A3 = [1, 1/2, 1/4; 2, 1, 1/3; 4, 3, 1];

% 计算方案层的特征向量和特征值
[V1, D1] = eig(A1);
[V2, D2] = eig(A2);
[V3, D3] = eig(A3);

% 归一化特征向量
w1 = V1(:,1)/sum(V1(:,1));
w2 = V2(:,1)/sum(V2(:,1));
w3 = V3(:,1)/sum(V3(:,1));

% 计算合成权重
synthetic_weights = [w1, w2, w3]' * w;

% 找到最佳城市
[~, best_city] = max(synthetic_weights);

% 显示结果
city_names = {'城市A', '城市B', '城市C'};
fprintf('最佳城市为:%s\n', city_names{best_city});

结论

基于层次分析法(AHP)的数学建模分析表明,城市B是举办重大活动的最佳选择。敏感性分析进一步证实了我们的推荐在不同情况下的稳健性。

需要注意的是,AHP是一种定性和定量相结合的方法,因此在实际应用中需要充分考虑决策者的主观判断。另外,我们的分析仅基于有限的准则和方案,实际决策可能需要考虑更多的因素。总之,在实际应用中,AHP分析结果可以作为决策者的一个参考依据,但需要结合实际情况进行综合考虑。

猜你喜欢

转载自blog.csdn.net/m0_68036862/article/details/130478432