pyFTS/pyFTS/models/multivariate/flrg.py
2019-03-22 19:46:42 -03:00

55 lines
1.3 KiB
Python

import numpy as np
from pyFTS.common import flrg as flg
class FLRG(flg.FLRG):
"""
Multivariate Fuzzy Logical Rule Group
"""
def __init__(self, **kwargs):
super(FLRG,self).__init__(0,**kwargs)
self.order = kwargs.get('order', 1)
self.LHS = kwargs.get('lhs', {})
self.RHS = set()
def set_lhs(self, var, fset):
if self.order == 1:
self.LHS[var] = fset
else:
if var not in self.LHS:
self.LHS[var] = []
self.LHS[var].append(fset)
def append_rhs(self, fset, **kwargs):
self.RHS.add(fset)
def get_membership(self, data, variables):
mvs = []
for var in variables:
s = self.LHS[var.name]
mvs.append(var.partitioner.sets[s].membership(data[var.name]))
return np.nanmin(mvs)
def get_lower(self, sets):
if self.lower is None:
self.lower = min([sets[rhs].lower for rhs in self.RHS])
return self.lower
def get_upper(self, sets):
if self.upper is None:
self.upper = max([sets[rhs].upper for rhs in self.RHS])
return self.upper
def __str__(self):
_str = ""
for k in self.RHS:
_str += "," if len(_str) > 0 else ""
_str += k
return self.get_key() + " -> " + _str