【数学建模】评价类模型:优劣解距离法

【数学建模】评价类模型:优劣解距离法

目录

【数学建模】评价类模型:优劣解距离法

1:前言

2:算法

1. 将原始矩阵正向化(统一为极大型)

2. 正向矩阵标准化(消除量纲)

3. 计算得分并归一化

3:例题

4:拓展


1:前言

本博客为清风数学建模课程的跟学笔记,关注微信公众号"数学建模学习交流"获取更多优质资料

  • 层次分析法(AHP)的局限性:决策层不能多,否则导致判断矩阵和一致性矩阵差异很大;若题中给出明确的数据,层次分析法显得主观臆断

  • 三点解释:

    1. 比较的对象一般要远大于两个

    2. 比较的指标也往往不只是一个方面的,例如成绩、工时数、课外竞赛得分

    3. 有很多指标不存在理论上的最大值和最小值,例如衡量经济增长水平的指标:GDP增速

2:算法

1. 将原始矩阵正向化(统一为极大型)

  • 常见的四种指标:

    • 极大型(成绩、GDP增速)

    • 极小型(费用、坏品率、污染程度)

    • 中间型(越接近某个值越好)[水质评估时的PH值]

    • 区间型指标(落在某个区间最好)[体温]

  • 极小型指标转化为极大型指标:

  • 设 \{Xi\} 是一组中间型指标序列,中间型指标转化为极大型指标:

-

  • 设 \{Xi\} 是一组中间型指标序列,且最佳的区间为 [a,b],区间型指标转化为极大型指标:

2. 正向矩阵标准化(消除量纲)

  • 指标正向化后,不同指标间还存在不同的量纲,因此还需要标准化处理

 X=[89,1;60,3;74,2;99,0][n,m]=size(X)%n是X的行数,m是X的列数X./repmat(sum(X.*X).^0.5,n,1)%所有元素除以矩阵中所有元素的平方和开根

3. 计算得分并归一化

  • \frac{X-X_{min}}{X_{max}-X_{min}}=\frac{X-X_{min}}{(X_{max}-X)+(X-X_{min})}=\frac{D_i^-}{D_i^+-D_i^-}

3:例题

  • 评价下表中 20 条河流的水质情况

  • 保存数据:将 EXCEL 中的数据导入到 Matlab,并保存为 .mat 文件,以后直接 load

    • 在工作区中 Ctrl+N 新建一个变量,然后双击点开,把我们要的 Excel 中的数据复制粘贴进去,并修改命名

    • 右键→另存为 (.mat 为后缀的数据)

    • 代码:load xxx.mat

%% 第一步:载入数据clear;clcload data_water_quality.mat​%% 第二步:对矩阵进行正向化处理[n,m] = size(X); %将X的行和列的数量分别赋给n和mdisp(['共有' num2str(n) '个评价对象, ' num2str(m) '个评价指标']) Decide = input(['是否对评价指标进行正向化处理:>']);​if Decide == 1Position = input('请输入需要正向化处理的指标所在的列:>'); %[2,3,4]Type = input('请输入需要处理的这些列的指标类型:>'); %[2,1,3](1 极小型,2 中间型,3 区间型)for i = 1 : size(Position,2)  %size(Position,2)得到Postion的列数(即指标的个数,最大循环次数)X(:,Position(i)) = A02_Positivization(X(:,Position(i)),Type(i),Position(i)); enddisp('正向化后的矩阵 X =  ')disp(X)end​%% 第三步:对正向化后的矩阵进行标准化Z = X ./ repmat(sum(X.*X) .^ 0.5, n, 1);disp('标准化后的矩阵为 Z = ')disp(Z)​%% 第四步:计算与最大值的距离和最小值的距离,并算出得分D_Max = sum([(Z - repmat(max(Z),n,1)) .^ 2 ],2) .^ 0.5;   % D+ 与最大值的距离向量D_Min = sum([(Z - repmat(min(Z),n,1)) .^ 2 ],2) .^ 0.5;   % D- 与最小值的距离向量S = D_Min ./ (D_Max+D_Min);  %得到未归一化下的得分disp('最后的得分为:')stand_S = S / sum(S); %对S进行归一化处理得到最终结果[Sort_result,index] = sort(stand_S ,'descend') % 将sorted_S降序处理,且将其降序排序后下标保存到index

