数学建模Matlab之评价类方法

news2024/11/28 23:52:45

大部分方法来自于http://t.csdnimg.cn/P5zOD

层次分析法

层次分析法(Analytic Hierarchy Process, AHP)是一种结构决策的定量方法,主要用于处理复杂问题的决策分析。它将问题分解为目标、准则和方案等不同层次,通过成对比较和计算权重值来实现决策问题的定量分析。

主要步骤

  1. 建立层次结构模型:

    • 首先确定决策问题的目标、准则和方案等不同层次,并构建层次结构模型。这个在代码中是没有的,需要提前进行。
  2. 成对比较构建判断矩阵:

    • 通过成对比较各准则和方案的相对重要性,构建判断矩阵。
    • 在层次分析法代码示例中,判断矩阵A由用户输入。
  3. 计算权重值:

    • 使用特征值方法计算判断矩阵的权重值
    • 示例代码中,通过求A的最大特征值B和对应的特征向量C来计算权重值Q
  4. 一致性检验:

    • 进行一致性检验来确保判断矩阵的合理性。
    • 代码中,使用一致性指标CICR进行检验,如果CR<0.10,判断矩阵通过一致性检验。
  5. 结果输出:

    • 输出各向量的权重向量Q,表示每个准则或方案的相对重要性。
    • 如果判断矩阵未通过一致性检验,需要对判断矩阵重新构造。

代码示例 

clc;
clear;
% 判断矩阵A,必须保证判断矩阵是互反的。每个元素 A(i, j) 表示第 i 个指标相对于第 j 个指标的重要性。
A= [1 3 5 5
    1/3 1 3 5
    1/5 1/3 1 3
    1/5 1/5 1/3 1];
[m,n]=size(A);                     %获取指标个数

%RI 是一个随机一致性指数,它是用来进行一致性检验的。每个值 RI(n) 对应于一个n阶判断矩阵的一致性检验的标准值。
% RI 数组中只包含了11个值,这是因为通常情况下,判断矩阵的阶数不会超过11。如果有更多的指标,您可能需要查找或计算相应阶数的 RI 值。
RI=[0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.51];
R=rank(A);                         %求判断矩阵的秩
[V,D]=eig(A);                      %求判断矩阵的特征值和特征向量,V特征值,D特征向量;
tz=max(D);
B=max(tz);                         %最大特征值
[row, col]=find(D==B);             %最大特征值所在位置
C=V(:,col);                        %对应特征向量
CI=(B-n)/(n-1);                    %计算一致性检验指标CI
CR=CI/RI(1,n);
%代码进行一致性检验来确保判断矩阵的合理性。
%如果一致性检验通过(即 CR < 0.10),则继续计算权重;否则,需要重新构造判断矩阵。
if CR<0.10
    disp('CI=');disp(CI);
    disp('CR=');disp(CR);
    disp('对比矩阵A通过一致性检验,各向量权重向量Q为:');
    Q=zeros(n,1);
    for i=1:n
        Q(i,1)=C(i,1)/sum(C(:,1)); %特征向量标准化
    end
    Q'                              %输出权重向量
else
    disp('对比矩阵A未通过一致性检验,需对对比矩阵A重新构造');
end
sc = Q';

其中,有以下注意事项:

1.判断矩阵A,必须保证判断矩阵是互反的

2.RI 是一个随机一致性指数,它是用来进行一致性检验的。RI 数组中只包含了11个值,这是因为通常情况下,判断矩阵的阶数不会超过11。如果有更多的指标,可能需要查找或计算相应阶数的 RI 值。

3.数模论文中只要使用到了层次分析法,就必须画层次结构图,无论文章是否需要压缩篇幅,这和层次分析法的使用绑在一起。


 熵权法

