PossibilisticArithmetic.jl

Julia package for performing rigorous arithmetic of Imprecise Probabilities with fuzzy numbers
Author AnderGray
Popularity
13 Stars
Updated Last
4 Months Ago
Started In
July 2020

PossibilisticArithmetic.jl

Build Status

Possibility Theory: fuzzy set theory applied to bounding sets of probability measures (Imprecise Probabilities). This package gives a rigorous arithmetic between fuzzy numbers. Outer approximations and arithmetic between fuzzy sets are based on IntervalArithmetic.jl.

In development. Package can currently:

  • Get interval bounds on probabilities
  • Construct robust outer approximations of membership functions with different step sizes
  • Construct fuzzy numbers with a real or interval core
  • Perform dependent arithmeric (using copulas) between fuzzy numbers
    • Levelwise arithmetic (standard fuzzy arithmetic)
    • Arithmetic with a precise copula defined (sigma convolutions)
    • Arithmetic with a copula's bound defined (tau convolutions)
  • Unary operators: -, sin, cos, tan, exp, log
  • Interacts with ProbabilityBoundsAnalysis.jl and IntervalArithmetic.jl
  • Conversions between fuzzy numbers, p-boxes, and more general random sets
  • Plot fuzzy numbers (requires PyPlot)

Soon:

  • Multimodal possibility distributions (non-convex fuzzy sets) using IntervalUnionArithmetic.jl
  • Parameteric distribution constructors
  • Documentation and testing

Resources

Installation

PossibilisticArithmtic.jl is a registered Julia package, and can be installed using the Julia package manager:

julia> ]
(v1.0) pkg> add PossibilisticArithmetic
julia> using PossibilisticArithmetic

or for the latest version:

julia> ]
(v1.0) pkg> add https://github.com/AnderGray/PossibilisticArithmetic.jl#master
julia> using PossibilisticArithmetic

Use

julia> a = Fuzzy(0, 1, 2)
Fuzzy: 	 ~ ( Range=[0, 2], Core=1.0 )

julia> a = Fuzzy(0, 1, 2, steps = 200) # Give number of steps, default = 200
Fuzzy: 	 ~ ( Range=[0, 2], Core=1.0 )

julia> cut(a,0.2)       # get an Alpha-cut, returns an interval
[0.195979, 1.80403]

julia> b = Fuzzy(0, 1, 1.5, 2)
Fuzzy: 	 ~ ( Range=[0, 2], Core=[1, 1.5] )

julia> c = a * b
Fuzzy: 	 ~ ( Range=[0, 4], Core=[1, 1.5] )

julia> mass(c, interval(3, 4) )   # Bound probability measure in some set
[0, 0.351759]

julia> mass(c, 3, 4)   # Same as above
[0, 0.351759]

julia> c(3, 4)         # Can also query object directly
[0, 0.351759]

julia> plot(a)
julia> plot(b)
julia> plot(c)

Fuzzy with real core Fuzzy with interval core Levelwise fuzzy product

Used By Packages

No packages found.