熵权法详解+MATLAB求解评奖学金例题

2023-10-24 00:40

本文主要是介绍熵权法详解+MATLAB求解评奖学金例题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

求赞!求收藏!求关注!

目录

模型简介

熵的概念

具体例子

适用赛题

数据全面、缺少文献或主观依据的题目

注意事项

典型例题与原理讲解

典型例题

 数据标准化

指标的熵值和变异程度

权重与评分

代码求解

读取excel文件数据

指标标准化

求熵和权重和最终评价排名

模型简介

熵的概念

信息论中,熵是对 不确定性 的一种度量,可判断一个事件的 随机性 无序 程度
用熵值判断某个指标的 离散程度 ,指标的 离散程度越大,该指标对 综合评 价的影响越大

具体例子

以考试成绩为例。

科目越容易拉开差距,熵越大,权(重)越大。

科目越不容易拉开差距,熵越小,权(重)越小。

如果一门课所有人都是一样的分,熵为1,权为0。

适用赛题

数据全面、缺少文献或主观依据的题目

例如 评价河流水质 ,已知河流的含氧量、 PH 值、细菌密度、生物密度等数据
缺乏评价水质的文献资料 ,或者文献内的 说法不一
即文献很难帮助我们确定影响水质最重要的因素是哪一个
也很难告诉我们其余指标的重要程度如何衡量
此时即可使用熵权法, 根据数据本身建立评价体系

注意事项

熵权法与其他方法(层次分析法、 TOPSIS 法等)最大的区别就是 完全客观
追求 公平公正 的情况,可优先考虑熵权法
但有时 完全客观 也是缺点, 难以将数据之外的因素考虑进去

典型例题与原理讲解

典型例题

 数据标准化

在代码中,如果有x=0,把x改为一个很小的数,比如0.00001就好。 

 标准化不是必须的,如果没有数值越小越好的负向指标,不同指标的数量级也相同,变量中无负值,那就可以不标准化。

指标的熵值和变异程度

 

权重与评分

 

代码求解

使用熵权法时需要数据全面,有的数据是比赛提供的,有的是需要自己找

数据往往以 excel 文件存储,可在 MATLAB 中用 readmatrix 函数调用
注意调用的 excel 文件需要与代码文件在同一文件夹下!!!

读取excel文件数据

注意,excel文件要和代码文件放在同一文件夹下,否则需要绝对路径
只读取数值,用range表明取哪些

clc,clear
score=readmatrix('data3-3.xlsx','range','B2:I11');

指标标准化

本题可以不标准化,不过为了演示,还是标准化一下

注意:后续求对数,自变量不能为0,故为0时取个0.001即可

[n,m]=size(score);
score2=zeros(n,m);
for j=1:mfor i=1:nscore2(i,j)=(score(i,j)-min(score(:,j)))/(max(score(:,j))-min(score(:,j)));if score2(i,j)==0score2(i,j)=0.0001;   % 求对数不能为0,故取个极小的数endend
end

求熵和权重和最终评价排名

套公式即可

p=score2./sum(score2);
e=-sum(p.*log(p))/log(n);       
g=1-e; 
w=g/sum(g) %计算权重
s=w*p'; %计算各个评价对象的综合评价值[ss,rank]=sort(s,'descend') %对评价值从大到小排序;descend表示降序

求得的rank中,第一个元素是9,意味着第一名是序号9同学;第二个元素是1,意味着第二名是序号1同学……

这篇关于熵权法详解+MATLAB求解评奖学金例题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/271537

相关文章

HTML5的input标签的`type`属性值详解和代码示例

《HTML5的input标签的`type`属性值详解和代码示例》HTML5的`input`标签提供了多种`type`属性值,用于创建不同类型的输入控件,满足用户输入的多样化需求,从文本输入、密码输入、... 目录一、引言二、文本类输入类型2.1 text2.2 password2.3 textarea(严格

C++ move 的作用详解及陷阱最佳实践

《C++move的作用详解及陷阱最佳实践》文章详细介绍了C++中的`std::move`函数的作用,包括为什么需要它、它的本质、典型使用场景、以及一些常见陷阱和最佳实践,感兴趣的朋友跟随小编一起看... 目录C++ move 的作用详解一、一句话总结二、为什么需要 move?C++98/03 的痛点⚡C++

MySQL中between and的基本用法、范围查询示例详解

《MySQL中betweenand的基本用法、范围查询示例详解》BETWEENAND操作符在MySQL中用于选择在两个值之间的数据,包括边界值,它支持数值和日期类型,示例展示了如何使用BETWEEN... 目录一、between and语法二、使用示例2.1、betwphpeen and数值查询2.2、be

python中的flask_sqlalchemy的使用及示例详解

《python中的flask_sqlalchemy的使用及示例详解》文章主要介绍了在使用SQLAlchemy创建模型实例时,通过元类动态创建实例的方式,并说明了如何在实例化时执行__init__方法,... 目录@orm.reconstructorSQLAlchemy的回滚关联其他模型数据库基本操作将数据添

Java中ArrayList与顺序表示例详解

《Java中ArrayList与顺序表示例详解》顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构,:本文主要介绍Java中ArrayList与... 目录前言一、Java集合框架核心接口与分类ArrayList二、顺序表数据结构中的顺序表三、常用代码手动

JAVA线程的周期及调度机制详解

《JAVA线程的周期及调度机制详解》Java线程的生命周期包括NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING和TERMINATED,线程调度依赖操作系统,采用抢占... 目录Java线程的生命周期线程状态转换示例代码JAVA线程调度机制优先级设置示例注意事项JAVA线程

详解C++ 存储二进制数据容器的几种方法

《详解C++存储二进制数据容器的几种方法》本文主要介绍了详解C++存储二进制数据容器,包括std::vector、std::array、std::string、std::bitset和std::ve... 目录1.std::vector<uint8_t>(最常用)特点:适用场景:示例:2.std::arra

C++构造函数中explicit详解

《C++构造函数中explicit详解》explicit关键字用于修饰单参数构造函数或可以看作单参数的构造函数,阻止编译器进行隐式类型转换或拷贝初始化,本文就来介绍explicit的使用,感兴趣的可以... 目录1. 什么是explicit2. 隐式转换的问题3.explicit的使用示例基本用法多参数构造

Android使用java实现网络连通性检查详解

《Android使用java实现网络连通性检查详解》这篇文章主要为大家详细介绍了Android使用java实现网络连通性检查的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录NetCheck.Java(可直接拷贝)使用示例(Activity/Fragment 内)权限要求

MyBatis中的两种参数传递类型详解(示例代码)

《MyBatis中的两种参数传递类型详解(示例代码)》文章介绍了MyBatis中传递多个参数的两种方式,使用Map和使用@Param注解或封装POJO,Map方式适用于动态、不固定的参数,但可读性和安... 目录✅ android方式一:使用Map<String, Object>✅ 方式二:使用@Param