多属性决策
什么是多属性决策
它指的是利用已有的决策信息通过移动的方式对一组(有限个)备选方案进行排序或者择优。它的主要组成部分有如下2种:
1、获取决策信息:属性权重和属性值(实数、区间数和语言)。
2、通过一定的方式对决策信息进行集结并对方案进行排序和择优
现在我们暂时先抛开属性权重和属性值不讲,我们先来讲一讲第二点,也就是如何对决策的信息进行集结。信息集结的方法有很多,包括
- 加权算术平均算子(WAA)
- 加权几何平均算子(WGA)
- 有序加权平均算子(OWA)
在本文中,我们只讲最重要的,也是应用最广泛的加权算术平均算子(WAA)。
举个栗子:
也可以类比大学中,每科的成绩都是由出勤,作业分,期末考试等等加权得到的。
在多属性决策中,因为属性类型的不同,通常需要归一化处理。
- 效益型:属性值越大越好(比如利润);
- 成本型:属性值越小越好(比如成本价);
- 固定型:属性值越接近某个固定值α越好(生产标注宽度);
- 偏离型:属性值越偏离某个固定值β越好;
- 区间型:属性值越接近某个固定区间[q1,q2]越好;
- 偏离区间型:属性值越偏离某个固定区间[q1,q2]越好;
下面,我们给出归一化处理代码。

用函数mapminmax 1 默认的map范围是[-1, 1],所以如果需要[0, 1],则按这样的格式提供参数: MappedData = mapminmax(OriginalData, 0, 1); 2 只按行归一化,如果是矩阵,则每行各自归一化,如果需要对整个矩阵归一化,用如下方法: FlattenedData = OriginalData(:)'; % 展开矩阵为一列,然后转置为一行。 MappedFlattened = mapminmax(FlattenedData, 0, 1); % 归一化。 MappedData = reshape(MappedFlattened, size(OriginalData)); % 还原为原始矩阵形式。此处不需转置回去,因为reshape恰好是按列重新排序
python归一化,标准化,正则化见机器学习博客。
下面为一个数模实例。
实例中属性值的正则化处理:
构建成对比较矩阵,计算每一个属性的权重。
成对比较矩阵的matlab代码

disp('请输入判断矩阵A(n阶)'); A=input('A='); [n,n]=size(A); x=ones(n,100); y=ones(n,100); m=zeros(1,100); m(1)=max(x(:,1)); y(:,1)=x(:,1); x(:,2)=A*y(:,1); m(2)=max(x(:,2)); y(:,2)=x(:,2)/m(2); p=0.0001;i=2;k=abs(m(2)-m(1)); while k>p i=i+1; x(:,i)=A*y(:,i-1); m(i)=max(x(:,i)); y(:,i)=x(:,i)/m(i); k=abs(m(i)-m(i-1)); end a=sum(y(:,i)); w=y(:,i)/a; t=m(i); disp(w); %以下是一致性检验 CI=(t-n)/(n-1);RI=[0 0 0.52 0.89 1.12 1.26 1.36 1.41 1.46 1.49 1.52 1.54 1.56 1.58 1.59]; CR=CI/RI(n); if CR<0.10 disp('此矩阵的一致性可以接受!'); disp('CI=');disp(CI); disp('CR=');disp(CR); end
利用WAA的求解方法,求出结果:
最后,分别计算4家企业的WAA:
结果显示,第三家最高,所以选择第三家。