3 releases

Uses old Rust 2015

0.1.3 Jun 19, 2017
0.1.2 Jun 19, 2017
0.1.1 Mar 28, 2016
0.1.0 Jul 25, 2015

#1675 in Math

Apache-2.0

24KB
619 lines

Basic usage

This is an early version. Syntax may change at any time.

#[macro_use]
extern crate rsfuzzy;
use std::collections::HashMap;

pub fn main() {
    let mut f_engine = rsfuzzy::Engine::new();

    let i_var1 = fz_input_var![
        ("down", "normal", vec![0.0, 30.0]),
        ("triangle", "low", vec![15.0, 30.0, 40.0]),
        ("triangle", "medium", vec![30.0, 40.0, 55.0]),
        ("triangle", "high", vec![40.0, 60.0, 75.0]),
        ("up", "critical", vec![60.0, 100.0])
    ];
    f_engine.add_input_var("var1", i_var1, 0, 100);

    let i_var2 = fz_input_var![
        ("down", "normal", vec![0.0, 30.0]),
        ("triangle", "low", vec![15.0, 30.0, 40.0]),
        ("triangle", "medium", vec![30.0, 40.0, 55.0]),
        ("triangle", "high", vec![40.0, 60.0, 75.0]),
        ("up", "critical", vec![60.0, 100.0])
    ];

    f_engine.add_input_var("var2", i_var2, 0, 100);

    let o_var = fz_output_var![
        ("down", "normal", vec![0.0, 30.0]),
        ("triangle", "low", vec![15.0, 30.0, 40.0]),
        ("triangle", "medium", vec![30.0, 40.0, 55.0]),
        ("triangle", "high", vec![40.0, 60.0, 75.0]),
        ("up", "critical", vec![60.0, 100.0])
    ];
    f_engine.add_output_var("output", o_var, 0, 100);

    let f_rules = vec![
        ("if var1 is normal and var2 is normal then output is normal"),
        ("if var1 is very low and var2 is normal then output is very low"),
        ("if var1 is low then output is low"),
        ("if var1 is medium then output is medium"),
        ("if var1 is high then output is high"),
        ("if var1 is critical then output is critical"),
        ("if var1 is low and var2 is high then output is medium"),
    ];

    f_engine.add_rules(f_rules);
    f_engine.add_defuzz("centroid");

    let inputs = fz_set_inputs![
        ("var1", 21.2),
        ("var2", 61.5)
    ];

    let result = f_engine.calculate(inputs);
}

Dependencies

~160KB