多屬性決策
什么是多屬性決策
它指的是利用已有的決策信息通過移動的方式對一組(有限個)備選方案進行排序或者擇優。它的主要組成部分有如下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:
結果顯示,第三家最高,所以選擇第三家。