数学建模--层次分析法~~深入解读

news2024/12/27 10:59:43

目录

1.基本概念

(1)研究案例

(2)模型框架

(3)阐述说明

(4)注意事项

2.模型的建立和求解

(1)数量级的统一

(2)归一化处理

(3)设置相应的权重

(4)科学设置权重

(5)发现问题矛盾

(6)一致性检验

(7)求解得到新的权重

3.matlab代码求解


1.基本概念

(1)研究案例

(2)模型框架

这个层次分析法适用的赛题的这个模型框架就是下面的这个,被划分为目标层,准则层,以及这个方案层,目标层就是我们想要求解的目标,准则层就是我们想要去评判的依据,方案层就是所有的可能的方案和结果;

例如对上面的这个up主的评价排名里面,我们可以使用这个粉丝数量,视频的播放量,点赞的数量和这个稿件的数量作为评判的标准;

方案层就是所有的可能结果,对于上面的这五个up主,每一个up主都是有可能作为这个第一名的,因此这个方案层里面就有五种可能的结果;

(3)阐述说明

我们要规范这个数量级以及这个权重的问题,权重显示的就是这个评判标准的重要性,下面的这个是拿罗翔老师作为一个例子的,这个罗翔老师的稿件的数量和视频的播放量不在一个数量级上面,因此这两个数据进行这个比较,运算都是没有意义的,我们到时候要在不改变这个单项排名的情况下进行归一化处理,让这两个都处于同一个数量级上面;

(4)注意事项

这个层次分析法既有缺点,也有优点,缺点就是这个层次分析法不同的这个评价标准的权重都是我们自己认为设定的,这个就会具有很强的主观性;

优点就是,即使面对复杂的问题,层次分析法依然可以提供便捷的解决方案;

2.模型的建立和求解

(1)数量级的统一

我们只看这个粉丝的数量,这个罗翔老师的粉丝的数量是最多的,我们进行相关的处理之后需要保证这个罗翔老师的粉丝的数量仍旧是第一名;

(2)归一化处理

就是按这个对应的数值除以这一列相关数值的相加求和,得到的就是这个归一化处理之后的结果,这个结果就表示对应的新排名,但是这个过程里面可能会出现问题,因为这个过程中数据的运算会涉及到四舍五入,例如这个up里面的第三个和第四个,两个人的粉丝的数量是相差了13万的,但是进行归一化处理之后这个结果却是一样的,这个就是一个缺陷,但是如果我们想要把这个差距显示出来,我们就可以提高这个精度,这样这个归一化处理之后的结果就不是一样了,但是这个差距还是很小的;

(3)设置相应的权重

我们知道,这个粉丝的数量比这个稿件的数量更能去体现这个up主的个人能力,我们肯定不能让这个归一化处理之后的结果简单的相加,而是自行的根据这个指标的重要性设置权重,得到新的结果;

(4)科学设置权重

我们上面也已经介绍了这个权重人为设置就会具有一定的主观性,因此我们需要通过科学的手段去计算权重,这个就需要使用到判断矩阵;这个规则其实也是根据人们的这个经验制定的,矩阵里面的每一个位置的数据,含义就是一个因素相较于另外一个因素的重要性,例如这个我们觉得粉丝数量比稿件的数量明显重要,我们就在以粉丝数量作为横坐标,以稿件的数量作为纵坐标的位置填写上数字5,在关于这个矩阵的主对角线的对称位置我们就是填写的他的倒数,也就是说我们只需要填写这个一个比另外一个重要的情况,反之对应的是使用的这个数据的倒数,在这个比较矩阵上面,主对角线上面的元素都是1,因为这个自己和自己进行比较,这个重要性就是一样的,所以是1

按照这个规则,我们把这个比较矩阵补充完整:

(5)发现问题矛盾

出现问题的原因就是,我们在考虑两个判断标准之间的这个重要性的时候,完全忽略了其他的指标的影响,这个时候我们再去纵览全局,就可能会发现部分的这个数据是矛盾的;

我们上面这个介绍了什么是一致矩阵,这个时候我们需要根据这个矩阵的数据元素进行一致性检验,这个矩阵的作用就是求解最大特征值,带入计算这个一致性比例,看一看是否通过检验,不符合的话需要进行这个数据的修改,重新进行一致性检验;

(6)一致性检验

n和RI关系的表格也是网络上面的数据,我们需要使用的时候直接查表就可以了;

修改的时候,因为我们修改一个数据之后,这个位置对应的关于对角线对称未知的元素也是会受到影响的,因此我们要修改就需要一次性修改两个数据;

(7)求解得到新的权重

通过一致性检验得到新的矩阵,案列进行归一化,再按照行得到新的权重:

这个就是新的权重,左边的数据就是我们上面进行这个数量级的统一之后得到的数据:

上面的这个过程可能会有一些繁琐,我下面放了一张图,方便大家理解:

3.matlab代码求解

(1)上面我们介绍的进行这个一致性检验的时候,需要求借这个判断矩阵的最大特征值,再matlab里面有一个函数可以帮助我们直接进行求解,没有学过线性代数的小伙伴们也不要紧;

(2)这个判断矩阵就是我们进行这个一致性检验之后得到的这个矩阵,看上去这个代码是要进行一致性检验,实际上这个进行一致性检验之前,我们这个矩阵肯定是符合要求的,这么做只是为了让这个过程更加严谨;

(3)下面这个进行的是求解权重,先是按照列求和,再去求解每一行的平均值:

(4)把原始的数据在单位统一的情况下带入,在进行这个归一化处理,确保这个矩阵里面的元素的单位是一样的,这个归一化处理就是得到这个新的比例;

带入的就是下面的这个数据:

(5)相信你也看到了,这个过程并不是很简单,下面我趁着自己刚刚做完,简单的梳理一下,这个matlab里面的这个操作的步骤:

先是在原来的表格上面搞判断矩阵,谁相对于谁的重要程度,再去根据这个一致性检验的公式运算,符合一致性检验之后,按照列求和,算出这一列的每一列数据在这一列的权重,在按照行求解平均值,得到权重(科学的,相对客观的);

在带入这个最原始的数据,在单位统一的情况下还是求解数据在这一列的权重,在按照行求解平均值,让这个向量和权重向量做乘法,得到最后的评分;

(6)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];

