层次分析法算法及matlab和lingo求解一致性

您所在的位置:网站首页 求特征向量步骤怎么写 层次分析法算法及matlab和lingo求解一致性

层次分析法算法及matlab和lingo求解一致性

2024-07-02 22:51| 来源: 网络整理| 查看: 265

资料来源:清风建模

目录

1.确定目标层、准则层和方案层:

2.构造出各层次中的所有判断矩阵[1]P105

3.lingo进行一致性检验[1]P105

参考文献

层次分析法matlab代码三种算法

一、相关函数

方法一:算数平均法

方法二:几何平均法

方法三:特征值法

1.一致性指标CI的计算

层次分析法处理问题类型:决策、评价、分析、预测等

AHP的主要特点是通过建立递阶层次结构,把人类的判断转化到若干因

素两两之间重要度的比较上,从而把难于量化的定性判断转化为可操作的重

要度的比较上面。在许多情况下,决策者可以直接使用AHP进行决策,极大

地提高了决策的有效性、可靠性和可行性,但其本质是一种思维方式,它把

复杂问题分解成多个组成因素,又将这些因素按支配关系分别形成递阶层次

结构,通过两两比较的方法确定决策方案相对重要度的总排序。整个过程体

现了人类决策思维的基本特征,即分解、判断、综合,克服了其他方法回避

决策者主观判断的缺点。

PS:在论文中用到层次分析法时一定要引入层次结构图。

整个过程流程图:

基本步骤:

(1)建立层次分析结构模型(将有关因素自上而下分层(目标—准则或指标—方案或对象),上层受下层影响,而层内各因素基本上相对独立)

(2)构造成对比较阵(用成对比较法和1~9标度,构造各层对上一层某一准则的重要性进行两两比较,构造判断矩阵)

(3)计算权向量并作一致性检验(计算最大特征根和特征向量)

(4)计算组合权向量(并进行排序)

思维过程:(定性分析与定量分析结合起来)

(1)将决策问题分为3个层次;每层有若干元素,各层元素间的关系用相连的直线表示;

(2)通过相互比较确定各准则对目标的权重,及各方案对每一准则的权重;

将上述两组权重进行综合,确定各方案对目标的权重。

1.确定目标层、准则层和方案层: 目标层:一个元素,一般是问题的预定目标和理想结果准则层:包含为了实现目标所设计的中间环节,可以由若干个层次组成,包括所需考虑的准则和子准则方案层:为实现目标可供选择的各种措施和决策方案等

三个问题:

(1)评价的目标是什么?

(2)为了达到这个目标有几种可选的方案?

(3)评价的准则(指标)是什么?

2.构造出各层次中的所有判断矩阵[1]P105

重要程度表格:

标度(定量结果)

含义(定性结果)

1

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

3

一个因素比另一个因素稍微重要

5

一个因素比另一个因素明显重要

7

一个因素比另一个因素强烈重要

9

一个因素比另一个因素极端重要

2,4,6,8

两相邻判断的中值

倒数

若因素i与因素j的重要性之比为aij,那么因素j与因素i重要性之比为aij=1/aij

如果写作,建议翻看《lingo培训基础教程》第P176~P179

如何科学地设定权重?(相对权重向量的确定)

对指标的重要性进行两两比较,构造判断矩阵,从而求出权重。矩阵中aij的意义是第i个指标相对于第j个指标的重要程度。

设想把一块大石头Z分成n个小块c1,c2,…,cn,其重量分别为w1,w2,…,wn,则将n块小石头作两两比较,记ci,cj的相对重量为

要注意比较的逻辑关系,如:AA

3.一致性检验[1]P105

(1)判断矩阵A对应最大特征值λmax的特征向量W,经归一化后即为同一层次相应因素对于上一层次某因素相对重要性的排序权值,这一过程称为层次单排序。

归一化处理方法:

对正向序列x1,x2,x3…,xn进行变换,

则新序列y1,y2,…,yn∈[0,1]且无量纲,并且显然有

若A的最大特征值λmax对应的特征向量W=[w1,w2,…,wn],则aij=wi/wj,任意i,j=1,2,…,n,即(也为正互反矩阵)

(2)检验过程

①计算一致性指标CI,CI定义如下式所示:

②查找相应的平均随机一致性指标RI。对于n=1,…,9,Saay给出了RI的值,如下表:

不同n值对应的RI值

n

1

2

3

4

5

6

7

8

9

RI

0

0

0.58

0.9

1.12

1.24

1.32

1.41

1.45

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

如上表所示,RI值是通过统计计算而得,用随机方法构造1000个样本矩阵:随机从1~9及其倒数中抽取数字构造正互反矩阵,求得最大特征根的平均值λmax',并定义: 

补充:当n的阶数较大也就是指标较多时,

不同n值对应的RI值

n

1

2

3

4

5

6

7

8

9

RI

0

0

0.52

0.89

1.12

1.26

1.36

