层次分析法AHP+例题求解+代码实现

本文为北海的数模课程学习笔记,课程出自微信公众号:数学建模BOOM。

 

求赞!求收藏!求关注!

目录

模型简介

模型框架

数据处理注意事项

适用赛题

特点

例子

评选/排名

决策分析

模型建立与求解

科学地设定权重

判断矩阵

 一致性检验

 算术平均法求权重

问题求解

​编辑代码求解

一致性检验

算术平均法求权重

模型简介

模型框架

目标层:目标是对几位b站up主进行综合评价,评选出综合得分第一名。

准则层:可量化的几个指标。

方案:就是可能的所有结果。

数据处理注意事项

  • 数量级归一化处理
  • 区分重要性,给不同指标分别赋予权重

适用赛题

特点

方案层必须明确 :必须从题目中确定所有方案
缺点是具有主观性 :评价指标的权重往往是主观设定的
优点是可处理复杂系统 :为 多准则或无结构特性的复杂决策问题提供简便的决策方法

例子

评选/排名

目标层很明确:谁是第一、第二 ……
一般题目会提供准则层和相应数据,往往有经验(文献)可循

决策分析

面临 多种方案时 ,需要依据一定的标准选择某一种方案
可能需要自行查找数据、查文献确定方案层,方案层和准则层 较为复杂
不同的评价模型(评价指标和权重等不同),会得出不同的结果

模型建立与求解

科学地设定权重

判断矩阵

 一致性检验

 掌握模型对数学建模就够用了,MATLAB中有可以直接求出最大特征值的函数

 

 算术平均法求权重

问题求解

代码求解

clc,clear

% 输入判断矩阵
A = [1 2 3 5
    1/2 1 1/2 2
    1/3 2 1 2
    1/5 1/2 1/2 1];

一致性检验

根据输入的判断矩阵,求出最大特征值,计算一致性比例CR,来判断是否通过一致性检验。

% eig求出矩阵特征值。max求最大值
maxlam = max(eig(A))
% 对于二维矩阵,~将忽略行数,而n将接收列数。
[~,n]=size(A)       % 评价指标个数,就是A的行数。A是方阵,行数列数一样
RI=[0,0,0.58,0.9,1.12,1.24,1.32,1.41,1.45];
CI=(maxlam-n)/(n-1)
CR=CI/RI(n)
if CR<0.10 %如果误差小于0.1则可以接受
    disp('该矩阵通过一致性检验。');
else
    disp('该矩阵未通过一致性检验!');
    return      % 终止运行
end

算术平均法求权重

% 归一化处理
[n,~]=size(A);      % 判断矩阵A是方阵,返回行数n即评价指标个数
Asum=sum(A,1);      % 按列求和  
Aprogress=A./(ones(n,1)*Asum); %点除,意思是对应位置相除

%每一行分别求和,求和的结果除以𝑛,得到的列向量就是权重向量
W=sum(Aprogress,2)./n;  

代入原始数据并初始化,每项指标乘以权重后相加(数据矩阵乘以权重向量),求出最终得分:

% 输入原始数据
% 注意,要确保同一列的数据单位相同!!!
data = [1686.4 3183 12000 397
        903.6 1916.4 3439.6 43
        837.6 817.6 4748 1159
        824.9 1296.4 12000 442
        2110.2 1465.7 6199.5 228]; 

% 归一化处理
[mm,nn]=size(data);     % 数据行数和列数
for j=1:nn  % 针对每一列
    msum=sum(data(:,j));     % 求这一列元素之和
    for i=1:mm      % 针对每一行
        data(i,j)=data(i,j)./msum;      % 每个元素的值都除以所在列的元素之和
    end
    
end

% 数据矩阵乘以权重列向量
% 也就是综合评分=0.49粉丝数+0.18播放数+0.23获赞数+0.1稿件数
grade = data*W
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值