建模随手记5 --- 模糊综合评价

妖精的绣舞 提交于 2020-01-31 03:08:12

参考文章:

https://zhuanlan.zhihu.com/p/32666445

模糊综合评价主要利用的使模糊数学中的隶属度来进行分析,通过一些主观的因素来将定性条件引入,进而对对象进行定量的评价。

一下记录书中P110的案例实现:

加载数据:

1   0.4 7.86    97
1   0.6 8.42    91
1   0.533   5   96
1   0.8667  8.83    96
1   0.4 6.4 96
1   0.2667  10.67   101
1   0.4667  11  108
1   0.6667  8.2 101
1   0.2667  10.9    85
1   0.5333  7.33    84
1   1.2 12.5    84
1   0.733   13.5    89
1   0.4 10  96
1   0.2 10.89   93
1   0.5333  10.25   94
1   0.8 8.46    87
0.9747  0.6667  9.55    89
0.9747  0.9333  8.5 97
0.9747  0.1333  9.14    92
0.9114  0.4 10.2    86
0.8987  0.1333  8   84
0.8481  0.3333  10.5    78
0.7595  0.6 9.89    62
def load_data():
    data = []
    with open('./test_fuzzy.txt') as f:
        data = f.readlines()
    data = [list(map(float, item.strip().split())) for item in data]
    return np.array(data)

数据加载后,我们计算每种因素不同评价的隶属度,这里的不同评价就引入了主管因素,简单来说就是计算不同人所占比例。

def get_memMat(data):
    memMat = np.zeros((4, 4))
    for i in range(data.shape[0]):
        bedUseRate = data[i, 0]
        bedReturnRate = data[i, 1]
        avrWait = data[i, 2]
        waitLen = data[i, 3]

        if bedUseRate >= 0.9:
            memMat[0, 0] += 1
        elif bedUseRate > 0.85:
            memMat[0, 1] += 1
        elif bedUseRate > 0.8:
            memMat[0, 2] += 1
        else:
            memMat[0, 3] += 1

        if bedReturnRate >= 0.9:
            memMat[1, 0] += 1
        elif bedReturnRate >= 0.8:
            memMat[1, 1] += 1
        elif bedReturnRate >= 0.6:
            memMat[1, 2] += 1
        else:
            memMat[1, 3] += 1

        if avrWait <= 7:
            memMat[2, 0] += 1
        elif avrWait < 12:
            memMat[2, 1] += 1
        elif avrWait < 14:
            memMat[2, 2] += 1
        else:
            memMat[2, 3] += 1

        if waitLen <= 30:
            memMat[3, 0] += 1
        elif waitLen < 60:
            memMat[3, 1] += 1
        elif waitLen < 90:
            memMat[3, 2] += 1
        else:
            memMat[3, 3] += 1

    memMat = memMat / data.shape[0]
    return memMat

之后讲四个因素又总结两个因素,01和23, 跟别分配权重,这里的权重是通过经验赋值的,但是我们可以通过其他的方法对权重进行计算,之后在分别赋予这两个因素相应的权重从而获得最终的结果。

def test():
    data = load_data()
    memMat = get_memMat(data)
    w2Mat = np.array([[0.4, 0.6]])
    w1Mat = np.array([[0.6, 0.4]])

    fact1 = np.dot(w1Mat, memMat[0:2])
    fact2 = np.dot(w1Mat, memMat[2:4])

    value = np.dot(w2Mat, np.vstack((fact1, fact2)))

    pprint((fact1, fact2, value))

总的来说模糊综合评价就是通过隶属度以及相应权重所组成的线性组合来获得评分,在计算隶属度使要引入评价条件这种主管因素,在赋予权重时要需要进行分析计算。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!