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

Committer:
astaff15
Date:
Wed Jun 24 06:30:39 2015 +0000
Revision:
0:66cd67db4f1b
Child:
1:d545f709646b
eFLL - June 2015

Who changed what in which revision?

UserRevisionLine numberNew 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 * FuzzyOutput.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 "FuzzyOutput.h"
astaff15 0:66cd67db4f1b 13
astaff15 0:66cd67db4f1b 14 // CONSTRUTORES
astaff15 0:66cd67db4f1b 15 FuzzyOutput::FuzzyOutput() : FuzzyIO(){
astaff15 0:66cd67db4f1b 16 }
astaff15 0:66cd67db4f1b 17
astaff15 0:66cd67db4f1b 18 FuzzyOutput::FuzzyOutput(int index) : FuzzyIO(index){
astaff15 0:66cd67db4f1b 19 }
astaff15 0:66cd67db4f1b 20
astaff15 0:66cd67db4f1b 21 // DESTRUTOR
astaff15 0:66cd67db4f1b 22 FuzzyOutput::~FuzzyOutput(){
astaff15 0:66cd67db4f1b 23 }
astaff15 0:66cd67db4f1b 24
astaff15 0:66cd67db4f1b 25 // MÉTODOS PÚBLICOS
astaff15 0:66cd67db4f1b 26 bool FuzzyOutput::truncate(){
astaff15 0:66cd67db4f1b 27 // esvaziando a composição
astaff15 0:66cd67db4f1b 28 this->fuzzyComposition.empty();
astaff15 0:66cd67db4f1b 29
astaff15 0:66cd67db4f1b 30 fuzzySetArray *aux;
astaff15 0:66cd67db4f1b 31 aux = this->fuzzySets;
astaff15 0:66cd67db4f1b 32 while(aux != NULL){
astaff15 0:66cd67db4f1b 33 if(aux->fuzzySet->getPertinence() > 0.0){
astaff15 0:66cd67db4f1b 34 if(this->fuzzyComposition.checkPoint(aux->fuzzySet->getPointA(), 0.0) == false){
astaff15 0:66cd67db4f1b 35 this->fuzzyComposition.addPoint(aux->fuzzySet->getPointA(), 0.0);
astaff15 0:66cd67db4f1b 36 }
astaff15 0:66cd67db4f1b 37
astaff15 0:66cd67db4f1b 38 if(this->fuzzyComposition.checkPoint(aux->fuzzySet->getPointB(), aux->fuzzySet->getPertinence()) == false){
astaff15 0:66cd67db4f1b 39 this->fuzzyComposition.addPoint(aux->fuzzySet->getPointB(), aux->fuzzySet->getPertinence());
astaff15 0:66cd67db4f1b 40 }
astaff15 0:66cd67db4f1b 41
astaff15 0:66cd67db4f1b 42 if(this->fuzzyComposition.checkPoint(aux->fuzzySet->getPointC(), aux->fuzzySet->getPertinence()) == false){
astaff15 0:66cd67db4f1b 43 this->fuzzyComposition.addPoint(aux->fuzzySet->getPointC(), aux->fuzzySet->getPertinence());
astaff15 0:66cd67db4f1b 44 }
astaff15 0:66cd67db4f1b 45
astaff15 0:66cd67db4f1b 46 if(this->fuzzyComposition.checkPoint(aux->fuzzySet->getPointD(), 0.0) == false){
astaff15 0:66cd67db4f1b 47 this->fuzzyComposition.addPoint(aux->fuzzySet->getPointD(), 0.0);
astaff15 0:66cd67db4f1b 48 }
astaff15 0:66cd67db4f1b 49 }
astaff15 0:66cd67db4f1b 50 aux = aux->next;
astaff15 0:66cd67db4f1b 51 }
astaff15 0:66cd67db4f1b 52
astaff15 0:66cd67db4f1b 53 this->fuzzyComposition.build();
astaff15 0:66cd67db4f1b 54
astaff15 0:66cd67db4f1b 55 return true;
astaff15 0:66cd67db4f1b 56 }
astaff15 0:66cd67db4f1b 57
astaff15 0:66cd67db4f1b 58 float FuzzyOutput::getCrispOutput(){
astaff15 0:66cd67db4f1b 59 return this->fuzzyComposition.avaliate();
astaff15 0:66cd67db4f1b 60 }
astaff15 0:66cd67db4f1b 61
astaff15 0:66cd67db4f1b 62 // Um simples Bubble Sort
astaff15 0:66cd67db4f1b 63 bool FuzzyOutput::order(){
astaff15 0:66cd67db4f1b 64 fuzzySetArray *aux1;
astaff15 0:66cd67db4f1b 65 fuzzySetArray *aux2;
astaff15 0:66cd67db4f1b 66
astaff15 0:66cd67db4f1b 67 aux1 = this->fuzzySets;
astaff15 0:66cd67db4f1b 68 aux2 = this->fuzzySets;
astaff15 0:66cd67db4f1b 69
astaff15 0:66cd67db4f1b 70 while(aux1 != NULL){
astaff15 0:66cd67db4f1b 71 while(aux2 != NULL){
astaff15 0:66cd67db4f1b 72 if(aux2->next != NULL){
astaff15 0:66cd67db4f1b 73 if(aux2->fuzzySet->getPointA() > aux2->next->fuzzySet->getPointA()){
astaff15 0:66cd67db4f1b 74 this->swap(aux2, aux2->next);
astaff15 0:66cd67db4f1b 75 }
astaff15 0:66cd67db4f1b 76 }
astaff15 0:66cd67db4f1b 77 aux2 = aux2->next;
astaff15 0:66cd67db4f1b 78 }
astaff15 0:66cd67db4f1b 79 aux2 = this->fuzzySets;
astaff15 0:66cd67db4f1b 80 aux1 = aux1->next;
astaff15 0:66cd67db4f1b 81 }
astaff15 0:66cd67db4f1b 82 return true;
astaff15 0:66cd67db4f1b 83 }
astaff15 0:66cd67db4f1b 84
astaff15 0:66cd67db4f1b 85 // MÉTODOS PRIVADOS
astaff15 0:66cd67db4f1b 86 bool FuzzyOutput::swap(fuzzySetArray* fuzzySetA, fuzzySetArray* fuzzySetB){
astaff15 0:66cd67db4f1b 87 FuzzySet* aux;
astaff15 0:66cd67db4f1b 88
astaff15 0:66cd67db4f1b 89 aux = fuzzySetA->fuzzySet;
astaff15 0:66cd67db4f1b 90 fuzzySetA->fuzzySet = fuzzySetB->fuzzySet;
astaff15 0:66cd67db4f1b 91 fuzzySetB->fuzzySet = aux;
astaff15 0:66cd67db4f1b 92
astaff15 0:66cd67db4f1b 93 return true;
astaff15 0:66cd67db4f1b 94 }