1.41

1.46

10

11

12

13

14

15

1.49

1.52

1.54

1.56

1.58

1.59

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

如上表所示,RI值是通过统计计算而得,用随机方法构造1000个样本矩阵:随机从1~9及其倒数中抽取数字构造正互反矩阵,求得最大特征根的平均值λmax',并定义:

③计算一致性比例CR,CR定义如下式所示:

当CR请输入判断矩阵A:

6.sum求和函数

(139条消息) Matlab函数学习---sum函数(计算矩阵、数组和向量元素总和)_亦我飞也的博客-CSDN博客_matlab中sum函数用法

S=sum(A,dim)沿维度计算A的所有元素的总和

如:S=sum(A,2)是包含每一列总和的列向量

7.if判断语句

Matlab的判断语句,if所在行后面不需要冒号,但最后一定要以end结尾,中间语句注意缩进

如:

a=input('请输入考试分数:')

请输入考试分数:100

if a>=90

  disp('成绩优秀')

elseif a>=60

  disp('成绩良好')

else

  disp('成绩挂科')

end

输出:成绩优秀

8.for循环 

不用repmat函数而用for循环n次,按行复制已经求和好的行向量

SUM_A=[];

for i=1:n  %n指的是判断矩阵的行数或列数

    SUM_A=[SUM_A;sum_A]

end

9.find函数

可以用来返回向量或矩阵中不为0的元素的位置索引

10.提取矩阵中指定位置的元素

二、判断矩阵计算权重

判断矩阵的由来:一般由专家填写或者问卷调查

方法一:算数平均法

disp('请输入判断矩阵A:')  A=[1 0.5 0.3 0.2; 2 1 0.5 0.3; 3 2 1 0.5; 5 3 2 1] %算数平均法求权重 %①:将判断矩阵按照列归一化(每一个元素除以其所在列的和) % 方法一: sum_A=sum(A); [n,n]=size(A); SUM_A=repmat(sum_A,n,1); % 方法二:初始化SUM_A,再用for循环按行复制已经进行过按列求和的行向量 % SUM_A=[]; % for i=1:n  %n指的是判断矩阵的行数或列数 %     SUM_A=[SUM_A;sum_A] % end B=A./SUM_A; % ②:将归一化的各列按行求和得到列向量,然后每个元素除以n即可得到权重向量 disp('算数平均法求权重的结果为:') disp(sum(B,2)/n)

方法二:几何平均法

权重向量:

 用两种方法得到的结果只有细微差别:

代码如下:

disp('请输入判断矩阵A:') A=[1 0.5 0.3 0.2; 2 1 0.5 0.3; 3 2 1 0.5; 5 3 2 1] [n,n]=size(A); %几何平均法求权重 %①:将A的元素按照行相乘得到一个新的列向量,prod用法类似sum multiply_A=prod(A,2); %②:将新向量的每个分量开n次方根 multiply_n_A=multiply_A.^(1/n); %③:对该列向量进行归一化即可得到权重向量 disp('几何平均法求权重的结果为:') disp(multiply_n_A./sum(multiply_n_A))

方法三:特征值法

代码如下:

disp('请输入判断矩阵A:') A=[1 0.5 0.3 0.2; 2 1 0.5 0.3; 3 2 1 0.5; 5 3 2 1] %①:求矩阵A的最大特征值及其对应的特征向量 %特征值法求权重,V是特征向量,D是由特征值构成的对角矩阵 [V,D]=eig(A) %找到最大特征值,先找D中每一列的最大值,然后再找最大特征值 Max_eig=max(D(:));  %可改成max(max(D)) %找出对角阵D中第一个和最大特征值相等的元素位置,记录它的行和列 [r,c]=find(D==Max_eig,1);  %最大特征值的位置记录为1 %②:对求出的特征向量进行归一化处理即可得到权重 disp('特征值法求权重的结果为:') disp(V(:,c)./sum(V(:,c))) 三、一致性检验

注意:在论文写作中,应该先对判断矩阵进行一致性检验,然后再计算权重,因为只有判断矩阵通过了一致性检验,其权重才是有意义的。在下面的代码中,我们先计算了权重,然后再进行了一致性检验,这是为了顺应计算过程,事实上在逻辑上是说不过去的。因此大家自己写论文中如果用到了层次分析法,一定要先对判断矩阵进行一致性检验。而且要说明的是,只有非一致矩阵的判断矩阵才需要进行一致性检验。如果你的判断矩阵本身就是一个一致矩阵,那么就没有必要进行一致性检验。一致性矩阵的特点:各行/各列之间成倍数关系。

代码如下:

[n,n]=size(A); CI=(Max_eig-n)/(n-1); RI=[0 0 0.58 0.9 1.12 1.24 1.32 1.41 1.32 1.41 1.45]; CR=CI/RI(n) disp('一致性指标CI=');disp(CI); disp('一致性比例CR=');disp(CR); if CR


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3