module Fuzzy.Sets.Cardinality(
sigmaCount,
thresholdSigmaCount,
normalizedSigmaCount,
sigmaCountWithModifier,
modifierFunction,
sigmoidModifier,
identityModifier,
subDiagonalModifier,
alphaCutModifier
) where
import Lattices.ResiduatedLattice
import Fuzzy.Sets.LSet
sigmaCount :: (FuzzySet set a l) => set -> Double
sigmaCount :: forall set a l. FuzzySet set a l => set -> Double
sigmaCount set
set = forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum [forall a b. (Real a, Fractional b) => a -> b
realToFrac (a -> l
f a
x) | a
x <- forall set a l. FuzzySet set a l => set -> [a]
universe set
set]
where f :: a -> l
f = forall set a l. FuzzySet set a l => set -> a -> l
member set
set
sigmaCountWithModifier :: (FuzzySet set a l) => (l -> l) -> set -> Double
sigmaCountWithModifier :: forall set a l. FuzzySet set a l => (l -> l) -> set -> Double
sigmaCountWithModifier l -> l
c set
set = forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum [forall a b. (Real a, Fractional b) => a -> b
realToFrac forall a b. (a -> b) -> a -> b
$ (l -> l
c forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> l
f) a
x | a
x <- forall set a l. FuzzySet set a l => set -> [a]
universe set
set]
where f :: a -> l
f = forall set a l. FuzzySet set a l => set -> a -> l
member set
set
thresholdSigmaCount :: (FuzzySet set a l) => l -> set -> Double
thresholdSigmaCount :: forall set a l. FuzzySet set a l => l -> set -> Double
thresholdSigmaCount l
threshold set
set =
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum [forall a b. (Real a, Fractional b) => a -> b
realToFrac (a -> l
f a
x) | a
x <- forall set a l. FuzzySet set a l => set -> [a]
universe set
set, a -> l
f a
x forall a. Ord a => a -> a -> Bool
>= l
threshold]
where f :: a -> l
f = forall set a l. FuzzySet set a l => set -> a -> l
member set
set
normalizedSigmaCount :: (FuzzySet set a l) => set -> l
normalizedSigmaCount :: forall set a l. FuzzySet set a l => set -> l
normalizedSigmaCount set
set = forall l. BoundedLattice l => Double -> l
mkLattice forall a b. (a -> b) -> a -> b
$ forall set a l. FuzzySet set a l => set -> Double
sigmaCount set
set forall a. Fractional a => a -> a -> a
/ forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall (t :: * -> *) a. Foldable t => t a -> Int
length forall a b. (a -> b) -> a -> b
$ forall set a l. FuzzySet set a l => set -> [a]
universe set
set)
modifierFunction :: (ResiduatedLattice l) => Double -> Double -> Double -> (l -> l)
modifierFunction :: forall l.
ResiduatedLattice l =>
Double -> Double -> Double -> l -> l
modifierFunction Double
p Double
r Double
threshold l
a
| forall a b. (Real a, Fractional b) => a -> b
realToFrac l
a forall a. Ord a => a -> a -> Bool
< Double
threshold = forall l. BoundedLattice l => Double -> l
mkLattice forall a b. (a -> b) -> a -> b
$ Double
threshold forall a. Floating a => a -> a -> a
** (Double
1 forall a. Num a => a -> a -> a
- Double
p) forall a. Num a => a -> a -> a
* (forall a b. (Real a, Fractional b) => a -> b
realToFrac l
a forall a. Floating a => a -> a -> a
** Double
p)
| forall a b. (Real a, Fractional b) => a -> b
realToFrac l
a forall a. Ord a => a -> a -> Bool
>= Double
threshold = forall l. BoundedLattice l => Double -> l
mkLattice forall a b. (a -> b) -> a -> b
$ Double
1 forall a. Num a => a -> a -> a
- (Double
1 forall a. Num a => a -> a -> a
- Double
threshold) forall a. Floating a => a -> a -> a
** (Double
1 forall a. Num a => a -> a -> a
- Double
r) forall a. Num a => a -> a -> a
* (Double
1 forall a. Num a => a -> a -> a
- forall a b. (Real a, Fractional b) => a -> b
realToFrac l
a) forall a. Floating a => a -> a -> a
** Double
r
sigmoidModifier :: (ResiduatedLattice l) => Double -> Double -> (l -> l)
sigmoidModifier :: forall l. ResiduatedLattice l => Double -> Double -> l -> l
sigmoidModifier Double
p = forall l.
ResiduatedLattice l =>
Double -> Double -> Double -> l -> l
modifierFunction Double
p Double
p
identityModifier :: (ResiduatedLattice l) => (l -> l)
identityModifier :: forall l. ResiduatedLattice l => l -> l
identityModifier = forall l.
ResiduatedLattice l =>
Double -> Double -> Double -> l -> l
modifierFunction Double
1 Double
1 Double
1
subDiagonalModifier :: (ResiduatedLattice l) => Double -> (l -> l)
subDiagonalModifier :: forall l. ResiduatedLattice l => Double -> l -> l
subDiagonalModifier Double
p = forall l.
ResiduatedLattice l =>
Double -> Double -> Double -> l -> l
modifierFunction Double
p Double
1 Double
1
alphaCutModifier :: (ResiduatedLattice l) => Double -> (l -> l)
alphaCutModifier :: forall l. ResiduatedLattice l => Double -> l -> l
alphaCutModifier Double
threshold l
a
| forall a b. (Real a, Fractional b) => a -> b
realToFrac l
a forall a. Ord a => a -> a -> Bool
<= Double
threshold = forall l. BoundedLattice l => l
bot
| forall a b. (Real a, Fractional b) => a -> b
realToFrac l
a forall a. Ord a => a -> a -> Bool
> Double
threshold = forall l. BoundedLattice l => l
top