+ +

Source code for pyFTS.partitioners.Simple

+"""Simple Partitioner for manually informed fuzzy sets"""
+
+import numpy as np
+import math
+import random as rnd
+import functools, operator
+from pyFTS.common import FuzzySet, Membership
+from pyFTS.partitioners import partitioner
+
+
+
[docs]class SimplePartitioner(partitioner.Partitioner): + """Simple Partitioner for manually informed fuzzy sets""" + + def __init__(self, **kwargs): + """ + Simple Partitioner - the fuzzy sets are informed manually + """ + kwargs['preprocess'] = False + + super(SimplePartitioner, self).__init__(name="Simple", **kwargs) + + self.partitions = 0 + +
[docs] def append(self, name, mf, parameters, **kwargs): + """ + Append a new partition (fuzzy set) to the partitioner + + :param name: Fuzzy set name + :param mf: One of the pyFTS.common.Membership functions + :param parameters: A list with the parameters for the membership function + :param kwargs: Optional arguments for the fuzzy set + """ + if name is None or len(name) == 0: + raise ValueError("The name of the fuzzy set cannot be empty") + + if name in self.sets: + raise ValueError("This name has already been used") + + if mf is None or mf not in (Membership.trimf, Membership.gaussmf, + Membership.trapmf, Membership.singleton, + Membership.sigmf): + raise ValueError("The mf parameter should be one of pyFTS.common.Membership functions") + + if mf == Membership.trimf: + if len(parameters) != 3: + raise ValueError("Incorrect number of parameters for the Membership.trimf") + + centroid = parameters[1] + elif mf == Membership.gaussmf: + if len(parameters) != 2: + raise ValueError("Incorrect number of parameters for the Membership.gaussmf") + + centroid = parameters[0] + elif mf == Membership.trapmf: + if len(parameters) != 4: + raise ValueError("Incorrect number of parameters for the Membership.trapmf") + + centroid = (parameters[1]+parameters[2])/2 + elif mf == Membership.singleton: + if len(parameters) != 1: + raise ValueError("Incorrect number of parameters for the Membership.singleton") + + centroid = parameters[0] + elif mf == Membership.sigmf: + if len(parameters) != 2: + raise ValueError("Incorrect number of parameters for the Membership.sigmf") + + centroid = parameters[1] + (parameters[1] / (2 * parameters[0])) + + self.sets[name] = FuzzySet.FuzzySet(name, mf, parameters, centroid, **kwargs) + self.partitions += 1 + + self.ordered_sets = [key for key in sorted(self.sets.keys(), key=lambda k: self.sets[k].centroid)] + + self.min = self.sets[self.ordered_sets[0]].lower + self.max = self.sets[self.ordered_sets[-1]].upper
+ + +
+ +