多属性决策模型-matlab实现

article/2025/7/19 1:55:38

多属性决策模型-matlab实现

    • 属性集合
    • 决策矩阵
      • 评价指标类型的一致化处理
      • 决策矩阵标准化
    • 属性权重
      • 信息熵法
      • 动态加权函数的设定
        • 1.分段变幂函数
        • 2.偏大型正态分布函数
        • 3.S型分布函数
    • 综合方法
      • 简单加权和法(首选)
      • 加权积法
      • 接近理想解的偏好排序法
    • 方案选取
    • 代码实现
      • 归一化函数
      • 综合方法函数
      • 求信息熵
      • 完整代码

适用于评价决策问题,例如:决策目标,备选方案

属性集合

  1. 影响力较强
  2. 性间独立属
  3. 容易辨别优劣
  4. 可量化
  5. 数量过多时(>7)分层

决策矩阵

表示方案对属性的偏好程

方案为行,属性为列,对每一方案每一属性取值

评价指标类型的一致化处理

一般来说,在评价指标x1,x2,…,xm(m>1)中可能包括“极大型”指标、“极小型”指标、“中间型”指标 和 “区间型”指标。

  • 极大型指标:总是期望指标的取值越大越好; 效益型指标,如:收益、利润;
  • 极小型指标:总是期望指标的取值越小越好; 费用型指标,如:成本、能耗;
  • 中间型指标:总是期望指标的取值既不要太大,也不要太小,即取适当的中间值最好;如:环境温度、湿度、人的身高、体重、BMI;
  • 区间型指标:总是期望指标的取值最好是落在某一个确定的区间内最好。如:水质量评估中PH值。

极大型指标和极小型指标又被称为效益型指标和费用型指标。

进行综合评价的过程中,将指标一致化(一样的指标类型),要么极小(综合评价值越小越好),要么极大(…)。评价指标预处理的过程中,首先将指标一致化处理。根据决策目标、实际问题来决定目标是极小还是极大!预处理数据最好不要产生大的变动。
在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xNo6f937-1664163063309)(assets/image-20220803162055-g87rqsz.png)]

决策矩阵标准化

  1. 区分费用型属性和效益性属性,对费用型属性值取倒数变换,将全部属性转为效益型
  2. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hdgbaXF4-1664163063310)(assets/image-20220624094325-ububzmq.png)]

属性权重

对目标影响力的权重分配

信息熵法

熵:衡量不确定的指标,熵越大,不确定越大

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NJrcXexe-1664163063310)(assets/image-20220624103238-cv2dqyy.png)]

动态加权函数的设定

考虑到评价指标的“质差”与“量差”的关系,选择动态权重函数时 既要能体现不同类型指标之间质的差异,也要能体现同类型指标量的差异。

具体取什么样的动态加权函数,主要是从实际问题出发分析确定。

对于不同的指标可以取相同的权函数,也可以取不同的权函数。

1.分段变幂函数

2.偏大型正态分布函数

3.S型分布函数

综合方法

将决策矩阵与属性权重加以综合,得到最终巨册的数学方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eU0Alipa-1664163063311)(assets/image-20220624112639-ptqwcx0.png)]

简单加权和法(首选)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lmkdmfbb-1664163063312)(assets/image-20220624112716-kj9o6zg.png)]

加权积法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qqjj6cG2-1664163063312)(assets/image-20220624112759-6zzjopj.png)]

接近理想解的偏好排序法

https://blog.csdn.net/Shea111/article/details/107102312

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FP4ZuoY2-1664163063312)(assets/image-20220624112831-1tyxm16.png)]

求解方法:

  1. 正理想解: 每列最大值
  2. 负理想解: 每列最小值
  3. 求每列与正负理想解距离
  4. 求接近度

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MRaN2Qbx-1664163063313)(assets/image-20220624112935-7gonqvz.png)]

方案选取

  • 分配模式

    • 简单加权和法+归一化
    • 适用于资源分配问题
  • 理想模式

    • 简单加权和法+最大化
    • 适用于挑选最优者

代码实现

归一化函数

function D_std = gui1(D,k)
% 对数据进行归一化处理
% D为数据 k为归一化选项
D_std=[];
switch k%归一化case 1D_std=D./(ones(size(D,1),1)*sum(D,1));  %D列为1矩阵*D列和%最大化case 2D_std=D./(ones(size(D,1),1)*max(D,[],1));  %D列为1矩阵*D列最大值%模一化case 3mo_D=sqrt(sum(D.^2,1));D_std=D./(ones(size(D,1),1)*mo_D);  %D列为1矩阵*D列模%区间尺度变换/极值差case 4D_max=(ones(size(D,1),1)*max(D,[],1));D_min=(ones(size(D,1),1)*min(D,[],1));D_std=(D-D_min)./(D_max-D_min);
end

