Struct fuzzy_logic_rs::variables::OutputVariables
source · pub struct OutputVariables { /* private fields */ }Implementations§
source§impl OutputVariables
impl OutputVariables
sourcepub fn new(name: String, range: (f64, f64), n: i32) -> Self
pub fn new(name: String, range: (f64, f64), n: i32) -> Self
Examples found in repository?
examples/speed_control.rs (line 43)
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, membership_rang: MembershipRange)
pub fn add_membership(&mut self, membership_rang: MembershipRange)
Examples found in repository?
examples/speed_control.rs (lines 44-49)
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 get_mu(&self, idx: usize) -> &Vec<f64>
sourcepub fn get_universe(&self) -> &Vec<f64>
pub fn get_universe(&self) -> &Vec<f64>
Examples found in repository?
examples/speed_control.rs (line 45)
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 get_name(&self) -> &String
pub fn get_universe_by_idx(&self, idx: usize) -> f64
Trait Implementations§
Auto Trait Implementations§
impl Freeze for OutputVariables
impl RefUnwindSafe for OutputVariables
impl Send for OutputVariables
impl Sync for OutputVariables
impl Unpin for OutputVariables
impl UnwindSafe for OutputVariables
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