4:拓展

  • 基于熵权法对Topsis模型的修正(写学术论文别用,比赛可用)

  • 依据的原理:指标的变异程度(方差)小,所反映的信息量也越少,其对应的权值也应该越低。(客观=数据本身就可以告诉我们权重)

  • 原理解释:

  • 计算步骤:

    1. 判断输入的矩阵是否存在负数,若存在负数重新标准化到非负区间(即对Topsis模型中的矩阵正向化、标准化)

    2. 计算第j项指标下第i个样本的比重,并将其看作相对熵计算中用到的概率

    3. 计算每个指标的信息熵,并计算信息效用值,并归一化得到每个指标的熵权

%% 第一步:将数据导入工作区%clear;clcload data_water_quality.mat​%% 第二步:矩阵正向化处理[n,m] = size(X);disp(['共有' num2str(n) '个评价对象, ' num2str(m) '个评价指标']) %字符串拼接,也可以用strcat来实现效果Judge = input(['这' num2str(m) '个指标是否需要经过正向化处理:>']);%用0或1作为正向化处理的标签​if Judge == 1Position = input('输入要正向化处理的指标所在列:>'); %[2,3,4]Type = input('输入所需正向化处理列的指标类型:>');%(1:极小型,2:中间型,3:区间型)for i = 1 : size(Position,2) %用size(...,2)函数得到行向量的列数,即最大循环次数X(:,Position(i)) = A02_Positivization(X(:,Position(i)),Type(i),Position(i));enddisp('正向化后的矩阵 X =  ')disp(X)end​%% 第三步:对正向化后的矩阵进行标准化处理Z = X ./ repmat(sum(X.*X) .^ 0.5, n, 1); % 向量中每个元素除以每一列的平方和的开根disp('标准化矩阵 Z = ')disp(Z) % 得到标准化矩阵Z​%% 第四步:判断是否需要增加权重Judge = input('请输入是否需要增加权重:>');% 0表示否,1表示确定用Judge接收if Judge == 1Judge = input('是否采用熵权法:>');% 0表示否,1表示确定用Judge接收if Judge == 1if sum(sum(Z<0))>0   % 若原标准化矩阵Z中存在负数,需要对X重新标准化disp('原标准化矩阵Z中存在负数,所以需要对X重新标准化')for i = 1:n % n是矩阵X的行数for j = 1:m % m是矩阵X的列数Z(i,j) = [X(i,j) - min(X(:,j))] / [max(X(:,j)) - min(X(:,j))]; %Topsis算法中的灵魂公式endenddisp('X重新进行标准化得到的标准化矩阵Z为:>')disp(Z)endweight = A02_Entropy_Weight(Z);% 调用外部函数disp('熵权法确定的权重为:>')disp(weight)elsedisp(['需依此输入对应指标数个数的权重,一一对应!']);weight = input(['你需要输入' num2str(m) '个权数' '并以行向量的形式输入这' num2str(m) '个权重:>']);Yes = 0;  % 判断输入格式是否正确,需用浮点数比较while Yes == 0 if abs(sum(weight) -1)<0.000001 && size(weight,1) == 1 && size(weight,2) == m  % Matlab中浮点数的比较Yes =1;elseweight = input('输入有误,重新键入权重行向量:>');endendendelseweight = ones(1,m) ./ m ; %如果不需要加权重就默认权重都相同,即都为1/mend​%% 第四步:计算与最大值的距离和最小值的距离,并算出得分D_Max = sum([(Z - repmat(max(Z),n,1)) .^ 2 ] .* repmat(weight,n,1) ,2) .^ 0.5;   % D+ 与最大值的距离向量D_Min = sum([(Z - repmat(min(Z),n,1)) .^ 2 ] .* repmat(weight,n,1) ,2) .^ 0.5;   % D- 与最小值的距离向量S = D_Min ./ (D_Max+D_Min); % 得到未归一化下的得分% 未归一化下的得分放进论文中我反而觉得更妥当一点[sorted_nostand_S]=sort(S,'descend')disp('最后的得分为:')stand_S = S / sum(S) % 对S进行归一化处理得到最终结果[sorted_S,index] = sort(stand_S ,'descend') %将sorted_S降序处理,且将其降序处理后结果的下标保存至向量index% index 是最终的排名结果format longdisp(weight)
  • 基于熵权-TOPSIS 流程图

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shell脚本自动化部署

