summaryrefslogtreecommitdiff
path: root/fuzzylite/src/term/Activated.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'fuzzylite/src/term/Activated.cpp')
-rw-r--r--fuzzylite/src/term/Activated.cpp80
1 files changed, 45 insertions, 35 deletions
diff --git a/fuzzylite/src/term/Activated.cpp b/fuzzylite/src/term/Activated.cpp
index 9a27b4b..80eda6c 100644
--- a/fuzzylite/src/term/Activated.cpp
+++ b/fuzzylite/src/term/Activated.cpp
@@ -1,71 +1,81 @@
/*
- Author: Juan Rada-Vilela, Ph.D.
- Copyright (C) 2010-2014 FuzzyLite Limited
- All rights reserved
+ fuzzylite (R), a fuzzy logic control library in C++.
+ Copyright (C) 2010-2017 FuzzyLite Limited. All rights reserved.
+ Author: Juan Rada-Vilela, Ph.D. <jcrada@fuzzylite.com>
This file is part of fuzzylite.
fuzzylite is free software: you can redistribute it and/or modify it under
- the terms of the GNU Lesser General Public License as published by the Free
- Software Foundation, either version 3 of the License, or (at your option)
- any later version.
+ the terms of the FuzzyLite License included with the software.
- fuzzylite is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
- for more details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with fuzzylite. If not, see <http://www.gnu.org/licenses/>.
-
- fuzzyliteâ„¢ is a trademark of FuzzyLite Limited.
+ You should have received a copy of the FuzzyLite License along with
+ fuzzylite. If not, see <http://www.fuzzylite.com/license/>.
+ fuzzylite is a registered trademark of FuzzyLite Limited.
*/
#include "fl/term/Activated.h"
#include "fl/imex/FllExporter.h"
-#include "fl/norm/TNorm.h"
namespace fl {
- Activated::Activated(const Term* term, scalar degree, const TNorm* activation)
- : Term(""), _term(term), _degree(degree), _activation(activation) {
- if (term) this->_name = term->getName();
+ Activated::Activated(const Term* term, scalar degree, const TNorm* implication)
+ : Term(""), _term(term), _degree(degree), _implication(implication) {
+ if (term) setName(term->getName());
}
- Activated::~Activated() {
- }
+ Activated::~Activated() { }
std::string Activated::className() const {
return "Activated";
}
+ Complexity Activated::complexity() const {
+ Complexity result;
+ result.comparison(3);
+ if (_implication) {
+ result += _implication->complexity();
+ }
+ if (_term) {
+ result += _term->complexity();
+ }
+ return result;
+ }
+
scalar Activated::membership(scalar x) const {
- if (fl::Op::isNaN(x)) return fl::nan;
- if (not _activation) throw fl::Exception("[activation error] "
- "activation operator needed to activate " + _term->toString(), FL_AT);
- return _activation->compute(this->_term->membership(x), _degree);
+ if (Op::isNaN(x)) return fl::nan;
+ if (not _term)
+ throw Exception("[activation error] no term available to activate", FL_AT);
+ if (not _implication)
+ throw Exception("[implication error] implication operator needed "
+ "to activate " + getTerm()->toString(), FL_AT);
+ return _implication->compute(_term->membership(x), _degree);
}
std::string Activated::parameters() const {
FllExporter exporter;
std::ostringstream ss;
- ss << Op::str(_degree) << " " << exporter.toString(_activation) << " "
- << exporter.toString(_term);
+ ss << Op::str(getDegree()) << " " << exporter.toString(getImplication()) << " "
+ << exporter.toString(getTerm());
return ss.str();
}
void Activated::configure(const std::string& parameters) {
- (void) parameters;
+ FL_IUNUSED(parameters);
}
std::string Activated::toString() const {
FllExporter exporter;
std::ostringstream ss;
- ss << exporter.toString(_activation) << "("
- << Op::str(_degree) << ","
- << _term->getName() << ")";
+ if (getImplication()) {
+ ss << exporter.toString(getImplication()) << "("
+ << Op::str(getDegree()) << ","
+ << getTerm()->getName() << ")";
+ } else {
+ ss << "(" << Op::str(getDegree()) << "*" //"\u2297: (*)"
+ << getTerm()->getName() << ")";
+ }
return ss.str();
}
@@ -85,12 +95,12 @@ namespace fl {
return this->_degree;
}
- void Activated::setActivation(const TNorm* activation) {
- this->_activation = activation;
+ void Activated::setImplication(const TNorm* implication) {
+ this->_implication = implication;
}
- const TNorm* Activated::getActivation() const {
- return this->_activation;
+ const TNorm* Activated::getImplication() const {
+ return this->_implication;
}
Activated* Activated::clone() const {