#数学建模 层次分析法
第一次接触数学建模比赛是今年的电工杯,由于没有好好的储备建模知识,没有取得成绩。因此,从现在开始积累模型。
今天学习的是层次分析法
原理
层次分析法根据问题的性质和要达到的总目标,将问题分解为不同的组成因素,并按照因素间的相互关联影响以及隶属关系将因素按不同层次聚集组合,形成一个多层次的分析结构模型,从而最终使问题归结为最低层(供决策的方案、措施等)相对于最高层(总目标)的相对重要权值的确定或相对优劣次序的排定。
上面是小石老师的的PPT里对层次分析法的解释。
分层
层次分析法是将问题分层,大致为目标层、准则层、方案层。下面以旅游目的地的例子进行说明。
有三个地点:桂林、苏杭、四川三个地点目的地,确定去哪一个地方。
目标层:桂林、苏杭、四川三个地点中的某一个地点。
准则层:对目标层的不同评判标准。如气候、交通、景点数等。
方案层:桂林、苏杭、四川三个地点。
我们的目的就是通过方案层和准则层计算得出目标层。
绘出层次结构图
构造判断(成对比较)矩阵
- 不把所有因素放在一起比较,而是两两相互比较对此时采用相对尺度,以尽可能减少性质不同的诸因素相互比较的困难,以提高准确度。
- 成对比较矩阵是表示本层所有因素针对上一层某一个因素的相对重要性的比较。成对比较矩阵矩阵的元素a;;用Santy的1- -9标度方法给出。
这是准则层的成对比较矩阵。是对几个因素对目的地决策的影响大小成对比较,再根据Santy-成对比较矩阵标度表而生成的矩阵。可以根据矩阵计算出每个因素所占的权重。
方案层的成对比较矩阵个数是由决定因素个数所决定的。即针对于每个决定因素,都有每个方案间的比较。
方案层里的因素的权重与准则层里的各个因素下该方案的权重相乘,就得到目标层对方案层的权重。权重最高的就是最佳方案。
在生成成对比较矩阵的过程中,涉及到一致性检验。即若A21=2,A13=4,则A23=8,但A23通常只是在8附近,在一定的范围内。
层次分析法将定性的问题定量解决,十分巧妙。最关键的部分是生成成对比较矩阵。矩阵里的参数需要通过查阅资料来确定。
最后小石老师说层次分析法适用于解决小问题,不适合大模型的解决。
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(w);
%以下是一致性检验
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