1、自动化部署DNS [rootweb ~]# vim dns.sh [roottomcat ~]# yum -y install bind-utils [roottomcat ~]# echo "nameserver 192.168.8.132" > /etc/resolv.conf [roottomcat ~]# nslookup www.a.com 2、自动化部署rsync [rootweb ~]# vim rsync.sh [rootweb ~]# …

jenkins集成jmeter

jenkins 安装插件HTML Publisher startup trigger Groovy 脚本介绍 cd /app/jmeter rm -rf result.jtl jmeter.log report mkdir -p report sh /app/jmeter/apache-jmeter-5.6.3/bin/jmeter.sh -n -t test.jmx -l result.jtl -e -o ./report-n: 表示以非 GUI 模式运行 JMete…

Java每日一练_模拟面试题1(死锁)

一、死锁的条件 死锁通常发生在两个或者更多的线程相互等待对方释放资源&#xff0c;从而导致它们都无法继续执行。死锁的条件通常被描述为四个必要条件&#xff0c;也就是互斥条件、不可剥夺条件、占有并等待条件和循环等待条件。 互斥条件&#xff1a;资源不能被共享&#x…

unity中实现流光效果——世界空间下

Properties{_MainTex ("Texture", 2D) "white" {}_FlowColor ("Flow Color", Color) (1, 1, 1, 1) // 流光颜色_FlowFrequency ("Flow Frequency", Float) 1.0 // 流光频率_FlowSpeed ("Flow Speed", Float) 1.0 // 流光…

QListView实现自定义的控件展示(可以根据选中与否置顶展示)

文章目录 0 问题引入1、方案1&#xff1a;使用QListwidget自定义的widget1.1 效果1.1 思路 2、方案2&#xff1a;使用QListView自定义model自定义delegate2.1.浅谈2.2.实现 3、总结4、引用 0 问题引入 问题&#xff1a;有人问我如何实现上图的功能&#xff0c;当时我脑海里有了…

手把手使用 SVG + CSS 实现渐变进度环效果

效果 轨道 使用 svg 画个轨道 <svg viewBox"0 0 100 100"><circle cx"50" cy"50" r"40" fill"none" stroke-width"10" stroke"#333"></circle></svg>简单的说&#xff0c;就是…

【Gin】深度解析:在Gin框架中优化应用程序流程的责任链设计模式(下)

【Gin】深度解析&#xff1a;在Gin框架中优化应用程序流程的责任链设计模式(下) 大家好 我是寸铁&#x1f44a; 【Gin】深度解析&#xff1a;在Gin框架中优化应用程序流程的责任链设计模式(下)✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 本次文章分为上下两部分&#xf…

计算机毕业设计Hadoop+Spark旅游景点可视化 旅游景点推荐系统 景区游客满意度预测与优化 Apriori算法 景区客流量预测 旅游大数据 景点规划

### 开题报告 **论文题目&#xff1a;** 基于Spark的旅游景点可视化系统的设计与实现 **研究背景与意义&#xff1a;** 随着旅游业的快速发展&#xff0c;人们对旅游信息的获取和处理需求越来越高。传统的旅游信息系统虽然能够提供静态的数据查询和展示功能&#xff0c;但在…

C++(区别于C的)基础内容总结

参考&#xff1a; C 教程 | 菜鸟教程 (runoob.com) 简介 C 被认为是一种中级语言&#xff0c;它综合了高级语言和低级语言的特点。 C 是由 Bjarne Stroustrup 于 1979 年在新泽西州美利山贝尔实验室开始设计开发的。C 进一步扩充和完善了 C 语言&#xff0c;最初命名为带类的C&…

Java中类装载的执行过程

类装载的执行过程 类从加载到虚拟机中开始&#xff0c;直到卸载为止&#xff0c;它的整个生命周期包括了&#xff1a;加载、验证、准备、解析、初始化、使用和卸载这7个阶段。其中&#xff0c;验证、准备和解析这三个部分统称为连接&#xff08;linking&#xff09;。 1.加载 …

学习记录(9):Prompt提示词技巧

依旧照例先感谢前辈们的慷慨分享 今天学习的是这篇文章↓ 原文&#xff1a;转自公主号“博金斯的AI笔记” —《4篇Prompt论文的提示词技巧, 3 个 GPTs 实例测试》 文章目录 一、提示词框架二、逻辑链&#xff08;Chain of thought&#xff09;三、思维树&#xff08;Tree of th…

[渗透测试学习] PermX-HackTheBox

文章目录 PermX-HackTheBox信息搜集漏洞利用权限提升参考文章PermX-HackTheBox 信息搜集 nmap扫描一下端口 nmap -sC -v 10.10.11.23扫描结果如下 PORT STATE SERVICE 22/tcp open ssh | ssh-hostkey: | 256 e2:5c:5d:8c:47:3e:d8:72:f7:b4:80:03:49:86:6d:ef (ECDSA…

二维码直达App,Xinstall为你打通运营任督二脉

在移动互联网时代&#xff0c;App的推广和运营显得尤为重要。然而&#xff0c;许多企业在投入大量资源进行App推广和运营时&#xff0c;总会遇到一些棘手的问题&#xff0c;如用户转化率低、数据分析困难等。今天&#xff0c;我们要为大家揭秘一个神奇的助手——Xinstall&#…

Github2024-07-29 开源项目周报Top15

根据Github Trendings的统计,本周(2024-07-29统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目2Java项目2HTML项目2C项目2TypeScript项目2JavaScript项目2非开发语言项目1Vue项目1Go项目1Dart项目1C++项目1Rust项目1Jupyter Note…

【Linux】-----进度条小程序

目录 前言 基本知识 Ⅰ、回车和换行 Ⅱ、缓冲区 两个有意思的现象 简单定义 刷新缓冲区 简易倒计时程序 进度条代码 多文件下makefile写法 一代(无任何场景) procs1.h代码 procs1.c代码 主函数main1.c 一代运行结果&#xff1a; 二代 (搭配下载场景) procs2.c代…

在jmeter中使用javascript脚本

工作上遇到一个压力测试的需求&#xff0c;需要测试几个考试相关的接口。其中有一个获取试题详情的接口&#xff0c;和一个提交答题信息的接口。后一个接口以上一接口的返回内容为参数&#xff0c;添加上用户的答案即可。jmeter提供了非常多的方式可以实现该需求&#xff0c;这…

MySQL分组查询有关知识总结

目录 4. 分组查询&#xff08;group by&#xff09; 4.1 概述 4.2 分组函数 4.2.1 单个使用 4.2.2 组合使用 4.2.3 注意&#xff01; 4.3 group by 4.3.1 单个字段 4.3.2 多个字段 4.3.3 提醒&#xff01; 4.4 having 4.5 分组查询演示 4. 分组查询&#xff08;…

稀疏矩阵和稠密矩阵

1.csr_matrix compress sparse row&#xff0c;因此csr是按行压缩的稀疏矩阵。 稀疏矩阵由于0值过多&#xff0c;仅记有值的矩阵位置索引&#xff0c;如下图打印所示。 更多矩阵介绍参考这篇博文【Scipy学习】Scipy中稀疏矩阵用法解析&#xff08;sp.csr_matrix&#xff1b;s…

国家网络身份个人认证方法

申领网络身份认证后&#xff0c;用户会得到一张虚拟的“网络身份证”&#xff0c;它可以向需要实名认证的互联网平台进行认证&#xff0c;不再需要输入姓名和身份证号等信息。 申请方式&#xff1a;各手机应用平台搜索国家网络身份认证即可&#xff08;必须支持NFC才能申请&am…

大模型三种模式Embedding、copilot、Agent

大模型的三种应用模式——Embedding、Copilot、Agent——代表了不同级别的智能化和自动化程度&#xff0c;以及与人类用户的交互方式。下面是每种模式的具体解释&#xff1a; 嵌入模式&#xff08;Embedding Mode&#xff09; 定义&#xff1a;在嵌入模式中&#xff0c;大模型…