module Tofn:sig
..end
Typed ordered fuzzy numbers (OFNs) and associated operations, following "Rings of Typed Ordered Fuzzy Numbers."
exception OFN_type_mismatch
Incompatible OFN type families.
exception Improper_OFN
An OFN is improper when it has no membership function.
type
family =
| |
Trapezoidal |
| |
Gaussian |
| |
Exponential |
Supported families are trapezoidal, Gaussian, and exponential.
type
tofn = {
|
ofn_type : |
|
au : |
|
bu : |
|
ad : |
|
bd : |
}
OFN with type family
and essential tuple (au, bu, ad, bd).
Components of the tuple are represented as individual fields (as opposed to
an element of float * float * float * float
) for ease-of-access.
val sametype : tofn -> tofn -> bool
Determine if two given OFNs are of the same type.
val tuplemap : (float -> float -> float) -> tofn -> tofn -> tofn
Apply a binary operator to the essential tuples of two OFNs.
val tuplemap_safe : (float -> float -> float) -> tofn -> tofn -> tofn
Apply a binary operator to the essential tuples of two OFNs only when the
types match. Raises OFN_type_mistmatch
if arguments are not of the same
type.
val base_function : family -> float -> float
Base functions for each family.
val inv : family -> float -> float
Inverses of base functions
val (|+|) : tofn -> tofn -> tofn
OFN addition.
val (|-|) : tofn -> tofn -> tofn
OFN subtraction.
val (|*|) : tofn -> tofn -> tofn
OFN multiplication.
val (|/|) : tofn -> tofn -> tofn
OFN division
val is_increasing : tofn -> bool
Determine if an OFN is increasing.
val is_decreasing : tofn -> bool
Determine if an OFN is decreasing.
val is_proper : tofn -> bool
Detect if an OFN has a type I or type II pathology (see Section 1.4 of
the paper. Type III pathologies
are automatically fixed by membership
. *
val membership : tofn -> float -> float
The membership function associated to an OFN. Raises Improper_OFN
if the OFN
is improper. Automatically fixes
type III pathologies.