TOPSIS方法介紹及程式實現

2021-07-15 05:23:23 字數 1795 閱讀 7506

topsis演算法:

topsis是最著名的經典指標方法之一,最初是在2023年由hwang和yoon首次提出,在2023年由chen和hwang做了進一步的發展。topsis方法引入了兩個基本概念:理想解和負理想解。所謂理想解是一設想的最優的解(方案),它的各個屬性值都達到各備選方案中的最好的值;而負理想解是一設想的最劣的解(方案),它的各個屬性值都達到各備選方案中的最壞的值。方案排序的規則是把各備選方案與理想解和負理想解做比較,若其中有乙個方案最接近理想解,而同時又遠離負理想解,則該方案是備選方案中最好的方案。topsis通過最接近理想解且最遠離負理想解來確定最優選擇。這種方法假定了每個屬性是單調遞增或者遞減,topsis利用了歐氏距離測量方案與理想解和負理想解。選擇的偏好順序是通過比較了歐幾里得距離,topsis執行過程如下:

(1)標準化決策矩陣:

rij表示歸一化第i個選擇方案的屬性值j

(2)計算加權標準化決策矩陣:

wj是屬性值j的權重

(3)確定理想解和負理想解:

(4)計算每個備選方案到理想解和負理想解的距離:

(5)計算最接近理想解的方案

(6)方案排序,按照ci依次遞減的順序排列。

matlab程式:

function

[ output_args ] = topsis

(a,w)

%a為決策矩陣,w為權值矩陣,m為正指標所在的列,n為負指標所在的列

[ma,na]=size(a); %ma為a矩陣的行數,na為a矩陣的列數

fori=1:na

b(:,i)=a(:,i)*w(i); %按列迴圈得到[加權標準化矩陣]

endv1=zeros(1,na); %初始化正理想解和負理想解

v2=zeros(1,na);

bmax=max(b); %取加權標準化矩陣每列的最大值和最小值

bmin=min(b); %

fori=1:na

%if i<=size(m,2) %迴圈得到理想解和負理想解,注意判斷,不然會超個數

v1(i)=bmax(i);

v2(i)=bmin(i);

%end

%if i<=size(n,2)

%v1(n(i))=bmin(n(i));

%v2(n(i))=bmax(n(i));

%end

endfor

i=1:ma %按行迴圈求各方案的貼近度

c1=b(i,:)-v1;

s1(i)=norm(c1); %s1,s2分別為離正理想點和負理想點的距離,用二階範數

c2=b(i,:)-v2;

s2(i)=norm(c2);

t(i)=s2(i)/(s1(i)+s2(i)); %t為貼近度

endoutput_args=t;

小組共同努力的結果~

迴圈語句及方法介紹

for迴圈 a格式 for 初始化表示式語句 判斷條件語句 控制條件語句 b執行流程 a 執行初始化表示式語句 b 執行判斷條件語句,看其返回值是true還是false 如果是true,就繼續執行 如果是false,就結束迴圈 c 執行迴圈體語句 d 執行控制條件語句 e 回到b繼續。c注意事項 初...

tqdm介紹及常用方法

tqdm 是乙個快速,可擴充套件的python進度條,可以在 python 長迴圈中新增乙個進度提示資訊,使用者只需要封裝任意的迭代器 tqdm iterator 使用pip就可以安裝。使用方法一 tqdm tqdm list 方法可以傳入任意一種list,比如陣列 from tqdm import...

tqdm介紹及常用方法

看別人 中有用到,不知道什麼意思,查了一下感覺很有用。開心 tqdm 是乙個快速,可擴充套件的python進度條,可以在 python 長迴圈中新增乙個進度提示資訊,使用者只需要封裝任意的迭代器 tqdm iterator 對可迭代物件用tqdm處理下,再去處理時,控制台就會顯示進度條了。在我理解來...