熵权法同样是一种决策分析的方法,用于确定各个决策指标的权重。该方法主要依赖于信息熵的概念。在决策分析中,信息熵用来度量某个决策指标的离散程度。如果一个指标的变化越大(即更离散),那么它应该被赋予更大的权重。熵权法通过计算每个指标的信息熵来确定各个指标的权重。

 主要步骤

 

  1. 非负数化和归一化处理:

    • 代码中,首先进行了对原始数据的非负数化和归一化处理(x(:,i)=(x(:,i)-min(x(:,i)))/(max(x(:,i))-min(x(:,i)))+1),使得所有数据值介于1和2之间。
  2. 计算概率值:

    • 然后,计算每个数据点在其所在列的比例(p(i,j)=x(i,j)/sum(x(:,j))),这可以被看作是数据点的概率值。
  3. 计算信息熵:

    • 接下来,使用计算得到的概率值来计算每列(即每个决策指标)的信息熵(E(j)=-k*sum(e(:,j)))。信息熵被用来度量一个随机变量的不确定性,即决策指标的离散程度。
  4. 计算差异系数:

    • 之后,计算每个指标的差异系数(d=1-E)。差异系数用来度量一个指标与其他指标的差异程度。
  5. 计算权重:

    • 最后,计算每个决策指标的权重(w(j)=d(j)/sum(d)),这个权重代表了该指标在决策分析中的重要性。
  6. 计算综合分数:

    • 使用计算得到的权重来计算每个数据点的综合分数(score(i,1)=sum(x(i,:).*w)

对于计算综合分数,可能说的比较模糊,作者举个例子,假设我们有以下简化的数据和权重:

x = [
1 2
3 4
] %数据

w = [0.3, 0.7] % 权重

第一个数据点(也就是行向量[1,2],在现实生活中可能代表某一个样本,分量值相当于熵权法的指标值,我们就是在求得各指标的权重后通过权重+样本的指标值求得样本的综合分数的)的综合分数计算如下:

score(1)=(1×0.3)+(2×0.7)=1.7score(1)=(1×0.3)+(2×0.7)=1.7

第二个数据点的综合分数计算如下:

score(2)=(3×0.3)+(4×0.7)=3.7score(2)=(3×0.3)+(4×0.7)=3.7

从而得到综合分数数组 score = [1.7, 3.7]

通过这种方法,可以利用计算出的权重对每个数据点进行评分,从而进行进一步的分析和决策。

代码示例

x = [
2.41	52.59	0	9.78	1.17
1.42	53.21	0	6.31	1.63
4.71	35.16	1	9.17	3.02
14.69	15.16	2.13	10.35	7.97
0.94	72.99	0	7.39	0.61
1.43	72.62	0	8.16	0.51
2.21	67.5	0	9.84	0.85
3.79	51.21	0	12.95	1.43
1.23	85.09	3.97	4.08	0.13
1.71	82.07	2.88	4.97	0.33
3.63	66.9	3.18	8.57	0.71
5.72	49.77	3.44	10.52	1.83
1.49	79.51	6.53	2.58	0.27
1.66	81.44	5.18	2.74	0.36
2.41	76.32	5.88	4.13	0.54
4.42	59.65	7.64	8.38	1.02
3.27	88.42	3.36	2.85	0.14
11.27	70.05	5.77	6.07	0.19
13.18	62.45	5.66	7.85	0.74
15.83	56.28	2.92	9.97	1.14
11.59	80.23	1.04	3.64	0.2
26.67	55.7	2.02	8.13	0.38
28.51	51.07	2.12	9.66	1.46
3.69	87.26	0	3.12	0.18
3.27	84.43	0	5.43	0.31
3.98	79.99	0	6.62	0.57
1.59	86.5	0	6.14	0.14
4.31	82.26	0	4.71	0.2
4.6	72.79	0	8.27	0.52
4.99	81.93	0	7.52	0.16
4.66	75.09	0	10.24	0.33
5.08	61.02	1.57	15.7	0.53
12.49	83.06	0	1.2	1.06
4.67	92.77	0	0.33	0.58
5.8	90.32	0	0.91	0.8
97.76	0	0	0	2.14
94.75	0	0	1.42	2.83
93.76	0	0	1.18	3.24
3.48	81.43	7.45	1.33	0.14
4.2	80	5.3	2.21	0.18
8.83	71.28	5.34	2.9	0.43
5.39	79.6	6.87	2.64	0.31
7.67	74.74	5.91	3.4	0.66
19.65	55.4	4.87	6.14	1.2
2.63	90.74	3.18	1.42	0.14
2.8	89.7	2.85	1.96	0.14
4.07	85.12	3.43	3.52	0.25
5.7	83.4	0	4.48	0.1
4.03	81.35	0	6.18	0.19
4.11	73.45	0	9.71	0.45
2.78	89.53	0	4.23	0.2
3.92	83.2	0	7.59	0.32
5.21	71.37	3.09	10.29	0.72
18.98	76.81	0	1.05	0.31
19.79	73.56	0	0.88	0.42
19.86	70.07	0	1.72	0.74
16.61	67.57	3.77	3.15	1.16
6.91	82.18	4.19	0	0.1
2.93	83.06	1.93	5.14	0.32
8.47	78.11	4.04	4.02	0.31
12.29	70.48	3.89	4.32	0.69
3.98	84.81	4.76	1.97	0.18
7.67	78.13	4.22	4.57	0.35
14.04	66.89	4.41	6.27	0.47
14.62	59.29	5.28	8.35	0.77
1.97	85.16	4.87	3.27	0.23
2.16	86.83	3.82	2.25	0.15
4.81	74.9	5.05	5.97	0.5
7.44	57.98	6.75	10.73	1.04
2.04	86.01	4.79	2.95	0.13
3.49	79.79	5.67	4.28	0.15
6.47	68.02	6.71	5.74	0.2
7.94	59.12	7.14	5.93	1.42
];

[m,n]=size(x);
lamda=ones(1,n); % 人为修权,1代表不修改计算后的指标权重
for i=1:n
    x(:,i)=(x(:,i)-min(x(:,i)))/(max(x(:,i))-min(x(:,i)))+1; % 对原始数据进行非负数化、归一化处理,值介于1-2之间
end
for i=1:m
    for j=1:n
        p(i,j)=x(i,j)/sum(x(:,j));
    end
end
k=1/log(m);
for i=1:m
    for j=1:n
        if p(i,j)~=0
            e(i,j)=p(i,j)*log(p(i,j));
        else
            e(i,j)=0;
        end
    end
end
for j=1:n
    E(j)=-k*sum(e(:,j));
end
d=1-E;
for j=1:n
    w(j)=d(j)/sum(d);% 指标权重计算
end
for j=1:n
    w(j)=w(j)*lamda(j)/sum(w.*lamda);% 修改指标权重
end
for i=1:m
    score(i,1)=sum(x(i,:).*w);% 计算综合分数
    % 一个数据点对应矩阵每一行数据,根据大量的数据点,确定其权重,然后计算每一个数据点的综合得分(数据点本例中对应四个指标值,分别利用权重求得综合得分
end
disp('各指标权重为:')
disp(w) %权重越大,该指标在决策分析中的重要性越高。
disp('各项综合分数为:')
disp(score) %每个数据点的综合分数。综合分数可以被用来进行进一步的分析或决策。
Out = mean (score,1)

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

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

相关文章

软件设计模式系列之二十——备忘录模式

备忘录模式目录 1 模式的定义2 举例说明3 结构4 实现步骤5 代码实现6 典型应用场景7 优缺点8 类似模式9 小结 备忘录模式是一种行为型设计模式&#xff0c;它允许我们在不暴露对象内部细节的情况下捕获和恢复对象的内部状态。这个模式非常有用&#xff0c;因为它可以帮助我们实…

HTML——列表,表格,表单内容的讲解

文章目录 一、列表1.1无序&#xff08;unorder&#xff09;列表1.2 有序&#xff08;order&#xff09;列表1.3 定义列表 二、表格**2.1 基本的表格标签2.2 演示 三、表单3.1 form元素3.2 input元素3.2.1 单选按钮 3.3 selcet元素 基础部分点击&#xff1a; web基础 一、列表 …

全面解析‘msvcp140.dll丢失的解决方法’这个问题

msvcp140.dll 是什么东西&#xff1f; msvcp140.dll 是 Microsoft Visual C 2015 Redistributable Package 中的一个动态链接库文件。它包含了 C运行时库中的函数和类&#xff0c;这些函数和类在开发 C应用程序时被广泛使用。msvcp140.dll 的主要作用是在 Windows 操作系统中提…

1.5.C++项目:仿mudou库实现并发服务器之socket模块的设计

项目完整版在&#xff1a; 一、socket模块&#xff1a;套接字模块 二、提供的功能 Socket模块是对套接字操作封装的一个模块&#xff0c;主要实现的socket的各项操作。 socket 模块&#xff1a;套接字的功能 创建套接字 绑定地址信息 开始监听 向服务器发起连接 获取新连接 …

WordPress外贸建站Astra免费版教程指南(2023)

在WordPress的外贸建站主题中&#xff0c;有许多备受欢迎的主题&#xff0c;如AAvada、Astra、Hello、Kadence等最佳WordPress外贸主题&#xff0c;它们都能满足建站需求并在市场上广受认可。然而&#xff0c;今天我要介绍的是一个不断颠覆建站人员思维的黑马——Astra主题。 …

【计算机网络】DNS原理介绍

文章目录 DNS提供的服务DNS的工作机理DNS查询过程DNS缓存 DNS记录和报文DNS记录DNS报文针对DNS服务的攻击 DNS提供的服务 DNS&#xff0c;即域名系统(Domain Name System) 提供的服务 一种实现从主机名到IP地址转换的目录服务&#xff0c;为Internet上的用户应用程序以及其他…

网页采集工具-免费的网页采集工具

在当今数字化时代&#xff0c;网页采集已经成为了众多领域的必备工具。无论是市场研究、竞争情报、学术研究还是内容创作&#xff0c;网页采集工具都扮演着不可或缺的角色。对于许多用户来说&#xff0c;寻找一个高效、免费且易于使用的网页采集工具太不容易了。 147SEO工具的强…

ElasticSearch更新数据后查不到的问题

一、前言 上一篇文章还是2个星期前写的&#xff0c;近段时间有点懒&#xff0c;本来这篇也不太愿意动笔写&#xff0c;但这两天关注数据&#xff0c;发现新的一年已经收获了4个粉丝&#xff0c;首先感谢大家的关注&#xff0c;我以后还是会尽量多写一点。这篇文章讲一下今天我…

从零手搓一个【消息队列】BrokerServer 创建核心类, 数据库设计与实现

文章目录 一、创建核心类1, 交换机2, 交换机类型3, 队列4, 绑定5, 交换机转发 & 绑定规则6, 消息7, 消息属性 二、数据库设计1, 使用 SQLite2, 使用 MyBatis2.1, 创建 Interface2.2, 创建 xml 文件 三、硬盘管理 -- 数据库1, 创建 DataBaseManager 类2, init() 初始化数据库…

【ONE·Linux || 多线程(一)】

总言 多线程&#xff1a;进程线程基本概念、线程控制、互斥与同步。 文章目录 总言1、基本概念1.1、补充知识1.1.1、堆区细粒度划分1.1.2、虚拟地址到物理空间的转化 1.2、如何理解线程、进程1.2.1、如何理解线程&#xff1f;1.2.2、如何理解进程&#xff1f; 1.3、实践操作1.…

职业规划,什么是职业兴趣 - 我喜欢做什么?

能够在工作岗位上面做出成绩的人&#xff0c;都是结合自身兴趣&#xff0c;对职业进行合理规划的那一类。尤其是步入中年以后&#xff0c;能够创造出巨大价值的人&#xff0c;无一例外都是喜欢自己职业的人。没有将兴趣融入工作的人&#xff0c;只能够忍受默默无闻地活着&#…

liunx的攻击

1.场景和分析 2.病毒分析 3.解决步骤

Linux学习记录——삼십일 socket编程---TCP套接字

文章目录 TCP套接字简单通信1、服务端1、基本框架2、获取连接 2、客户端3、多进程4、多线程5、线程池6、简单的日志系统7、守护进程8、其它 TCP套接字简单通信 本篇gitee 学习完udp套接字通信后&#xff0c;再来看TCP套接字。 四个文件tcp_server.hpp&#xff0c; tcp_serve…

黑豹程序员-放大招-架构师学习路线图

文章目录 全栈软件架构师技术路线六环能力图一、开发基础二、增强软件三、海量数据四、软件智能五、并发增强六、桌面开发 全栈软件架构师技术路线 六环能力图 作为软件开发&#xff0c;我们的任务就是开发软件业务系统。 如果要做好一个软件系统需要的技能是非常多的。我归纳…

分布式链路追踪--SkyWalking7.0.0+es7.0.0

分布式链路追踪–SkyWalking ​ 微服务的出现&#xff0c;的确解决了一些业务痛点&#xff0c;但是也造成了新的问题比如随着调用链的拉长&#xff0c;如果想要知道请求为什么这么慢&#xff0c;这个请求到底经历了哪些环节&#xff0c;又依赖了哪些东西&#xff0c;在微服务架…

基于Java的婚纱影楼管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

Bluespec SytemVerilog 握手协议接口转换

01、引言 由于接口控制信号上的差异&#xff0c;要实现Bluespec SystemVerilog(BSV)生成的代码和外部Verilog代码之间的正确交互是一件比较麻烦同时容易出错的事情。在BSV中, 模块之间的交互都是基于Action或ActionValue这两类method完成。下图展示了使用BSV设计的某一模块的接…

综合应用QGIS软件,实现商场选址分析

一、实验要求 ①离城市主要交通道路50米内&#xff0c;保证商场交通的便利性。 ②在居民区100米内&#xff0c;便于居民步行到商场。 ③距离停车场100米内&#xff0c;便于顾客停车。 ④距离其他商场500米范围之外&#xff0c;减少竞争压力。 二、实验数据 ①城市地区主要…

机器学习算法基础--层次聚类法

文章目录 1.层次聚类法原理简介2.层次聚类法基础算法演示2.1.Single-linkage的计算方法演示2.2.Complete-linkage的计算方法演示2.3.Group-average的计算方法演示 3.层次聚类法拓展算法介绍3.1.质心法原理介绍3.2.基于中点的质心法3.3.Ward方法 4.层次聚类法应用实战4.1.层次聚…