pub struct OutputVariable { /* private fields */ }Implementations§
Source§impl OutputVariable
impl OutputVariable
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)
14fn main() {
15 let mut v1 = InputVariable::new("speed".to_string(), (0.0, 140.0));
16 v1.add_membership(MF::new(
17 "S".to_string(),
18 MFKind::Triangle(Triangle::new(-58.3, 0.0, 58.3)),
19 ));
20 v1.add_membership(MF::new(
21 "M".to_string(),
22 MFKind::Triangle(Triangle::new(11.67, 70.0, 128.3)),
23 ));
24 v1.add_membership(MF::new(
25 "L".to_string(),
26 MFKind::Triangle(Triangle::new(81.67, 140.0, 198.3)),
27 ));
28
29 let mut v2 = InputVariable::new("Distance".to_string(), (0.0, 50.0));
30 v2.add_membership(MF::new(
31 "S".to_string(),
32 MFKind::Triangle(Triangle::new(-20.83, 0.0, 20.83)),
33 ));
34 v2.add_membership(MF::new(
35 "M".to_string(),
36 MFKind::Triangle(Triangle::new(4.168, 25.0, 45.82)),
37 ));
38 v2.add_membership(MF::new(
39 "L".to_string(),
40 MFKind::Triangle(Triangle::new(29.17, 50.0, 70.82)),
41 ));
42
43 let mut o1 = OutputVariable::new(String::from("Acceleration"), (-1.0, 1.0), 100);
44 o1.add_membership(MembershipRange::new_gaussian(
45 o1.get_universe(),
46 "NB".to_string(),
47 -1.0,
48 0.2123,
49 ));
50 o1.add_membership(MembershipRange::new_gaussian(
51 o1.get_universe(),
52 "NS".to_string(),
53 -0.5,
54 0.2123,
55 ));
56 o1.add_membership(MembershipRange::new_gaussian(
57 o1.get_universe(),
58 "ZR".to_string(),
59 0.0,
60 0.2123,
61 ));
62 o1.add_membership(MembershipRange::new_gaussian(
63 o1.get_universe(),
64 "PS".to_string(),
65 0.5,
66 0.2123,
67 ));
68 o1.add_membership(MembershipRange::new_gaussian(
69 o1.get_universe(),
70 "PB".to_string(),
71 1.0,
72 0.2123,
73 ));
74
75 let mut fis = MamdaniFIS::new(
76 SNorms::Max,
77 TNorms::Min,
78 Implications::Min,
79 Aggregations::Max,
80 Defuzzifiers::Bisection,
81 );
82 fis.add_input(v1);
83 fis.add_input(v2);
84 fis.add_output(o1);
85
86 fis.add_rule(Rule::new_and(vec![0, 0, 2], 1.0));
87 fis.add_rule(Rule::new_and(vec![0, 1, 3], 1.0));
88 fis.add_rule(Rule::new_and(vec![0, 2, 4], 1.0));
89
90 fis.add_rule(Rule::new_and(vec![1, 0, 1], 1.0));
91 fis.add_rule(Rule::new_and(vec![1, 1, 2], 1.0));
92 fis.add_rule(Rule::new_and(vec![1, 2, 3], 1.0));
93
94 fis.add_rule(Rule::new_and(vec![2, 0, 0], 1.0));
95 fis.add_rule(Rule::new_and(vec![2, 1, 1], 1.0));
96 fis.add_rule(Rule::new_and(vec![2, 2, 2], 1.0));
97
98 let output = fis.compute_outputs(vec![40.0, 43.0]);
99 println!("output is: {:#?}", output);
100}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)
14fn main() {
15 let mut v1 = InputVariable::new("speed".to_string(), (0.0, 140.0));
16 v1.add_membership(MF::new(
17 "S".to_string(),
18 MFKind::Triangle(Triangle::new(-58.3, 0.0, 58.3)),
19 ));
20 v1.add_membership(MF::new(
21 "M".to_string(),
22 MFKind::Triangle(Triangle::new(11.67, 70.0, 128.3)),
23 ));
24 v1.add_membership(MF::new(
25 "L".to_string(),
26 MFKind::Triangle(Triangle::new(81.67, 140.0, 198.3)),
27 ));
28
29 let mut v2 = InputVariable::new("Distance".to_string(), (0.0, 50.0));
30 v2.add_membership(MF::new(
31 "S".to_string(),
32 MFKind::Triangle(Triangle::new(-20.83, 0.0, 20.83)),
33 ));
34 v2.add_membership(MF::new(
35 "M".to_string(),
36 MFKind::Triangle(Triangle::new(4.168, 25.0, 45.82)),
37 ));
38 v2.add_membership(MF::new(
39 "L".to_string(),
40 MFKind::Triangle(Triangle::new(29.17, 50.0, 70.82)),
41 ));
42
43 let mut o1 = OutputVariable::new(String::from("Acceleration"), (-1.0, 1.0), 100);
44 o1.add_membership(MembershipRange::new_gaussian(
45 o1.get_universe(),
46 "NB".to_string(),
47 -1.0,
48 0.2123,
49 ));
50 o1.add_membership(MembershipRange::new_gaussian(
51 o1.get_universe(),
52 "NS".to_string(),
53 -0.5,
54 0.2123,
55 ));
56 o1.add_membership(MembershipRange::new_gaussian(
57 o1.get_universe(),
58 "ZR".to_string(),
59 0.0,
60 0.2123,
61 ));
62 o1.add_membership(MembershipRange::new_gaussian(
63 o1.get_universe(),
64 "PS".to_string(),
65 0.5,
66 0.2123,
67 ));
68 o1.add_membership(MembershipRange::new_gaussian(
69 o1.get_universe(),
70 "PB".to_string(),
71 1.0,
72 0.2123,
73 ));
74
75 let mut fis = MamdaniFIS::new(
76 SNorms::Max,
77 TNorms::Min,
78 Implications::Min,
79 Aggregations::Max,
80 Defuzzifiers::Bisection,
81 );
82 fis.add_input(v1);
83 fis.add_input(v2);
84 fis.add_output(o1);
85
86 fis.add_rule(Rule::new_and(vec![0, 0, 2], 1.0));
87 fis.add_rule(Rule::new_and(vec![0, 1, 3], 1.0));
88 fis.add_rule(Rule::new_and(vec![0, 2, 4], 1.0));
89
90 fis.add_rule(Rule::new_and(vec![1, 0, 1], 1.0));
91 fis.add_rule(Rule::new_and(vec![1, 1, 2], 1.0));
92 fis.add_rule(Rule::new_and(vec![1, 2, 3], 1.0));
93
94 fis.add_rule(Rule::new_and(vec![2, 0, 0], 1.0));
95 fis.add_rule(Rule::new_and(vec![2, 1, 1], 1.0));
96 fis.add_rule(Rule::new_and(vec![2, 2, 2], 1.0));
97
98 let output = fis.compute_outputs(vec![40.0, 43.0]);
99 println!("output is: {:#?}", output);
100}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)
14fn main() {
15 let mut v1 = InputVariable::new("speed".to_string(), (0.0, 140.0));
16 v1.add_membership(MF::new(
17 "S".to_string(),
18 MFKind::Triangle(Triangle::new(-58.3, 0.0, 58.3)),
19 ));
20 v1.add_membership(MF::new(
21 "M".to_string(),
22 MFKind::Triangle(Triangle::new(11.67, 70.0, 128.3)),
23 ));
24 v1.add_membership(MF::new(
25 "L".to_string(),
26 MFKind::Triangle(Triangle::new(81.67, 140.0, 198.3)),
27 ));
28
29 let mut v2 = InputVariable::new("Distance".to_string(), (0.0, 50.0));
30 v2.add_membership(MF::new(
31 "S".to_string(),
32 MFKind::Triangle(Triangle::new(-20.83, 0.0, 20.83)),
33 ));
34 v2.add_membership(MF::new(
35 "M".to_string(),
36 MFKind::Triangle(Triangle::new(4.168, 25.0, 45.82)),
37 ));
38 v2.add_membership(MF::new(
39 "L".to_string(),
40 MFKind::Triangle(Triangle::new(29.17, 50.0, 70.82)),
41 ));
42
43 let mut o1 = OutputVariable::new(String::from("Acceleration"), (-1.0, 1.0), 100);
44 o1.add_membership(MembershipRange::new_gaussian(
45 o1.get_universe(),
46 "NB".to_string(),
47 -1.0,
48 0.2123,
49 ));
50 o1.add_membership(MembershipRange::new_gaussian(
51 o1.get_universe(),
52 "NS".to_string(),
53 -0.5,
54 0.2123,
55 ));
56 o1.add_membership(MembershipRange::new_gaussian(
57 o1.get_universe(),
58 "ZR".to_string(),
59 0.0,
60 0.2123,
61 ));
62 o1.add_membership(MembershipRange::new_gaussian(
63 o1.get_universe(),
64 "PS".to_string(),
65 0.5,
66 0.2123,
67 ));
68 o1.add_membership(MembershipRange::new_gaussian(
69 o1.get_universe(),
70 "PB".to_string(),
71 1.0,
72 0.2123,
73 ));
74
75 let mut fis = MamdaniFIS::new(
76 SNorms::Max,
77 TNorms::Min,
78 Implications::Min,
79 Aggregations::Max,
80 Defuzzifiers::Bisection,
81 );
82 fis.add_input(v1);
83 fis.add_input(v2);
84 fis.add_output(o1);
85
86 fis.add_rule(Rule::new_and(vec![0, 0, 2], 1.0));
87 fis.add_rule(Rule::new_and(vec![0, 1, 3], 1.0));
88 fis.add_rule(Rule::new_and(vec![0, 2, 4], 1.0));
89
90 fis.add_rule(Rule::new_and(vec![1, 0, 1], 1.0));
91 fis.add_rule(Rule::new_and(vec![1, 1, 2], 1.0));
92 fis.add_rule(Rule::new_and(vec![1, 2, 3], 1.0));
93
94 fis.add_rule(Rule::new_and(vec![2, 0, 0], 1.0));
95 fis.add_rule(Rule::new_and(vec![2, 1, 1], 1.0));
96 fis.add_rule(Rule::new_and(vec![2, 2, 2], 1.0));
97
98 let output = fis.compute_outputs(vec![40.0, 43.0]);
99 println!("output is: {:#?}", output);
100}pub fn get_name(&self) -> &String
pub fn get_universe_by_idx(&self, idx: usize) -> f64
Trait Implementations§
Auto Trait Implementations§
impl Freeze for OutputVariable
impl RefUnwindSafe for OutputVariable
impl Send for OutputVariable
impl Sync for OutputVariable
impl Unpin for OutputVariable
impl UnwindSafe for OutputVariable
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