pub struct Triangle { /* private fields */ }Implementations§
Source§impl Triangle
impl Triangle
Sourcepub fn new(a: f64, b: f64, c: f64) -> Self
pub fn new(a: f64, b: f64, c: f64) -> Self
Examples found in repository?
examples/speed_control.rs (line 18)
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}Trait Implementations§
Auto Trait Implementations§
impl Freeze for Triangle
impl RefUnwindSafe for Triangle
impl Send for Triangle
impl Sync for Triangle
impl Unpin for Triangle
impl UnwindSafe for Triangle
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