def num_multiple_fuzzy(n, f):
    n = int(n)
    num_multiple_res = []
    for i in f:
        # num_multiple_res.append(n*i)
        num_multiple_res.append(precision(n * i, 2))
    return num_multiple_res
Example #2
0
def alphaIteration(risks):
    '''
    :param risks: risks = [[风险名称,[prob1,prob2...],[impact1,impact2...]],[风险名称,[prob1,prob2...],[impact1,impact2...]],[],... ]
    :return: aggregationResult = [[风险名称, 聚合风险值], [风险名称, 聚合风险值], ... ]
    '''
    aggregationResult = []
    # A = [0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1]
    # alpha是8个权值更新迭代
    A = [0.0, 0.07, 0.23, 0.42, 0.65, 0.86, 0.97, 1.0]
    # A = [0.0,0.5]
    low = 0.000
    high = 0.000
    weight = 0.000

    for risk in risks:
        '''
        针对当前风险获得它的模糊风险值 result
        '''
        R = risk[1]
        W = risk[2]

        for alpha in A:
            # 每个alpha计算一个大轮
            # print 'alpha:',alpha
            a, b = PFWA(R, W, alpha)
            # a, b = PFWA([[0.200, 0.384, 0.536,0.867],[0.133, 0.323, 0.485, 0.733],[0.443, 0.581, 0.667, 0.800]],
            #             [[0.323, 0.485, 0.605,0.867],[0.528, 0.629, 0.667, 0.733],[0.491, 0.613, 0.658, 0.800]],alpha)
            weight = alpha
            if alpha == 0.0:
                low = a
                high = b
            if a == b:
                break

        medium = (a + b) / 2
        # 适应目前模糊数的输入格式
        result = [
            precision(low, 3),
            precision(medium, 3),
            precision(high, 3),
            precision(weight, 3)
        ]
        aggregationResult.append([risk[0], result])

    return aggregationResult
def fuzzywith2heights_plus(f1, f2):
    '''
    :param f: 若干个模糊数(列表)组成的列表
    :return: 列表
    '''
    plus_res = []
    for i, j in zip(f1, f2):
        plus_res.append(precision(i + j, 2))
    plus_res.append(min(f1[4], f2[4]))
    plus_res.append(min(f1[5], f2[5]))
    return plus_res
def fuzzy_plus(f):
    '''
    :param f: 若干个模糊数(列表)组成的列表
    :return: 列表
    '''
    plus_res = []
    for j in range(size):
        tmp = 0
        for i in f:
            tmp = tmp + i[j]
        plus_res.append(precision(tmp, 2))
    return plus_res
 def getRiskscore(self):
     '''
     模糊风险值去模糊化得到单值
     确定模糊数的实际模型
     :return: self.risk_score
     '''
     # self.setFuzzynum()
     self.setFuzzyscore()
     fuzzy = []
     for i in self.fuzzy_score:
         if i not in fuzzy:
             fuzzy.append(i)
     fuzzy_len = len(fuzzy)
     if fuzzy_len == 3:
         self.risk_score = Defuzzification.triangle_defuzzification(fuzzy)
     elif fuzzy_len == 4:
         self.risk_score = Defuzzification.trapezoidal_defuzzification(
             fuzzy)
     self.risk_score = precision(self.risk_score, 3)
     return self.risk_score
def fuzzy_division(f1, f2):
    division_res = []
    for i in range(len(f1)):
        division_res.append(precision(f1[i] / f2[i], 3))
    return division_res
def fuzzy_multiple(f1, f2):
    multiple_res = []
    for i in range(len(f1)):
        multiple_res.append(precision(f1[i] * f2[i], 2))

    return multiple_res