summaryrefslogtreecommitdiff
path: root/examples/takagi-sugeno/approximation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/takagi-sugeno/approximation.cpp')
-rw-r--r--examples/takagi-sugeno/approximation.cpp146
1 files changed, 78 insertions, 68 deletions
diff --git a/examples/takagi-sugeno/approximation.cpp b/examples/takagi-sugeno/approximation.cpp
index 178f162..da0a307 100644
--- a/examples/takagi-sugeno/approximation.cpp
+++ b/examples/takagi-sugeno/approximation.cpp
@@ -1,86 +1,96 @@
#include <fl/Headers.h>
int main(int argc, char** argv){
+//Code automatically generated with fuzzylite 6.0.
+
using namespace fl;
Engine* engine = new Engine;
-engine->setName("approximation of sin(x)/x");
+engine->setName("approximation");
+engine->setDescription("");
-InputVariable* inputVariable = new InputVariable;
-inputVariable->setEnabled(true);
-inputVariable->setName("inputX");
-inputVariable->setRange(0.000, 10.000);
-inputVariable->addTerm(new Triangle("NEAR_1", 0.000, 1.000, 2.000));
-inputVariable->addTerm(new Triangle("NEAR_2", 1.000, 2.000, 3.000));
-inputVariable->addTerm(new Triangle("NEAR_3", 2.000, 3.000, 4.000));
-inputVariable->addTerm(new Triangle("NEAR_4", 3.000, 4.000, 5.000));
-inputVariable->addTerm(new Triangle("NEAR_5", 4.000, 5.000, 6.000));
-inputVariable->addTerm(new Triangle("NEAR_6", 5.000, 6.000, 7.000));
-inputVariable->addTerm(new Triangle("NEAR_7", 6.000, 7.000, 8.000));
-inputVariable->addTerm(new Triangle("NEAR_8", 7.000, 8.000, 9.000));
-inputVariable->addTerm(new Triangle("NEAR_9", 8.000, 9.000, 10.000));
-engine->addInputVariable(inputVariable);
+InputVariable* inputX = new InputVariable;
+inputX->setName("inputX");
+inputX->setDescription("");
+inputX->setEnabled(true);
+inputX->setRange(0.000, 10.000);
+inputX->setLockValueInRange(false);
+inputX->addTerm(new Triangle("NEAR_1", 0.000, 1.000, 2.000));
+inputX->addTerm(new Triangle("NEAR_2", 1.000, 2.000, 3.000));
+inputX->addTerm(new Triangle("NEAR_3", 2.000, 3.000, 4.000));
+inputX->addTerm(new Triangle("NEAR_4", 3.000, 4.000, 5.000));
+inputX->addTerm(new Triangle("NEAR_5", 4.000, 5.000, 6.000));
+inputX->addTerm(new Triangle("NEAR_6", 5.000, 6.000, 7.000));
+inputX->addTerm(new Triangle("NEAR_7", 6.000, 7.000, 8.000));
+inputX->addTerm(new Triangle("NEAR_8", 7.000, 8.000, 9.000));
+inputX->addTerm(new Triangle("NEAR_9", 8.000, 9.000, 10.000));
+engine->addInputVariable(inputX);
-OutputVariable* outputVariable1 = new OutputVariable;
-outputVariable1->setEnabled(true);
-outputVariable1->setName("outputFx");
-outputVariable1->setRange(-1.000, 1.000);
-outputVariable1->fuzzyOutput()->setAccumulation(fl::null);
-outputVariable1->setDefuzzifier(new WeightedAverage("TakagiSugeno"));
-outputVariable1->setDefaultValue(fl::nan);
-outputVariable1->setLockPreviousOutputValue(true);
-outputVariable1->setLockOutputValueInRange(false);
-outputVariable1->addTerm(new Constant("f1", 0.840));
-outputVariable1->addTerm(new Constant("f2", 0.450));
-outputVariable1->addTerm(new Constant("f3", 0.040));
-outputVariable1->addTerm(new Constant("f4", -0.180));
-outputVariable1->addTerm(new Constant("f5", -0.190));
-outputVariable1->addTerm(new Constant("f6", -0.040));
-outputVariable1->addTerm(new Constant("f7", 0.090));
-outputVariable1->addTerm(new Constant("f8", 0.120));
-outputVariable1->addTerm(new Constant("f9", 0.040));
-engine->addOutputVariable(outputVariable1);
+OutputVariable* outputFx = new OutputVariable;
+outputFx->setName("outputFx");
+outputFx->setDescription("");
+outputFx->setEnabled(true);
+outputFx->setRange(-1.000, 1.000);
+outputFx->setLockValueInRange(false);
+outputFx->setAggregation(fl::null);
+outputFx->setDefuzzifier(new WeightedAverage("TakagiSugeno"));
+outputFx->setDefaultValue(fl::nan);
+outputFx->setLockPreviousValue(true);
+outputFx->addTerm(new Constant("f1", 0.840));
+outputFx->addTerm(new Constant("f2", 0.450));
+outputFx->addTerm(new Constant("f3", 0.040));
+outputFx->addTerm(new Constant("f4", -0.180));
+outputFx->addTerm(new Constant("f5", -0.190));
+outputFx->addTerm(new Constant("f6", -0.040));
+outputFx->addTerm(new Constant("f7", 0.090));
+outputFx->addTerm(new Constant("f8", 0.120));
+outputFx->addTerm(new Constant("f9", 0.040));
+engine->addOutputVariable(outputFx);
-OutputVariable* outputVariable2 = new OutputVariable;
-outputVariable2->setEnabled(true);
-outputVariable2->setName("trueFx");
-outputVariable2->setRange(-1.000, 1.000);
-outputVariable2->fuzzyOutput()->setAccumulation(fl::null);
-outputVariable2->setDefuzzifier(new WeightedAverage("Automatic"));
-outputVariable2->setDefaultValue(fl::nan);
-outputVariable2->setLockPreviousOutputValue(true);
-outputVariable2->setLockOutputValueInRange(false);
-outputVariable2->addTerm(Function::create("fx", "sin(inputX)/inputX", engine));
-engine->addOutputVariable(outputVariable2);
+OutputVariable* trueFx = new OutputVariable;
+trueFx->setName("trueFx");
+trueFx->setDescription("");
+trueFx->setEnabled(true);
+trueFx->setRange(-1.000, 1.000);
+trueFx->setLockValueInRange(false);
+trueFx->setAggregation(fl::null);
+trueFx->setDefuzzifier(new WeightedAverage("Automatic"));
+trueFx->setDefaultValue(fl::nan);
+trueFx->setLockPreviousValue(true);
+trueFx->addTerm(Function::create("fx", "sin(inputX)/inputX", engine));
+engine->addOutputVariable(trueFx);
-OutputVariable* outputVariable3 = new OutputVariable;
-outputVariable3->setEnabled(true);
-outputVariable3->setName("diffFx");
-outputVariable3->setRange(-1.000, 1.000);
-outputVariable3->fuzzyOutput()->setAccumulation(fl::null);
-outputVariable3->setDefuzzifier(new WeightedAverage("Automatic"));
-outputVariable3->setDefaultValue(fl::nan);
-outputVariable3->setLockPreviousOutputValue(false);
-outputVariable3->setLockOutputValueInRange(false);
-outputVariable3->addTerm(Function::create("diff", "fabs(outputFx-trueFx)", engine));
-engine->addOutputVariable(outputVariable3);
+OutputVariable* diffFx = new OutputVariable;
+diffFx->setName("diffFx");
+diffFx->setDescription("");
+diffFx->setEnabled(true);
+diffFx->setRange(-1.000, 1.000);
+diffFx->setLockValueInRange(false);
+diffFx->setAggregation(fl::null);
+diffFx->setDefuzzifier(new WeightedAverage("Automatic"));
+diffFx->setDefaultValue(fl::nan);
+diffFx->setLockPreviousValue(false);
+diffFx->addTerm(Function::create("diff", "fabs(outputFx-trueFx)", engine));
+engine->addOutputVariable(diffFx);
RuleBlock* ruleBlock = new RuleBlock;
-ruleBlock->setEnabled(true);
ruleBlock->setName("");
+ruleBlock->setDescription("");
+ruleBlock->setEnabled(true);
ruleBlock->setConjunction(fl::null);
ruleBlock->setDisjunction(fl::null);
-ruleBlock->setActivation(fl::null);
-ruleBlock->addRule(fl::Rule::parse("if inputX is NEAR_1 then outputFx is f1", engine));
-ruleBlock->addRule(fl::Rule::parse("if inputX is NEAR_2 then outputFx is f2", engine));
-ruleBlock->addRule(fl::Rule::parse("if inputX is NEAR_3 then outputFx is f3", engine));
-ruleBlock->addRule(fl::Rule::parse("if inputX is NEAR_4 then outputFx is f4", engine));
-ruleBlock->addRule(fl::Rule::parse("if inputX is NEAR_5 then outputFx is f5", engine));
-ruleBlock->addRule(fl::Rule::parse("if inputX is NEAR_6 then outputFx is f6", engine));
-ruleBlock->addRule(fl::Rule::parse("if inputX is NEAR_7 then outputFx is f7", engine));
-ruleBlock->addRule(fl::Rule::parse("if inputX is NEAR_8 then outputFx is f8", engine));
-ruleBlock->addRule(fl::Rule::parse("if inputX is NEAR_9 then outputFx is f9", engine));
-ruleBlock->addRule(fl::Rule::parse("if inputX is any then trueFx is fx and diffFx is diff", engine));
+ruleBlock->setImplication(fl::null);
+ruleBlock->setActivation(new General);
+ruleBlock->addRule(Rule::parse("if inputX is NEAR_1 then outputFx is f1", engine));
+ruleBlock->addRule(Rule::parse("if inputX is NEAR_2 then outputFx is f2", engine));
+ruleBlock->addRule(Rule::parse("if inputX is NEAR_3 then outputFx is f3", engine));
+ruleBlock->addRule(Rule::parse("if inputX is NEAR_4 then outputFx is f4", engine));
+ruleBlock->addRule(Rule::parse("if inputX is NEAR_5 then outputFx is f5", engine));
+ruleBlock->addRule(Rule::parse("if inputX is NEAR_6 then outputFx is f6", engine));
+ruleBlock->addRule(Rule::parse("if inputX is NEAR_7 then outputFx is f7", engine));
+ruleBlock->addRule(Rule::parse("if inputX is NEAR_8 then outputFx is f8", engine));
+ruleBlock->addRule(Rule::parse("if inputX is NEAR_9 then outputFx is f9", engine));
+ruleBlock->addRule(Rule::parse("if inputX is any then trueFx is fx and diffFx is diff", engine));
engine->addRuleBlock(ruleBlock);