def getValue(self, variable): """Defuzzyfication using center of gravity method.""" sum_1, sum_2 = 0., 0. for adjective in variable.adjectives.values(): # get precomputed adjective set set = adjective.set if not isinstance(set, fuzzy.set.Singleton.Singleton): raise DefuzzificationException( "Only Singleton for COGS defuzzification allowed.") a = (self.INF or self._INF)(set(set.x), adjective.getMembership()) sum_1 += set.x * a sum_2 += a try: if sum_2 == 0.: raise DefuzzificationException( "No result, all singletons set to 0.") return sum_1 / sum_2 except: # was not to calculate if self.failsafe is not None: # user gave us a value to return return self.failsafe else: # forward exception raise
def getValue(self, variable): """Defuzzyfication.""" try: temp = self.accumulate(variable) # get polygon representation table = list(self.value_table(temp)) if len(table) == 0: raise DefuzzificationException( "no value calculable: complete undefined set") y = table[0][1] x = float('-inf') # left end of polygon is always -infinity for (x_, y_) in table[1:]: if y_ > y: y = y_ x = x_ return x except: # was not to calculate if self.failsafe is not None: # user gave us a value to return return self.failsafe else: raise