Struct fuzzy_logic_rs::variables::InputVariables
source · pub struct InputVariables { /* private fields */ }Implementations§
source§impl InputVariables
impl InputVariables
sourcepub fn new(name: String, range: (f64, f64)) -> Self
pub fn new(name: String, range: (f64, f64)) -> Self
Examples found in repository?
examples/speed_control.rs (line 15)
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
fn main() {
let mut v1 = InputVariables::new("speed".to_string(), (0.0, 140.0));
v1.add_membership(MF::new(
"S".to_string(),
MFKind::Triangle(Triangle::new(-58.3, 0.0, 58.3)),
));
v1.add_membership(MF::new(
"M".to_string(),
MFKind::Triangle(Triangle::new(11.67, 70.0, 128.3)),
));
v1.add_membership(MF::new(
"L".to_string(),
MFKind::Triangle(Triangle::new(81.67, 140.0, 198.3)),
));
let mut v2 = InputVariables::new("Distance".to_string(), (0.0, 50.0));
v2.add_membership(MF::new(
"S".to_string(),
MFKind::Triangle(Triangle::new(-20.83, 0.0, 20.83)),
));
v2.add_membership(MF::new(
"M".to_string(),
MFKind::Triangle(Triangle::new(4.168, 25.0, 45.82)),
));
v2.add_membership(MF::new(
"L".to_string(),
MFKind::Triangle(Triangle::new(29.17, 50.0, 70.82)),
));
let mut o1 = OutputVariables::new(String::from("Acceleration"), (-1.0, 1.0), 100);
o1.add_membership(MembershipRange::new_gaussian(
o1.get_universe(),
"NB".to_string(),
-1.0,
0.2123,
));
o1.add_membership(MembershipRange::new_gaussian(
o1.get_universe(),
"NS".to_string(),
-0.5,
0.2123,
));
o1.add_membership(MembershipRange::new_gaussian(
o1.get_universe(),
"ZR".to_string(),
0.0,
0.2123,
));
o1.add_membership(MembershipRange::new_gaussian(
o1.get_universe(),
"PS".to_string(),
0.5,
0.2123,
));
o1.add_membership(MembershipRange::new_gaussian(
o1.get_universe(),
"PB".to_string(),
1.0,
0.2123,
));
let mut fis = MamdaniFIS::new(
SNorms::Max,
TNorms::Min,
Implications::Min,
Aggregations::Max,
Defuzzifiers::Bisection,
);
fis.add_input(v1);
fis.add_input(v2);
fis.add_output(o1);
fis.add_rule(Rule::new_and(vec![0, 0, 2], 1.0));
fis.add_rule(Rule::new_and(vec![0, 1, 3], 1.0));
fis.add_rule(Rule::new_and(vec![0, 2, 4], 1.0));
fis.add_rule(Rule::new_and(vec![1, 0, 1], 1.0));
fis.add_rule(Rule::new_and(vec![1, 1, 2], 1.0));
fis.add_rule(Rule::new_and(vec![1, 2, 3], 1.0));
fis.add_rule(Rule::new_and(vec![2, 0, 0], 1.0));
fis.add_rule(Rule::new_and(vec![2, 1, 1], 1.0));
fis.add_rule(Rule::new_and(vec![2, 2, 2], 1.0));
let output = fis.compute_outputs(vec![40.0, 43.0]);
println!("output is: {:#?}", output);
}sourcepub fn add_membership(&mut self, mf: MembershipFunction)
pub fn add_membership(&mut self, mf: MembershipFunction)
Examples found in repository?
examples/speed_control.rs (lines 16-19)
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
fn main() {
let mut v1 = InputVariables::new("speed".to_string(), (0.0, 140.0));
v1.add_membership(MF::new(
"S".to_string(),
MFKind::Triangle(Triangle::new(-58.3, 0.0, 58.3)),
));
v1.add_membership(MF::new(
"M".to_string(),
MFKind::Triangle(Triangle::new(11.67, 70.0, 128.3)),
));
v1.add_membership(MF::new(
"L".to_string(),
MFKind::Triangle(Triangle::new(81.67, 140.0, 198.3)),
));
let mut v2 = InputVariables::new("Distance".to_string(), (0.0, 50.0));
v2.add_membership(MF::new(
"S".to_string(),
MFKind::Triangle(Triangle::new(-20.83, 0.0, 20.83)),
));
v2.add_membership(MF::new(
"M".to_string(),
MFKind::Triangle(Triangle::new(4.168, 25.0, 45.82)),
));
v2.add_membership(MF::new(
"L".to_string(),
MFKind::Triangle(Triangle::new(29.17, 50.0, 70.82)),
));
let mut o1 = OutputVariables::new(String::from("Acceleration"), (-1.0, 1.0), 100);
o1.add_membership(MembershipRange::new_gaussian(
o1.get_universe(),
"NB".to_string(),
-1.0,
0.2123,
));
o1.add_membership(MembershipRange::new_gaussian(
o1.get_universe(),
"NS".to_string(),
-0.5,
0.2123,
));
o1.add_membership(MembershipRange::new_gaussian(
o1.get_universe(),
"ZR".to_string(),
0.0,
0.2123,
));
o1.add_membership(MembershipRange::new_gaussian(
o1.get_universe(),
"PS".to_string(),
0.5,
0.2123,
));
o1.add_membership(MembershipRange::new_gaussian(
o1.get_universe(),
"PB".to_string(),
1.0,
0.2123,
));
let mut fis = MamdaniFIS::new(
SNorms::Max,
TNorms::Min,
Implications::Min,
Aggregations::Max,
Defuzzifiers::Bisection,
);
fis.add_input(v1);
fis.add_input(v2);
fis.add_output(o1);
fis.add_rule(Rule::new_and(vec![0, 0, 2], 1.0));
fis.add_rule(Rule::new_and(vec![0, 1, 3], 1.0));
fis.add_rule(Rule::new_and(vec![0, 2, 4], 1.0));
fis.add_rule(Rule::new_and(vec![1, 0, 1], 1.0));
fis.add_rule(Rule::new_and(vec![1, 1, 2], 1.0));
fis.add_rule(Rule::new_and(vec![1, 2, 3], 1.0));
fis.add_rule(Rule::new_and(vec![2, 0, 0], 1.0));
fis.add_rule(Rule::new_and(vec![2, 1, 1], 1.0));
fis.add_rule(Rule::new_and(vec![2, 2, 2], 1.0));
let output = fis.compute_outputs(vec![40.0, 43.0]);
println!("output is: {:#?}", output);
}pub fn fuzzify(&self, idx: usize, x: f64) -> f64
pub fn membership_function_name(&self, idx: i32) -> String
pub fn get_name(&self) -> &String
pub fn get_range(&self) -> &(f64, f64)
Trait Implementations§
source§impl Clone for InputVariables
impl Clone for InputVariables
source§fn clone(&self) -> InputVariables
fn clone(&self) -> InputVariables
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl Freeze for InputVariables
impl RefUnwindSafe for InputVariables
impl Send for InputVariables
impl Sync for InputVariables
impl Unpin for InputVariables
impl UnwindSafe for InputVariables
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more