离散模型——多属性决策

article/2025/7/19 2:38:48

数学模型 7.1 P233

目录

多属性决策

定义:

第一步:确定决策矩阵并标准化

1)确定决策矩阵:

2)决策矩阵标准化:

第二步:确定属性权重

 第三步:综合方法

1)将决策矩阵模一化后的rij×属性权重wj,构成矩阵V

2)取出正理想解(由每列向量中最大元素构成),记为v+

            负理想解(由每列向量中最小元素构成),记为v-

3)计算方案Ai与正、负理想解的欧式距离:

 4)定义方案Ai与正理想解的相对接近度


多属性决策

定义:

方案的优劣由若干属性(如汽车的价格、性能、款式等因素)给以定量或定性的表述,而人们在若干备选方案中选出最优方案,或者对这些方案按照优劣程度排序,或者需要给出优劣程度的数量结果。

第一步:确定决策矩阵并标准化


1)确定决策矩阵:

一个多属性决策问题有m个备选方案A1,A2,…,Am,n个属性X1,X2,...Xn,方案Ai对属性Xj的取值为dij。D=(dij)m*n称为原始决策矩阵。

汽车型号\属性X1价格(万元)X2性能(满分10分)X3款式(满分10分)
A12597
A21877
A31255

决策矩阵的获取有两种方法。

一种偏客观,直接通过量测或调查(偏客观);一种偏主观,由决策者或请专家评定。

2)决策矩阵标准化:

由于通常各属性物理意义各不相同,在下一步分析前需将原始决策矩阵标准化。

首先,将各属性区分为效益型属性和费用性属性。

效益型属性:属性值越大,该属性对决策的重要程度越高。

费用型属性:属性值越大,该属性对决策的重要程度越小。

通常对费用性属性作变换,取原属性值的倒数,将全部属性统一为效益型。

 之后,对原始决策矩阵D标准化,将标准化的决策矩阵定义为R。

标准化有以下三种方法:

归一化,R的列向量分量之和为1:

最大化,R的列向量最大值为1:

模一化,R的列向量的模为1:

clc,clear
d=[25 9 7;    %每行为一个方案,每列为一种属性18 7 7;12 5 5];
%% 原始决策矩阵标准化
l=1;             %费用型属性
d(:,l)=1./d(:,l);%将费用型属性变换为效益型
%归一化
r=d./sum(d,1);         %sum函数参数2表示按照每列相加
%最大化
%r=d./max(d,[],1);     %max函数参数3表示取每列的最大值
%模一化
%r=d./sum(d.^2,1).^0.5; %sum函数参数2表示按照每列相加

第二步:确定属性权重

信息熵法:一个信息量的(概率)分布越趋向一致,所提供信息的不确定越大,用熵作为衡量不确定的指标。在多属性决策中,将标准化决策矩阵R的各个列向量看作每个属性信息量的概率分布。按照Shannon对熵的定义,各方案关于属性Xj的熵为

熵值越大,代表信息不确定性越大(信息量概率分布越趋向一致),属性Xj对于辨别方案优劣的作用越小。

定义

 为属性Xj的区分度。(Fj越大,Xj的区分度越大,属性Xj越重要)

将归一化的区分度取作属性Xj的权重wj,即

d=[25 9 7;    %每行为一个方案,每列为一种属性18 7 7;12 5 5];
m=size(d,1);  %m种方案
n=size(d,2);  %n种属性
%% 属性权重的确定
E=(-1/log(m))*sum(r.*log(r),1);  %E熵值,sum函数参数2表示按照每列相加
F=1-E;                           %F区分度
w=F/sum(F);                      %w各属性的权重

 第三步:综合方法

确定最优方案,或者各方案按照优劣排序的数量结果。

这里使用topsis法(接近理想解的偏好排序法)来对方案排序。

理论上的最优方案(称正理想解)由所有可能的加权最优属性值构成,最劣方案(称负理想解)由可能的加权最劣属性值构成。定义距正理想解尽可能近、距负理想解尽可能远的数量指标——相对接近度,备选方案的优劣顺序按照相对接近度的大小确定。

1)将决策矩阵模一化后的rij×属性权重wj,构成矩阵V

(注意:这里用模一化的决策矩阵,以便在空间定义欧氏距离,但属性权重w中仍可使用归一化方法处理决策矩阵)

2)取出正理想解(由每列向量中最大元素构成),记为v+

            负理想解(由每列向量中最小元素构成),记为v-

V_max=max(V,[],1);       %正理想解,max函数参数3表示取每列的最大值
V_min=min(V,[],1);       %负理想解,min函数参数3表示取每列的最小值

3)计算方案Ai与正理想解的欧式距离:

与负理想解的欧式距离 :

