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
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