综合方法函数

function V_score = allway(D_std,W,k)
%综合方法
%D_std数据值,W属性权重,k方案选择
V_score=[];
switch k%简单求加权和case 1V_score=D_std*W;  V_score=V_score/sum(V_score);   %归一化处理%加权积法case 2V_mid=D_std.^(ones(size(D_std,1),1)*W');  %D列为1矩阵*WV_score=prod(V_mid,2);  %dij乘积V_score=V_score/sum(V_score);   %归一化处理%接近理想解的偏好排序法case 3V_mid=D_std.*(ones(size(D_std,1),1)*W');  %D列为1矩阵*WV_plus=ones(size(D_std,1),1)*max(V_mid,[],1);   %正理想解(列最大值向量)V_dim=ones(size(D_std,1),1)*min(V_mid,[],1);    %负理想解(行最大值向量)S_plus=sum((V_mid-V_plus).^2,2).^(0.5); %与正理想解距离S_dim=sum((V_mid-V_dim).^2,2).^(0.5);   %与负理想解距离C_plus=S_dim./(S_plus+S_dim);   %接近度V_score = C_plus/sum(C_plus);   %归一化
end
end

求信息熵

D=[ 1/25,9,7;1/18,7,7;1/12,5,5];
%% 归一化处理
D_std=gui1(D,1);
disp(D_std);%%求信息熵
m=size(D,1);
E=-1/log(m)*sum(D_std.*log(D_std),1);    %求熵E
F=1-E;  %求区分度F
W=F/sum(F); %求x权重W
W=W';   %行向量转列向量
disp(W);

完整代码

D=[ 1/25,9,7;1/18,7,7;1/12,5,5];%% 归一化处理
D_std=gui1(D,1);
disp(D_std);%% 求信息熵
m=size(D,1);
E=-1/log(m)*sum(D_std.*log(D_std),1);    %求熵E
F=1-E;  %求区分度F
W=F/sum(F); %求x权重W
W=W';   %行向量转列向量
disp(W);%% 综合方法
res = allway(D_std,W,1);    %加权和方法
disp(res);
res = allway(D,W,2);    %加权积方法
disp(res);
D_std=gui1(D,3);
res = allway(D_std,W,3);    %理想解方法
disp(res);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-StVPtP8o-1664163063314)(assets/image-20220705165355-7h4f8xv.png)]


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

相关文章

多属性决策(MCDM)

多属性决策(MCDM) 指的是利用已有的决策信息通过移动的方式对一组(有限个)备选方案进行排序或者择优。 属性:备选方案的特征、品质或性能参数 包括属性权重和属性值 对决策信息进行集结: 加权算术平均算子(WAA)加权几何平均算…

多属性决策

多属性决策(有限方案多目标决策),实现较好的数据预处理 由决策变量选择对应的决策形式 离散型 进行分析评价的目的是对方案进行排序 连续型 从非劣解集中获取偏好解 数据预处理 遵循非量纲化、归一化属性值的定性等级 最好、很好、好、较…

【数学建模】多属性决策模型(评价与决策)

文章目录 一、算法介绍1. 加权算术平均算子(WAA)2. 属性值归一化处理 二、适用问题三、算法总结1. 步骤 四、应用场景举例(企业评估)1. 建模构建决策矩阵2. 属性值归一化3. 对各个属性构造成对比较矩阵计算属性权重(层…

多属性决策分析

【 1. 多属性决策分析简介 】 实质: 利用已有的决策信息通过一定的方式对一组(有限个)备选方案进行排序或择优。组成: (l) 获取决策信息。决策信息一般包括两个方面的内容:属性权重和属性值(属性值主要有三种形式:实数、区间数和…

机器学习(MACHINE LEARNING)多属性决策模型

文章目录 1 多属性决策概念2 加权算术平均算子3 属性值归一化处理4 例子 1 多属性决策概念 首先,什么是多属性决策呢,它指的是利用已有的决策信息通过移动的方式对一组(有限个)备选方案进行排序或者择优。它的主要组成部分有如下…

离散模型——多属性决策

数学模型 7.1 P233 目录 多属性决策 定义: 第一步:确定决策矩阵并标准化 1)确定决策矩阵: 2)决策矩阵标准化: 第二步:确定属性权重 第三步:综合方法 1)将决策矩阵…

【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;—…