数学建模01-层次分析法
一.层次分析法
•日常工作、生活中的决策问题
•涉及经济、社会等方面的因素
•作比较判断时人的主观选择起相当大的作用,各因素的重要性难以量化(用于难以完全定量的复杂事情)
1.基本步骤
层次分析法的运用主要分为以下几个步骤:
- 将问题条理化,层次化,构造出一个有层次的结构模型。层次分为三层:目标层,准则层和方案层。
- 比较同一层次元素对上一层次同一目标的影响,从而确定它们在目标中所占的比重。写出成对比较矩阵。
- 对所写矩阵进行一致性检验。
2.成对比较矩阵
标度 | 重要程度 |
---|---|
1 | 两个元素同等重要 |
3 | 前者稍重要 |
5 | 前者明显重要 |
7 | 前者强烈重要 |
9 | 前者极端重要 |
2,4,6,8为上诉判断中间值。
设要比较的n个元素y={y1,……,yn}对目标Z的影响,确定它们在Z中的比重。每次取其中两个元素yi和yj,用aij表示yi与yj对Z的影响之比:
aij>0 , aji=1/aij (i,j=1,2,……,n)
A=(aij)称为成对比较矩阵或判断矩阵。满足上式的矩阵称为正互反阵。
3.例题1(实践以上步骤)
旅游问题:设置有三个地点供小张选择,长白山1,拉萨2,杭州3,他考虑的因素有费用
y1,景色y2,居住y3,饮食y4,交通y5。
-
对以上问题进行分析和建模:
-
确定对目标的重要程度,写出成对比较矩阵。
A =
[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;]
B1 =
[1,2,5;
1/2,1,2;
1/5,1/2,1;]
B2 =
[1,1/3,1/8;
3,1,1/3;
8,3,1;]
B3 =
[1,1,3;
1,1,3;
1/3,1/3,1;]
B4 =
[1,3,4;
1/3,1,1;
1/4,1,1;]
B5 =
[1,1,1/4;
1,1,1/4;
4,4,1;] -
检验上成对比较矩阵的一致性并求出权重计算出结果。
4.代码片段
disp('请输入判断矩阵A(n阶)');
A=input('A=');
[n,n]=size(A);
x=ones(n,100);
y=ones(n,100);
m=zeros(1,100);
m(1)=max(x(:,1));
y(:,1)=x(:,1);
x(:,2)=A*y(:,1);
m(2)=max(x(:,2));
y(:,2)=x(:,2)/m(2);
p=0.0001;i=2;k=abs(m(2)-m(1));
while k>p
i=i+1;
x(:,i)=A*y(:,i-1);
m(i)=max(x(:,i));
y(:,i)=x(:,i)/m(i);
k=abs(m(i)-m(i-1));
end
a=sum(y(:,i));
w=y(:,i)/a;
t=m(i);
disp('特征值法求权重:');
disp(w);
%算数平均法求权重
sum_a = sum(A);
[n,n] = size(A);
sum_a = repmat(sum_a,n,1);
stand_a = A./sum_a;
x = sum(stand_a,2)/n;
disp('算数平均法求权重:');
disp(x);
%几何平均法求权重
prduct_a = prod(A,2);
prduct_n_a = prduct_a.^(1/n);
z = prduct_n_a./sum(prduct_n_a);
disp('几何平均法求权重:');
disp(z);
%以下是一致性检验
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];
CR=CI/RI(n);
if CR<0.10
disp('此矩阵的一致性可以接受!');
disp('CI=');disp(CI);
disp('CR=');disp(CR);
end
以上代码执行后输入需要计算的矩阵即可。
(以上文章及代码在查看各种网课和相关资料后整理自用。)