PossibilisticArithmetic.jl

Julia package for performing rigorous arithmetic of Imprecise Probabilities with fuzzy numbers
Author AnderGray
Popularity
13 Stars
Updated Last
10 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.