コード例 #1
0
ファイル: COGS.py プロジェクト: AndroidTamer/ProjectKrutz
 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
コード例 #2
0
    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