TOPSIS方法介绍及程序实现

TOPSIS算法:
TOPSIS是最著名的经典指标方法之一,最初是在1981年由Hwang和Yoon首次提出,在1992年由Chen和Hwang做了进一步的发展。TOPSIS方法引入了两个基本概念:理想解和负理想解。所谓理想解是一设想的最优的解(方案),它的各个属性值都达到各备选方案中的最好的值;而负理想解是一设想的最劣的解(方案),它的各个属性值都达到各备选方案中的最坏的值。方案排序的规则是把各备选方案与理想解和负理想解做比较,若其中有一个方案最接近理想解,而同时又远离负理想解,则该方案是备选方案中最好的方案。TOPSIS通过最接近理想解且最远离负理想解来确定最优选择。这种方法假定了每个属性是单调递增或者递减,TOPSIS利用了欧氏距离测量方案与理想解和负理想解。选择的偏好顺序是通过比较了欧几里得距离,TOPSIS执行过程如下:
(1)标准化决策矩阵:
这里写图片描述
rij表示归一化第i个选择方案的属性值j
(2)计算加权标准化决策矩阵:
这里写图片描述
wj是属性值j的权重
(3)确定理想解和负理想解:
这里写图片描述
这里写图片描述 代表理想解,这里写图片描述 代表负理想解。如果属性j表示利益属性,那么 ,这里写图片描述 ,相反,如果属性值j表示成本属性,那么 , 这里写图片描述
(4)计算每个备选方案到理想解和负理想解的距离:
这里写图片描述
这里写图片描述表示方案i到理想解的距离,这里写图片描述 表示方案i到负理想解的距离
(5)计算最接近理想解的方案
这里写图片描述
(6)方案排序,按照Ci依次递减的顺序排列。

matlab程序:

function [ output_args ] = TOPSIS(A,W)

%A为决策矩阵,W为权值矩阵,M为正指标所在的列,N为负指标所在的列
 [ma,na]=size(A);          %ma为A矩阵的行数,na为A矩阵的列数
 for i=1:na
     B(:,i)=A(:,i)*W(i);     %按列循环得到[加权标准化矩阵]
end
V1=zeros(1,na);            %初始化正理想解和负理想解
V2=zeros(1,na);
BMAX=max(B);               %取加权标准化矩阵每列的最大值和最小值
BMIN=min(B);               %
for i=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
end

for 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为贴近度
end
output_args=T;

小组共同努力的结果~

要用Python实现TOPSIS多属性决策方法,同样需要使用一些开源的Python库,例如Pandas、NumPy和SciPy等。 以下是一个简单的TOPSIS方法Python实现的示例: ```python import pandas as pd import numpy as np # 构建决策矩阵 data = { '方案1': [10, 8, 6, 7], '方案2': [9, 6, 8, 6], '方案3': [8, 7, 7, 7], '方案4': [7, 9, 5, 8] } df = pd.DataFrame(data, index=['标准1', '标准2', '标准3', '标准4']) # 标准化决策矩阵 df_norm = (df - df.min()) / (df.max() - df.min()) # 设置每个标准的权重 weights = [0.5, 0.3, 0.1, 0.1] # 计算正向和负向理想解 ideal_best = np.max(df_norm) ideal_worst = np.min(df_norm) # 计算每个方案到正向和负向理想解的距离 dist_best = np.sqrt(np.sum((df_norm - ideal_best) ** 2 * weights, axis=1)) dist_worst = np.sqrt(np.sum((df_norm - ideal_worst) ** 2 * weights, axis=1)) # 计算每个方案的综合得分 topsis_scores = dist_worst / (dist_best + dist_worst) # 计算方案排名 rank = np.argsort(topsis_scores) + 1 print("方案排名:", rank) ``` 这个程序首先构建了一个决策矩阵,并将其标准化为0到1之间的值。然后,设置每个标准的权重,并计算正向和负向理想解。接着,计算每个方案到正向和负向理想解的距离,并使用这些距离计算每个方案的得分。最后,使用Numpy的argsort函数计算方案排名。 需要注意的是,这只是一个简单的示例程序,实际应用中可能需要更复杂的方法和技术来处理更复杂的问题。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值