S_plus=sum((V-V_max).^2,2).^0.5;    %求各方案与正理想解的欧式距离,sum函数参数2表示按照每行相加
S_minus=sum((V-V_min).^2,2).^0.5;   %求各方案与正理想解的欧式距离,sum函数参数2表示按照每行相加

 4)定义方案Ai与正理想解的相对接近度为

之后对C_{_{i}^{}}^{+}进行归一化处理,C_{_{i}^{}}^{+}越大,表示方案越好。

C=S_minus./(S_plus+S_minus);        %C,各方案与正理想解的相对接近度
C=C./sum(C,1);                      %C归一化处理
[Y,index]=sort(C,1,'descend');       %参数2按列排序,参数3降序,Y排序后的结果,对应index原矩阵下标

 完整代码如下:

clc,clear
d=[25 9 7;    %每行为一个方案,每列为一种属性18 7 7;12 5 5];
m=size(d,1);  %m种方案
n=size(d,2);  %n种属性
%% 原始决策矩阵标准化
l=1;             %费用型属性
d(:,l)=1./d(:,l);%将费用型属性变换为效益型
%归一化
r=d./sum(d,1);         %sum函数参数2表示按照每列相加
%最大化
%r=d./max(d,[],1);     %max函数参数3表示取每列的最大值
%模一化
rm=d./sum(d.^2,1).^0.5; %sum函数参数2表示按照每列相加
%% 属性权重的确定
E=(-1/log(m))*sum(r.*log(r),1);  %E熵值,sum函数参数2表示按照每列相加
F=1-E;                           %F区分度
w=F/sum(F);                      %w各属性的权重
%% topsis法确定方案优劣顺序(决策矩阵需用模一化方法处理,但权重的确定仍可使用归一化等方法)
V=rm.*w;
V_max=max(V,[],1);       %正理想解,max函数参数3表示取每列的最大值
V_min=min(V,[],1);       %负理想解,min函数参数3表示取每列的最小值
S_plus=sum((V-V_max).^2,2).^0.5;    %求各方案与正理想解的欧式距离,sum函数参数2表示按照每行相加
S_minus=sum((V-V_min).^2,2).^0.5;   %求各方案与正理想解的欧式距离,sum函数参数2表示按照每行相加
C=S_minus./(S_plus+S_minus);        %C,各方案与正理想解的相对接近度
C=C./sum(C,1);                      %C归一化处理
[Y,index]=sort(C,1,'descend');       %参数2按列排序,参数3降序,Y排序后的结果,对应index原矩阵下标


http://chatgpt.dhexx.cn/article/o8HtXyaF.shtml

相关文章

【C语言】my_strcmp字符串比较

1.思想:①.比较两个字符串涉及对两个字符串对应的字符逐个进行比较,直到发现不匹配为止,返回比较结果。 ②.strcmp函数实际上是对字符的ASCII码进行比较,strcmp函数最多比较到其中一个字符串遇到\0为止。 2.函数原型如下&#xf…

C/C++编程笔记:C语言字符串比较函数,超详细,值得收藏!

