Source code for pyFTS.common.FLR
"""
This module implements functions for Fuzzy Logical Relationship generation
"""
import numpy as np
from pyFTS.common import FuzzySet
[docs]class FLR(object):
"""
Fuzzy Logical Relationship
Represents a temporal transition of the fuzzy set LHS on time t for the fuzzy set RHS on time t+1.
"""
def __init__(self, LHS, RHS):
"""
Creates a Fuzzy Logical Relationship
"""
self.LHS = LHS
"""Left Hand Side fuzzy set"""
self.RHS = RHS
"""Right Hand Side fuzzy set"""
def __str__(self):
return str(self.LHS) + " -> " + str(self.RHS)
[docs]class IndexedFLR(FLR):
"""Season Indexed Fuzzy Logical Relationship"""
def __init__(self, index, LHS, RHS):
"""
Create a Season Indexed Fuzzy Logical Relationship
"""
super(IndexedFLR, self).__init__(LHS, RHS)
self.index = index
"""seasonal index"""
def __str__(self):
return str(self.index) + ": "+ str(self.LHS) + " -> " + str(self.RHS)
[docs]def generate_high_order_recurrent_flr(fuzzyData):
"""
Create a ordered FLR set from a list of fuzzy sets with recurrence
:param fuzzyData: ordered list of fuzzy sets
:return: ordered list of FLR
"""
flrs = []
for i in np.arange(1,len(fuzzyData)):
lhs = fuzzyData[i - 1]
rhs = fuzzyData[i]
if isinstance(lhs, list) and isinstance(rhs, list):
for l in lhs:
for r in rhs:
tmp = FLR(l, r)
flrs.append(tmp)
else:
tmp = FLR(lhs,rhs)
flrs.append(tmp)
return flrs
[docs]def generate_recurrent_flrs(fuzzyData, steps = 1):
"""
Create a ordered FLR set from a list of fuzzy sets with recurrence
:param fuzzyData: ordered list of fuzzy sets
:param steps: the number of steps ahead on the right side of FLR
:return: ordered list of FLR
"""
_tmp_steps = steps - 1
flrs = []
for i in np.arange(1,len(fuzzyData) - _tmp_steps):
lhs = [fuzzyData[i - 1]]
rhs = [fuzzyData[i+_tmp_steps]]
for l in np.array(lhs).flatten():
for r in np.array(rhs).flatten():
tmp = FLR(l, r)
flrs.append(tmp)
return flrs
[docs]def generate_non_recurrent_flrs(fuzzyData, steps = 1):
"""
Create a ordered FLR set from a list of fuzzy sets without recurrence
:param fuzzyData: ordered list of fuzzy sets
:return: ordered list of FLR
"""
flrs = generate_recurrent_flrs(fuzzyData, steps=steps)
tmp = {}
for flr in flrs: tmp[str(flr)] = flr
ret = [value for key, value in tmp.items()]
return ret
[docs]def generate_indexed_flrs(sets, indexer, data, transformation=None, alpha_cut=0.0):
"""
Create a season-indexed ordered FLR set from a list of fuzzy sets with recurrence
:param sets: fuzzy sets
:param indexer: seasonality indexer
:param data: original data
:return: ordered list of FLR
"""
flrs = []
index = indexer.get_season_of_data(data)
ndata = indexer.get_data(data)
if transformation is not None:
ndata = transformation.apply(ndata)
for k in np.arange(1,len(ndata)):
lhs = FuzzySet.fuzzyfy_series([ndata[k - 1]], sets, method='fuzzy',alpha_cut=alpha_cut)
rhs = FuzzySet.fuzzyfy_series([ndata[k]], sets, method='fuzzy',alpha_cut=alpha_cut)
season = index[k]
for _l in np.array(lhs).flatten():
for _r in np.array(rhs).flatten():
flr = IndexedFLR(season,_l,_r)
flrs.append(flr)
return flrs