精华内容
下载资源
问答
  • 层次分析法

    2020-10-29 13:16:42
    层次分析法是一种用于解决评价类问题的数学模型。 当面临n个选择对象和m个指标时需要根据这m个指标对n个指标进行打分,从中选择出一个分数最高的对象作为我们最终的选择。 引例 高考结束后,小明决定在天津理工,...

    层次分析法

    层次分析法是一种用于解决评价类问题的数学模型。
    当面临n个选择对象和m个指标时需要根据这m个指标对n个指标进行打分,从中选择出一个分数最高的对象作为我们最终的选择。

    引例

    高考结束后,小明决定在天津理工,天津工业和天津师范中选择一所高校,那他该选择哪所学校呢?
    在小明的心目中,比较重视大学的学习氛围,校园环境,就业率,男女比例这4个方面
    对于评价类问题我们应该要注意的是三个问题:
    1.我们评价的目标是什么?
    答:我们要选择一所高校
    2.我们为了达到这个目标有哪几种可选的方案?
    答:三种。天津理工,天津师范和天津工业
    3.评价的标准或者说指标是什么?
    答:学习氛围,校园环境,就业率,男女比例
    所以我们可以得到下面的这样一个表格
    在这里插入图片描述
    我们只需要将这个表格补充完整就可以实现对各个对象的打分了。

    层次分析法的思想

    层次分析法最重要的思想是分而治之的思想,一次性的考虑各个指标的关系,往往考虑不周到,所以每次只考虑两个指标之间的关系最终得到各个指标之间的关系(有点像孟德尔的杂交实验的思想)。
    首先确定各个指标之间的关系,即确定各个指标在小明心目中的重要程度。
    在这里插入图片描述
    这个表一般由专家给出,但在实际操作中是学生根据所查到的资料所自己给出得分的。
    后面的所有数据都是由我自己主观给出的,没有任何理论依据,就是瞎填的,哈哈哈。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    上述矩阵叫做正反矩阵,因为题中所给的评判指标个数是n个,所以理论上应该有n+1个正反矩阵,第一个正反矩阵用来判断各个指标的权重,后面的n个矩阵用来给带选择的对象在n个指标下的得分。
    但这些正反矩阵是由人为给出的,所以可能会出现逻辑混乱,比如:
    A = 3B A=C
    B = 3C
    这样就出现了逻辑混乱,所以我们需要对所有的正反矩阵进行一致性检验。

    一致性检验

    1. 计算一致性指标CI
      在这里插入图片描述

    2. 查找对应的平均随机一致性指标RI
      在这里插入图片描述

    3. 计算一致性比例CR
      在这里插入图片描述
      如果CR<0.1,则可以认为该矩阵通过了一致性检验可以接受,否则需要对该矩阵进行修改

    这里给出进行一致性检验的代码。

    clc;clear
    A = [1,5,3,1/2;
        1/5,1,1/2,1/3;
        1/3,2,1,1/3;
        2,3,3,1];    %等待检验的一致性矩阵
    %A = [1,5,3;1/5,1,1/2;1/3,1/2,1];
    %A = [1,1/3,1/2;3,1,3;2,1/3,1];
    %A = [1,1/7,1/2;7,1,5;2,1/5,1];
    %A = [1,3,1;1/3,1,1/3;1,3,1];
    n = size(A,1);    %记录矩阵的维度
    [V,D] = eig(A)  %D是特征值矩阵,V是特征值对应的特征向量
    l = max(max(D))     %求出在特征值矩阵中的最大值
    CI = (l-n)/(n-1)    %计算出一致性检验指标
    RI = [1,0;
        2,0;
        3,0.52;
        4,0.89;
        5,1.12;
        6,1.26;
        7,1.36;
        8,1.41;
        9,1.46;
        10,1.49;
        11,1.52;
        12,1.54;
        13,1.56;
        14,1.58;
        15,1.59];   %录入一致性指标RI
    CR = CI/RI(n,2)
    if CR<0.1
        disp("通过一致性检验");
        L = V(:,1);    %取出最大特征值对应的特征向量
        L = L./(sum(L))  %进行归一化处理
    else
        disp("未通过一致性检验,需要对矩阵中的值进行修改");
    end
    

    然后利用通过检验的矩阵来确定指标的权重以及各个对象在各个指标下的得分,这里有很多种方法,但我一般用的是最主流的特征值法求权重。

    1. 求出矩阵A的最大特征值以及其对应的特征向量
    2. 对求出的特征向量进行归一化即可得到我们的权重

    利用上面的方法我们可以得到最上面的矩阵中我们需要的数据。
    在这里插入图片描述
    到此,我们可以得出每一个学校的得分,比如天津理工的得分为:
    在这里插入图片描述

    总结

    层次分析法是一种针对评判类问题的数学模型,它的所有判断矩阵中的值都需要专家根据很多的理论依据去给出判断矩阵中的数值,这样最终的得分才有意义,但我们在实际操作中,都是自己给出得分,所以层次分析法主观性很严重,但也不妨碍我们将他作为学习数学建模的第一种方法。

    展开全文
  • 前言层次分析法是数学建模过程中最基础的模型之一,主要应用于评价问题层次分析法(AHP)是对一些较为复杂、较为模糊的问题作出决策的简易方法,其适用于那些难以完全定量分析的问题。基本步骤评价类问题在处理评价...

    前言

    层次分析法是数学建模过程中最基础的模型之一,主要应用于评价问题。层次分析法(AHP)是对一些较为复杂、较为模糊的问题作出决策的简易方法,其适用于那些难以完全定量分析的问题。

    基本步骤

    评价类问题

    在处理评价类问题时,应当首先注意一下三个问题:

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

    (2)备选方案有哪些?

    (3)评价指标是什么?

    在解决这类评价类问题时,可以使用AHP方法来解决。首先要将问题条理化、层次化,并构造出一个有层次的结构模型。这种模型一般依据以上三个问题形成三个层级:目标层(O),准则层(C)和方案层(P)。通过查阅文献、询问专家等方式,可以得到各层之间的判断矩阵,并通过判断矩阵来得到个决策之间的评分,以此来决定进行哪些决策。

    AHP基本步骤

    (1)确定三个层级,确定评价指标

    (2)确定判断矩阵

    (3)对判断矩阵进行一致性检验

    (4)计算各决策的权重

    实例

    现在小明要外出旅游,经过初步调查之后决定选择苏杭、北戴河与桂林三地作为备选方案,并挑选了景色、消费、居住环境、饮食、交通五个指标作为判断的主要依据。现对各景点进行评价。

    (1)首先应当确定该评价体系的层级关系,如下图所示:

    (2)构造了层次关系之后,对于同一层次的铬元素关于上一层次的某一准则的重要性进行两两比较,构造判断矩阵。

    如目标层与准则层之间的判断矩阵(O-C矩阵):

    (3)对各判断矩阵进行一致性检验。

    一致性检验的步骤:

    1.计算一致性指标

    C

    I

    CI

    C

    I

    2.查找对应的平均随机一致性指标

    R

    I

    RI

    R

    I

    3.计算一致性比例

    定义python函数如下:

    #一致性检验函数

    def check(A):

    eigen = np.linalg.eig(A)[0]

    n = A.shape[0]

    CI = (max(eigen) - n) / (n - 1)

    RI = [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-1]

    CI = float(CI)

    CR = float(CR)

    #若CI过小,为防止计算误差出现,取0即可

    if abs(CI) < 0.0001:

    CI = 0

    if abs(CR) < 0.0001:

    CR = 0

    print('The CI is:{}'.format(CI))

    print('The CR is:{}'.format(CR))

    if CR < 0.1:

    return 1

    else:

    return 0 #对CR进行判断,用于下面计算权重函数。

    (4)计算权重:

    定义python代码如下:

    #计算权重函数

    def count_p(A):

    q = check(A)

    n = A.shape[0]

    while q:

    weight1 = (np.sum(A/np.sum(A,axis = 0),axis = 1)) / n #算术平均权重

    weight2 = pow(np.prod(A,axis = 1),1/n) / np.sum(pow(np.prod(A,axis = 0),1/n)) #几何平均权重

    eigen,F_vector = np.linalg.eig(A)

    for i in range(n):

    if eigen[i] == np.max(eigen):

    index_e = i

    best = F_vector[:,index_e]

    weight3 = best / np.sum(best) #特征值权重

    print(weight1,'\n',weight2,'\n',weight3,'\n')

    return weight1,weight2,weight3

    else:

    print('Consistency check not pass')

    return 0,0,0

    最后可以计算得三个旅游地的评分。

    完整代码如下:

    #利用层次分析法(AHP)进行评价

    import numpy as np

    #一致性检验函数

    def check(A):

    eigen = np.linalg.eig(A)[0]

    n = A.shape[0]

    CI = (max(eigen) - n) / (n - 1)

    RI = [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-1]

    CI = float(CI)

    CR = float(CR)

    #若CI过小,为防止计算误差出现,取0即可

    if abs(CI) < 0.0001:

    CI = 0

    if abs(CR) < 0.0001:

    CR = 0

    print('The CI is:{}'.format(CI))

    print('The CR is:{}'.format(CR))

    if CR < 0.1:

    return 1

    else:

    return 0 #对CR进行判断,用于下面计算权重函数。

    #计算权重函数

    def count_p(A):

    q = check(A)

    n = A.shape[0]

    while q:

    weight1 = (np.sum(A/np.sum(A,axis = 0),axis = 1)) / n #算术平均权重

    weight2 = pow(np.prod(A,axis = 1),1/n) / np.sum(pow(np.prod(A,axis = 0),1/n)) #几何平均权重

    eigen,F_vector = np.linalg.eig(A)

    for i in range(n):

    if eigen[i] == np.max(eigen):

    index_e = i

    best = F_vector[:,index_e]

    weight3 = best / np.sum(best) #特征值权重

    print(weight1,'\n',weight2,'\n',weight3,'\n')

    return weight1,weight2,weight3

    else:

    print('Consistency check not pass')

    return 0,0,0

    #数据获取与处理

    tx = open('O-C-P.txt').readlines()

    for i in range(len(tx)):

    tx[i] = np.array(list(eval(tx[i])))

    n0 = int((np.size(tx[i]))**0.5)

    tx[i] = tx[i].reshape(n0,n0)

    A0 = tx[0]

    print(A0)

    o_c1,o_c2,o_c3 = count_p(A0)

    C_P = []

    for Ai in tx[1:]:

    print(Ai)

    c_p1,c_p2,c_p3 = count_p(Ai)

    C_P.append(list(c_p3))

    c_p = np.array(C_P)

    score = []

    for i in range(len(c_p[0,:])):

    score.append(sum(o_c3*c_p[:,i])) #计算权重

    print(score)

    O-C-P文件内容:

    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

    1,2,5,1/2,1,2,1/5,1/2,1

    1,1/3,1/8,3,1,1/3,8,3,1

    1,1,3,1,1,3,1/3,1/3,1

    1,3,4,1/3,1,1,1/4,1,1

    1,1,1/4,1,1,1/4,4,4,1

    最终结果:

    得分分别为0.299,0.245,0,455

    参考文献

    [1]清风教学视频第一讲

    [2]司守奎, 徐珂文, 李日华. 数学建模算法与程序[J]. 海军航空工程学院, 2007, 9: 95-98

    展开全文
  • TOPSIS

    2020-01-18 22:38:39
    2 上一节讲到层次分析方法,那层次分析法什么局限性呢? 3引例: 那么就不能具体反映出分数的差距。 注意上图的归一化处理,理解一下 为什么加起来就是1. 原因分析: 所以经过以上分析记住...

    1什么是TOPSIS法?(也是用于评价类问题求解)

    因为层次分析法的局限所以说,当给了具体数据评分时,就不能再用层次分析方法了。

    2  上一节讲到层次分析方法,那层次分析法有什么局限性呢?

     

    3引例:

    那么就不能具体反映出分数的差距。

    注意上图的归一化处理,理解一下  为什么加起来就是1.

    原因分析:

    所以经过以上分析要记住一个构造计算评分的公式:(上面说了这么多就是为了得到这个公式)

    拓展问题:

    注意:知道什么是极大型指标?什么是极小型指标?

    为了解决上面极大性指标和极小型指标的差异,我们可以把两种指标统一指标类型。下面是方法(一般来说所有指标转化为极大型)

    指标正向化之后还要进行标准化处理(消除单位或消除量纲):

    注意标准化公式是什么?标准化不同于归一化

    计算得分你可能想到很简单呀,上面矩阵按行相加然后归一化就行了呀,这样也是一种方法,但是这样你并没有掌握这个公式的精华

    上面是一个引例:能体现出topsis方法的思想,而下面这个是topsis方法总结:

    注意上面例子是为了引出topsis方法下面才是最重要的步骤:

     

    4   topsis方法步骤:

    下面讲解怎么将其他三种类型指标转化为极大型指标。

     

    加权重的计算得分

    5  练习题

    注:mat文件就是矩阵文件就是matlab软件创建的文件后缀名,

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 《你必须知道的495个C语言问题

    热门讨论 2010-03-20 16:41:18
    1.28 文件中的第一个声明就报出奇怪的语法错误,可我看没什么问题。这是为什么? 15 1.29 为什么我的编译器不允许我定义大数组,如double array[256][256]? 15 命名空间 15 1.30 如何判断哪些标识符可以使用,...
  • 2019数据运营思维导图

    2019-03-29 21:34:09
    数据分析是精细化运营,建立起体系化思维(金字塔思维) 自上而下 目标—维度拆解—数据分析模型—发现问题—优化策略 自下而上 异常数据 影响因素 影响因素与问题数据之间的相关关系 原因 优化策略 数据化运营7大...
  • 数据运营思维导图

    2018-04-26 14:24:22
    数据分析是精细化运营,建立起体系化思维(金字塔思维) 自上而下 目标—维度拆解—数据分析模型—发现问题—优化策略 自下而上 异常数据 影响因素 影响因素与问题数据之间的相关关系 原因 优化策略 数据...
  • 产品经理学习视频

    2018-07-27 14:21:07
    8-层次分析法1.mp4 9-层次分析法2.mp4 10-数据透视表.mp4 数据分析.xmind 2产品运营 1-产品运营理念和基础.mp4 2-用户运营.mp4 3-内容运营.mp4 4-活动运营.mp4 5-产品营销推广.mp4 6-运营活动策划.mp4 ...
  • 编译原理中文版

    2014-12-01 09:14:48
    1.1 为什么要用编译器 2 1.2 与编译器相关的程序 3 1.3 翻译步骤 5 1.4 编译器中的主要数据结构 8 1.5 编译器结构中的其他问题 10 1.6 自举与移植 12 1.7 TINY样本语言与编译器 14 1.7.1 TINY语言 15 1.7.2 TINY...
  • 编译原理--龙书

    2013-10-11 17:09:34
    1.1 为什么要用编译器 2 1.2 与编译器相关的程序 3 1.3 翻译步骤 5 1.4 编译器中的主要数据结构 8 1.5 编译器结构中的其他问题 10 1.6 自举与移植 12 1.7 TINY样本语言与编译器 14 1.7.1 TINY语言 15 1.7.2 ...
  • 编译原理(龙书,带目录)

    热门讨论 2012-04-20 14:42:16
    1.1 为什么要用编译器 2 1.2 与编译器相关的程序 3 1.3 翻译步骤 5 1.4 编译器中的主要数据结构 8 1.5 编译器结构中的其他问题 10 1.6 自举与移植 12 1.7 TINY样本语言与编译器 14 1.7.1 TINY语言 15 1.7.2 TINY...
  • 编译原理及实践

    2012-04-25 23:12:05
    1.1 为什么要用编译器 2 1.2 与编译器相关的程序 3 1.3 翻译步骤 5 1.4 编译器中的主要数据结构 8 1.5 编译器结构中的其他问题 10 1.6 自举与移植 12 1.7 TINY样本语言与编译器 14 1.7.1 TINY语言 15 1.7.2 TINY...
  • 《编译原理及实践》电子书下载

    热门讨论 2010-03-25 09:51:06
    1.1 为什么要用编译器 2 1.2 与编译器相关的程序 3 1.3 翻译步骤 5 1.4 编译器中的主要数据结构 8 1.5 编译器结构中的其他问题 10 1.6 自举与移植 12 1.7 TINY样本语言与编译器 14 1.7.1 TINY语言 15 1.7.2 TINY...
  • 编译原理及实现

    2014-06-27 00:09:35
    1.1 为什么要用编译器 2 1.2 与编译器相关的程序 3 1.3 翻译步骤 5 1.4 编译器中的主要数据结构 8 1.5 编译器结构中的其他问题 10 1.6 自举与移植 12 1.7 TINY样本语言与编译器 14 1.7.1 TINY语言 15 1.7.2 TINY...
  • 1.1 为什么要用编译器 2 1.2 与编译器相关的程序 3 1.3 翻译步骤 5 1.4 编译器中的主要数据结构 8 1.5 编译器结构中的其他问题 10 1.6 自举与移植 12 1.7 TINY样本语言与编译器 14 1.7.1 TINY语言 15 1.7.2 TINY...
  • 1.1 为什么要用编译器 2 1.2 与编译器相关的程序 3 1.3 翻译步骤 5 1.4 编译器中的主要数据结构 8 1.5 编译器结构中的其他问题 10 1.6 自举与移植 12 1.7 TINY样本语言与编译器 14 1.7.1 TINY语言 15 1.7.2 TINY...
  • 1.1 为什么要用编译器 2 1.2 与编译器相关的程序 3 1.3 翻译步骤 5 1.4 编译器中的主要数据结构 8 1.5 编译器结构中的其他问题 10 1.6 自举与移植 12 1.7 TINY样本语言与编译器 14 1.7.1 TINY语言 15 1.7.2 TINY...
  • 1.1 为什么要用编译器 2 1.2 与编译器相关的程序 3 1.3 翻译步骤 5 1.4 编译器中的主要数据结构 8 1.5 编译器结构中的其他问题 10 1.6 自举与移植 12 1.7 TINY样本语言与编译器 14 1.7.1 TINY语言 15 1.7.2 TINY...
  • 1.1 为什么要用编译器 2 1.2 与编译器相关的程序 3 1.3 翻译步骤 5 1.4 编译器中的主要数据结构 8 1.5 编译器结构中的其他问题 10 1.6 自举与移植 12 1.7 TINY样本语言与编译器 14 1.7.1 TINY语言 15 1.7.2 TINY...
  • 编译原理(龙书)有目录

    热门讨论 2010-10-22 15:43:22
    1.1 为什么要用编译器 2 1.2 与编译器相关的程序 3 1.3 翻译步骤 5 1.4 编译器中的主要数据结构 8 1.5 编译器结构中的其他问题 10 1.6 自举与移植 12 1.7 TINY样本语言与编译器 14 1.7.1 TINY语言 15 1.7.2 TINY...
  • 还有知识工程方法,例如,场记分析法、卡片分类法、分类表格技术和基于模型的知识获取等 。 (2) 模拟和分析需求 需求分析和模拟又包含三个层次的工作。首先是需求建模。需求模型的表现形式有自然语言、半形式化(如...
  • 1.1 为什么要用编译器 2 1.2 与编译器相关的程序 3 1.3 翻译步骤 5 1.4 编译器中的主要数据结构 8 1.5 编译器结构中的其他问题 10 1.6 自举与移植 12 1.7 TINY样本语言与编译器 14 1.7.1 TINY语言 15 1.7.2 TINY...
  • C++程序员面试宝典

    热门讨论 2013-04-01 13:36:19
    面试题121 使用引用形参有什么问题 133 面试题122 指针形参与引用形参有什么区别 134 11.3 类成员函数 135 面试题123 什么是类成员函数?有哪些特别的类成员函数 135 面试题124 什么是静态函数?如何使用静态函数 ...
  • 软件需求(PDF书籍)

    2012-07-27 14:32:31
    所以在开发周期早期提高项目需求分析的质量,减少重复劳动,通过控制项目范围的扩展及需求变更来达到按计划完成预定目标是当前我国软件业急需解决的问题—这也是本书讨论的主要内容。 目 录 译者序 前言 第一部分...
  • 编译原理电子书

    2007-08-07 16:42:16
    目 录 译者序 前言 第1章 概论 1 1.1 为什么要用编译器 2 1.2 与编译器相关的程序 3 1.3 翻译步骤 5 1.4 编译器中的主要数据结构 8 1.5 编译器结构中的其他问题 10 1.6 自举与移植 12...
  • 1.2 数据挖掘解决的问题 2 1.3 数据挖掘的起源 3 1.4 数据挖掘任务 4 1.5 本书的内容与组织 7 文献注释 7 参考文献 8 习题 10 第2章 数据 13 2.1 数据类型 14 2.1.1 属性与度量 15 2.1.2 数据集的类型 ...
  • 所以在开发周期早期提高项目需求分析的质量,减少重复劳动,通过控制项目范围的扩展及需求变更来达到按计划完成预定目标是当前我国软件业急需解决的问题—这也是本书讨论的主要内容。 目 录 译者序 前言 第一部分 ...
  • 12.1 原型是“什么”和“为什么原型 103 12.2 水平和垂直的原型 103 12.3 抛弃型原型或进化型原型 104 12.4 书面原型和电子原型 106 12.5 原型评价 107 12.6 原型的最大风险 108 12.7 原型成功的因素...

空空如也

空空如也

1 2 3 4
收藏数 69
精华内容 27
关键字:

层次分析法要注意什么问题