void *memset(void *dest, int c, size_t count); 将dest前面count个字符置为字符c. 返回dest的值. void *memmove(void *dest, const void *src, size_t count); 从src复制count字节的字符到dest. 如果src和dest出现重叠, 函数会自动处理. 返回dest的值. void *memcpy(voi…

【c语言】字符串比较 | API仿真

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ …

C/C++中比较字符串的方法

一、strcmp函数 适用对象 char*类型字符串 函数介绍 strcmp函数是cstring库中的函数&#xff0c;包含在string.h头文件中 用法 strcmp的两个参数都是char*类型&#xff0c;将要比较的字符串传入即可&#xff0c;根据返回值得到比较结果 举例 二、compare()函数 适用对象…

【c语言】字符串比较

独立实现标准字符串库的strcmp函数&#xff0c;即字符串比较函数&#xff0c;从键盘输入两个字符串&#xff0c;按字典序比较大小&#xff0c;前者大于后者输出1&#xff0c;前者小于后者输出-1&#xff0c;两者相等输出0。 样例输入: apple one 样例输出: -1 样例输入: hello…

C语言 - 比较字符串大小

程序源码 #include <stdio.h> int mStrcpy(char *s, char *s1, int len); int main() {char str[2][20];int i, j;printf("请输入2个字符串&#xff01;\n");for(i0; i<2; i)gets(str[i]);printf("字符串大小比较结果&#xff1a;%d\n", mStrcpy…

c语言比较两个字符串是否相等strcmp

c语言提供了几个标准库函数&#xff0c;可以比较两个字符串是否相同。以下是用strcmp()函数比较字符串的一个例子&#xff1a; #include <stdio.h> #include <string.h> int main(void) {char str_1[] "abc"; char str_2[] "abc";char str_3…

(c语言)比较三个字符串的大小

问题描述&#xff1a; 比较三个字符串的大小&#xff0c;并且按从小到大的顺序输出。 程序分析&#xff1a; 1.在写这个程序的时候&#xff0c;主要是写了一个swap函数&#xff0c;调用了标准库函数中的strcmp来实现的。 2.在写swap这个函数的时候将函数参数设置为两个二级…

c语言怎么进行字符串比较,c语言怎么进行字符串比较

比较方法:1、bcmp(),比较字符串的前n个字节是否相等;2、strcmp(),区分大小写的比较字符串;3、stricmp(),不区分大小写的比较字符串;4、strncmp()或strnicmp(),区分大小写的比较字符串的前n个字符。 本教程操作环境:windows7系统、c99版本、Dell G3电脑。 使用bcmp()–…

C语言中字符串之间的比较【char*】/【string】

在C/C语言中表示字符串的方式有两种&#xff1a; 1、char* a 2、string b 对于这两种方式各自之间比较又是怎么处理的呢&#xff1f; 我们知道&#xff0c;数值直接进行比较&#xff0c;直接用>、<、来判断。而对于一串字符这样比较对不对呢&#xff1f; 1、对于cha…

C语言中字符串比较

在 单片机串口实现字符串命令解析 这篇文章中分析了在串口通信中如何去解析字符串命令&#xff0c;这篇文章就来讨论下字符串比较的方法都有哪些&#xff1f; 说起比较运算&#xff0c;肯定第一时间想到了C语言中关于比较的相关运算符 “>、<、&#xff01;、>、<、…

【C语言】正确比较两个字符串

目录 两种常见的错误比较方法 &#xff08;1&#xff09;为什么两个字符串不能直接用大于小于号比较&#xff1f; &#xff08;2&#xff09;为什么不能用数组名直接比较 字符串比较大小的实质 两种比较字符串两种方法 &#xff08;1&#xff09;难的方法 &#xff08;2&…

课程设计:Java编写的基于KNN算法的手写数字识别软件

0x00 概述 本软件是使用Java语言编写的PC端图形界面程序&#xff0c;也支持命令行形式运行 主要功能为识别用户在软件内绘板上手写的数字 同时也支持使用给定的训练集批量识别符合本软件定义格式的手写数字&#xff08;该功能仅支持命令行形式使用&#xff09; 0x01 设计逻…

手写数字识别问题(5)——完结

经过接近15周的艰苦努力&#xff0c;毕业设计&#xff08;基于MATLAB的手写数字识别系统&#xff09;已经完结。 设计过程中遇到的部分问题可查阅博客&#xff1a; 手写数字识别问题&#xff08;1&#xff09;——关于MNIST数据集手写数字识别问题&#xff08;2&#xff09;—…

常用的OCR文字识别软件有哪些

随着大家办公需求的增加&#xff0c;办公软件如雨后春笋般纷纷面世&#xff0c;旨在提高大家的工作效率&#xff0c;OCR文字识别软件便是不可缺少的办公软件之一。那么&#xff0c;有哪些专业又好用的OCR文字识别软件呢&#xff1f;小编来为大家推荐几款&#xff0c;以供参考。…

安卓实现扫一扫识别数字

本文已授权微信公众号&#xff1a;鸿洋&#xff08;hongyangAndroid&#xff09;原创首发。 公司业务需求&#xff0c;需要做手机号码的识别。所以有了此篇文章&#xff0c;现在就将实现过程分享给大家。 1.准备工作 首先实现识别数字等字符&#xff0c;我们要知道需要采用OC…

ABBYY FineReader15最新版图片文字识别转换软件

在日常生活中&#xff0c;我们会遇到需要将各种文字、图片、扫描图片等转换为文字的情况。想要轻松解决这些问题&#xff0c;需要使用到OCR文字识别。但对于许多新手来说&#xff0c;OCR文字识别是陌生的。今天小编就给大家介绍一下&#xff0c;OCR文字识别怎么使用&#xff0c…

数字识别代码完整

数字识别代码 近期完成了一个数字识别的代码&#xff0c;开始也不会做&#xff0c;但通过了解和查询自己也了解到了一些在这你给大家做个分享&#xff08;本代码开发环境Opencv3&#xff09;这里分享给大家一个比较好的网址&#xff0c;我的代码也是参照的这个改动的完整的代码…

Labview OCR数字识别

::: keywords labview,OCR,灰度,对比度,数字识别 ::: 下载文件 前言 OCR &#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;是指电子设备&#xff08;例如扫描仪或数码相机&#xff09;检查纸上打印的字符&#xff0c;通过检测暗、亮的模式确定…

ABBYY15免费照片识别文字识别软件

照片识别文字的软件有哪些&#xff1f;在日常的工作的时候&#xff0c;小伙伴们是不是经常会借助拍摄照片记录一些比较重要的事情或者是一些比较重要的笔记&#xff0c;等回头空闲出来的时候在去整理&#xff0c;那么这时候&#xff0c;如果我们运用好图片识别文字这项技术&…