Fuzzy libray for embedded targets developed by zerokol. Read more on: http://zerokol.com/product/51e93616e84c5571b7000018/2/en edit by Bruno Alfano - corrected deallocation of FuzzyOutput
Fuzzy library by Zerokol. Read more on: http://zerokol.com/product/51e93616e84c5571b7000018/2/en
edit by Bruno Alfano - corrected deallocation bug for FuzzyOutput
FuzzySet.cpp@0:66cd67db4f1b, 2015-06-24 (annotated)
- Committer:
- astaff15
- Date:
- Wed Jun 24 06:30:39 2015 +0000
- Revision:
- 0:66cd67db4f1b
eFLL - June 2015
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
astaff15 | 0:66cd67db4f1b | 1 | /* |
astaff15 | 0:66cd67db4f1b | 2 | * Robotic Research Group (RRG) |
astaff15 | 0:66cd67db4f1b | 3 | * State University of Piaui (UESPI), Brazil - Piauí - Teresina |
astaff15 | 0:66cd67db4f1b | 4 | * |
astaff15 | 0:66cd67db4f1b | 5 | * FuzzySet.cpp |
astaff15 | 0:66cd67db4f1b | 6 | * |
astaff15 | 0:66cd67db4f1b | 7 | * Author: Msc. Marvin Lemos <marvinlemos@gmail.com> |
astaff15 | 0:66cd67db4f1b | 8 | * AJ Alves <aj.alves@zerokol.com> |
astaff15 | 0:66cd67db4f1b | 9 | * Co authors: Douglas S. Kridi <douglaskridi@gmail.com> |
astaff15 | 0:66cd67db4f1b | 10 | * Kannya Leal <kannyal@hotmail.com> |
astaff15 | 0:66cd67db4f1b | 11 | */ |
astaff15 | 0:66cd67db4f1b | 12 | #include "FuzzySet.h" |
astaff15 | 0:66cd67db4f1b | 13 | |
astaff15 | 0:66cd67db4f1b | 14 | FuzzySet::FuzzySet(){ |
astaff15 | 0:66cd67db4f1b | 15 | } |
astaff15 | 0:66cd67db4f1b | 16 | |
astaff15 | 0:66cd67db4f1b | 17 | FuzzySet::FuzzySet(float a, float b, float c, float d){ |
astaff15 | 0:66cd67db4f1b | 18 | this->a = a; |
astaff15 | 0:66cd67db4f1b | 19 | this->b = b; |
astaff15 | 0:66cd67db4f1b | 20 | this->c = c; |
astaff15 | 0:66cd67db4f1b | 21 | this->d = d; |
astaff15 | 0:66cd67db4f1b | 22 | this->pertinence = 0.0; |
astaff15 | 0:66cd67db4f1b | 23 | } |
astaff15 | 0:66cd67db4f1b | 24 | |
astaff15 | 0:66cd67db4f1b | 25 | float FuzzySet::getPointA(){ |
astaff15 | 0:66cd67db4f1b | 26 | return this->a; |
astaff15 | 0:66cd67db4f1b | 27 | } |
astaff15 | 0:66cd67db4f1b | 28 | |
astaff15 | 0:66cd67db4f1b | 29 | float FuzzySet::getPointB(){ |
astaff15 | 0:66cd67db4f1b | 30 | return this->b; |
astaff15 | 0:66cd67db4f1b | 31 | } |
astaff15 | 0:66cd67db4f1b | 32 | |
astaff15 | 0:66cd67db4f1b | 33 | float FuzzySet::getPointC(){ |
astaff15 | 0:66cd67db4f1b | 34 | return this->c; |
astaff15 | 0:66cd67db4f1b | 35 | } |
astaff15 | 0:66cd67db4f1b | 36 | |
astaff15 | 0:66cd67db4f1b | 37 | float FuzzySet::getPointD(){ |
astaff15 | 0:66cd67db4f1b | 38 | return this->d; |
astaff15 | 0:66cd67db4f1b | 39 | } |
astaff15 | 0:66cd67db4f1b | 40 | |
astaff15 | 0:66cd67db4f1b | 41 | bool FuzzySet::calculatePertinence(float crispValue){ |
astaff15 | 0:66cd67db4f1b | 42 | float slope; |
astaff15 | 0:66cd67db4f1b | 43 | |
astaff15 | 0:66cd67db4f1b | 44 | if (crispValue < this->a){ |
astaff15 | 0:66cd67db4f1b | 45 | if (this->a == this->b && this->b != this->c && this->c != this->d){ |
astaff15 | 0:66cd67db4f1b | 46 | this->pertinence = 1.0; |
astaff15 | 0:66cd67db4f1b | 47 | }else{ |
astaff15 | 0:66cd67db4f1b | 48 | this->pertinence = 0.0; |
astaff15 | 0:66cd67db4f1b | 49 | } |
astaff15 | 0:66cd67db4f1b | 50 | }else if (crispValue >= this->a && crispValue < this->b){ |
astaff15 | 0:66cd67db4f1b | 51 | slope = 1.0 / (this->b - this->a); |
astaff15 | 0:66cd67db4f1b | 52 | this->pertinence = slope * (crispValue - this->b) + 1.0; |
astaff15 | 0:66cd67db4f1b | 53 | }else if (crispValue >= this->b && crispValue <= this->c){ |
astaff15 | 0:66cd67db4f1b | 54 | this->pertinence = 1.0; |
astaff15 | 0:66cd67db4f1b | 55 | }else if (crispValue > this->c && crispValue <= this->d){ |
astaff15 | 0:66cd67db4f1b | 56 | slope = 1.0 / (this->c - this->d); |
astaff15 | 0:66cd67db4f1b | 57 | this->pertinence = slope * (crispValue - this->c) + 1.0; |
astaff15 | 0:66cd67db4f1b | 58 | }else if (crispValue > this->d){ |
astaff15 | 0:66cd67db4f1b | 59 | if (this->c == this->d && this->c != this->b && this->b != this->a){ |
astaff15 | 0:66cd67db4f1b | 60 | this->pertinence = 1.0; |
astaff15 | 0:66cd67db4f1b | 61 | }else{ |
astaff15 | 0:66cd67db4f1b | 62 | this->pertinence = 0.0; |
astaff15 | 0:66cd67db4f1b | 63 | } |
astaff15 | 0:66cd67db4f1b | 64 | } |
astaff15 | 0:66cd67db4f1b | 65 | return true; |
astaff15 | 0:66cd67db4f1b | 66 | } |
astaff15 | 0:66cd67db4f1b | 67 | |
astaff15 | 0:66cd67db4f1b | 68 | void FuzzySet::setPertinence(float pertinence){ |
astaff15 | 0:66cd67db4f1b | 69 | if(this->pertinence < pertinence){ |
astaff15 | 0:66cd67db4f1b | 70 | this->pertinence = pertinence; |
astaff15 | 0:66cd67db4f1b | 71 | } |
astaff15 | 0:66cd67db4f1b | 72 | } |
astaff15 | 0:66cd67db4f1b | 73 | |
astaff15 | 0:66cd67db4f1b | 74 | float FuzzySet::getPertinence(){ |
astaff15 | 0:66cd67db4f1b | 75 | return this->pertinence; |
astaff15 | 0:66cd67db4f1b | 76 | } |
astaff15 | 0:66cd67db4f1b | 77 | |
astaff15 | 0:66cd67db4f1b | 78 | void FuzzySet::reset(){ |
astaff15 | 0:66cd67db4f1b | 79 | this->pertinence = 0.0; |
astaff15 | 0:66cd67db4f1b | 80 | } |