这是李登峰老师《直觉模糊集决策与对策分析方法》第三章权重未知的直觉模糊多属性决策分式数学规划方法。基本思想是不对模糊权重进行分析,而是直接通过n个分式线性规划求解方案间的偏好关系进行排序选优。
决策的基本步骤为:
将给定的决策矩阵和权重向量分别用区间值形式表达;
对每个方案构造一对分式数学规划,确定方案的相对贴进度;
计算方案两两比较的包含比较概率,并构造包含比较概率矩阵;
利用类似topsis的优属度确定排序。
对于给出的算例进行独立重复实验。代码关键步骤有注释。
线性规划使用lingo代码实现了结果。
'''
权重未知的直觉模糊多属性决策分式数学规划方法。
区别就是之前的决策情况是
首先是第一步,需要根据线性规划求解直觉模糊集合的相对贴进度,用lingo实现,这里约束条件不变,因此只有目标函数进行更换。
!min = (((0.75*w1)^2+(0.6*w2)^2+(0.8*w3)^2)^0.5)
/(((0.75*w1)^2+(0.6*w2)^2+(0.8*w3)^2)^0.5+
((0.25*w1)^2+(0.4*w2)^2+(0.2*w3)^2)^0.5);
!max= (((0.9*w1)^2+(0.75*w2)^2+(0.8*w3)^2)^0.5)/
(((0.9*w1)^2+(0.75*w2)^2+(0.8*w3)^2)^0.5+
((0.1*w1)^2+(0.25*w2)^2+(0.2*w3)^2)^0.5);
!min = (((0.8*w1)^2+(0.68*w2)^2+(0.45*w3)^2)^0.5)
/(((0.8*w1)^2+(0.68*w2)^2+(0.45*w3)^2)^0.5+
((0.2*w1)^2+(0.32*w2)^2+(0.55*w3)^2)^0.5);
!max= (((0.85*w1)^2+(0.8*w2)^2+(0.5*w3)^2)^0.5)/
(((0.85*w1)^2+(0.8*w2)^2+(0.5*w3)^2)^0.5+
((0.15*w1)^2+(0.2*w2)^2+(0.95*w3)^2)^0.5);
!min=(((0.4*w1)^2+(0.75*w2)^2+(0.6*w3)^2)^0.5)/
(((0.4*w1)^2+(0.75*w2)^2+(0.6*w3)^2)^0.5+
((0.6*w1)^2+(0.25*w2)^2+(0.4*w3)^2)^0.5);
max= (((0.55*w1)^2+(0.95*w2)^2+(0.7*w3)^2)^0.5)/
(((0.55*w1)^2+(0.95*w2)^2+(0.7*w3)^2)^0.5+
((0.45*w1)^2+(0.05*w2)^2+(0.3*w3)^2)^0.5);
@bnd(0.25,w1,0.75);
@bnd(0.35,w2,0.6);
@bnd(0.3,w3,0.35);
w1+w2+w3=1;
'''
import pandas as pd#bikor算法实现
import numpy as np
np.set_printoptions(suppress=True)
c=pd.DataFrame([[0.6708,0.8096],[0.6117,0.5959],[0.5748,0.7727]])#这些数据就是注释中的lingo代码所得。
print(c)
p=c[1]-c[0]
print(p)
p12=max(1-max((c.iloc[1,1]-c.iloc[0,0])/(p[0]+p[1]),0),0)
p23=max(1-max((c.loc[2,1]-c.loc[1,0])/(p[1]+p[2]),0),0)
p13=max(1-max((c.loc[2,1]-c.loc[0,0])/(p[0]+p[2]),0),0)
pmatrix=pd.DataFrame([[0.5,p12,p13],[1-p12,0.5,p23],[1-p13,1-p23,0.5]])
print(pmatrix)
n=3
for i in range(0,3):
x=1/6*(sum(pmatrix.T[i])+1.5-1)
print(x)
github仓库在https://github.com/rivendelltom/decision-making-study