% eig求出矩阵特征值。max求最大值
maxlam = max(eig(A))
[~,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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1887446.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用Vue3和Rough.js绘制一个粗糙的3D条形图

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 使用 Rough.js 和 D3.js 绘制粗糙手写风格条形图 应用场景 该代码适用于需要在 Web 应用程序中创建具有粗糙手写风格的条形图的情况。它可以用于数据可视化、信息图表或任何需要以独特和有吸引力的方式呈现数…

Java StringBuffer类和StringBuilder类

在使用 StringBuffer 类时&#xff0c;每次都会对 StringBuffer 对象本身进行操作&#xff0c;而不是生成新的对象&#xff0c;所以如果需要对字符串进行修改推荐使用 StringBuffer。 StringBuilder 类在 Java 5 中被提出&#xff0c;它和 StringBuffer 之间的最大不同在于 St…

【PYG】Cora数据集分类任务计算损失,cross_entropy为什么不能直接替换成mse_loss

cross_entropy计算误差方式&#xff0c;输入向量z为[1,2,3]&#xff0c;预测y为[1]&#xff0c;选择数为2&#xff0c;计算出一大坨e的式子为3.405&#xff0c;再用-23.405计算得到1.405MSE计算误差方式&#xff0c;输入z为[1,2,3]&#xff0c;预测向量应该是[1,0,0]&#xff0…

IAR工程目录移动报错(改变文件目录结构)

刚开始用IAR&#xff0c;记录一下。 工作中使用华大单片机&#xff0c;例程的文件目录结构太复杂了想精简一点。 1.如果原本的C文件相对工程文件&#xff08;.eww文件&#xff09;路径变化了&#xff0c;需要先打开工程&#xff0c;再将所有的.c文件右键Add添加进工程&#xf…

【Godot4.2】Godot中的贝塞尔曲线

概述 通过指定平面上的多个点&#xff0c;然后顺次连接&#xff0c;我们可以得到折线段&#xff0c;如果闭合图形&#xff0c;就可以获得多边形。通过向量旋转我们可以获得圆等特殊图形。 但是对于任意曲线&#xff0c;我们无法使用简单的方式来获取其顶点&#xff0c;好在计…

X-ObjectMount: 对象存储访问接入的新选择

XEOS 自 2017 年发布面世以来&#xff0c;历经 7 年的研发迭代&#xff0c;上个月正式发布了 XSKY SDS 6.4 版本&#xff0c;包含了最新的多站点统一命名空间能力&#xff0c;也标志了 XEOS 在对象存储领域的全方面优势和领先市场地位。 在 XSKY 过去对象存储服务历程里&#…

mysql 命令 —— 查看表信息(show table status)

查询表信息&#xff0c;如整个表的数据量大小、表的索引占用空间大小等 1、查询某个库下面的所有表信息&#xff1a; SHOW TABLE STATUS FROM your_database_name;2、查询指定的表信息&#xff1a; SHOW TABLE STATUS LIKE your_table_name;如&#xff1a;Data_length 显示表…

openGauss真的比PostgreSQL差了10年?

前不久写了MogDB针对PostgreSQL的兼容性文章&#xff0c;我在文中提到针对PostgreSQL而言&#xff0c;MogDB兼容性还是不错的&#xff0c;其中也给出了其中一个能源客户之前POC的迁移报告数据。 But很快我发现总有人回留言喷我&#xff0c;而且我发现每次喷的这帮人是根本不看文…

Python基础003

Python流程控制基础 1.条件语句 内置函数input a input("请输入一段内容&#xff1a;") print(a) print(type(a))代码执行的时候遇到input函数&#xff0c;就会等键盘输入结果&#xff0c;已回车为结束标志&#xff0c;也就时说输入回车后代码才会执行 2.顺序执行…

【问题记录】如何在xftp上查看隐藏文件。

显示隐藏的文件夹 用xftp连接到服务器后&#xff0c;发现有些隐藏的文件夹并未显示出来&#xff0c;通过以下配置&#xff0c;即可使隐藏的文件夹给显示出来。 1.点击菜单栏的"小齿轮"按钮&#xff1a; 2.勾选显示隐藏的文件夹&#xff1a; 3.点击确定即可。

古韵流光:探秘五代耀州窑青瓷提梁倒灌壶的奇妙设计

在陕西历史博物馆的静谧展厅中&#xff0c;一件千年前的瓷器静静陈列&#xff0c;它不仅承载着历史的沉淀&#xff0c;更凝聚了古代匠人的非凡智慧。这便是五代时期的耀州窑青瓷提梁倒灌壶&#xff0c;一件巧夺天工的艺术品&#xff0c;其独特的设计至今仍让人叹为观止。 一、倒…

算法mq 交互通用校验模块设计

背景 当前与算法交互均通过rocketMQ异步交互&#xff0c;绝大部分场景一条请求mq消息应对应一条返回mq&#xff0c;但由于各种原因&#xff08;消息积压、程序bug&#xff09;&#xff0c;可能会导致返回mq超时未返回或者消息丢失。工程侧针对一些重要场景 case by case的通过…

【web3】分享一个web入门学习平台-HackQuest

前言 一直想进入web3行业&#xff0c;但是没有什么途径&#xff0c;偶然在电鸭平台看到HackQuest的共学营&#xff0c;发现真的不错&#xff0c;并且还接触到了黑客松这种形式。 链接地址&#xff1a;HackQuest 平台功能 学习路径&#xff1a;平台有完整的学习路径&#xff…

VS2022+Qt+OpenCV Debug模式下,循环中格式转换引起的内存异常问题 debug_heap.cpp

文章目录 前言一、问题二、报错1.提示图片2.提示堆栈3.反汇编位置 三、解决办法总结 前言 最近在使用VS2022&#xff0c;C&#xff0c;OpenCV&#xff0c;Qt开发时&#xff0c;遇到了一个疑难杂症-在循环中执行字符串格式转换会触发内存异常&#xff0c;经过痛苦的排查过程&am…

Ubuntu下反弹shell的思考

目录 Ubuntu的命令执行环境 bash (Bourne Again SHell): sh (Bourne SHell): dash (Debian Almquist SHell): 它们之间的关系&#xff1a; 可能遇到的问题 一、脚本权限问题 二、命令执行环境(shell解释器)问题 如何解决&#xff1f; 1.修改/bin/sh软连接的指向为bas…

C++字体库开发

建议根据字体需求&#xff0c;多个组合使用。高度定制可基于freeTypeharfbuzz基础库完成。 GitHub - GNOME/pango: Read-only mirror of https://gitlab.gnome.org/GNOME/pango GitHub - googlefonts/fontview: Demo app that displays fonts with a free/libre/open-source …

Java_多线程:线程和死锁

一、线程 1、线程的状态流转 新建状态&#xff08;New&#xff09;&#xff1a;当线程对象对创建后&#xff0c;即进入了新建状态&#xff0c;如&#xff1a;Thread t new MyThread();就绪状态&#xff08;Runnable&#xff09;&#xff1a;当调用线程对象的start()方法&…

JAVA极简图书管理系统,初识springboot后端项目

前提条件&#xff1a; 具备基础的springboot 知识 Java基础 废话不多说&#xff01; 创建项目 配置所需环境 将application.properties>application.yml 配置以下环境 数据库连接MySQL 自己创建的数据库名称为book_test server:port: 8080 spring:datasource:url:…

搜索型数据库的技术发展历程与趋势前瞻

概述 随着数字科技的飞速发展和信息量的爆炸性增长&#xff0c;搜索引擎已成为我们获取信息的首选途径之一&#xff0c;典型的代表厂商如 Google。然而&#xff0c;随着用户需求的不断演变&#xff0c;传统的搜索技术已经无法满足人们对信息的实时性、个性化和多样性的需求。 …

C++基础知识-编译相关

记录C语言相关的基础知识 1 C源码到可执行文件的四个阶段 预处理(.i)、编译(.s)、汇编(.obj)、链接。 1.1 预处理 预处理阶段&#xff0c;主要完成宏替换、文件展开、注释删除、条件编译展开、添加行号和文件名标识&#xff0c;输出.i/.ii预处理文件。 宏替换&#xff0c;…