精华内容
下载资源
问答
  • ahp层次分析法matlab代码
    千次阅读
    2022-03-08 01:02:46

    Ⅰ.问题引入

    张三决定从三种车型中选购一种,选择标准主要有:价格、耗油量、舒适程度、外表。经过反复思考,构造它们之间的成对比较判断矩阵如下:

    三种车型a、b、c关于价格、耗油量、舒适程度、外表的成对比较判断矩阵如下:

    问题:

    i.  根据上述矩阵可以看出四项指标在张三心中的比重是不同的,请按由重到轻顺序将它们排列;

    ii.  哪辆车型最便宜,哪辆车型最省油,哪辆车型最舒适,哪辆车型最漂亮?

    iii.  用层次分析法确定张三对这三种车型的喜欢程度。

    Ⅱ.问题分析与求解

    根据题意,建立模型结构图如下:

    根据成对比较判断矩阵,对矩阵具体数值标度作出说明如下:

    标度

    含义

    1

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

    3

    表示两个因素相比,一个因素比另一个因素稍微重要

    5

    表示两个因素相比,一个因素比另一个因素明显重要

    7

    表示两个因素相比,一个因素比另一个因素强烈重要

    9

    表示两个因素相比,一个因素比另一个因素极端重要

    2,4,6,8

    上述两相邻标度判断的中值

    倒数

    因素i与j比较的判断aij,则因素j与i比较的判断aji=1/aij

    符号说明如下:

    符号

    符号说明

    λmax

    最大特征值

    n

    成对比矩阵的阶数

    w1

    准则层对目标层的特征向量

    wi

    方案层对目标层的特征向量

    CI

    一致性指标

    RI

    随机一致性指标

    CR

    一致性比率

    A

    车型选购

    B1

    价格

    B2

    耗油量

    B3

    舒适程度

    B4

    外表

    数据处理如下:

    查询随机一致性指标RI:

    阶数

    1

    2

    3

    4

    5

    6

    7

    RI

    0

    0

    0.52

    0.89

    1.12

    1.26

    1.36

    8

    9

    10

    11

    12

    13

    14

    15

    1.41

    1.46

    1.49

    1.52

    1.54

    1.56

    1.58

    1.59

    对于正互反矩阵A,阶数n=4,可得RI=0.89

    计算一致性比率CR:

    CR=CI/RI

    按照规定,若CR=0,有完全的一致性;若CR接近0(一般以CR≤0.1为参照),有较好的一致性;若CR>0.1,则偏离一致性。

    解得:CR=0.0743<0.1,通过一致性检验。同理,分别检验矩阵B1、B2、B3、B4的一致性。

    汇总各指标权重如下:

    B1

    B2

    B3

    B4

    w1

    0.5755

    0.2761

    0.0965

    0.0518

    wi

    0.5390

    0.1109

    0.6194

    0.1932

    0.2973

    0.7311

    0.2842

    0.7235

    0.1638

    0.1580

    0.0964

    0.0833

    λmax

    3.0092

    3.1190

    3.0858

    3.0649

    Ⅲ.结果说明

    i.  对于问题一,可知准则层对目标层的特征向量w1=[0.5755,0.2761,0.0965,0.0518],因此,四项指标在心中的比重从重到轻顺序为B1>B2>B3>B4,即价格>耗油量>舒适程度>外表。

    ii.  对于问题二,方案层对目标层的特征向量

    可知各方案在不同指标中的权重

    价格由便宜到昂贵:

    车型a(0.5390)>车型b(0.2973)>车型c(0.1638)

    耗油量由少到多:

    车型b(0.7311)>车型c(0.1580)>车型a(0.1109)

    舒适程度由舒适到不适:

    车型a(0.6194)>车型b(0.2842)>车型c(0.0964)

    外表由漂亮到一般:

    车型b(0.7235)>车型a(0.1932)>车型c(0.0833)

    因此,在价格这一指标中,车型a最便宜;在耗油量这一指标中,车型b最省油;在舒适程度这一指标中,车型a最舒适;在外表这一指标中,车型b最漂亮。

    iii.  对于问题三,各方案对目标的组合权重如下:

    车型a对目标的组合权重为:

    0.5755*0.5390+0.2761*0.1109+0.0965*0.6194+0.0518*0.1932=0.4106

    车型b对目标的组合权重为:0.5755*0.2973+0.2761*0.7311+0.0965*0.2842+0.0518*0.7235=0.4379

    车型c车型c对目标的组合权重为:

    0.5755*0.1638+0.2761*0.1580+0.0965*0.0964+0.0518*0.0833=0.1515

    因此,方案层对目标的组合向量为:

    (0.4106,0.4379,0.1515)T

    转换为百分比,即对车型a的喜欢程度为41.06%,对车型b的喜欢程度为43.79%,对车型c的喜欢程度为15.15%。综合各指标的权重后,对车型的喜欢程度排序为:车型b>车型a>车型c。

    Ⅳ.matlab程序实现

    此处提供3种matlab程序作为参考:

    %第一种matlab程序
    function result=AHP(mat)
    %% 数据加载(判断矩阵载入)
    A=mat;
    n=size(A,1);
    %% 特征值法求权重
    % 第一步:求出矩阵A的最大特征值以及其对应的特征向量
    
    [V,D]=eig(A);%V是特征向量, D是由特征值构成的对角矩阵(除了对角线元素外,其余位置元素全为0)
    Max_eig=max(max(D)); 
    
    D==Max_eig;
    [r,c]=find(D == Max_eig,1);%找到D中第一个与最大特征值相等的元素的位置,记录其行和列
    
    %对求出的特征向量进行归一化即可得到权重
    V(:,c);
    disp('特征值法求权重的结果为:');
    disp(V(:,c)./sum(V(:,c)));
    %找到的最大特征值的列数c找到对应的特征向量,然后再进行标准化。
    result=V(:,c)./sum(V(:,c));
    
    CI=(Max_eig - 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);
    disp('一致性指标CI=');disp(CI);
    disp('一致性比例CR=');disp(CR);
    if CR<0.10
        disp('因为CR < 0.10,所以该判断矩阵A的一致性可以接受!');
    else
        disp('注意:CR >= 0.10,因此该判断矩阵A需要进行修改!');
    end
    end
    
    
    %% 在命令窗口输入判断矩阵
    clc;clear;
    %% 4指标评价
    A=[ 1   3   7   8;
        1/3 1   5   5;
        1/7 1/5 1   3;
        1/8 1/5 1/3 1]
    AHP_A=AHP(A);
    
    %% 价格
    A1=[1   2   3;
        1/2 1   2;
        1/3 1/2 1]
    AHP_A1=AHP(A1);
    
    %% 耗油量
    A2=[1 1/5 1/2;
        5 1   7  ;
        2 1/7 1]
    AHP_A2=AHP(A2);
    
    %% 舒适程度
    A3=[1   3   5;
        1/3 1   4;
        1/5 1/4 1]
    AHP_A3=AHP(A3);
    
    %% 外表
    A4=[1   1/5 3;
        5   1   7;
        1/3 1/7 1]
    AHP_A4=AHP(A4);
    
    %% 计算
    s=[AHP_A1 AHP_A2 AHP_A3 AHP_A4] %汇总
    s1=[s(:,1)*AHP_A(1) s(:,2)*AHP_A(2) s(:,3)*AHP_A(3) s(:,4)*AHP_A(4)] %乘比例
    
    evaluate=[sum(s1(1,:)) sum(s1(2,:)) sum(s1(3,:))]
    %第二种matlab程序
    clc,clear 
    fid=fopen('C:/Users/Administrator/Desktop/txt3.txt','r');  
    n1=4;n2=3; a=[]; 
    for i=1:n1    
        tmp=str2num(fgetl(fid));      
        a=[a;tmp]; %读准则层判断矩阵 
    end
    for i=1:n1     
        str1=char(['b',int2str(i),'=[];']);     
        str2=char(['b',int2str(i),'=[b',int2str(i),';tmp];']);     
        eval(str1);     
        for j=1:n2         
            tmp=str2num(fgetl(fid));         
            eval(str2); %读方案层的判断矩阵     
        end
    end
    ri=[0,0,0.58,0.90,1.12,1.24,1.32,1.41,1.45]; %一致性指标 
    [x,y]=eig(a); 
    lamda=max(diag(y)); 
    num=find(diag(y)==lamda); 
    w0=x(:,num)/sum(x(:,num)); 
    cr0=(lamda-n1)/(n1-1)/ri(n1) 
    for i=1:n1     
        [x,y]=eig(eval(char(['b',int2str(i)])));     
        lamda=max(diag(y));     
        num=find(diag(y)==lamda);     
        w1(:,i)=x(:,num)/sum(x(:,num));     
        cr1(i)=(lamda-n2)/(n2-1)/ri(n2); 
    end
    %第三种matlab程序
    clear,clc 
    A=[1 3 7 8;
    1/3 1 5 5;    
    1/7 1/5 1 3;    
    1/8 1/5 1/3 1]; 
    v=sum(A);  %列求和 
    d=diag(v);  %生成以向量v为对角的对角矩阵 
    norm_a=A*(d^-1);  %列归一化矩阵 
    norm_a=sum(norm_a,2);  %行求和 
    w_a=norm_a./sum(norm_a)  %求特征向量 
    Aw_a=A*w_a  %求权重向量 
    eigenvalue=diag(eig(A));  %求特征值 
    lambda_a=eigenvalue(1)  %求最大特征值 
    ci_a=(lambda_a-4)/3  %求一致性指标 
    cr_a=ci_a/0.89  %求一致性比率  
    
    B1=[1 2 3;
    1/2 1 2;
    1/3 1/2 1];
    v=sum(B1);
    d=diag(v);
    norm_b1=B1*(d^-1);
    norm_b1=sum(norm_b1,2);
    w_b1=norm_b1./sum(norm_b1)
    B1w_b1=B1*w_b1
    eigenvalue=diag(eig(B1));
    lambda_b1=eigenvalue(1)
    ci_b1=(lambda_b1-3)/2
    cr_b1=ci_b1/0.52
    
    B2=[1 1/5 1/2;     
    5 1 7;     
    2 1/7 1]; 
    v=sum(B2);
    d=diag(v);
    norm_b2=B2*(d^-1);
    norm_b2=sum(norm_b2,2);
    w_b2=norm_b2./sum(norm_b2)
    B2w_b2=B2*w_b2
    eigenvalue=diag(eig(B2));
    lambda_b2=eigenvalue(1)
    ci_b2=(lambda_b2-3)/2
    cr_b2=ci_b2/0.52
    
    B3=[1 3 5;     
    1/3 1 4;     
    1/5 1/4 1]; 
    v=sum(B3);
    d=diag(v);
    norm_b3=B3*(d^-1);
    norm_b3=sum(norm_b3,2);
    w_b3=norm_b3./sum(norm_b3)
    B3w_b3=B3*w_b3
    eigenvalue=diag(eig(B3));
    lambda_b3=eigenvalue(1)
    ci_b3=(lambda_b3-3)/2
    cr_b3=ci_b3/0.52
    
    B4=[1 1/5 3;     
    5 1 7;     
    1/3 1/7 1]; 
    v=sum(B4);
    d=diag(v);
    norm_b4=B4*(d^-1);
    norm_b4=sum(norm_b4,2);
    w_b4=norm_b4./sum(norm_b4)
    B4w_b4=B4*w_b4
    eigenvalue=diag(eig(B4));
    lambda_b4=eigenvalue(1)
    ci_b4=(lambda_b4-3)/2
    cr_b4=ci_b4/0.52

    更多相关内容
  • AHP层次分析法matlab代码
  • AHP层次分析法matlab程序,可应用于模糊数学中利用层次分析法求权重
  • 层次分析法的程序代码,不错的一段代码,希望能喜欢
  • 层次分析法,简称AHP,是指将与决策总是有关的元素分解成目标、准则、方案等层次,在此基础之上进行定性和定量分析的决策方法。该方法是美国运筹学家匹茨堡大学教授萨蒂于20世纪70年代初,在为美国国防部研究"...
  • 层次分析法matlab程序源代码,实现AHP分析
  • AHP层次分析法资料、matlab代码
  • 层次分析法完整代码,m文件
  • AHP层次分析法 Matlab 源码
  • MATLAB实现AHP层次分析法仿真+含代码操作演示视频+参考文献资料 运行注意事项:使用matlab2021a或者更高版本测试,运行里面的Runme.m文件,不要直接运行子函数文件。运行时注意matlab左侧的当前文件夹窗口必须是...
  • 数学建模的层次分析法AHP)的MATLAB程序
  • AHP层次分析法matlab实现

    千次阅读 2020-11-16 21:01:41
    AHP的实现方法(matlab

    AHP层次分析法的步骤和matlab实现方法

    AHP (Analytic Hierarchy Process)层次分析法是美国运筹学家T. L. Saaty教授于二十世纪70年代提出的一种实用的多方案或多目标的决策方法,是一种定性与定量相结合的决策分析方法。常被运用于多目标、多准则、多要素、多层次的非结构化的复杂决策问题,特别是战略决策问题,具有十分广泛的实用性。用AHP分析问题大体要经过以下五个步骤:

    1建立层次结构模型

    在这里插入图片描述
    将决策的目标、考虑的因素(决策准则)和决策对象按它们之间的相互关系分为最高层、中间层和最低层,绘出层次结构图。

    2构造判断矩阵

    在确定各层次各因素之间的权重时,如果只是定性的结果,则常常不容易被别人接受,因而Saaty等人提出:一致矩阵法,即:
    不把所有因素放在一起比较,而是两两相互比较。
    对比时采用相对尺度,以尽可能减少性质不同因素相互比较的困难,以提高准确度。设计相应的准则
    在这里插入图片描述
    A=[1 1/9 1/3 1/4 1/8 1/7;9 1 5 6 2 3;3 1/5 1 2 1/3 1/2;…%续行matlab准则代码
    4 1/6 1/2 1 1/3 1/2;8 1/2 3 3 1 2;7 1/3 2 2 1/2 1];

    3层次单排序

    所谓层次单排序是指,对于上一层某因素而言,本层次各因素的重要性的排序。
    在这里插入图片描述

    4判断矩阵的一致性检验

    所谓一致性是指判断思维的逻辑一致性。如当甲比丙是强烈重要,而乙比丙是稍微重要时,显然甲一定比乙重要。这就是判断思维的逻辑一致性,否则判断就会有矛盾。
    在这里插入图片描述

    5层次总排序

    确定某层所有因素对于总目标相对重要性的排序权值过程,称为层次总排序。
    这一过程是从最高层到最底层依次进行的。对于最高层而言,其层次单排序的结果也就是总排序的结果。
    在这里插入图片描述
    在这里插入图片描述

    6代码实现:

    A=[1 1/9 1/3 1/4 1/8 1/7;9 1 5 6 2 3;3 1/5 1 2 1/3 1/2;…%续行 4 1/6 1/2 1 1/3 1/2;8 1/2 3 3 1 2;7 1/3 2 2 1/2 1];%输入规则表;
    [v,d]=eig(A);%特征向量,特征值
    d=eig(A);%得出特征值向量d
    max1=max(d);
    n=find(d==max1);%查找最大值
    w1=v(:,n);
    w=w1/sum(w1)%一致性指标
    CI=(max1-6)/(6-1);
    RI=1.24;
    CR=CI/RI;
    if CR<0.1
    fprintf(‘通过一致性检验\n’);
    else
    fprintf(‘重新赋值因为一致性不被接受\n’);
    end

    三级标题

    四级标题

    五级标题
    六级标题
    展开全文
  • 本程序是用matlab遍写 有很强的实用性
  • AHP层次分析法代码+文档,文档非常详细,适合初学者使用,构造判断矩阵的讲解(层次分析法),代码可正常运行
  • 层次分析法AHP),可以用来对于选择学校选择职位之类的事情进行决策
  • 通过MATLAB语言编写层析分析法,实现多方案的优选
  • 层次分析法AHPMatlab代码,包含一个具体的计算评估指标权重的算例,做评估的同学可参考,亲测可用
  • 本资源是我在数模竞赛中建立模型时涉及到的AHP模型判断矩阵计算的部分,代码亲测有效,现在将代码完善上传到CSDN中,希望可以对各位小伙伴有帮助~
  • 分总目标层、准则层、方案层进行层次分析,最后给出各个方案的抉择权重。可以根据具体问题改变判定矩阵对具体问题进行具体分析。
  • 层次分析法 、效益分配、幻方
  • 层次分析法:计算代码在8文件中最后一页上,有实例。
  • 层次分析法(Analytic Hierarchy Process简称AHP)是将决策总是有关的元素分解成目标、准则、方案等层次,在此基础之上进行定性和定量分析的决策方法
  • AHP层次分析法代码,最大程度简化您的计算量
  • 通过使用matlab,对层次分析法进行求解,从而进一步确定权重,更快的解决问题。
  • AHP层次分析法matlab源程序代码

    热门讨论 2011-03-13 17:00:56
    部分代码: 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);
  • AHP层次分析matlab代码

    2014-11-18 13:44:40
    层次分析法(Analytic Hierarchy Process,简称AHP)是对定性问题进行定量分析的一种简便、灵活而又实用的多准则决策方法。
  • 层次分析法AHP)——matlab代码实现

    万次阅读 多人点赞 2019-04-17 10:02:45
    层次分析法AHP)的主要思想是根据研究对象的性质将要求达到的目标分解为多个组成因素,并按组成因素间的相互关系,将其层次化,组成一个层次结构模型,然后按层分析,最终获得最高层的重要性权值。层次分析法把一...

       

           层次分析法(AHP)的主要思想是根据研究对象的性质将要求达到的目标分解为多个组成因素,并按组成因素间的相互关系,将其层次化,组成一个层次结构模型,然后按层分析,最终获得最高层的重要性权值。层次分析法把一个复杂的无结构问题分解组合成若干部分或若干因素,上一层次对相邻的下一层次的全部或某些元素起支配作用,这样就形成了自上而下的层次结构,通过相关指标之间的两两比较对系统中各指标进行优劣判断,利用判断结果来综合计算各指标间的权重,从而对主要的影响因素进行排序。基本流程如下:

     

    应用AHP解决问题的思路是:首先,把解决的问题分层系列化,即根据问题分解为不同的组成因素,按照因素之间的相互影响和隶属关系将其分层聚类组合,形成一个递阶的、有序的层次结构模型;然后,对模型中每一层次因素的相对重要性,依据人们对客观显示的判断给予定量表示,再利用数学方法确定每一层次全部因素相对重要性次序的权值;最后,通过综合计算各层因素相对重要性的权值,得到最底层值,以此作为评价和选择方案的依据。AHP方法将人们的思想过程和主观判断数学化,不仅简化了系统分析和计算工作,而且有助于决策者保持其思维过程和决策过程的一致性,所以,对于一些复杂问题能得到比较好的结果。AHP方法往往能够和其他模型相结合使用。

    1.建立层次结构模型

    确定问题所包含的指标,并根据各指标的相互关系将各因素分组、分层。按照最高层、中间层和最低层的形式进行排列,建立反映各指标关联隶属关系建立起层次结构模型。

    2.建立判断矩阵

    进行层次分析就要在建立问题层次模型的基础上,对层次结构中各指标的相对重要性做出判断,并将判断结果用一定的数值表示出来,写成矩阵形式,即所谓的判断矩阵。判断矩阵是进行层次分析的数据来源,构建判断矩阵是层次分析法的关键。

    3.层次单排序和一致性检验

    层次单排序是根据判断矩阵计算出对于上一层指标而言求层次与之有联系的指标的重要性权值。计算判断矩阵的特征值和特征向量,即对判断矩阵 计算满足下列关系的特征值和特征向量:

    在实际分析中,由于客观事物的复杂性以及不同专家认识上的差异,使每一个判断矩阵都具有完全一致性是不可能的,为考察判断矩阵能否适用于层次分析,就要判断矩阵做一致性检验。为检验判断矩阵的一致性,需要计算一致性指标:

    计算综合权重

    计算目标准则层权重向量为:

    以上来好久之前做的一个体系贡献率中部分用到的ahp方法,由于部分是公式所以就直接粘图了。

    以下是我自己编的matlab程序:

    function [Q]=AHP(B)
    %Q为权值,B为对比矩阵
    %导入判别矩阵B
    [n,m]=size(B);
    %判别矩阵具有完全一致性
    for i=1:n
        for j=1:n
            if B(i,j)*B(j,i)~=1   
            fprintf('i=%d,j=%d,B(i,j)=%d,B(j,i)=%d\n',i,j,B(i,j),B(j,i))  
            end  
        end
    end
    %求特征值特征向量,找到最大特征值对应的特征向量
    [V,D]=eig(B);
    tz=max(D);
    tzz=max(tz);
    c1=find(D(1,:)==max(tz));
    tzx=V(:,c1);%特征向量
    %权
    quan=zeros(n,1);
    for i=1:n
    quan(i,1)=tzx(i,1)/sum(tzx);
    end
    Q=quan;
    %一致性检验
    CI=(tzz-n)/(n-1);
    RI=[0,0,0.58,0.9,1.12,1.24,1.32,1.41,1.45,1.49,1.52,1.54,1.56,1.58,1.59];
    %判断是否通过一致性检验
    CR=CI/RI(1,n);
    if CR>=0.1
       fprintf('没有通过一致性检验\n');
    else
      fprintf('通过一致性检验\n');
    end
    
    end

     

    展开全文
  • 层次分析法AHPMatlab代码,自己写的,可以直接用。有问题随时私信我。
  • 摘要:本文详细阐述了层次分析法及其步骤,利用Matlab和GUI技术整合来实现层次分析法,并用实例加以验证。使得层次分析法界面化简洁化,操作更便捷。  1.层次分析法基本原理  层次分析法(Analytic ...
  • 层次分析法MATLAB代码,可直接进行使用,注释简单易懂

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 555
精华内容 222
热门标签
关键字:

ahp层次分析法matlab代码

友情链接: code.rar