summaryrefslogtreecommitdiff
path: root/examples/mamdani
diff options
context:
space:
mode:
authorJohannes 'josch' Schauer <josch@mister-muffin.de>2020-10-23 08:27:38 +0200
committerJohannes 'josch' Schauer <josch@mister-muffin.de>2020-10-23 08:27:38 +0200
commit3b91637afd9716881bec3a34c3ace369c82ef61c (patch)
tree2445bd2a7aadd1fd90bc76e5ab7491a8403d6f75 /examples/mamdani
parent2b00fcb77bb6e7b769ee34a114679838e00156d1 (diff)
New upstream version 6.0+dfsg
Diffstat (limited to 'examples/mamdani')
-rw-r--r--examples/mamdani/AllTerms.R111
-rw-r--r--examples/mamdani/AllTerms.cpp103
-rw-r--r--examples/mamdani/AllTerms.fcl90
-rw-r--r--examples/mamdani/AllTerms.fis86
-rw-r--r--examples/mamdani/AllTerms.fld1025
-rw-r--r--examples/mamdani/AllTerms.fll79
-rw-r--r--examples/mamdani/AllTerms.java114
-rw-r--r--examples/mamdani/AllTerms.pdfbin0 -> 24280 bytes
-rw-r--r--examples/mamdani/Laundry.R91
-rw-r--r--examples/mamdani/Laundry.cpp78
-rw-r--r--examples/mamdani/Laundry.fcl58
-rw-r--r--examples/mamdani/Laundry.fis51
-rw-r--r--examples/mamdani/Laundry.fld1025
-rw-r--r--examples/mamdani/Laundry.fll46
-rw-r--r--examples/mamdani/Laundry.java89
-rw-r--r--examples/mamdani/Laundry.pdfbin0 -> 30166 bytes
-rw-r--r--examples/mamdani/ObstacleAvoidance.R57
-rw-r--r--examples/mamdani/ObstacleAvoidance.cpp49
-rw-r--r--examples/mamdani/ObstacleAvoidance.fcl34
-rw-r--r--examples/mamdani/ObstacleAvoidance.fis32
-rw-r--r--examples/mamdani/ObstacleAvoidance.fld1025
-rw-r--r--examples/mamdani/ObstacleAvoidance.fll25
-rw-r--r--examples/mamdani/ObstacleAvoidance.java60
-rw-r--r--examples/mamdani/ObstacleAvoidance.pdfbin0 -> 25210 bytes
-rw-r--r--examples/mamdani/SimpleDimmer.R60
-rw-r--r--examples/mamdani/SimpleDimmer.cpp52
-rw-r--r--examples/mamdani/SimpleDimmer.fcl37
-rw-r--r--examples/mamdani/SimpleDimmer.fis35
-rw-r--r--examples/mamdani/SimpleDimmer.fld1025
-rw-r--r--examples/mamdani/SimpleDimmer.fll28
-rw-r--r--examples/mamdani/SimpleDimmer.java63
-rw-r--r--examples/mamdani/SimpleDimmer.pdfbin0 -> 22872 bytes
-rw-r--r--examples/mamdani/SimpleDimmerChained.R85
-rw-r--r--examples/mamdani/SimpleDimmerChained.cpp70
-rw-r--r--examples/mamdani/SimpleDimmerChained.fcl51
-rw-r--r--examples/mamdani/SimpleDimmerChained.fis46
-rw-r--r--examples/mamdani/SimpleDimmerChained.fld1025
-rw-r--r--examples/mamdani/SimpleDimmerChained.fll42
-rw-r--r--examples/mamdani/SimpleDimmerChained.java81
-rw-r--r--examples/mamdani/SimpleDimmerChained.pdfbin0 -> 42431 bytes
-rw-r--r--examples/mamdani/SimpleDimmerInverse.R85
-rw-r--r--examples/mamdani/SimpleDimmerInverse.cpp70
-rw-r--r--examples/mamdani/SimpleDimmerInverse.fcl51
-rw-r--r--examples/mamdani/SimpleDimmerInverse.fis46
-rw-r--r--examples/mamdani/SimpleDimmerInverse.fld1025
-rw-r--r--examples/mamdani/SimpleDimmerInverse.fll42
-rw-r--r--examples/mamdani/SimpleDimmerInverse.java81
-rw-r--r--examples/mamdani/SimpleDimmerInverse.pdfbin0 -> 41795 bytes
-rw-r--r--examples/mamdani/octave/COPYING674
-rw-r--r--examples/mamdani/octave/DESCRIPTION12
-rw-r--r--examples/mamdani/octave/investment_portfolio.R67
-rw-r--r--examples/mamdani/octave/investment_portfolio.cpp62
-rw-r--r--examples/mamdani/octave/investment_portfolio.fcl46
-rw-r--r--examples/mamdani/octave/investment_portfolio.fis42
-rw-r--r--examples/mamdani/octave/investment_portfolio.fld1025
-rw-r--r--examples/mamdani/octave/investment_portfolio.fll34
-rw-r--r--examples/mamdani/octave/investment_portfolio.java73
-rw-r--r--examples/mamdani/octave/investment_portfolio.pdfbin0 -> 19163 bytes
-rw-r--r--examples/mamdani/octave/mamdani_tip_calculator.R90
-rw-r--r--examples/mamdani/octave/mamdani_tip_calculator.cpp77
-rw-r--r--examples/mamdani/octave/mamdani_tip_calculator.fcl57
-rw-r--r--examples/mamdani/octave/mamdani_tip_calculator.fis50
-rw-r--r--examples/mamdani/octave/mamdani_tip_calculator.fld1025
-rw-r--r--examples/mamdani/octave/mamdani_tip_calculator.fll45
-rw-r--r--examples/mamdani/octave/mamdani_tip_calculator.java88
-rw-r--r--examples/mamdani/octave/mamdani_tip_calculator.pdfbin0 -> 31675 bytes
66 files changed, 11895 insertions, 0 deletions
diff --git a/examples/mamdani/AllTerms.R b/examples/mamdani/AllTerms.R
new file mode 100644
index 0000000..1b17463
--- /dev/null
+++ b/examples/mamdani/AllTerms.R
@@ -0,0 +1,111 @@
+#Code automatically generated with fuzzylite 6.0.
+
+library(ggplot2);
+
+engine.name = "AllTerms"
+engine.fll = "Engine: AllTerms
+InputVariable: AllInputTerms
+ enabled: true
+ range: 0.000 6.500
+ lock-range: false
+ term: A Sigmoid 0.500 -20.000
+ term: B ZShape 0.000 1.000
+ term: C Ramp 1.000 0.000
+ term: D Triangle 0.500 1.000 1.500
+ term: E Trapezoid 1.000 1.250 1.750 2.000
+ term: F Concave 0.850 0.250
+ term: G Rectangle 1.750 2.250
+ term: H Discrete 2.000 0.000 2.250 1.000 2.500 0.500 2.750 1.000 3.000 0.000
+ term: I Gaussian 3.000 0.200
+ term: J Cosine 3.250 0.650
+ term: K GaussianProduct 3.500 0.100 3.300 0.300
+ term: L Spike 3.640 1.040
+ term: M Bell 4.000 0.250 3.000
+ term: N PiShape 4.000 4.500 4.500 5.000
+ term: O Concave 5.650 6.250
+ term: P SigmoidDifference 4.750 10.000 30.000 5.250
+ term: Q SigmoidProduct 5.250 20.000 -10.000 5.750
+ term: R Ramp 5.500 6.500
+ term: S SShape 5.500 6.500
+ term: T Sigmoid 6.000 20.000
+OutputVariable: AllOutputTerms
+ enabled: true
+ range: 0.000 6.500
+ lock-range: false
+ aggregation: Maximum
+ defuzzifier: Centroid 200
+ default: nan
+ lock-previous: false
+ term: A Sigmoid 0.500 -20.000
+ term: B ZShape 0.000 1.000
+ term: C Ramp 1.000 0.000
+ term: D Triangle 0.500 1.000 1.500
+ term: E Trapezoid 1.000 1.250 1.750 2.000
+ term: F Concave 0.850 0.250
+ term: G Rectangle 1.750 2.250
+ term: H Discrete 2.000 0.000 2.250 1.000 2.500 0.500 2.750 1.000 3.000 0.000
+ term: I Gaussian 3.000 0.200
+ term: J Cosine 3.250 0.650
+ term: K GaussianProduct 3.500 0.100 3.300 0.300
+ term: L Spike 3.640 1.040
+ term: M Bell 4.000 0.250 3.000
+ term: N PiShape 4.000 4.500 4.500 5.000
+ term: O Concave 5.650 6.250
+ term: P SigmoidDifference 4.750 10.000 30.000 5.250
+ term: Q SigmoidProduct 5.250 20.000 -10.000 5.750
+ term: R Ramp 5.500 6.500
+ term: S SShape 5.500 6.500
+ term: T Sigmoid 6.000 20.000
+RuleBlock:
+ enabled: true
+ conjunction: Minimum
+ disjunction: Maximum
+ implication: Minimum
+ activation: General
+ rule: if AllInputTerms is A then AllOutputTerms is T
+ rule: if AllInputTerms is B then AllOutputTerms is S
+ rule: if AllInputTerms is C then AllOutputTerms is R
+ rule: if AllInputTerms is D then AllOutputTerms is Q
+ rule: if AllInputTerms is E then AllOutputTerms is P
+ rule: if AllInputTerms is F then AllOutputTerms is O
+ rule: if AllInputTerms is G then AllOutputTerms is N
+ rule: if AllInputTerms is H then AllOutputTerms is M
+ rule: if AllInputTerms is I then AllOutputTerms is L
+ rule: if AllInputTerms is J then AllOutputTerms is K
+ rule: if AllInputTerms is K then AllOutputTerms is J
+ rule: if AllInputTerms is L then AllOutputTerms is I
+ rule: if AllInputTerms is M then AllOutputTerms is H
+ rule: if AllInputTerms is N then AllOutputTerms is G
+ rule: if AllInputTerms is O then AllOutputTerms is F
+ rule: if AllInputTerms is P then AllOutputTerms is E
+ rule: if AllInputTerms is Q then AllOutputTerms is D
+ rule: if AllInputTerms is R then AllOutputTerms is C
+ rule: if AllInputTerms is S then AllOutputTerms is B
+ rule: if AllInputTerms is T then AllOutputTerms is A"
+
+engine.fldFile = "AllTerms.fld"
+if (require(data.table)) {
+ engine.df = data.table::fread(engine.fldFile, sep="auto", header="auto")
+} else {
+ engine.df = read.table(engine.fldFile, header=TRUE)
+}
+
+engine.plot.i1_o1 = ggplot(engine.df, aes(AllInputTerms, AllOutputTerms)) +
+ geom_line(aes(color=AllOutputTerms), size=3, lineend="round", linejoin="mitre") +
+ scale_color_gradient(low="yellow", high="red") +
+ ggtitle("AllInputTerms vs AllOutputTerms")
+
+engine.plot.o1_i1 = ggplot(engine.df, aes(AllInputTerms, AllOutputTerms)) +
+ geom_line(aes(color=AllOutputTerms), size=3, lineend="round", linejoin="mitre") +
+ scale_color_gradient(low="yellow", high="red") +
+ coord_flip() +
+ ggtitle("AllOutputTerms vs AllInputTerms")
+
+if (require(gridExtra)) {
+ engine.plots = arrangeGrob(engine.plot.i1_o1, engine.plot.o1_i1, ncol=2, top=engine.name)
+ ggsave(paste0(engine.name, ".pdf"), engine.plots)
+ if (require(grid)) {
+ grid.newpage()
+ grid.draw(engine.plots)
+ }
+}
diff --git a/examples/mamdani/AllTerms.cpp b/examples/mamdani/AllTerms.cpp
new file mode 100644
index 0000000..3d96ef5
--- /dev/null
+++ b/examples/mamdani/AllTerms.cpp
@@ -0,0 +1,103 @@
+#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("AllTerms");
+engine->setDescription("");
+
+InputVariable* AllInputTerms = new InputVariable;
+AllInputTerms->setName("AllInputTerms");
+AllInputTerms->setDescription("");
+AllInputTerms->setEnabled(true);
+AllInputTerms->setRange(0.000, 6.500);
+AllInputTerms->setLockValueInRange(false);
+AllInputTerms->addTerm(new Sigmoid("A", 0.500, -20.000));
+AllInputTerms->addTerm(new ZShape("B", 0.000, 1.000));
+AllInputTerms->addTerm(new Ramp("C", 1.000, 0.000));
+AllInputTerms->addTerm(new Triangle("D", 0.500, 1.000, 1.500));
+AllInputTerms->addTerm(new Trapezoid("E", 1.000, 1.250, 1.750, 2.000));
+AllInputTerms->addTerm(new Concave("F", 0.850, 0.250));
+AllInputTerms->addTerm(new Rectangle("G", 1.750, 2.250));
+AllInputTerms->addTerm(Discrete::create("H", 10, 2.000, 0.000, 2.250, 1.000, 2.500, 0.500, 2.750, 1.000, 3.000, 0.000));
+AllInputTerms->addTerm(new Gaussian("I", 3.000, 0.200));
+AllInputTerms->addTerm(new Cosine("J", 3.250, 0.650));
+AllInputTerms->addTerm(new GaussianProduct("K", 3.500, 0.100, 3.300, 0.300));
+AllInputTerms->addTerm(new Spike("L", 3.640, 1.040));
+AllInputTerms->addTerm(new Bell("M", 4.000, 0.250, 3.000));
+AllInputTerms->addTerm(new PiShape("N", 4.000, 4.500, 4.500, 5.000));
+AllInputTerms->addTerm(new Concave("O", 5.650, 6.250));
+AllInputTerms->addTerm(new SigmoidDifference("P", 4.750, 10.000, 30.000, 5.250));
+AllInputTerms->addTerm(new SigmoidProduct("Q", 5.250, 20.000, -10.000, 5.750));
+AllInputTerms->addTerm(new Ramp("R", 5.500, 6.500));
+AllInputTerms->addTerm(new SShape("S", 5.500, 6.500));
+AllInputTerms->addTerm(new Sigmoid("T", 6.000, 20.000));
+engine->addInputVariable(AllInputTerms);
+
+OutputVariable* AllOutputTerms = new OutputVariable;
+AllOutputTerms->setName("AllOutputTerms");
+AllOutputTerms->setDescription("");
+AllOutputTerms->setEnabled(true);
+AllOutputTerms->setRange(0.000, 6.500);
+AllOutputTerms->setLockValueInRange(false);
+AllOutputTerms->setAggregation(new Maximum);
+AllOutputTerms->setDefuzzifier(new Centroid(200));
+AllOutputTerms->setDefaultValue(fl::nan);
+AllOutputTerms->setLockPreviousValue(false);
+AllOutputTerms->addTerm(new Sigmoid("A", 0.500, -20.000));
+AllOutputTerms->addTerm(new ZShape("B", 0.000, 1.000));
+AllOutputTerms->addTerm(new Ramp("C", 1.000, 0.000));
+AllOutputTerms->addTerm(new Triangle("D", 0.500, 1.000, 1.500));
+AllOutputTerms->addTerm(new Trapezoid("E", 1.000, 1.250, 1.750, 2.000));
+AllOutputTerms->addTerm(new Concave("F", 0.850, 0.250));
+AllOutputTerms->addTerm(new Rectangle("G", 1.750, 2.250));
+AllOutputTerms->addTerm(Discrete::create("H", 10, 2.000, 0.000, 2.250, 1.000, 2.500, 0.500, 2.750, 1.000, 3.000, 0.000));
+AllOutputTerms->addTerm(new Gaussian("I", 3.000, 0.200));
+AllOutputTerms->addTerm(new Cosine("J", 3.250, 0.650));
+AllOutputTerms->addTerm(new GaussianProduct("K", 3.500, 0.100, 3.300, 0.300));
+AllOutputTerms->addTerm(new Spike("L", 3.640, 1.040));
+AllOutputTerms->addTerm(new Bell("M", 4.000, 0.250, 3.000));
+AllOutputTerms->addTerm(new PiShape("N", 4.000, 4.500, 4.500, 5.000));
+AllOutputTerms->addTerm(new Concave("O", 5.650, 6.250));
+AllOutputTerms->addTerm(new SigmoidDifference("P", 4.750, 10.000, 30.000, 5.250));
+AllOutputTerms->addTerm(new SigmoidProduct("Q", 5.250, 20.000, -10.000, 5.750));
+AllOutputTerms->addTerm(new Ramp("R", 5.500, 6.500));
+AllOutputTerms->addTerm(new SShape("S", 5.500, 6.500));
+AllOutputTerms->addTerm(new Sigmoid("T", 6.000, 20.000));
+engine->addOutputVariable(AllOutputTerms);
+
+RuleBlock* ruleBlock = new RuleBlock;
+ruleBlock->setName("");
+ruleBlock->setDescription("");
+ruleBlock->setEnabled(true);
+ruleBlock->setConjunction(new Minimum);
+ruleBlock->setDisjunction(new Maximum);
+ruleBlock->setImplication(new Minimum);
+ruleBlock->setActivation(new General);
+ruleBlock->addRule(Rule::parse("if AllInputTerms is A then AllOutputTerms is T", engine));
+ruleBlock->addRule(Rule::parse("if AllInputTerms is B then AllOutputTerms is S", engine));
+ruleBlock->addRule(Rule::parse("if AllInputTerms is C then AllOutputTerms is R", engine));
+ruleBlock->addRule(Rule::parse("if AllInputTerms is D then AllOutputTerms is Q", engine));
+ruleBlock->addRule(Rule::parse("if AllInputTerms is E then AllOutputTerms is P", engine));
+ruleBlock->addRule(Rule::parse("if AllInputTerms is F then AllOutputTerms is O", engine));
+ruleBlock->addRule(Rule::parse("if AllInputTerms is G then AllOutputTerms is N", engine));
+ruleBlock->addRule(Rule::parse("if AllInputTerms is H then AllOutputTerms is M", engine));
+ruleBlock->addRule(Rule::parse("if AllInputTerms is I then AllOutputTerms is L", engine));
+ruleBlock->addRule(Rule::parse("if AllInputTerms is J then AllOutputTerms is K", engine));
+ruleBlock->addRule(Rule::parse("if AllInputTerms is K then AllOutputTerms is J", engine));
+ruleBlock->addRule(Rule::parse("if AllInputTerms is L then AllOutputTerms is I", engine));
+ruleBlock->addRule(Rule::parse("if AllInputTerms is M then AllOutputTerms is H", engine));
+ruleBlock->addRule(Rule::parse("if AllInputTerms is N then AllOutputTerms is G", engine));
+ruleBlock->addRule(Rule::parse("if AllInputTerms is O then AllOutputTerms is F", engine));
+ruleBlock->addRule(Rule::parse("if AllInputTerms is P then AllOutputTerms is E", engine));
+ruleBlock->addRule(Rule::parse("if AllInputTerms is Q then AllOutputTerms is D", engine));
+ruleBlock->addRule(Rule::parse("if AllInputTerms is R then AllOutputTerms is C", engine));
+ruleBlock->addRule(Rule::parse("if AllInputTerms is S then AllOutputTerms is B", engine));
+ruleBlock->addRule(Rule::parse("if AllInputTerms is T then AllOutputTerms is A", engine));
+engine->addRuleBlock(ruleBlock);
+
+
+}
diff --git a/examples/mamdani/AllTerms.fcl b/examples/mamdani/AllTerms.fcl
new file mode 100644
index 0000000..0c56fd6
--- /dev/null
+++ b/examples/mamdani/AllTerms.fcl
@@ -0,0 +1,90 @@
+//Code automatically generated with fuzzylite 6.0.
+
+FUNCTION_BLOCK AllTerms
+
+VAR_INPUT
+ AllInputTerms: REAL;
+END_VAR
+
+VAR_OUTPUT
+ AllOutputTerms: REAL;
+END_VAR
+
+FUZZIFY AllInputTerms
+ RANGE := (0.000 .. 6.500);
+ TERM A := Sigmoid 0.500 -20.000;
+ TERM B := ZShape 0.000 1.000;
+ TERM C := Ramp 1.000 0.000;
+ TERM D := Triangle 0.500 1.000 1.500;
+ TERM E := Trapezoid 1.000 1.250 1.750 2.000;
+ TERM F := Concave 0.850 0.250;
+ TERM G := Rectangle 1.750 2.250;
+ TERM H := (2.000, 0.000) (2.250, 1.000) (2.500, 0.500) (2.750, 1.000) (3.000, 0.000);
+ TERM I := Gaussian 3.000 0.200;
+ TERM J := Cosine 3.250 0.650;
+ TERM K := GaussianProduct 3.500 0.100 3.300 0.300;
+ TERM L := Spike 3.640 1.040;
+ TERM M := Bell 4.000 0.250 3.000;
+ TERM N := PiShape 4.000 4.500 4.500 5.000;
+ TERM O := Concave 5.650 6.250;
+ TERM P := SigmoidDifference 4.750 10.000 30.000 5.250;
+ TERM Q := SigmoidProduct 5.250 20.000 -10.000 5.750;
+ TERM R := Ramp 5.500 6.500;
+ TERM S := SShape 5.500 6.500;
+ TERM T := Sigmoid 6.000 20.000;
+END_FUZZIFY
+
+DEFUZZIFY AllOutputTerms
+ RANGE := (0.000 .. 6.500);
+ TERM A := Sigmoid 0.500 -20.000;
+ TERM B := ZShape 0.000 1.000;
+ TERM C := Ramp 1.000 0.000;
+ TERM D := Triangle 0.500 1.000 1.500;
+ TERM E := Trapezoid 1.000 1.250 1.750 2.000;
+ TERM F := Concave 0.850 0.250;
+ TERM G := Rectangle 1.750 2.250;
+ TERM H := (2.000, 0.000) (2.250, 1.000) (2.500, 0.500) (2.750, 1.000) (3.000, 0.000);
+ TERM I := Gaussian 3.000 0.200;
+ TERM J := Cosine 3.250 0.650;
+ TERM K := GaussianProduct 3.500 0.100 3.300 0.300;
+ TERM L := Spike 3.640 1.040;
+ TERM M := Bell 4.000 0.250 3.000;
+ TERM N := PiShape 4.000 4.500 4.500 5.000;
+ TERM O := Concave 5.650 6.250;
+ TERM P := SigmoidDifference 4.750 10.000 30.000 5.250;
+ TERM Q := SigmoidProduct 5.250 20.000 -10.000 5.750;
+ TERM R := Ramp 5.500 6.500;
+ TERM S := SShape 5.500 6.500;
+ TERM T := Sigmoid 6.000 20.000;
+ METHOD : COG;
+ ACCU : MAX;
+ DEFAULT := nan;
+END_DEFUZZIFY
+
+RULEBLOCK
+ AND : MIN;
+ OR : MAX;
+ ACT : MIN;
+ RULE 1 : if AllInputTerms is A then AllOutputTerms is T
+ RULE 2 : if AllInputTerms is B then AllOutputTerms is S
+ RULE 3 : if AllInputTerms is C then AllOutputTerms is R
+ RULE 4 : if AllInputTerms is D then AllOutputTerms is Q
+ RULE 5 : if AllInputTerms is E then AllOutputTerms is P
+ RULE 6 : if AllInputTerms is F then AllOutputTerms is O
+ RULE 7 : if AllInputTerms is G then AllOutputTerms is N
+ RULE 8 : if AllInputTerms is H then AllOutputTerms is M
+ RULE 9 : if AllInputTerms is I then AllOutputTerms is L
+ RULE 10 : if AllInputTerms is J then AllOutputTerms is K
+ RULE 11 : if AllInputTerms is K then AllOutputTerms is J
+ RULE 12 : if AllInputTerms is L then AllOutputTerms is I
+ RULE 13 : if AllInputTerms is M then AllOutputTerms is H
+ RULE 14 : if AllInputTerms is N then AllOutputTerms is G
+ RULE 15 : if AllInputTerms is O then AllOutputTerms is F
+ RULE 16 : if AllInputTerms is P then AllOutputTerms is E
+ RULE 17 : if AllInputTerms is Q then AllOutputTerms is D
+ RULE 18 : if AllInputTerms is R then AllOutputTerms is C
+ RULE 19 : if AllInputTerms is S then AllOutputTerms is B
+ RULE 20 : if AllInputTerms is T then AllOutputTerms is A
+END_RULEBLOCK
+
+END_FUNCTION_BLOCK
diff --git a/examples/mamdani/AllTerms.fis b/examples/mamdani/AllTerms.fis
new file mode 100644
index 0000000..d34e487
--- /dev/null
+++ b/examples/mamdani/AllTerms.fis
@@ -0,0 +1,86 @@
+#Code automatically generated with fuzzylite 6.0.
+
+[System]
+Name='AllTerms'
+Type='mamdani'
+Version=6.0
+NumInputs=1
+NumOutputs=1
+NumRules=20
+AndMethod='min'
+OrMethod='max'
+ImpMethod='min'
+AggMethod='max'
+DefuzzMethod='centroid'
+
+[Input1]
+Name='AllInputTerms'
+Range=[0.000 6.500]
+NumMFs=20
+MF1='A':'sigmf',[-20.000 0.500]
+MF2='B':'zmf',[0.000 1.000]
+MF3='C':'rampmf',[1.000 0.000]
+MF4='D':'trimf',[0.500 1.000 1.500]
+MF5='E':'trapmf',[1.000 1.250 1.750 2.000]
+MF6='F':'concavemf',[0.850 0.250]
+MF7='G':'rectmf',[1.750 2.250]
+MF8='H':'discretemf',[2.000 0.000 2.250 1.000 2.500 0.500 2.750 1.000 3.000 0.000]
+MF9='I':'gaussmf',[0.200 3.000]
+MF10='J':'cosinemf',[3.250 0.650]
+MF11='K':'gauss2mf',[0.100 3.500 0.300 3.300]
+MF12='L':'spikemf',[3.640 1.040]
+MF13='M':'gbellmf',[0.250 3.000 4.000]
+MF14='N':'pimf',[4.000 4.500 4.500 5.000]
+MF15='O':'concavemf',[5.650 6.250]
+MF16='P':'dsigmf',[10.000 4.750 30.000 5.250]
+MF17='Q':'psigmf',[20.000 5.250 -10.000 5.750]
+MF18='R':'rampmf',[5.500 6.500]
+MF19='S':'smf',[5.500 6.500]
+MF20='T':'sigmf',[20.000 6.000]
+
+[Output1]
+Name='AllOutputTerms'
+Range=[0.000 6.500]
+NumMFs=20
+MF1='A':'sigmf',[-20.000 0.500]
+MF2='B':'zmf',[0.000 1.000]
+MF3='C':'rampmf',[1.000 0.000]
+MF4='D':'trimf',[0.500 1.000 1.500]
+MF5='E':'trapmf',[1.000 1.250 1.750 2.000]
+MF6='F':'concavemf',[0.850 0.250]
+MF7='G':'rectmf',[1.750 2.250]
+MF8='H':'discretemf',[2.000 0.000 2.250 1.000 2.500 0.500 2.750 1.000 3.000 0.000]
+MF9='I':'gaussmf',[0.200 3.000]
+MF10='J':'cosinemf',[3.250 0.650]
+MF11='K':'gauss2mf',[0.100 3.500 0.300 3.300]
+MF12='L':'spikemf',[3.640 1.040]
+MF13='M':'gbellmf',[0.250 3.000 4.000]
+MF14='N':'pimf',[4.000 4.500 4.500 5.000]
+MF15='O':'concavemf',[5.650 6.250]
+MF16='P':'dsigmf',[10.000 4.750 30.000 5.250]
+MF17='Q':'psigmf',[20.000 5.250 -10.000 5.750]
+MF18='R':'rampmf',[5.500 6.500]
+MF19='S':'smf',[5.500 6.500]
+MF20='T':'sigmf',[20.000 6.000]
+
+[Rules]
+1.000 , 20.000 (1.000) : 1
+2.000 , 19.000 (1.000) : 1
+3.000 , 18.000 (1.000) : 1
+4.000 , 17.000 (1.000) : 1
+5.000 , 16.000 (1.000) : 1
+6.000 , 15.000 (1.000) : 1
+7.000 , 14.000 (1.000) : 1
+8.000 , 13.000 (1.000) : 1
+9.000 , 12.000 (1.000) : 1
+10.000 , 11.000 (1.000) : 1
+11.000 , 10.000 (1.000) : 1
+12.000 , 9.000 (1.000) : 1
+13.000 , 8.000 (1.000) : 1
+14.000 , 7.000 (1.000) : 1
+15.000 , 6.000 (1.000) : 1
+16.000 , 5.000 (1.000) : 1
+17.000 , 4.000 (1.000) : 1
+18.000 , 3.000 (1.000) : 1
+19.000 , 2.000 (1.000) : 1
+20.000 , 1.000 (1.000) : 1
diff --git a/examples/mamdani/AllTerms.fld b/examples/mamdani/AllTerms.fld
new file mode 100644
index 0000000..b765a5b
--- /dev/null
+++ b/examples/mamdani/AllTerms.fld
@@ -0,0 +1,1025 @@
+AllInputTerms AllOutputTerms
+0.000000000 4.599895277
+0.006353861 4.599895277
+0.012707722 4.599895277
+0.019061584 4.599892153
+0.025415445 4.599885084
+0.031769306 4.599878001
+0.038123167 4.599870905
+0.044477028 4.599863796
+0.050830890 4.599854356
+0.057184751 4.599840135
+0.063538612 4.599825888
+0.069892473 4.599811614
+0.076246334 4.599797313
+0.082600196 4.599781479
+0.088954057 4.599760024
+0.095307918 4.599738529
+0.101661779 4.599716994
+0.108015640 4.599695418
+0.114369501 4.599673109
+0.120723363 4.599644337
+0.127077224 4.599615510
+0.133431085 4.599586630
+0.139784946 4.599557695
+0.146138807 4.599528705
+0.152492669 4.599492655
+0.158846530 4.599456412
+0.165200391 4.599420101
+0.171554252 4.599383721
+0.177908113 4.599347272
+0.184261975 4.599304555
+0.190615836 4.599260809
+0.196969697 4.599216981
+0.203323558 4.599173070
+0.209677419 4.599129075
+0.216031281 4.599079607
+0.222385142 4.599028272
+0.228739003 4.598976839
+0.235092864 4.598925308
+0.241446725 4.598873679
+0.247800587 4.598817377
+0.254154448 4.596919174
+0.260508309 4.596493440
+0.266862170 4.596137632
+0.273216031 4.595742200
+0.279569892 4.595274723
+0.285923754 4.594727219
+0.292277615 4.594116008
+0.298631476 4.593432922
+0.304985337 4.592668807
+0.311339198 4.591776911
+0.317693060 4.590721701
+0.324046921 4.589539310
+0.330400782 4.588214154
+0.336754643 4.586728981
+0.343108504 4.585019129
+0.349462366 4.582986784
+0.355816227 4.580711102
+0.362170088 4.578164818
+0.368523949 4.575318436
+0.374877810 4.572092534
+0.381231672 4.568261237
+0.387585533 4.563994780
+0.393939394 4.559252552
+0.400293255 4.553992732
+0.406647116 4.548144994
+0.413000978 4.541249632
+0.419354839 4.533659657
+0.425708700 4.525333057
+0.432062561 4.516232199
+0.438416422 4.506325696
+0.444770283 4.496794792
+0.451124145 4.493710135
+0.457478006 4.490662106
+0.463831867 4.487650020
+0.470185728 4.484673209
+0.476539589 4.481579293
+0.482893451 4.478490131
+0.489247312 4.475435736
+0.495601173 4.472415487
+0.501955034 4.469428781
+0.508308895 4.466353820
+0.514662757 4.463264545
+0.521016618 4.460208273
+0.527370479 4.457184444
+0.533724340 4.454192506
+0.540078201 4.451137323
+0.546432063 4.448051381
+0.552785924 4.444996778
+0.559139785 4.441973003
+0.565493646 4.438979556
+0.571847507 4.435944616
+0.578201369 4.432864702
+0.584555230 4.429814557
+0.590909091 4.426793715
+0.597262952 4.423801721
+0.603616813 4.420787213
+0.609970674 4.417715418
+0.616324536 4.414671913
+0.622678397 4.411656273
+0.629032258 4.408668084
+0.635386119 4.405673984
+0.641739980 4.402611914
+0.648093842 4.399576742
+0.654447703 4.396568080
+0.660801564 4.393585550
+0.667155425 4.390611667
+0.673509286 4.387560536
+0.679863148 4.384534993
+0.686217009 4.381534685
+0.692570870 4.378803034
+0.698924731 4.376475128
+0.705278592 4.374472509
+0.711632454 4.372876293
+0.717986315 4.371667843
+0.724340176 4.370882078
+0.730694037 4.370495109
+0.737047898 4.370388857
+0.743401760 4.370642624
+0.749755621 4.371087594
+0.756109482 4.371809708
+0.762463343 4.372860066
+0.768817204 4.374172697
+0.775171065 4.375519338
+0.781524927 4.376944539
+0.787878788 4.378390691
+0.794232649 4.379857111
+0.800586510 4.381337853
+0.806940371 4.382825703
+0.813294233 4.383995232
+0.819648094 4.385184747
+0.826001955 4.386272381
+0.832355816 4.387263153
+0.838709677 4.388270397
+0.845063539 4.389218723
+0.851417400 4.389931993
+0.857771261 4.390665144
+0.864125122 4.391414233
+0.870478983 4.392178065
+0.876832845 4.392925336
+0.883186706 4.393405489
+0.889540567 4.393768439
+0.895894428 4.394047827
+0.902248289 4.394341121
+0.908602151 4.394414128
+0.914956012 4.394434726
+0.921309873 4.394473933
+0.927663734 4.394455866
+0.934017595 4.394023022
+0.940371457 4.393565645
+0.946725318 4.392979180
+0.953079179 4.392264873
+0.959433040 4.391194008
+0.965786901 4.389891155
+0.972140762 4.387967116
+0.978494624 4.386008929
+0.984848485 4.384078347
+0.991202346 4.382159658
+0.997556207 4.380245187
+1.003910068 4.378342248
+1.010263930 4.376450758
+1.016617791 4.374570582
+1.022971652 4.372701585
+1.029325513 4.370836957
+1.035679374 4.368777798
+1.042033236 4.366100940
+1.048387097 4.363131178
+1.054740958 4.359902890
+1.061094819 4.356444999
+1.067448680 4.352898808
+1.073802542 4.349689538
+1.080156403 4.347161282
+1.086510264 4.346117831
+1.092864125 4.346638603
+1.099217986 4.347588660
+1.105571848 4.348367496
+1.111925709 4.349145305
+1.118279570 4.349580392
+1.124633431 4.350038990
+1.130987292 4.350146966
+1.137341153 4.350021415
+1.143695015 4.349874085
+1.150048876 4.349738316
+1.156402737 4.349455770
+1.162756598 4.348792090
+1.169110459 4.348140830
+1.175464321 4.347318692
+1.181818182 4.346244887
+1.188172043 4.344696513
+1.194525904 4.342885325
+1.200879765 4.340822753
+1.207233627 4.338510265
+1.213587488 4.336156649
+1.219941349 4.333355362
+1.226295210 4.330137299
+1.232649071 4.326641602
+1.239002933 4.321989008
+1.245356794 4.316169893
+1.251710655 4.310255005
+1.258064516 4.304334601
+1.264418377 4.298371995
+1.270772239 4.292366629
+1.277126100 4.286098146
+1.283479961 4.279628008
+1.289833822 4.273099795
+1.296187683 4.266519469
+1.302541544 4.259886618
+1.308895406 4.253200509
+1.315249267 4.246299266
+1.321603128 4.240059447
+1.327956989 4.237953162
+1.334310850 4.235855128
+1.340664712 4.233765267
+1.347018573 4.231683504
+1.353372434 4.229604349
+1.359726295 4.227531097
+1.366080156 4.225465702
+1.372434018 4.223408091
+1.378787879 4.221358193
+1.385141740 4.219311371
+1.391495601 4.217269217
+1.397849462 4.215234545
+1.404203324 4.213207286
+1.410557185 4.211187374
+1.416911046 4.209171028
+1.423264907 4.207158130
+1.429618768 4.205152358
+1.435972630 4.203153647
+1.442326491 4.201161932
+1.448680352 4.199174293
+1.455034213 4.197188899
+1.461388074 4.195210291
+1.467741935 4.193238408
+1.474095797 4.191273188
+1.480449658 4.189312571
+1.486803519 4.187353011
+1.493157380 4.185399915
+1.499511241 4.183453221
+1.505865103 4.181512872
+1.512218964 4.179577670
+1.518572825 4.177642355
+1.524926686 4.175713192
+1.531280547 4.173790126
+1.537634409 4.171873100
+1.543988270 4.169961779
+1.550342131 4.168049188
+1.556695992 4.166142455
+1.563049853 4.164241525
+1.569403715 4.162346345
+1.575757576 4.160456860
+1.582111437 4.158566124
+1.588465298 4.156680384
+1.594819159 4.154800166
+1.601173021 4.152925419
+1.607526882 4.151056092
+1.613880743 4.149186104
+1.620234604 4.147319983
+1.626588465 4.145459116
+1.632942326 4.143603453
+1.639296188 4.141752946
+1.645650049 4.139902380
+1.652003910 4.138054566
+1.658357771 4.136211747
+1.664711632 4.134373878
+1.671065494 4.132540910
+1.677419355 4.130708496
+1.683773216 4.128877732
+1.690127077 4.127051717
+1.696480938 4.125230405
+1.702834800 4.123413751
+1.709188661 4.121598273
+1.715542522 4.119783356
+1.721896383 4.117972950
+1.728250244 4.116167012
+1.734604106 4.114365499
+1.740957967 4.112565790
+1.747311828 4.110765567
+1.753665689 4.168153884
+1.760019550 4.166675537
+1.766373412 4.164106453
+1.772727273 4.160437753
+1.779081134 4.156385975
+1.785434995 4.151833303
+1.791788856 4.146677771
+1.798142717 4.141366376
+1.804496579 4.135700681
+1.810850440 4.129929818
+1.817204301 4.123874560
+1.823558162 4.117266592
+1.829912023 4.110423379
+1.836265885 4.103170947
+1.842619746 4.095818864
+1.848973607 4.088323358
+1.855327468 4.080426295
+1.861681329 4.072417514
+1.868035191 4.064291322
+1.874389052 4.055685721
+1.880742913 4.046336936
+1.887096774 4.036896117
+1.893450635 4.027612078
+1.899804497 4.018179925
+1.906158358 4.008590765
+1.912512219 3.998844491
+1.918866080 3.989206249
+1.925219941 3.979582314
+1.931573803 3.969730626
+1.937927664 3.963998992
+1.944281525 3.962015501
+1.950635386 3.960035623
+1.956989247 3.958059326
+1.963343109 3.956086577
+1.969696970 3.954113625
+1.976050831 3.952141011
+1.982404692 3.950171837
+1.988758553 3.948206070
+1.995112414 3.946243679
+2.001466276 3.944281718
+2.007820137 3.942319159
+2.014173998 3.940359871
+2.020527859 3.938403822
+2.026881720 3.936450982
+2.033235582 3.934499204
+2.039589443 3.932545907
+2.045943304 3.930595717
+2.052297165 3.928321055
+2.058651026 3.926276349
+2.065004888 3.924475266
+2.071358749 3.922774809
+2.077712610 3.921104727
+2.084066471 3.919464304
+2.090420332 3.918010740
+2.096774194 3.916680680
+2.103128055 3.915368777
+2.109481916 3.914080307
+2.115835777 3.912814724
+2.122189638 3.911723968
+2.128543500 3.910668734
+2.134897361 3.909680634
+2.141251222 3.908669775
+2.147605083 3.907587992
+2.153958944 3.906523952
+2.160312805 3.905477277
+2.166666667 3.904442682
+2.173020528 3.903423931
+2.179374389 3.902421528
+2.185728250 3.901486449
+2.192082111 3.900445921
+2.198435973 3.899393150
+2.204789834 3.898353233
+2.211143695 3.897327377
+2.217497556 3.896315330
+2.223851417 3.895323424
+2.230205279 3.894239779
+2.236559140 3.893166259
+2.242913001 3.892085629
+2.249266862 3.890921186
+2.255620723 3.763373136
+2.261974585 3.760810581
+2.268328446 3.758220845
+2.274682307 3.755515096
+2.281036168 3.752787836
+2.287390029 3.750049993
+2.293743891 3.747296167
+2.300097752 3.744524926
+2.306451613 3.741705721
+2.312805474 3.738783159
+2.319159335 3.735822614
+2.325513196 3.732839473
+2.331867058 3.729832989
+2.338220919 3.726807130
+2.344574780 3.723761656
+2.350928641 3.720696322
+2.357282502 3.717609935
+2.363636364 3.714498281
+2.369990225 3.711365982
+2.376344086 3.708212779
+2.382697947 3.704895960
+2.389051808 3.701549104
+2.395405670 3.698151488
+2.401759531 3.694720822
+2.408113392 3.691262237
+2.414467253 3.687775337
+2.420821114 3.684259719
+2.427174976 3.680709529
+2.433528837 3.677129365
+2.439882698 3.673519197
+2.446236559 3.669878595
+2.452590420 3.666207121
+2.458944282 3.662499570
+2.465298143 3.658759155
+2.471652004 3.654986475
+2.478005865 3.651045967
+2.484359726 3.647017997
+2.490713587 3.642936519
+2.497067449 3.638788673
+2.503421310 3.636596731
+2.509775171 3.636113994
+2.516129032 3.635610934
+2.522482893 3.635103238
+2.528836755 3.634534439
+2.535190616 3.633850040
+2.541544477 3.633174274
+2.547898338 3.632506997
+2.554252199 3.631845503
+2.560606061 3.631189380
+2.566959922 3.630541357
+2.573313783 3.629901299
+2.579667644 3.629269072
+2.586021505 3.628642677
+2.592375367 3.628020518
+2.598729228 3.627405830
+2.605083089 3.626798488
+2.611436950 3.626184131
+2.617790811 3.625542149
+2.624144673 3.624883923
+2.630498534 3.624060753
+2.636852395 3.623189558
+2.643206256 3.622327417
+2.649560117 3.621478017
+2.655913978 3.620645245
+2.662267840 3.619821076
+2.668621701 3.619029171
+2.674975562 3.618259835
+2.681329423 3.617499446
+2.687683284 3.616733785
+2.694037146 3.615929936
+2.700391007 3.615010095
+2.706744868 3.614080723
+2.713098729 3.613215121
+2.719452590 3.612358954
+2.725806452 3.611513289
+2.732160313 3.610643258
+2.738514174 3.609617457
+2.744868035 3.608593932
+2.751221896 3.607027619
+2.757575758 3.603513978
+2.763929619 3.599607885
+2.770283480 3.595554668
+2.776637341 3.591470975
+2.782991202 3.587039699
+2.789345064 3.582427638
+2.795698925 3.577769876
+2.802052786 3.573065578
+2.808406647 3.568294094
+2.814760508 3.563340228
+2.821114370 3.558021643
+2.827468231 3.552516327
+2.833822092 3.546930677
+2.840175953 3.541262601
+2.846529814 3.535508239
+2.852883675 3.529664792
+2.859237537 3.523731944
+2.865591398 3.517440754
+2.871945259 3.510815250
+2.878299120 3.503981681
+2.884652981 3.497018115
+2.891006843 3.489873772
+2.897360704 3.482525406
+2.903714565 3.475027943
+2.910068426 3.467225386
+2.916422287 3.458886336
+2.922776149 3.450555637
+2.929130010 3.442048766
+2.935483871 3.433360109
+2.941837732 3.424602968
+2.948191593 3.415281614
+2.954545455 3.405651752
+2.960899316 3.403007137
+2.967253177 3.400434512
+2.973607038 3.397862391
+2.979960899 3.395287917
+2.986314761 3.392713887
+2.992668622 3.390140357
+2.999022483 3.387568883
+3.005376344 3.385000338
+3.011730205 3.382430013
+3.018084066 3.380077653
+3.024437928 3.377875015
+3.030791789 3.375524943
+3.037145650 3.373402036
+3.043499511 3.371116711
+3.049853372 3.368824184
+3.056207234 3.366623179
+3.062561095 3.364503845
+3.068914956 3.362409804
+3.075268817 3.360336018
+3.081622678 3.358353454
+3.087976540 3.356478896
+3.094330401 3.354622474
+3.100684262 3.352771569
+3.107038123 3.350907341
+3.113391984 3.348993885
+3.119745846 3.346909885
+3.126099707 3.344819531
+3.132453568 3.342598890
+3.138807429 3.340275375
+3.145161290 3.337883015
+3.151515152 3.335412086
+3.157869013 3.332875386
+3.164222874 3.330208393
+3.170576735 3.327532743
+3.176930596 3.324848544
+3.183284457 3.322157198
+3.189638319 3.319459305
+3.195992180 3.316677427
+3.202346041 3.313783765
+3.208699902 3.310881781
+3.215053763 3.307973034
+3.221407625 3.305194923
+3.227761486 3.302433058
+3.234115347 3.299669163
+3.240469208 3.296983598
+3.246823069 3.294388917
+3.253176931 3.291694941
+3.259530792 3.288912681
+3.265884653 3.286303511
+3.272238514 3.283696099
+3.278592375 3.281090518
+3.284946237 3.278608571
+3.291300098 3.276193408
+3.297653959 3.273722220
+3.304007820 3.271161759
+3.310361681 3.268747744
+3.316715543 3.265966787
+3.323069404 3.263085323
+3.329423265 3.260199447
+3.335777126 3.257347210
+3.342130987 3.254581221
+3.348484848 3.251727316
+3.354838710 3.248792146
+3.361192571 3.245765662
+3.367546432 3.242718518
+3.373900293 3.239619271
+3.380254154 3.236414055
+3.386608016 3.233211207
+3.392961877 3.229760188
+3.399315738 3.226378097
+3.405669599 3.222796617
+3.412023460 3.219154408
+3.418377322 3.215272481
+3.424731183 3.211297617
+3.431085044 3.207131367
+3.437438905 3.202926988
+3.443792766 3.198418272
+3.450146628 3.193810749
+3.456500489 3.188860538
+3.462854350 3.183359238
+3.469208211 3.177024226
+3.475562072 3.170496818
+3.481915934 3.163778038
+3.488269795 3.156835795
+3.494623656 3.151777246
+3.500977517 3.148035721
+3.507331378 3.144197746
+3.513685239 3.140446705
+3.520039101 3.136655740
+3.526392962 3.132806200
+3.532746823 3.128899648
+3.539100684 3.125129471
+3.545454545 3.121261384
+3.551808407 3.117323246
+3.558162268 3.113378774
+3.564516129 3.109556905
+3.570869990 3.105689954
+3.577223851 3.101812687
+3.583577713 3.098113304
+3.589931574 3.094386990
+3.596285435 3.090861319
+3.602639296 3.087515615
+3.608993157 3.084155158
+3.615347019 3.080990618
+3.621700880 3.077760997
+3.628054741 3.074689575
+3.634408602 3.071762524
+3.640762463 3.069078509
+3.647116325 3.066888906
+3.653470186 3.064848343
+3.659824047 3.062841076
+3.666177908 3.060943162
+3.672531769 3.058946649
+3.678885630 3.057033237
+3.685239492 3.051646773
+3.691593353 3.043638574
+3.697947214 3.034716407
+3.704301075 3.025432082
+3.710654936 3.015899291
+3.717008798 3.005532233
+3.723362659 2.994631745
+3.729716520 2.983257966
+3.736070381 2.971645362
+3.742424242 2.959138446
+3.748778104 2.946656184
+3.755131965 2.934768336
+3.761485826 2.924011690
+3.767839687 2.913972946
+3.774193548 2.905005829
+3.780547410 2.897395635
+3.786901271 2.890239940
+3.793255132 2.883864707
+3.799608993 2.878146427
+3.805962854 2.873338916
+3.812316716 2.868774397
+3.818670577 2.864691316
+3.825024438 2.860941683
+3.831378299 2.857473629
+3.837732160 2.854395833
+3.844086022 2.851449698
+3.850439883 2.848549478
+3.856793744 2.845695513
+3.863147605 2.842933383
+3.869501466 2.840390382
+3.875855327 2.838187245
+3.882209189 2.836282288
+3.888563050 2.834395205
+3.894916911 2.832513363
+3.901270772 2.830630910
+3.907624633 2.828747302
+3.913978495 2.826862520
+3.920332356 2.824979616
+3.926686217 2.823097208
+3.933040078 2.821213567
+3.939393939 2.819328674
+3.945747801 2.817442508
+3.952101662 2.815557626
+3.958455523 2.813673739
+3.964809384 2.811788518
+3.971163245 2.809901944
+3.977517107 2.808013996
+3.983870968 2.806126709
+3.990224829 2.804240935
+3.996578690 2.802353725
+4.002932551 2.800465058
+4.009286413 2.798574913
+4.015640274 2.796684781
+4.021994135 2.794796696
+4.028347996 2.792907069
+4.034701857 2.791015880
+4.041055718 2.789123106
+4.047409580 2.787229672
+4.053763441 2.785338834
+4.060117302 2.783446347
+4.066471163 2.781552188
+4.072825024 2.779656337
+4.079178886 2.777759126
+4.085532747 2.775865077
+4.091886608 2.773969268
+4.098240469 2.772071676
+4.104594330 2.770172279
+4.110948192 2.768271094
+4.117302053 2.766374342
+4.123655914 2.764476074
+4.130009775 2.762595767
+4.136363636 2.760758819
+4.142717498 2.758935172
+4.149071359 2.757131514
+4.155425220 2.755346309
+4.161779081 2.753580657
+4.168132942 2.751482072
+4.174486804 2.747379566
+4.180840665 2.743285748
+4.187194526 2.739040821
+4.193548387 2.735000453
+4.199902248 2.730956631
+4.206256109 2.727306104
+4.212609971 2.723853682
+4.218963832 2.720650398
+4.225317693 2.717215725
+4.231671554 2.714264925
+4.238025415 2.711377668
+4.244379277 2.708456312
+4.250733138 2.705502047
+4.257086999 2.699963796
+4.263440860 2.694404754
+4.269794721 2.688818075
+4.276148583 2.683152932
+4.282502444 2.677352841
+4.288856305 2.671534472
+4.295210166 2.665710188
+4.301564027 2.659894532
+4.307917889 2.653904808
+4.314271750 2.647082281
+4.320625611 2.640376703
+4.326979472 2.634383466
+4.333333333 2.628611333
+4.339687195 2.623045257
+4.346041056 2.617682590
+4.352394917 2.612510659
+4.358748778 2.607522940
+4.365102639 2.602713283
+4.371456500 2.598076108
+4.377810362 2.593612156
+4.384164223 2.589309799
+4.390518084 2.585164176
+4.396871945 2.581170702
+4.403225806 2.577325054
+4.409579668 2.573629224
+4.415933529 2.570073814
+4.422287390 2.566654660
+4.428641251 2.563368355
+4.434995112 2.560211698
+4.441348974 2.557186973
+4.447702835 2.554287333
+4.454056696 2.551508820
+4.460410557 2.548848951
+4.466764418 2.546305402
+4.473118280 2.543880553
+4.479472141 2.541569889
+4.485826002 2.539369471
+4.492179863 2.537277567
+4.498533724 2.535292581
+4.504887586 2.533416848
+4.511241447 2.531648061
+4.517595308 2.529982170
+4.523949169 2.528418089
+4.530303030 2.526954850
+4.536656891 2.525594665
+4.543010753 2.524337371
+4.549364614 2.523178724
+4.555718475 2.522118228
+4.562072336 2.521155495
+4.568426197 2.520292572
+4.574780059 2.519531438
+4.581133920 2.518867611
+4.587487781 2.518301166
+4.593841642 2.517832298
+4.600195503 2.517462875
+4.606549365 2.517197081
+4.612903226 2.517030180
+4.619257087 2.516962853
+4.625610948 2.516995911
+4.631964809 2.517131080
+4.638318671 2.517374868
+4.644672532 2.517722312
+4.651026393 2.518174779
+4.657380254 2.513659123
+4.663734115 2.508125388
+4.670087977 2.502541173
+4.676441838 2.496905848
+4.682795699 2.491226658
+4.689149560 2.485511648
+4.695503421 2.480131931
+4.701857283 2.474823139
+4.708211144 2.469510489
+4.714565005 2.464202984
+4.720918866 2.458910899
+4.727272727 2.453644854
+4.733626588 2.448421318
+4.739980450 2.443247453
+4.746334311 2.438299314
+4.752688172 2.432763745
+4.759042033 2.425949005
+4.765395894 2.419291750
+4.771749756 2.412669897
+4.778103617 2.406055580
+4.784457478 2.399250324
+4.790811339 2.392507300
+4.797165200 2.385862943
+4.803519062 2.379674845
+4.809872923 2.373569532
+4.816226784 2.367608901
+4.822580645 2.361641330
+4.828934506 2.355218813
+4.835288368 2.348730271
+4.841642229 2.342430330
+4.847996090 2.336320662
+4.854349951 2.330399039
+4.860703812 2.324816922
+4.867057674 2.319535672
+4.873411535 2.314418752
+4.879765396 2.309466791
+4.886119257 2.304772174
+4.892473118 2.300224661
+4.898826979 2.295824445
+4.905180841 2.291561381
+4.911534702 2.287430967
+4.917888563 2.283428598
+4.924242424 2.279550153
+4.930596285 2.275796879
+4.936950147 2.272157536
+4.943304008 2.268627457
+4.949657869 2.265309212
+4.956011730 2.262113657
+4.962365591 2.259012750
+4.968719453 2.255996077
+4.975073314 2.253059604
+4.981427175 2.250199716
+4.987781036 2.247412981
+4.994134897 2.244742103
+5.000488759 2.242138547
+5.006842620 2.239596260
+5.013196481 2.237112902
+5.019550342 2.234686436
+5.025904203 2.232320228
+5.032258065 2.230009725
+5.038611926 2.227752196
+5.044965787 2.225547264
+5.051319648 2.223395128
+5.057673509 2.221300911
+5.064027370 2.219264613
+5.070381232 2.217286135
+5.076735093 2.215369071
+5.083088954 2.213518254
+5.089442815 2.211743418
+5.095796676 2.210052495
+5.102150538 2.208452035
+5.108504399 2.206954343
+5.114858260 2.205574451
+5.121212121 2.204333209
+5.127565982 2.203253997
+5.133919844 2.202358615
+5.140273705 2.201677808
+5.146627566 2.201247601
+5.152981427 2.201111684
+5.159335288 2.201321192
+5.165689150 2.201934041
+5.172043011 2.203072413
+5.178396872 2.204753575
+5.184750733 2.207267944
+5.191104594 2.210672693
+5.197458456 2.214918459
+5.203812317 2.220084262
+5.210166178 2.226462979
+5.216520039 2.234421744
+5.222873900 2.243852944
+5.229227761 2.245519207
+5.235581623 2.248153515
+5.241935484 2.252005561
+5.248289345 2.257143573
+5.254643206 2.257242365
+5.260997067 2.256166494
+5.267350929 2.255207844
+5.273704790 2.252488099
+5.280058651 2.245489169
+5.286412512 2.236180770
+5.292766373 2.227509962
+5.299120235 2.219830899
+5.305474096 2.213176464
+5.311827957 2.207156013
+5.318181818 2.201791510
+5.324535679 2.197217425
+5.330889541 2.192942201
+5.337243402 2.189263625
+5.343597263 2.185763709
+5.349951124 2.182747581
+5.356304985 2.179878809
+5.362658847 2.177132825
+5.369012708 2.174685668
+5.375366569 2.172338745
+5.381720430 2.170065527
+5.388074291 2.167860085
+5.394428152 2.165799070
+5.400782014 2.163806303
+5.407135875 2.161840938
+5.413489736 2.159902531
+5.419843597 2.157990461
+5.426197458 2.156097125
+5.432551320 2.154220179
+5.438905181 2.152357531
+5.445259042 2.150509149
+5.451612903 2.148677415
+5.457966764 2.146855019
+5.464320626 2.145040704
+5.470674487 2.143233382
+5.477028348 2.141433054
+5.483382209 2.139644701
+5.489736070 2.137860906
+5.496089932 2.136081099
+5.502443793 2.134328107
+5.508797654 2.132649534
+5.515151515 2.130989142
+5.521505376 2.129339036
+5.527859238 2.127699011
+5.534213099 2.126068931
+5.540566960 2.124448719
+5.546920821 2.122971692
+5.553274682 2.121511010
+5.559628543 2.120008961
+5.565982405 2.118523744
+5.572336266 2.117055449
+5.578690127 2.115765674
+5.585043988 2.114537858
+5.591397849 2.113335881
+5.597751711 2.112209154
+5.604105572 2.111254423
+5.610459433 2.110338185
+5.616813294 2.109457677
+5.623167155 2.108794683
+5.629521017 2.108250774
+5.635874878 2.107747754
+5.642228739 2.107523978
+5.648582600 2.107351345
+5.654936461 2.107260660
+5.661290323 2.107503323
+5.667644184 2.107795601
+5.673998045 2.108357990
+5.680351906 2.109020431
+5.686705767 2.109846004
+5.693059629 2.110979040
+5.699413490 2.112228755
+5.705767351 2.113736512
+5.712121212 2.115288377
+5.718475073 2.117188508
+5.724828935 2.119140287
+5.731182796 2.121406844
+5.737536657 2.123709219
+5.743890518 2.125864421
+5.750244379 2.127533697
+5.756598240 2.128951976
+5.762952102 2.129814768
+5.769305963 2.130111253
+5.775659824 2.129941914
+5.782013685 2.129332824
+5.788367546 2.128201102
+5.794721408 2.126466974
+5.801075269 2.124123331
+5.807429130 2.121438142
+5.813782991 2.118465315
+5.820136852 2.115465007
+5.826490714 2.112439464
+5.832844575 2.109388333
+5.839198436 2.106414450
+5.845552297 2.103431920
+5.851906158 2.100423258
+5.858260020 2.097388086
+5.864613881 2.094326016
+5.870967742 2.091331916
+5.877321603 2.088343727
+5.883675464 2.085328087
+5.890029326 2.082284582
+5.896383187 2.079212787
+5.902737048 2.076198279
+5.909090909 2.073206285
+5.915444770 2.070185443
+5.921798631 2.067135298
+5.928152493 2.064055384
+5.934506354 2.061020444
+5.940860215 2.058026997
+5.947214076 2.055003222
+5.953567937 2.051948619
+5.959921799 2.048862677
+5.966275660 2.045807494
+5.972629521 2.042815556
+5.978983382 2.039791727
+5.985337243 2.036735455
+5.991691105 2.033646180
+5.998044966 2.030571219
+6.004398827 2.027584513
+6.010752688 2.024564264
+6.017106549 2.021509869
+6.023460411 2.018420707
+6.029814272 2.015326791
+6.036168133 2.012349980
+6.042521994 2.009337894
+6.048875855 2.006289865
+6.055229717 2.003205208
+6.061583578 1.993674304
+6.067937439 1.983767801
+6.074291300 1.974666943
+6.080645161 1.966340343
+6.086999022 1.958750368
+6.093352884 1.951855006
+6.099706745 1.946007268
+6.106060606 1.940747448
+6.112414467 1.936005220
+6.118768328 1.931738763
+6.125122190 1.927907466
+6.131476051 1.924681564
+6.137829912 1.921835182
+6.144183773 1.919288898
+6.150537634 1.917013216
+6.156891496 1.914980871
+6.163245357 1.913271019
+6.169599218 1.911785846
+6.175953079 1.910460690
+6.182306940 1.909278299
+6.188660802 1.908223089
+6.195014663 1.907331193
+6.201368524 1.906567078
+6.207722385 1.905883992
+6.214076246 1.905272781
+6.220430108 1.904725277
+6.226783969 1.904257800
+6.233137830 1.903862368
+6.239491691 1.903506560
+6.245845552 1.903080826
+6.252199413 1.901182623
+6.258553275 1.901126321
+6.264907136 1.901074692
+6.271260997 1.901023161
+6.277614858 1.900971728
+6.283968719 1.900920393
+6.290322581 1.900870925
+6.296676442 1.900826930
+6.303030303 1.900783019
+6.309384164 1.900739191
+6.315738025 1.900695445
+6.322091887 1.900652728
+6.328445748 1.900616279
+6.334799609 1.900579899
+6.341153470 1.900543588
+6.347507331 1.900507345
+6.353861193 1.900471295
+6.360215054 1.900442305
+6.366568915 1.900413370
+6.372922776 1.900384490
+6.379276637 1.900355663
+6.385630499 1.900326891
+6.391984360 1.900304582
+6.398338221 1.900283006
+6.404692082 1.900261471
+6.411045943 1.900239976
+6.417399804 1.900218521
+6.423753666 1.900202687
+6.430107527 1.900188386
+6.436461388 1.900174112
+6.442815249 1.900159865
+6.449169110 1.900145644
+6.455522972 1.900136204
+6.461876833 1.900129095
+6.468230694 1.900121999
+6.474584555 1.900114916
+6.480938416 1.900107847
+6.487292278 1.900104723
+6.493646139 1.900104723
+6.500000000 1.900104723
diff --git a/examples/mamdani/AllTerms.fll b/examples/mamdani/AllTerms.fll
new file mode 100644
index 0000000..4db1b32
--- /dev/null
+++ b/examples/mamdani/AllTerms.fll
@@ -0,0 +1,79 @@
+Engine: AllTerms
+InputVariable: AllInputTerms
+ enabled: true
+ range: 0.000 6.500
+ lock-range: false
+ term: A Sigmoid 0.500 -20.000
+ term: B ZShape 0.000 1.000
+ term: C Ramp 1.000 0.000
+ term: D Triangle 0.500 1.000 1.500
+ term: E Trapezoid 1.000 1.250 1.750 2.000
+ term: F Concave 0.850 0.250
+ term: G Rectangle 1.750 2.250
+ term: H Discrete 2.000 0.000 2.250 1.000 2.500 0.500 2.750 1.000 3.000 0.000
+ term: I Gaussian 3.000 0.200
+ term: J Cosine 3.250 0.650
+ term: K GaussianProduct 3.500 0.100 3.300 0.300
+ term: L Spike 3.640 1.040
+ term: M Bell 4.000 0.250 3.000
+ term: N PiShape 4.000 4.500 4.500 5.000
+ term: O Concave 5.650 6.250
+ term: P SigmoidDifference 4.750 10.000 30.000 5.250
+ term: Q SigmoidProduct 5.250 20.000 -10.000 5.750
+ term: R Ramp 5.500 6.500
+ term: S SShape 5.500 6.500
+ term: T Sigmoid 6.000 20.000
+OutputVariable: AllOutputTerms
+ enabled: true
+ range: 0.000 6.500
+ lock-range: false
+ aggregation: Maximum
+ defuzzifier: Centroid 200
+ default: nan
+ lock-previous: false
+ term: A Sigmoid 0.500 -20.000
+ term: B ZShape 0.000 1.000
+ term: C Ramp 1.000 0.000
+ term: D Triangle 0.500 1.000 1.500
+ term: E Trapezoid 1.000 1.250 1.750 2.000
+ term: F Concave 0.850 0.250
+ term: G Rectangle 1.750 2.250
+ term: H Discrete 2.000 0.000 2.250 1.000 2.500 0.500 2.750 1.000 3.000 0.000
+ term: I Gaussian 3.000 0.200
+ term: J Cosine 3.250 0.650
+ term: K GaussianProduct 3.500 0.100 3.300 0.300
+ term: L Spike 3.640 1.040
+ term: M Bell 4.000 0.250 3.000
+ term: N PiShape 4.000 4.500 4.500 5.000
+ term: O Concave 5.650 6.250
+ term: P SigmoidDifference 4.750 10.000 30.000 5.250
+ term: Q SigmoidProduct 5.250 20.000 -10.000 5.750
+ term: R Ramp 5.500 6.500
+ term: S SShape 5.500 6.500
+ term: T Sigmoid 6.000 20.000
+RuleBlock:
+ enabled: true
+ conjunction: Minimum
+ disjunction: Maximum
+ implication: Minimum
+ activation: General
+ rule: if AllInputTerms is A then AllOutputTerms is T
+ rule: if AllInputTerms is B then AllOutputTerms is S
+ rule: if AllInputTerms is C then AllOutputTerms is R
+ rule: if AllInputTerms is D then AllOutputTerms is Q
+ rule: if AllInputTerms is E then AllOutputTerms is P
+ rule: if AllInputTerms is F then AllOutputTerms is O
+ rule: if AllInputTerms is G then AllOutputTerms is N
+ rule: if AllInputTerms is H then AllOutputTerms is M
+ rule: if AllInputTerms is I then AllOutputTerms is L
+ rule: if AllInputTerms is J then AllOutputTerms is K
+ rule: if AllInputTerms is K then AllOutputTerms is J
+ rule: if AllInputTerms is L then AllOutputTerms is I
+ rule: if AllInputTerms is M then AllOutputTerms is H
+ rule: if AllInputTerms is N then AllOutputTerms is G
+ rule: if AllInputTerms is O then AllOutputTerms is F
+ rule: if AllInputTerms is P then AllOutputTerms is E
+ rule: if AllInputTerms is Q then AllOutputTerms is D
+ rule: if AllInputTerms is R then AllOutputTerms is C
+ rule: if AllInputTerms is S then AllOutputTerms is B
+ rule: if AllInputTerms is T then AllOutputTerms is A \ No newline at end of file
diff --git a/examples/mamdani/AllTerms.java b/examples/mamdani/AllTerms.java
new file mode 100644
index 0000000..6d4651d
--- /dev/null
+++ b/examples/mamdani/AllTerms.java
@@ -0,0 +1,114 @@
+import com.fuzzylite.*;
+import com.fuzzylite.activation.*
+import com.fuzzylite.defuzzifier.*;
+import com.fuzzylite.factory.*;
+import com.fuzzylite.hedge.*;
+import com.fuzzylite.imex.*;
+import com.fuzzylite.norm.*;
+import com.fuzzylite.norm.s.*;
+import com.fuzzylite.norm.t.*;
+import com.fuzzylite.rule.*;
+import com.fuzzylite.term.*;
+import com.fuzzylite.variable.*;
+
+public class AllTerms{
+public static void main(String[] args){
+//Code automatically generated with fuzzylite 6.0.
+
+Engine engine = new Engine();
+engine.setName("AllTerms");
+engine.setDescription("");
+
+InputVariable AllInputTerms = new InputVariable();
+AllInputTerms.setName("AllInputTerms");
+AllInputTerms.setDescription("");
+AllInputTerms.setEnabled(true);
+AllInputTerms.setRange(0.000, 6.500);
+AllInputTerms.setLockValueInRange(false);
+AllInputTerms.addTerm(new Sigmoid("A", 0.500, -20.000));
+AllInputTerms.addTerm(new ZShape("B", 0.000, 1.000));
+AllInputTerms.addTerm(new Ramp("C", 1.000, 0.000));
+AllInputTerms.addTerm(new Triangle("D", 0.500, 1.000, 1.500));
+AllInputTerms.addTerm(new Trapezoid("E", 1.000, 1.250, 1.750, 2.000));
+AllInputTerms.addTerm(new Concave("F", 0.850, 0.250));
+AllInputTerms.addTerm(new Rectangle("G", 1.750, 2.250));
+AllInputTerms.addTerm(Discrete.create("H", 2.000, 0.000, 2.250, 1.000, 2.500, 0.500, 2.750, 1.000, 3.000, 0.000));
+AllInputTerms.addTerm(new Gaussian("I", 3.000, 0.200));
+AllInputTerms.addTerm(new Cosine("J", 3.250, 0.650));
+AllInputTerms.addTerm(new GaussianProduct("K", 3.500, 0.100, 3.300, 0.300));
+AllInputTerms.addTerm(new Spike("L", 3.640, 1.040));
+AllInputTerms.addTerm(new Bell("M", 4.000, 0.250, 3.000));
+AllInputTerms.addTerm(new PiShape("N", 4.000, 4.500, 4.500, 5.000));
+AllInputTerms.addTerm(new Concave("O", 5.650, 6.250));
+AllInputTerms.addTerm(new SigmoidDifference("P", 4.750, 10.000, 30.000, 5.250));
+AllInputTerms.addTerm(new SigmoidProduct("Q", 5.250, 20.000, -10.000, 5.750));
+AllInputTerms.addTerm(new Ramp("R", 5.500, 6.500));
+AllInputTerms.addTerm(new SShape("S", 5.500, 6.500));
+AllInputTerms.addTerm(new Sigmoid("T", 6.000, 20.000));
+engine.addInputVariable(AllInputTerms);
+
+OutputVariable AllOutputTerms = new OutputVariable();
+AllOutputTerms.setName("AllOutputTerms");
+AllOutputTerms.setDescription("");
+AllOutputTerms.setEnabled(true);
+AllOutputTerms.setRange(0.000, 6.500);
+AllOutputTerms.setLockValueInRange(false);
+AllOutputTerms.setAggregation(new Maximum());
+AllOutputTerms.setDefuzzifier(new Centroid(200));
+AllOutputTerms.setDefaultValue(Double.NaN);
+AllOutputTerms.setLockPreviousValue(false);
+AllOutputTerms.addTerm(new Sigmoid("A", 0.500, -20.000));
+AllOutputTerms.addTerm(new ZShape("B", 0.000, 1.000));
+AllOutputTerms.addTerm(new Ramp("C", 1.000, 0.000));
+AllOutputTerms.addTerm(new Triangle("D", 0.500, 1.000, 1.500));
+AllOutputTerms.addTerm(new Trapezoid("E", 1.000, 1.250, 1.750, 2.000));
+AllOutputTerms.addTerm(new Concave("F", 0.850, 0.250));
+AllOutputTerms.addTerm(new Rectangle("G", 1.750, 2.250));
+AllOutputTerms.addTerm(Discrete.create("H", 2.000, 0.000, 2.250, 1.000, 2.500, 0.500, 2.750, 1.000, 3.000, 0.000));
+AllOutputTerms.addTerm(new Gaussian("I", 3.000, 0.200));
+AllOutputTerms.addTerm(new Cosine("J", 3.250, 0.650));
+AllOutputTerms.addTerm(new GaussianProduct("K", 3.500, 0.100, 3.300, 0.300));
+AllOutputTerms.addTerm(new Spike("L", 3.640, 1.040));
+AllOutputTerms.addTerm(new Bell("M", 4.000, 0.250, 3.000));
+AllOutputTerms.addTerm(new PiShape("N", 4.000, 4.500, 4.500, 5.000));
+AllOutputTerms.addTerm(new Concave("O", 5.650, 6.250));
+AllOutputTerms.addTerm(new SigmoidDifference("P", 4.750, 10.000, 30.000, 5.250));
+AllOutputTerms.addTerm(new SigmoidProduct("Q", 5.250, 20.000, -10.000, 5.750));
+AllOutputTerms.addTerm(new Ramp("R", 5.500, 6.500));
+AllOutputTerms.addTerm(new SShape("S", 5.500, 6.500));
+AllOutputTerms.addTerm(new Sigmoid("T", 6.000, 20.000));
+engine.addOutputVariable(AllOutputTerms);
+
+RuleBlock ruleBlock = new RuleBlock();
+ruleBlock.setName("");
+ruleBlock.setDescription("");
+ruleBlock.setEnabled(true);
+ruleBlock.setConjunction(new Minimum());
+ruleBlock.setDisjunction(new Maximum());
+ruleBlock.setImplication(new Minimum());
+ruleBlock.setActivation(new General());
+ruleBlock.addRule(Rule.parse("if AllInputTerms is A then AllOutputTerms is T", engine));
+ruleBlock.addRule(Rule.parse("if AllInputTerms is B then AllOutputTerms is S", engine));
+ruleBlock.addRule(Rule.parse("if AllInputTerms is C then AllOutputTerms is R", engine));
+ruleBlock.addRule(Rule.parse("if AllInputTerms is D then AllOutputTerms is Q", engine));
+ruleBlock.addRule(Rule.parse("if AllInputTerms is E then AllOutputTerms is P", engine));
+ruleBlock.addRule(Rule.parse("if AllInputTerms is F then AllOutputTerms is O", engine));
+ruleBlock.addRule(Rule.parse("if AllInputTerms is G then AllOutputTerms is N", engine));
+ruleBlock.addRule(Rule.parse("if AllInputTerms is H then AllOutputTerms is M", engine));
+ruleBlock.addRule(Rule.parse("if AllInputTerms is I then AllOutputTerms is L", engine));
+ruleBlock.addRule(Rule.parse("if AllInputTerms is J then AllOutputTerms is K", engine));
+ruleBlock.addRule(Rule.parse("if AllInputTerms is K then AllOutputTerms is J", engine));
+ruleBlock.addRule(Rule.parse("if AllInputTerms is L then AllOutputTerms is I", engine));
+ruleBlock.addRule(Rule.parse("if AllInputTerms is M then AllOutputTerms is H", engine));
+ruleBlock.addRule(Rule.parse("if AllInputTerms is N then AllOutputTerms is G", engine));
+ruleBlock.addRule(Rule.parse("if AllInputTerms is O then AllOutputTerms is F", engine));
+ruleBlock.addRule(Rule.parse("if AllInputTerms is P then AllOutputTerms is E", engine));
+ruleBlock.addRule(Rule.parse("if AllInputTerms is Q then AllOutputTerms is D", engine));
+ruleBlock.addRule(Rule.parse("if AllInputTerms is R then AllOutputTerms is C", engine));
+ruleBlock.addRule(Rule.parse("if AllInputTerms is S then AllOutputTerms is B", engine));
+ruleBlock.addRule(Rule.parse("if AllInputTerms is T then AllOutputTerms is A", engine));
+engine.addRuleBlock(ruleBlock);
+
+
+}
+}
diff --git a/examples/mamdani/AllTerms.pdf b/examples/mamdani/AllTerms.pdf
new file mode 100644
index 0000000..ed71111
--- /dev/null
+++ b/examples/mamdani/AllTerms.pdf
Binary files differ
diff --git a/examples/mamdani/Laundry.R b/examples/mamdani/Laundry.R
new file mode 100644
index 0000000..ca7d73d
--- /dev/null
+++ b/examples/mamdani/Laundry.R
@@ -0,0 +1,91 @@
+#Code automatically generated with fuzzylite 6.0.
+
+library(ggplot2);
+
+engine.name = "Laundry"
+engine.fll = "Engine: Laundry
+InputVariable: Load
+ enabled: true
+ range: 0.000 6.000
+ lock-range: false
+ term: small Discrete 0.000 1.000 1.000 1.000 2.000 0.800 5.000 0.000
+ term: normal Discrete 3.000 0.000 4.000 1.000 6.000 0.000
+InputVariable: Dirt
+ enabled: true
+ range: 0.000 6.000
+ lock-range: false
+ term: low Discrete 0.000 1.000 2.000 0.800 5.000 0.000
+ term: high Discrete 1.000 0.000 2.000 0.200 4.000 0.800 6.000 1.000
+OutputVariable: Detergent
+ enabled: true
+ range: 0.000 80.000
+ lock-range: false
+ aggregation: Maximum
+ defuzzifier: MeanOfMaximum 500
+ default: nan
+ lock-previous: false
+ term: less_than_usual Discrete 10.000 0.000 40.000 1.000 50.000 0.000
+ term: usual Discrete 40.000 0.000 50.000 1.000 60.000 1.000 80.000 0.000
+ term: more_than_usual Discrete 50.000 0.000 80.000 1.000
+OutputVariable: Cycle
+ enabled: true
+ range: 0.000 20.000
+ lock-range: false
+ aggregation: Maximum
+ defuzzifier: MeanOfMaximum 500
+ default: nan
+ lock-previous: false
+ term: short Discrete 0.000 1.000 10.000 1.000 20.000 0.000
+ term: long Discrete 10.000 0.000 20.000 1.000
+RuleBlock:
+ enabled: true
+ conjunction: Minimum
+ disjunction: Maximum
+ implication: Minimum
+ activation: General
+ rule: if Load is small and Dirt is not high then Detergent is less_than_usual
+ rule: if Load is small and Dirt is high then Detergent is usual
+ rule: if Load is normal and Dirt is low then Detergent is less_than_usual
+ rule: if Load is normal and Dirt is high then Detergent is more_than_usual
+ rule: if Detergent is usual or Detergent is less_than_usual then Cycle is short
+ rule: if Detergent is more_than_usual then Cycle is long"
+
+engine.fldFile = "Laundry.fld"
+if (require(data.table)) {
+ engine.df = data.table::fread(engine.fldFile, sep="auto", header="auto")
+} else {
+ engine.df = read.table(engine.fldFile, header=TRUE)
+}
+
+engine.plot.i1i2_o1 = ggplot(engine.df, aes(Load, Dirt)) +
+ geom_tile(aes(fill=Detergent)) +
+ scale_fill_gradient(low="yellow", high="red") +
+ stat_contour(aes(x=Load, y=Dirt, z=Detergent), color="black") +
+ ggtitle("(Load, Dirt) = Detergent")
+
+engine.plot.i2i1_o1 = ggplot(engine.df, aes(Dirt, Load)) +
+ geom_tile(aes(fill=Detergent)) +
+ scale_fill_gradient(low="yellow", high="red") +
+ stat_contour(aes(x=Dirt, y=Load, z=Detergent), color="black") +
+ ggtitle("(Dirt, Load) = Detergent")
+
+engine.plot.i1i2_o2 = ggplot(engine.df, aes(Load, Dirt)) +
+ geom_tile(aes(fill=Cycle)) +
+ scale_fill_gradient(low="yellow", high="red") +
+ stat_contour(aes(x=Load, y=Dirt, z=Cycle), color="black") +
+ ggtitle("(Load, Dirt) = Cycle")
+
+engine.plot.i2i1_o2 = ggplot(engine.df, aes(Dirt, Load)) +
+ geom_tile(aes(fill=Cycle)) +
+ scale_fill_gradient(low="yellow", high="red") +
+ stat_contour(aes(x=Dirt, y=Load, z=Cycle), color="black") +
+ ggtitle("(Dirt, Load) = Cycle")
+
+if (require(gridExtra)) {
+ engine.plots = arrangeGrob(engine.plot.i1i2_o1, engine.plot.i2i1_o1, engine.plot.i1i2_o2, engine.plot.i2i1_o2, ncol=2, top=engine.name)
+ ggsave(paste0(engine.name, ".pdf"), engine.plots)
+ if (require(grid)) {
+ grid.newpage()
+ grid.draw(engine.plots)
+ }
+}
diff --git a/examples/mamdani/Laundry.cpp b/examples/mamdani/Laundry.cpp
new file mode 100644
index 0000000..cc7492c
--- /dev/null
+++ b/examples/mamdani/Laundry.cpp
@@ -0,0 +1,78 @@
+#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("Laundry");
+engine->setDescription("");
+
+InputVariable* Load = new InputVariable;
+Load->setName("Load");
+Load->setDescription("");
+Load->setEnabled(true);
+Load->setRange(0.000, 6.000);
+Load->setLockValueInRange(false);
+Load->addTerm(Discrete::create("small", 8, 0.000, 1.000, 1.000, 1.000, 2.000, 0.800, 5.000, 0.000));
+Load->addTerm(Discrete::create("normal", 6, 3.000, 0.000, 4.000, 1.000, 6.000, 0.000));
+engine->addInputVariable(Load);
+
+InputVariable* Dirt = new InputVariable;
+Dirt->setName("Dirt");
+Dirt->setDescription("");
+Dirt->setEnabled(true);
+Dirt->setRange(0.000, 6.000);
+Dirt->setLockValueInRange(false);
+Dirt->addTerm(Discrete::create("low", 6, 0.000, 1.000, 2.000, 0.800, 5.000, 0.000));
+Dirt->addTerm(Discrete::create("high", 8, 1.000, 0.000, 2.000, 0.200, 4.000, 0.800, 6.000, 1.000));
+engine->addInputVariable(Dirt);
+
+OutputVariable* Detergent = new OutputVariable;
+Detergent->setName("Detergent");
+Detergent->setDescription("");
+Detergent->setEnabled(true);
+Detergent->setRange(0.000, 80.000);
+Detergent->setLockValueInRange(false);
+Detergent->setAggregation(new Maximum);
+Detergent->setDefuzzifier(new MeanOfMaximum(500));
+Detergent->setDefaultValue(fl::nan);
+Detergent->setLockPreviousValue(false);
+Detergent->addTerm(Discrete::create("less_than_usual", 6, 10.000, 0.000, 40.000, 1.000, 50.000, 0.000));
+Detergent->addTerm(Discrete::create("usual", 8, 40.000, 0.000, 50.000, 1.000, 60.000, 1.000, 80.000, 0.000));
+Detergent->addTerm(Discrete::create("more_than_usual", 4, 50.000, 0.000, 80.000, 1.000));
+engine->addOutputVariable(Detergent);
+
+OutputVariable* Cycle = new OutputVariable;
+Cycle->setName("Cycle");
+Cycle->setDescription("");
+Cycle->setEnabled(true);
+Cycle->setRange(0.000, 20.000);
+Cycle->setLockValueInRange(false);
+Cycle->setAggregation(new Maximum);
+Cycle->setDefuzzifier(new MeanOfMaximum(500));
+Cycle->setDefaultValue(fl::nan);
+Cycle->setLockPreviousValue(false);
+Cycle->addTerm(Discrete::create("short", 6, 0.000, 1.000, 10.000, 1.000, 20.000, 0.000));
+Cycle->addTerm(Discrete::create("long", 4, 10.000, 0.000, 20.000, 1.000));
+engine->addOutputVariable(Cycle);
+
+RuleBlock* ruleBlock = new RuleBlock;
+ruleBlock->setName("");
+ruleBlock->setDescription("");
+ruleBlock->setEnabled(true);
+ruleBlock->setConjunction(new Minimum);
+ruleBlock->setDisjunction(new Maximum);
+ruleBlock->setImplication(new Minimum);
+ruleBlock->setActivation(new General);
+ruleBlock->addRule(Rule::parse("if Load is small and Dirt is not high then Detergent is less_than_usual", engine));
+ruleBlock->addRule(Rule::parse("if Load is small and Dirt is high then Detergent is usual", engine));
+ruleBlock->addRule(Rule::parse("if Load is normal and Dirt is low then Detergent is less_than_usual", engine));
+ruleBlock->addRule(Rule::parse("if Load is normal and Dirt is high then Detergent is more_than_usual", engine));
+ruleBlock->addRule(Rule::parse("if Detergent is usual or Detergent is less_than_usual then Cycle is short", engine));
+ruleBlock->addRule(Rule::parse("if Detergent is more_than_usual then Cycle is long", engine));
+engine->addRuleBlock(ruleBlock);
+
+
+}
diff --git a/examples/mamdani/Laundry.fcl b/examples/mamdani/Laundry.fcl
new file mode 100644
index 0000000..9a34532
--- /dev/null
+++ b/examples/mamdani/Laundry.fcl
@@ -0,0 +1,58 @@
+//Code automatically generated with fuzzylite 6.0.
+
+FUNCTION_BLOCK Laundry
+
+VAR_INPUT
+ Load: REAL;
+ Dirt: REAL;
+END_VAR
+
+VAR_OUTPUT
+ Detergent: REAL;
+ Cycle: REAL;
+END_VAR
+
+FUZZIFY Load
+ RANGE := (0.000 .. 6.000);
+ TERM small := (0.000, 1.000) (1.000, 1.000) (2.000, 0.800) (5.000, 0.000);
+ TERM normal := (3.000, 0.000) (4.000, 1.000) (6.000, 0.000);
+END_FUZZIFY
+
+FUZZIFY Dirt
+ RANGE := (0.000 .. 6.000);
+ TERM low := (0.000, 1.000) (2.000, 0.800) (5.000, 0.000);
+ TERM high := (1.000, 0.000) (2.000, 0.200) (4.000, 0.800) (6.000, 1.000);
+END_FUZZIFY
+
+DEFUZZIFY Detergent
+ RANGE := (0.000 .. 80.000);
+ TERM less_than_usual := (10.000, 0.000) (40.000, 1.000) (50.000, 0.000);
+ TERM usual := (40.000, 0.000) (50.000, 1.000) (60.000, 1.000) (80.000, 0.000);
+ TERM more_than_usual := (50.000, 0.000) (80.000, 1.000);
+ METHOD : MM;
+ ACCU : MAX;
+ DEFAULT := nan;
+END_DEFUZZIFY
+
+DEFUZZIFY Cycle
+ RANGE := (0.000 .. 20.000);
+ TERM short := (0.000, 1.000) (10.000, 1.000) (20.000, 0.000);
+ TERM long := (10.000, 0.000) (20.000, 1.000);
+ METHOD : MM;
+ ACCU : MAX;
+ DEFAULT := nan;
+END_DEFUZZIFY
+
+RULEBLOCK
+ AND : MIN;
+ OR : MAX;
+ ACT : MIN;
+ RULE 1 : if Load is small and Dirt is not high then Detergent is less_than_usual
+ RULE 2 : if Load is small and Dirt is high then Detergent is usual
+ RULE 3 : if Load is normal and Dirt is low then Detergent is less_than_usual
+ RULE 4 : if Load is normal and Dirt is high then Detergent is more_than_usual
+ RULE 5 : if Detergent is usual or Detergent is less_than_usual then Cycle is short
+ RULE 6 : if Detergent is more_than_usual then Cycle is long
+END_RULEBLOCK
+
+END_FUNCTION_BLOCK
diff --git a/examples/mamdani/Laundry.fis b/examples/mamdani/Laundry.fis
new file mode 100644
index 0000000..7f1c31d
--- /dev/null
+++ b/examples/mamdani/Laundry.fis
@@ -0,0 +1,51 @@
+#Code automatically generated with fuzzylite 6.0.
+
+[System]
+Name='Laundry'
+Type='mamdani'
+Version=6.0
+NumInputs=2
+NumOutputs=2
+NumRules=6
+AndMethod='min'
+OrMethod='max'
+ImpMethod='min'
+AggMethod='max'
+DefuzzMethod='mom'
+
+[Input1]
+Name='Load'
+Range=[0.000 6.000]
+NumMFs=2
+MF1='small':'discretemf',[0.000 1.000 1.000 1.000 2.000 0.800 5.000 0.000]
+MF2='normal':'discretemf',[3.000 0.000 4.000 1.000 6.000 0.000]
+
+[Input2]
+Name='Dirt'
+Range=[0.000 6.000]
+NumMFs=2
+MF1='low':'discretemf',[0.000 1.000 2.000 0.800 5.000 0.000]
+MF2='high':'discretemf',[1.000 0.000 2.000 0.200 4.000 0.800 6.000 1.000]
+
+[Output1]
+Name='Detergent'
+Range=[0.000 80.000]
+NumMFs=3
+MF1='less_than_usual':'discretemf',[10.000 0.000 40.000 1.000 50.000 0.000]
+MF2='usual':'discretemf',[40.000 0.000 50.000 1.000 60.000 1.000 80.000 0.000]
+MF3='more_than_usual':'discretemf',[50.000 0.000 80.000 1.000]
+
+[Output2]
+Name='Cycle'
+Range=[0.000 20.000]
+NumMFs=2
+MF1='short':'discretemf',[0.000 1.000 10.000 1.000 20.000 0.000]
+MF2='long':'discretemf',[10.000 0.000 20.000 1.000]
+
+[Rules]
+1.000 -2.000 , 1.000 0.000 (1.000) : 1
+1.000 2.000 , 2.000 0.000 (1.000) : 1
+2.000 1.000 , 1.000 0.000 (1.000) : 1
+2.000 2.000 , 3.000 0.000 (1.000) : 1
+0.000 0.000 , 0.000 1.000 (1.000) : 2
+0.000 0.000 , 0.000 2.000 (1.000) : 1
diff --git a/examples/mamdani/Laundry.fld b/examples/mamdani/Laundry.fld
new file mode 100644
index 0000000..a8f27dd
--- /dev/null
+++ b/examples/mamdani/Laundry.fld
@@ -0,0 +1,1025 @@
+Load Dirt Detergent Cycle
+0.000000000 0.000000000 39.920000000 5.000000000
+0.000000000 0.193548387 39.920000000 5.000000000
+0.000000000 0.387096774 39.920000000 5.000000000
+0.000000000 0.580645161 39.920000000 5.000000000
+0.000000000 0.774193548 39.920000000 5.000000000
+0.000000000 0.967741935 39.920000000 5.000000000
+0.000000000 1.161290323 39.680000000 5.160000000
+0.000000000 1.354838710 39.280000000 5.360000000
+0.000000000 1.548387097 38.880000000 5.540000000
+0.000000000 1.741935484 38.480000000 5.740000000
+0.000000000 1.935483871 38.160000000 5.940000000
+0.000000000 2.129032258 37.600000000 6.200000000
+0.000000000 2.322580645 37.040000000 6.480000000
+0.000000000 2.516129032 36.400000000 6.780000000
+0.000000000 2.709677419 35.920000000 7.060000000
+0.000000000 2.903225806 35.280000000 7.360000000
+0.000000000 3.096774194 57.360000000 7.360000000
+0.000000000 3.290322581 57.120000000 7.060000000
+0.000000000 3.483870968 56.720000000 6.780000000
+0.000000000 3.677419355 56.480000000 6.480000000
+0.000000000 3.870967742 56.240000000 6.200000000
+0.000000000 4.064516129 55.920000000 5.960000000
+0.000000000 4.258064516 55.920000000 5.880000000
+0.000000000 4.451612903 55.760000000 5.780000000
+0.000000000 4.645161290 55.680000000 5.680000000
+0.000000000 4.838709677 55.600000000 5.580000000
+0.000000000 5.032258065 55.440000000 5.480000000
+0.000000000 5.225806452 55.440000000 5.380000000
+0.000000000 5.419354839 55.280000000 5.300000000
+0.000000000 5.612903226 55.200000000 5.200000000
+0.000000000 5.806451613 55.040000000 5.100000000
+0.000000000 6.000000000 54.960000000 5.000000000
+0.193548387 0.000000000 39.920000000 5.000000000
+0.193548387 0.193548387 39.920000000 5.000000000
+0.193548387 0.387096774 39.920000000 5.000000000
+0.193548387 0.580645161 39.920000000 5.000000000
+0.193548387 0.774193548 39.920000000 5.000000000
+0.193548387 0.967741935 39.920000000 5.000000000
+0.193548387 1.161290323 39.680000000 5.160000000
+0.193548387 1.354838710 39.280000000 5.360000000
+0.193548387 1.548387097 38.880000000 5.540000000
+0.193548387 1.741935484 38.480000000 5.740000000
+0.193548387 1.935483871 38.160000000 5.940000000
+0.193548387 2.129032258 37.600000000 6.200000000
+0.193548387 2.322580645 37.040000000 6.480000000
+0.193548387 2.516129032 36.400000000 6.780000000
+0.193548387 2.709677419 35.920000000 7.060000000
+0.193548387 2.903225806 35.280000000 7.360000000
+0.193548387 3.096774194 57.360000000 7.360000000
+0.193548387 3.290322581 57.120000000 7.060000000
+0.193548387 3.483870968 56.720000000 6.780000000
+0.193548387 3.677419355 56.480000000 6.480000000
+0.193548387 3.870967742 56.240000000 6.200000000
+0.193548387 4.064516129 55.920000000 5.960000000
+0.193548387 4.258064516 55.920000000 5.880000000
+0.193548387 4.451612903 55.760000000 5.780000000
+0.193548387 4.645161290 55.680000000 5.680000000
+0.193548387 4.838709677 55.600000000 5.580000000
+0.193548387 5.032258065 55.440000000 5.480000000
+0.193548387 5.225806452 55.440000000 5.380000000
+0.193548387 5.419354839 55.280000000 5.300000000
+0.193548387 5.612903226 55.200000000 5.200000000
+0.193548387 5.806451613 55.040000000 5.100000000
+0.193548387 6.000000000 54.960000000 5.000000000
+0.387096774 0.000000000 39.920000000 5.000000000
+0.387096774 0.193548387 39.920000000 5.000000000
+0.387096774 0.387096774 39.920000000 5.000000000
+0.387096774 0.580645161 39.920000000 5.000000000
+0.387096774 0.774193548 39.920000000 5.000000000
+0.387096774 0.967741935 39.920000000 5.000000000
+0.387096774 1.161290323 39.680000000 5.160000000
+0.387096774 1.354838710 39.280000000 5.360000000
+0.387096774 1.548387097 38.880000000 5.540000000
+0.387096774 1.741935484 38.480000000 5.740000000
+0.387096774 1.935483871 38.160000000 5.940000000
+0.387096774 2.129032258 37.600000000 6.200000000
+0.387096774 2.322580645 37.040000000 6.480000000
+0.387096774 2.516129032 36.400000000 6.780000000
+0.387096774 2.709677419 35.920000000 7.060000000
+0.387096774 2.903225806 35.280000000 7.360000000
+0.387096774 3.096774194 57.360000000 7.360000000
+0.387096774 3.290322581 57.120000000 7.060000000
+0.387096774 3.483870968 56.720000000 6.780000000
+0.387096774 3.677419355 56.480000000 6.480000000
+0.387096774 3.870967742 56.240000000 6.200000000
+0.387096774 4.064516129 55.920000000 5.960000000
+0.387096774 4.258064516 55.920000000 5.880000000
+0.387096774 4.451612903 55.760000000 5.780000000
+0.387096774 4.645161290 55.680000000 5.680000000
+0.387096774 4.838709677 55.600000000 5.580000000
+0.387096774 5.032258065 55.440000000 5.480000000
+0.387096774 5.225806452 55.440000000 5.380000000
+0.387096774 5.419354839 55.280000000 5.300000000
+0.387096774 5.612903226 55.200000000 5.200000000
+0.387096774 5.806451613 55.040000000 5.100000000
+0.387096774 6.000000000 54.960000000 5.000000000
+0.580645161 0.000000000 39.920000000 5.000000000
+0.580645161 0.193548387 39.920000000 5.000000000
+0.580645161 0.387096774 39.920000000 5.000000000
+0.580645161 0.580645161 39.920000000 5.000000000
+0.580645161 0.774193548 39.920000000 5.000000000
+0.580645161 0.967741935 39.920000000 5.000000000
+0.580645161 1.161290323 39.680000000 5.160000000
+0.580645161 1.354838710 39.280000000 5.360000000
+0.580645161 1.548387097 38.880000000 5.540000000
+0.580645161 1.741935484 38.480000000 5.740000000
+0.580645161 1.935483871 38.160000000 5.940000000
+0.580645161 2.129032258 37.600000000 6.200000000
+0.580645161 2.322580645 37.040000000 6.480000000
+0.580645161 2.516129032 36.400000000 6.780000000
+0.580645161 2.709677419 35.920000000 7.060000000
+0.580645161 2.903225806 35.280000000 7.360000000
+0.580645161 3.096774194 57.360000000 7.360000000
+0.580645161 3.290322581 57.120000000 7.060000000
+0.580645161 3.483870968 56.720000000 6.780000000
+0.580645161 3.677419355 56.480000000 6.480000000
+0.580645161 3.870967742 56.240000000 6.200000000
+0.580645161 4.064516129 55.920000000 5.960000000
+0.580645161 4.258064516 55.920000000 5.880000000
+0.580645161 4.451612903 55.760000000 5.780000000
+0.580645161 4.645161290 55.680000000 5.680000000
+0.580645161 4.838709677 55.600000000 5.580000000
+0.580645161 5.032258065 55.440000000 5.480000000
+0.580645161 5.225806452 55.440000000 5.380000000
+0.580645161 5.419354839 55.280000000 5.300000000
+0.580645161 5.612903226 55.200000000 5.200000000
+0.580645161 5.806451613 55.040000000 5.100000000
+0.580645161 6.000000000 54.960000000 5.000000000
+0.774193548 0.000000000 39.920000000 5.000000000
+0.774193548 0.193548387 39.920000000 5.000000000
+0.774193548 0.387096774 39.920000000 5.000000000
+0.774193548 0.580645161 39.920000000 5.000000000
+0.774193548 0.774193548 39.920000000 5.000000000
+0.774193548 0.967741935 39.920000000 5.000000000
+0.774193548 1.161290323 39.680000000 5.160000000
+0.774193548 1.354838710 39.280000000 5.360000000
+0.774193548 1.548387097 38.880000000 5.540000000
+0.774193548 1.741935484 38.480000000 5.740000000
+0.774193548 1.935483871 38.160000000 5.940000000
+0.774193548 2.129032258 37.600000000 6.200000000
+0.774193548 2.322580645 37.040000000 6.480000000
+0.774193548 2.516129032 36.400000000 6.780000000
+0.774193548 2.709677419 35.920000000 7.060000000
+0.774193548 2.903225806 35.280000000 7.360000000
+0.774193548 3.096774194 57.360000000 7.360000000
+0.774193548 3.290322581 57.120000000 7.060000000
+0.774193548 3.483870968 56.720000000 6.780000000
+0.774193548 3.677419355 56.480000000 6.480000000
+0.774193548 3.870967742 56.240000000 6.200000000
+0.774193548 4.064516129 55.920000000 5.960000000
+0.774193548 4.258064516 55.920000000 5.880000000
+0.774193548 4.451612903 55.760000000 5.780000000
+0.774193548 4.645161290 55.680000000 5.680000000
+0.774193548 4.838709677 55.600000000 5.580000000
+0.774193548 5.032258065 55.440000000 5.480000000
+0.774193548 5.225806452 55.440000000 5.380000000
+0.774193548 5.419354839 55.280000000 5.300000000
+0.774193548 5.612903226 55.200000000 5.200000000
+0.774193548 5.806451613 55.040000000 5.100000000
+0.774193548 6.000000000 54.960000000 5.000000000
+0.967741935 0.000000000 39.920000000 5.000000000
+0.967741935 0.193548387 39.920000000 5.000000000
+0.967741935 0.387096774 39.920000000 5.000000000
+0.967741935 0.580645161 39.920000000 5.000000000
+0.967741935 0.774193548 39.920000000 5.000000000
+0.967741935 0.967741935 39.920000000 5.000000000
+0.967741935 1.161290323 39.680000000 5.160000000
+0.967741935 1.354838710 39.280000000 5.360000000
+0.967741935 1.548387097 38.880000000 5.540000000
+0.967741935 1.741935484 38.480000000 5.740000000
+0.967741935 1.935483871 38.160000000 5.940000000
+0.967741935 2.129032258 37.600000000 6.200000000
+0.967741935 2.322580645 37.040000000 6.480000000
+0.967741935 2.516129032 36.400000000 6.780000000
+0.967741935 2.709677419 35.920000000 7.060000000
+0.967741935 2.903225806 35.280000000 7.360000000
+0.967741935 3.096774194 57.360000000 7.360000000
+0.967741935 3.290322581 57.120000000 7.060000000
+0.967741935 3.483870968 56.720000000 6.780000000
+0.967741935 3.677419355 56.480000000 6.480000000
+0.967741935 3.870967742 56.240000000 6.200000000
+0.967741935 4.064516129 55.920000000 5.960000000
+0.967741935 4.258064516 55.920000000 5.880000000
+0.967741935 4.451612903 55.760000000 5.780000000
+0.967741935 4.645161290 55.680000000 5.680000000
+0.967741935 4.838709677 55.600000000 5.580000000
+0.967741935 5.032258065 55.440000000 5.480000000
+0.967741935 5.225806452 55.440000000 5.380000000
+0.967741935 5.419354839 55.280000000 5.300000000
+0.967741935 5.612903226 55.200000000 5.200000000
+0.967741935 5.806451613 55.040000000 5.100000000
+0.967741935 6.000000000 54.960000000 5.000000000
+1.161290323 0.000000000 39.680000000 5.160000000
+1.161290323 0.193548387 39.680000000 5.160000000
+1.161290323 0.387096774 39.680000000 5.160000000
+1.161290323 0.580645161 39.680000000 5.160000000
+1.161290323 0.774193548 39.680000000 5.160000000
+1.161290323 0.967741935 39.680000000 5.160000000
+1.161290323 1.161290323 39.680000000 5.160000000
+1.161290323 1.354838710 39.280000000 5.360000000
+1.161290323 1.548387097 38.880000000 5.540000000
+1.161290323 1.741935484 38.480000000 5.740000000
+1.161290323 1.935483871 38.160000000 5.940000000
+1.161290323 2.129032258 37.600000000 6.200000000
+1.161290323 2.322580645 37.040000000 6.480000000
+1.161290323 2.516129032 36.400000000 6.780000000
+1.161290323 2.709677419 35.920000000 7.060000000
+1.161290323 2.903225806 35.280000000 7.360000000
+1.161290323 3.096774194 57.360000000 7.360000000
+1.161290323 3.290322581 57.120000000 7.060000000
+1.161290323 3.483870968 56.720000000 6.780000000
+1.161290323 3.677419355 56.480000000 6.480000000
+1.161290323 3.870967742 56.240000000 6.200000000
+1.161290323 4.064516129 55.920000000 5.960000000
+1.161290323 4.258064516 55.920000000 5.880000000
+1.161290323 4.451612903 55.760000000 5.780000000
+1.161290323 4.645161290 55.680000000 5.680000000
+1.161290323 4.838709677 55.600000000 5.580000000
+1.161290323 5.032258065 55.440000000 5.480000000
+1.161290323 5.225806452 55.440000000 5.380000000
+1.161290323 5.419354839 55.280000000 5.300000000
+1.161290323 5.612903226 55.200000000 5.200000000
+1.161290323 5.806451613 55.120000000 5.160000000
+1.161290323 6.000000000 55.120000000 5.160000000
+1.354838710 0.000000000 39.280000000 5.360000000
+1.354838710 0.193548387 39.280000000 5.360000000
+1.354838710 0.387096774 39.280000000 5.360000000
+1.354838710 0.580645161 39.280000000 5.360000000
+1.354838710 0.774193548 39.280000000 5.360000000
+1.354838710 0.967741935 39.280000000 5.360000000
+1.354838710 1.161290323 39.280000000 5.360000000
+1.354838710 1.354838710 39.280000000 5.360000000
+1.354838710 1.548387097 38.880000000 5.540000000
+1.354838710 1.741935484 38.480000000 5.740000000
+1.354838710 1.935483871 38.160000000 5.940000000
+1.354838710 2.129032258 37.600000000 6.200000000
+1.354838710 2.322580645 37.040000000 6.480000000
+1.354838710 2.516129032 36.400000000 6.780000000
+1.354838710 2.709677419 35.920000000 7.060000000
+1.354838710 2.903225806 35.280000000 7.360000000
+1.354838710 3.096774194 57.360000000 7.360000000
+1.354838710 3.290322581 57.120000000 7.060000000
+1.354838710 3.483870968 56.720000000 6.780000000
+1.354838710 3.677419355 56.480000000 6.480000000
+1.354838710 3.870967742 56.240000000 6.200000000
+1.354838710 4.064516129 55.920000000 5.960000000
+1.354838710 4.258064516 55.920000000 5.880000000
+1.354838710 4.451612903 55.760000000 5.780000000
+1.354838710 4.645161290 55.680000000 5.680000000
+1.354838710 4.838709677 55.600000000 5.580000000
+1.354838710 5.032258065 55.440000000 5.480000000
+1.354838710 5.225806452 55.440000000 5.380000000
+1.354838710 5.419354839 55.360000000 5.360000000
+1.354838710 5.612903226 55.360000000 5.360000000
+1.354838710 5.806451613 55.360000000 5.360000000
+1.354838710 6.000000000 55.360000000 5.360000000
+1.548387097 0.000000000 38.880000000 5.540000000
+1.548387097 0.193548387 38.880000000 5.540000000
+1.548387097 0.387096774 38.880000000 5.540000000
+1.548387097 0.580645161 38.880000000 5.540000000
+1.548387097 0.774193548 38.880000000 5.540000000
+1.548387097 0.967741935 38.880000000 5.540000000
+1.548387097 1.161290323 38.880000000 5.540000000
+1.548387097 1.354838710 38.880000000 5.540000000
+1.548387097 1.548387097 38.880000000 5.540000000
+1.548387097 1.741935484 38.480000000 5.740000000
+1.548387097 1.935483871 38.160000000 5.940000000
+1.548387097 2.129032258 37.600000000 6.200000000
+1.548387097 2.322580645 37.040000000 6.480000000
+1.548387097 2.516129032 36.400000000 6.780000000
+1.548387097 2.709677419 35.920000000 7.060000000
+1.548387097 2.903225806 35.280000000 7.360000000
+1.548387097 3.096774194 57.360000000 7.360000000
+1.548387097 3.290322581 57.120000000 7.060000000
+1.548387097 3.483870968 56.720000000 6.780000000
+1.548387097 3.677419355 56.480000000 6.480000000
+1.548387097 3.870967742 56.240000000 6.200000000
+1.548387097 4.064516129 55.920000000 5.960000000
+1.548387097 4.258064516 55.920000000 5.880000000
+1.548387097 4.451612903 55.760000000 5.780000000
+1.548387097 4.645161290 55.680000000 5.680000000
+1.548387097 4.838709677 55.600000000 5.580000000
+1.548387097 5.032258065 55.600000000 5.540000000
+1.548387097 5.225806452 55.600000000 5.540000000
+1.548387097 5.419354839 55.600000000 5.540000000
+1.548387097 5.612903226 55.600000000 5.540000000
+1.548387097 5.806451613 55.600000000 5.540000000
+1.548387097 6.000000000 55.600000000 5.540000000
+1.741935484 0.000000000 38.480000000 5.740000000
+1.741935484 0.193548387 38.480000000 5.740000000
+1.741935484 0.387096774 38.480000000 5.740000000
+1.741935484 0.580645161 38.480000000 5.740000000
+1.741935484 0.774193548 38.480000000 5.740000000
+1.741935484 0.967741935 38.480000000 5.740000000
+1.741935484 1.161290323 38.480000000 5.740000000
+1.741935484 1.354838710 38.480000000 5.740000000
+1.741935484 1.548387097 38.480000000 5.740000000
+1.741935484 1.741935484 38.480000000 5.740000000
+1.741935484 1.935483871 38.160000000 5.940000000
+1.741935484 2.129032258 37.600000000 6.200000000
+1.741935484 2.322580645 37.040000000 6.480000000
+1.741935484 2.516129032 36.400000000 6.780000000
+1.741935484 2.709677419 35.920000000 7.060000000
+1.741935484 2.903225806 35.280000000 7.360000000
+1.741935484 3.096774194 57.360000000 7.360000000
+1.741935484 3.290322581 57.120000000 7.060000000
+1.741935484 3.483870968 56.720000000 6.780000000
+1.741935484 3.677419355 56.480000000 6.480000000
+1.741935484 3.870967742 56.240000000 6.200000000
+1.741935484 4.064516129 55.920000000 5.960000000
+1.741935484 4.258064516 55.920000000 5.880000000
+1.741935484 4.451612903 55.760000000 5.780000000
+1.741935484 4.645161290 55.760000000 5.740000000
+1.741935484 4.838709677 55.760000000 5.740000000
+1.741935484 5.032258065 55.760000000 5.740000000
+1.741935484 5.225806452 55.760000000 5.740000000
+1.741935484 5.419354839 55.760000000 5.740000000
+1.741935484 5.612903226 55.760000000 5.740000000
+1.741935484 5.806451613 55.760000000 5.740000000
+1.741935484 6.000000000 55.760000000 5.740000000
+1.935483871 0.000000000 38.160000000 5.940000000
+1.935483871 0.193548387 38.160000000 5.940000000
+1.935483871 0.387096774 38.160000000 5.940000000
+1.935483871 0.580645161 38.160000000 5.940000000
+1.935483871 0.774193548 38.160000000 5.940000000
+1.935483871 0.967741935 38.160000000 5.940000000
+1.935483871 1.161290323 38.160000000 5.940000000
+1.935483871 1.354838710 38.160000000 5.940000000
+1.935483871 1.548387097 38.160000000 5.940000000
+1.935483871 1.741935484 38.160000000 5.940000000
+1.935483871 1.935483871 38.160000000 5.940000000
+1.935483871 2.129032258 37.600000000 6.200000000
+1.935483871 2.322580645 37.040000000 6.480000000
+1.935483871 2.516129032 36.400000000 6.780000000
+1.935483871 2.709677419 35.920000000 7.060000000
+1.935483871 2.903225806 35.280000000 7.360000000
+1.935483871 3.096774194 57.360000000 7.360000000
+1.935483871 3.290322581 57.120000000 7.060000000
+1.935483871 3.483870968 56.720000000 6.780000000
+1.935483871 3.677419355 56.480000000 6.480000000
+1.935483871 3.870967742 56.240000000 6.200000000
+1.935483871 4.064516129 55.920000000 5.960000000
+1.935483871 4.258064516 55.920000000 5.940000000
+1.935483871 4.451612903 55.920000000 5.940000000
+1.935483871 4.645161290 55.920000000 5.940000000
+1.935483871 4.838709677 55.920000000 5.940000000
+1.935483871 5.032258065 55.920000000 5.940000000
+1.935483871 5.225806452 55.920000000 5.940000000
+1.935483871 5.419354839 55.920000000 5.940000000
+1.935483871 5.612903226 55.920000000 5.940000000
+1.935483871 5.806451613 55.920000000 5.940000000
+1.935483871 6.000000000 55.920000000 5.940000000
+2.129032258 0.000000000 37.680000000 6.180000000
+2.129032258 0.193548387 37.680000000 6.180000000
+2.129032258 0.387096774 37.680000000 6.180000000
+2.129032258 0.580645161 37.680000000 6.180000000
+2.129032258 0.774193548 37.680000000 6.180000000
+2.129032258 0.967741935 37.680000000 6.180000000
+2.129032258 1.161290323 37.680000000 6.180000000
+2.129032258 1.354838710 37.680000000 6.180000000
+2.129032258 1.548387097 37.680000000 6.180000000
+2.129032258 1.741935484 37.680000000 6.180000000
+2.129032258 1.935483871 37.680000000 6.180000000
+2.129032258 2.129032258 37.600000000 6.200000000
+2.129032258 2.322580645 37.040000000 6.480000000
+2.129032258 2.516129032 36.400000000 6.780000000
+2.129032258 2.709677419 35.920000000 7.060000000
+2.129032258 2.903225806 35.280000000 7.360000000
+2.129032258 3.096774194 57.360000000 7.360000000
+2.129032258 3.290322581 57.120000000 7.060000000
+2.129032258 3.483870968 56.720000000 6.780000000
+2.129032258 3.677419355 56.480000000 6.480000000
+2.129032258 3.870967742 56.240000000 6.200000000
+2.129032258 4.064516129 56.160000000 6.180000000
+2.129032258 4.258064516 56.160000000 6.180000000
+2.129032258 4.451612903 56.160000000 6.180000000
+2.129032258 4.645161290 56.160000000 6.180000000
+2.129032258 4.838709677 56.160000000 6.180000000
+2.129032258 5.032258065 56.160000000 6.180000000
+2.129032258 5.225806452 56.160000000 6.180000000
+2.129032258 5.419354839 56.160000000 6.180000000
+2.129032258 5.612903226 56.160000000 6.180000000
+2.129032258 5.806451613 56.160000000 6.180000000
+2.129032258 6.000000000 56.160000000 6.180000000
+2.322580645 0.000000000 37.120000000 6.440000000
+2.322580645 0.193548387 37.120000000 6.440000000
+2.322580645 0.387096774 37.120000000 6.440000000
+2.322580645 0.580645161 37.120000000 6.440000000
+2.322580645 0.774193548 37.120000000 6.440000000
+2.322580645 0.967741935 37.120000000 6.440000000
+2.322580645 1.161290323 37.120000000 6.440000000
+2.322580645 1.354838710 37.120000000 6.440000000
+2.322580645 1.548387097 37.120000000 6.440000000
+2.322580645 1.741935484 37.120000000 6.440000000
+2.322580645 1.935483871 37.120000000 6.440000000
+2.322580645 2.129032258 37.120000000 6.440000000
+2.322580645 2.322580645 37.040000000 6.480000000
+2.322580645 2.516129032 36.400000000 6.780000000
+2.322580645 2.709677419 35.920000000 7.060000000
+2.322580645 2.903225806 35.280000000 7.360000000
+2.322580645 3.096774194 57.360000000 7.360000000
+2.322580645 3.290322581 57.120000000 7.060000000
+2.322580645 3.483870968 56.720000000 6.780000000
+2.322580645 3.677419355 56.480000000 6.480000000
+2.322580645 3.870967742 56.480000000 6.440000000
+2.322580645 4.064516129 56.480000000 6.440000000
+2.322580645 4.258064516 56.480000000 6.440000000
+2.322580645 4.451612903 56.480000000 6.440000000
+2.322580645 4.645161290 56.480000000 6.440000000
+2.322580645 4.838709677 56.480000000 6.440000000
+2.322580645 5.032258065 56.480000000 6.440000000
+2.322580645 5.225806452 56.480000000 6.440000000
+2.322580645 5.419354839 56.480000000 6.440000000
+2.322580645 5.612903226 56.480000000 6.440000000
+2.322580645 5.806451613 56.480000000 6.440000000
+2.322580645 6.000000000 56.480000000 6.440000000
+2.516129032 0.000000000 36.640000000 6.680000000
+2.516129032 0.193548387 36.640000000 6.680000000
+2.516129032 0.387096774 36.640000000 6.680000000
+2.516129032 0.580645161 36.640000000 6.680000000
+2.516129032 0.774193548 36.640000000 6.680000000
+2.516129032 0.967741935 36.640000000 6.680000000
+2.516129032 1.161290323 36.640000000 6.680000000
+2.516129032 1.354838710 36.640000000 6.680000000
+2.516129032 1.548387097 36.640000000 6.680000000
+2.516129032 1.741935484 36.640000000 6.680000000
+2.516129032 1.935483871 36.640000000 6.680000000
+2.516129032 2.129032258 36.640000000 6.680000000
+2.516129032 2.322580645 36.640000000 6.680000000
+2.516129032 2.516129032 36.400000000 6.780000000
+2.516129032 2.709677419 35.920000000 7.060000000
+2.516129032 2.903225806 35.280000000 7.360000000
+2.516129032 3.096774194 57.360000000 7.360000000
+2.516129032 3.290322581 57.120000000 7.060000000
+2.516129032 3.483870968 56.720000000 6.780000000
+2.516129032 3.677419355 56.640000000 6.680000000
+2.516129032 3.870967742 56.640000000 6.680000000
+2.516129032 4.064516129 56.640000000 6.680000000
+2.516129032 4.258064516 56.640000000 6.680000000
+2.516129032 4.451612903 56.640000000 6.680000000
+2.516129032 4.645161290 56.640000000 6.680000000
+2.516129032 4.838709677 56.640000000 6.680000000
+2.516129032 5.032258065 56.640000000 6.680000000
+2.516129032 5.225806452 56.640000000 6.680000000
+2.516129032 5.419354839 56.640000000 6.680000000
+2.516129032 5.612903226 56.640000000 6.680000000
+2.516129032 5.806451613 56.640000000 6.680000000
+2.516129032 6.000000000 56.640000000 6.680000000
+2.709677419 0.000000000 36.080000000 6.940000000
+2.709677419 0.193548387 36.080000000 6.940000000
+2.709677419 0.387096774 36.080000000 6.940000000
+2.709677419 0.580645161 36.080000000 6.940000000
+2.709677419 0.774193548 36.080000000 6.940000000
+2.709677419 0.967741935 36.080000000 6.940000000
+2.709677419 1.161290323 36.080000000 6.940000000
+2.709677419 1.354838710 36.080000000 6.940000000
+2.709677419 1.548387097 36.080000000 6.940000000
+2.709677419 1.741935484 36.080000000 6.940000000
+2.709677419 1.935483871 36.080000000 6.940000000
+2.709677419 2.129032258 36.080000000 6.940000000
+2.709677419 2.322580645 36.080000000 6.940000000
+2.709677419 2.516129032 36.080000000 6.940000000
+2.709677419 2.709677419 35.920000000 7.060000000
+2.709677419 2.903225806 35.280000000 7.360000000
+2.709677419 3.096774194 57.360000000 7.360000000
+2.709677419 3.290322581 57.120000000 7.060000000
+2.709677419 3.483870968 56.960000000 6.940000000
+2.709677419 3.677419355 56.960000000 6.940000000
+2.709677419 3.870967742 56.960000000 6.940000000
+2.709677419 4.064516129 56.960000000 6.940000000
+2.709677419 4.258064516 56.960000000 6.940000000
+2.709677419 4.451612903 56.960000000 6.940000000
+2.709677419 4.645161290 56.960000000 6.940000000
+2.709677419 4.838709677 56.960000000 6.940000000
+2.709677419 5.032258065 56.960000000 6.940000000
+2.709677419 5.225806452 56.960000000 6.940000000
+2.709677419 5.419354839 56.960000000 6.940000000
+2.709677419 5.612903226 56.960000000 6.940000000
+2.709677419 5.806451613 56.960000000 6.940000000
+2.709677419 6.000000000 56.960000000 6.940000000
+2.903225806 0.000000000 35.600000000 7.200000000
+2.903225806 0.193548387 35.600000000 7.200000000
+2.903225806 0.387096774 35.600000000 7.200000000
+2.903225806 0.580645161 35.600000000 7.200000000
+2.903225806 0.774193548 35.600000000 7.200000000
+2.903225806 0.967741935 35.600000000 7.200000000
+2.903225806 1.161290323 35.600000000 7.200000000
+2.903225806 1.354838710 35.600000000 7.200000000
+2.903225806 1.548387097 35.600000000 7.200000000
+2.903225806 1.741935484 35.600000000 7.200000000
+2.903225806 1.935483871 35.600000000 7.200000000
+2.903225806 2.129032258 35.600000000 7.200000000
+2.903225806 2.322580645 35.600000000 7.200000000
+2.903225806 2.516129032 35.600000000 7.200000000
+2.903225806 2.709677419 35.600000000 7.200000000
+2.903225806 2.903225806 35.280000000 7.360000000
+2.903225806 3.096774194 57.360000000 7.360000000
+2.903225806 3.290322581 57.200000000 7.200000000
+2.903225806 3.483870968 57.200000000 7.200000000
+2.903225806 3.677419355 57.200000000 7.200000000
+2.903225806 3.870967742 57.200000000 7.200000000
+2.903225806 4.064516129 57.200000000 7.200000000
+2.903225806 4.258064516 57.200000000 7.200000000
+2.903225806 4.451612903 57.200000000 7.200000000
+2.903225806 4.645161290 57.200000000 7.200000000
+2.903225806 4.838709677 57.200000000 7.200000000
+2.903225806 5.032258065 57.200000000 7.200000000
+2.903225806 5.225806452 57.200000000 7.200000000
+2.903225806 5.419354839 57.200000000 7.200000000
+2.903225806 5.612903226 57.200000000 7.200000000
+2.903225806 5.806451613 57.200000000 7.200000000
+2.903225806 6.000000000 57.200000000 7.200000000
+3.096774194 0.000000000 35.120000000 7.460000000
+3.096774194 0.193548387 35.120000000 7.460000000
+3.096774194 0.387096774 35.120000000 7.460000000
+3.096774194 0.580645161 35.120000000 7.460000000
+3.096774194 0.774193548 35.120000000 7.460000000
+3.096774194 0.967741935 35.120000000 7.460000000
+3.096774194 1.161290323 35.120000000 7.460000000
+3.096774194 1.354838710 35.120000000 7.460000000
+3.096774194 1.548387097 35.120000000 7.460000000
+3.096774194 1.741935484 35.120000000 7.460000000
+3.096774194 1.935483871 35.120000000 7.460000000
+3.096774194 2.129032258 35.120000000 7.460000000
+3.096774194 2.322580645 35.120000000 7.460000000
+3.096774194 2.516129032 35.120000000 7.460000000
+3.096774194 2.709677419 35.120000000 7.460000000
+3.096774194 2.903225806 35.120000000 7.460000000
+3.096774194 3.096774194 57.520000000 7.460000000
+3.096774194 3.290322581 57.520000000 7.460000000
+3.096774194 3.483870968 57.520000000 7.460000000
+3.096774194 3.677419355 57.520000000 7.460000000
+3.096774194 3.870967742 57.520000000 7.460000000
+3.096774194 4.064516129 57.520000000 7.460000000
+3.096774194 4.258064516 57.520000000 7.460000000
+3.096774194 4.451612903 57.520000000 7.460000000
+3.096774194 4.645161290 57.520000000 7.460000000
+3.096774194 4.838709677 57.520000000 7.460000000
+3.096774194 5.032258065 57.520000000 7.460000000
+3.096774194 5.225806452 57.520000000 7.460000000
+3.096774194 5.419354839 57.520000000 7.460000000
+3.096774194 5.612903226 57.520000000 7.460000000
+3.096774194 5.806451613 57.520000000 7.460000000
+3.096774194 6.000000000 57.520000000 7.460000000
+3.290322581 0.000000000 34.560000000 7.720000000
+3.290322581 0.193548387 34.560000000 7.720000000
+3.290322581 0.387096774 34.560000000 7.720000000
+3.290322581 0.580645161 34.560000000 7.720000000
+3.290322581 0.774193548 34.560000000 7.720000000
+3.290322581 0.967741935 34.560000000 7.720000000
+3.290322581 1.161290323 34.560000000 7.720000000
+3.290322581 1.354838710 34.560000000 7.720000000
+3.290322581 1.548387097 34.560000000 7.720000000
+3.290322581 1.741935484 34.560000000 7.720000000
+3.290322581 1.935483871 34.560000000 7.720000000
+3.290322581 2.129032258 34.560000000 7.720000000
+3.290322581 2.322580645 34.560000000 7.720000000
+3.290322581 2.516129032 34.560000000 7.720000000
+3.290322581 2.709677419 34.560000000 7.720000000
+3.290322581 2.903225806 47.280000000 7.720000000
+3.290322581 3.096774194 47.280000000 7.720000000
+3.290322581 3.290322581 57.680000000 7.720000000
+3.290322581 3.483870968 57.680000000 7.720000000
+3.290322581 3.677419355 57.680000000 7.720000000
+3.290322581 3.870967742 57.680000000 7.720000000
+3.290322581 4.064516129 57.680000000 7.720000000
+3.290322581 4.258064516 57.680000000 7.720000000
+3.290322581 4.451612903 57.680000000 7.720000000
+3.290322581 4.645161290 57.680000000 7.720000000
+3.290322581 4.838709677 57.680000000 7.720000000
+3.290322581 5.032258065 57.680000000 7.720000000
+3.290322581 5.225806452 57.680000000 7.720000000
+3.290322581 5.419354839 57.680000000 7.720000000
+3.290322581 5.612903226 57.680000000 7.720000000
+3.290322581 5.806451613 57.680000000 7.720000000
+3.290322581 6.000000000 57.680000000 7.720000000
+3.483870968 0.000000000 34.800000000 7.580000000
+3.483870968 0.193548387 34.800000000 7.580000000
+3.483870968 0.387096774 34.800000000 7.580000000
+3.483870968 0.580645161 34.800000000 7.580000000
+3.483870968 0.774193548 34.800000000 7.580000000
+3.483870968 0.967741935 34.800000000 7.580000000
+3.483870968 1.161290323 34.800000000 7.580000000
+3.483870968 1.354838710 34.800000000 7.580000000
+3.483870968 1.548387097 34.800000000 7.580000000
+3.483870968 1.741935484 34.800000000 7.580000000
+3.483870968 1.935483871 34.800000000 7.580000000
+3.483870968 2.129032258 34.800000000 7.580000000
+3.483870968 2.322580645 34.800000000 7.580000000
+3.483870968 2.516129032 34.800000000 7.580000000
+3.483870968 2.709677419 34.800000000 7.580000000
+3.483870968 2.903225806 34.800000000 7.580000000
+3.483870968 3.096774194 34.800000000 10.000000000
+3.483870968 3.290322581 72.240000000 17.420000000
+3.483870968 3.483870968 72.240000000 17.420000000
+3.483870968 3.677419355 72.240000000 17.420000000
+3.483870968 3.870967742 72.240000000 17.420000000
+3.483870968 4.064516129 72.240000000 17.420000000
+3.483870968 4.258064516 72.240000000 17.420000000
+3.483870968 4.451612903 72.240000000 17.420000000
+3.483870968 4.645161290 72.240000000 17.420000000
+3.483870968 4.838709677 72.240000000 17.420000000
+3.483870968 5.032258065 72.240000000 17.420000000
+3.483870968 5.225806452 72.240000000 17.420000000
+3.483870968 5.419354839 72.240000000 17.420000000
+3.483870968 5.612903226 72.240000000 17.420000000
+3.483870968 5.806451613 72.240000000 17.420000000
+3.483870968 6.000000000 72.240000000 17.420000000
+3.677419355 0.000000000 36.800000000 6.620000000
+3.677419355 0.193548387 36.800000000 6.620000000
+3.677419355 0.387096774 36.800000000 6.620000000
+3.677419355 0.580645161 36.800000000 6.620000000
+3.677419355 0.774193548 36.800000000 6.620000000
+3.677419355 0.967741935 36.800000000 6.620000000
+3.677419355 1.161290323 36.800000000 6.620000000
+3.677419355 1.354838710 36.800000000 6.620000000
+3.677419355 1.548387097 36.800000000 6.620000000
+3.677419355 1.741935484 36.800000000 6.620000000
+3.677419355 1.935483871 36.800000000 6.620000000
+3.677419355 2.129032258 36.800000000 6.620000000
+3.677419355 2.322580645 36.800000000 6.620000000
+3.677419355 2.516129032 36.640000000 6.680000000
+3.677419355 2.709677419 36.080000000 6.940000000
+3.677419355 2.903225806 35.600000000 7.200000000
+3.677419355 3.096774194 72.960000000 17.640000000
+3.677419355 3.290322581 73.840000000 17.940000000
+3.677419355 3.483870968 74.640000000 18.220000000
+3.677419355 3.677419355 75.200000000 18.380000000
+3.677419355 3.870967742 75.200000000 18.380000000
+3.677419355 4.064516129 75.200000000 18.380000000
+3.677419355 4.258064516 75.200000000 18.380000000
+3.677419355 4.451612903 75.200000000 18.380000000
+3.677419355 4.645161290 75.200000000 18.380000000
+3.677419355 4.838709677 75.200000000 18.380000000
+3.677419355 5.032258065 75.200000000 18.380000000
+3.677419355 5.225806452 75.200000000 18.380000000
+3.677419355 5.419354839 75.200000000 18.380000000
+3.677419355 5.612903226 75.200000000 18.380000000
+3.677419355 5.806451613 75.200000000 18.380000000
+3.677419355 6.000000000 75.200000000 18.380000000
+3.870967742 0.000000000 38.720000000 5.640000000
+3.870967742 0.193548387 38.720000000 5.640000000
+3.870967742 0.387096774 38.720000000 5.640000000
+3.870967742 0.580645161 38.720000000 5.640000000
+3.870967742 0.774193548 38.720000000 5.640000000
+3.870967742 0.967741935 38.720000000 5.640000000
+3.870967742 1.161290323 38.720000000 5.640000000
+3.870967742 1.354838710 38.640000000 5.680000000
+3.870967742 1.548387097 38.480000000 5.780000000
+3.870967742 1.741935484 38.240000000 5.880000000
+3.870967742 1.935483871 38.080000000 5.960000000
+3.870967742 2.129032258 37.680000000 6.180000000
+3.870967742 2.322580645 37.120000000 6.440000000
+3.870967742 2.516129032 36.640000000 6.680000000
+3.870967742 2.709677419 36.080000000 6.940000000
+3.870967742 2.903225806 35.600000000 7.200000000
+3.870967742 3.096774194 72.960000000 17.640000000
+3.870967742 3.290322581 73.840000000 17.940000000
+3.870967742 3.483870968 74.640000000 18.220000000
+3.870967742 3.677419355 75.520000000 18.520000000
+3.870967742 3.870967742 76.400000000 18.800000000
+3.870967742 4.064516129 77.120000000 19.040000000
+3.870967742 4.258064516 77.360000000 19.120000000
+3.870967742 4.451612903 77.680000000 19.220000000
+3.870967742 4.645161290 78.000000000 19.320000000
+3.870967742 4.838709677 78.080000000 19.360000000
+3.870967742 5.032258065 78.080000000 19.360000000
+3.870967742 5.225806452 78.080000000 19.360000000
+3.870967742 5.419354839 78.080000000 19.360000000
+3.870967742 5.612903226 78.080000000 19.360000000
+3.870967742 5.806451613 78.080000000 19.360000000
+3.870967742 6.000000000 78.080000000 19.360000000
+4.064516129 0.000000000 39.680000000 5.160000000
+4.064516129 0.193548387 39.680000000 5.160000000
+4.064516129 0.387096774 39.600000000 5.200000000
+4.064516129 0.580645161 39.440000000 5.300000000
+4.064516129 0.774193548 39.200000000 5.380000000
+4.064516129 0.967741935 39.040000000 5.480000000
+4.064516129 1.161290323 38.800000000 5.580000000
+4.064516129 1.354838710 38.640000000 5.680000000
+4.064516129 1.548387097 38.480000000 5.780000000
+4.064516129 1.741935484 38.240000000 5.880000000
+4.064516129 1.935483871 38.080000000 5.960000000
+4.064516129 2.129032258 37.680000000 6.180000000
+4.064516129 2.322580645 37.120000000 6.440000000
+4.064516129 2.516129032 36.640000000 6.680000000
+4.064516129 2.709677419 36.080000000 6.940000000
+4.064516129 2.903225806 35.600000000 7.200000000
+4.064516129 3.096774194 72.960000000 17.640000000
+4.064516129 3.290322581 73.840000000 17.940000000
+4.064516129 3.483870968 74.640000000 18.220000000
+4.064516129 3.677419355 75.520000000 18.520000000
+4.064516129 3.870967742 76.400000000 18.800000000
+4.064516129 4.064516129 77.120000000 19.040000000
+4.064516129 4.258064516 77.360000000 19.120000000
+4.064516129 4.451612903 77.680000000 19.220000000
+4.064516129 4.645161290 78.000000000 19.320000000
+4.064516129 4.838709677 78.240000000 19.420000000
+4.064516129 5.032258065 78.560000000 19.520000000
+4.064516129 5.225806452 78.800000000 19.620000000
+4.064516129 5.419354839 79.120000000 19.700000000
+4.064516129 5.612903226 79.440000000 19.800000000
+4.064516129 5.806451613 79.520000000 19.840000000
+4.064516129 6.000000000 79.520000000 19.840000000
+4.258064516 0.000000000 38.720000000 5.640000000
+4.258064516 0.193548387 38.720000000 5.640000000
+4.258064516 0.387096774 38.720000000 5.640000000
+4.258064516 0.580645161 38.720000000 5.640000000
+4.258064516 0.774193548 38.720000000 5.640000000
+4.258064516 0.967741935 38.720000000 5.640000000
+4.258064516 1.161290323 38.720000000 5.640000000
+4.258064516 1.354838710 38.640000000 5.680000000
+4.258064516 1.548387097 38.480000000 5.780000000
+4.258064516 1.741935484 38.240000000 5.880000000
+4.258064516 1.935483871 38.080000000 5.960000000
+4.258064516 2.129032258 37.680000000 6.180000000
+4.258064516 2.322580645 37.120000000 6.440000000
+4.258064516 2.516129032 36.640000000 6.680000000
+4.258064516 2.709677419 36.080000000 6.940000000
+4.258064516 2.903225806 35.600000000 7.200000000
+4.258064516 3.096774194 72.960000000 17.640000000
+4.258064516 3.290322581 73.840000000 17.940000000
+4.258064516 3.483870968 74.640000000 18.220000000
+4.258064516 3.677419355 75.520000000 18.520000000
+4.258064516 3.870967742 76.400000000 18.800000000
+4.258064516 4.064516129 77.120000000 19.040000000
+4.258064516 4.258064516 77.360000000 19.120000000
+4.258064516 4.451612903 77.680000000 19.220000000
+4.258064516 4.645161290 78.000000000 19.320000000
+4.258064516 4.838709677 78.080000000 19.360000000
+4.258064516 5.032258065 78.080000000 19.360000000
+4.258064516 5.225806452 78.080000000 19.360000000
+4.258064516 5.419354839 78.080000000 19.360000000
+4.258064516 5.612903226 78.080000000 19.360000000
+4.258064516 5.806451613 78.080000000 19.360000000
+4.258064516 6.000000000 78.080000000 19.360000000
+4.451612903 0.000000000 37.760000000 6.120000000
+4.451612903 0.193548387 37.760000000 6.120000000
+4.451612903 0.387096774 37.760000000 6.120000000
+4.451612903 0.580645161 37.760000000 6.120000000
+4.451612903 0.774193548 37.760000000 6.120000000
+4.451612903 0.967741935 37.760000000 6.120000000
+4.451612903 1.161290323 37.760000000 6.120000000
+4.451612903 1.354838710 37.760000000 6.120000000
+4.451612903 1.548387097 37.760000000 6.120000000
+4.451612903 1.741935484 37.760000000 6.120000000
+4.451612903 1.935483871 37.760000000 6.120000000
+4.451612903 2.129032258 37.680000000 6.180000000
+4.451612903 2.322580645 37.120000000 6.440000000
+4.451612903 2.516129032 36.640000000 6.680000000
+4.451612903 2.709677419 36.080000000 6.940000000
+4.451612903 2.903225806 35.600000000 7.200000000
+4.451612903 3.096774194 72.960000000 17.640000000
+4.451612903 3.290322581 73.840000000 17.940000000
+4.451612903 3.483870968 74.640000000 18.220000000
+4.451612903 3.677419355 75.520000000 18.520000000
+4.451612903 3.870967742 76.400000000 18.800000000
+4.451612903 4.064516129 76.640000000 18.880000000
+4.451612903 4.258064516 76.640000000 18.880000000
+4.451612903 4.451612903 76.640000000 18.880000000
+4.451612903 4.645161290 76.640000000 18.880000000
+4.451612903 4.838709677 76.640000000 18.880000000
+4.451612903 5.032258065 76.640000000 18.880000000
+4.451612903 5.225806452 76.640000000 18.880000000
+4.451612903 5.419354839 76.640000000 18.880000000
+4.451612903 5.612903226 76.640000000 18.880000000
+4.451612903 5.806451613 76.640000000 18.880000000
+4.451612903 6.000000000 76.640000000 18.880000000
+4.645161290 0.000000000 36.800000000 6.620000000
+4.645161290 0.193548387 36.800000000 6.620000000
+4.645161290 0.387096774 36.800000000 6.620000000
+4.645161290 0.580645161 36.800000000 6.620000000
+4.645161290 0.774193548 36.800000000 6.620000000
+4.645161290 0.967741935 36.800000000 6.620000000
+4.645161290 1.161290323 36.800000000 6.620000000
+4.645161290 1.354838710 36.800000000 6.620000000
+4.645161290 1.548387097 36.800000000 6.620000000
+4.645161290 1.741935484 36.800000000 6.620000000
+4.645161290 1.935483871 36.800000000 6.620000000
+4.645161290 2.129032258 36.800000000 6.620000000
+4.645161290 2.322580645 36.800000000 6.620000000
+4.645161290 2.516129032 36.640000000 6.680000000
+4.645161290 2.709677419 36.080000000 6.940000000
+4.645161290 2.903225806 35.600000000 7.200000000
+4.645161290 3.096774194 72.960000000 17.640000000
+4.645161290 3.290322581 73.840000000 17.940000000
+4.645161290 3.483870968 74.640000000 18.220000000
+4.645161290 3.677419355 75.200000000 18.380000000
+4.645161290 3.870967742 75.200000000 18.380000000
+4.645161290 4.064516129 75.200000000 18.380000000
+4.645161290 4.258064516 75.200000000 18.380000000
+4.645161290 4.451612903 75.200000000 18.380000000
+4.645161290 4.645161290 75.200000000 18.380000000
+4.645161290 4.838709677 75.200000000 18.380000000
+4.645161290 5.032258065 75.200000000 18.380000000
+4.645161290 5.225806452 75.200000000 18.380000000
+4.645161290 5.419354839 75.200000000 18.380000000
+4.645161290 5.612903226 75.200000000 18.380000000
+4.645161290 5.806451613 75.200000000 18.380000000
+4.645161290 6.000000000 75.200000000 18.380000000
+4.838709677 0.000000000 35.760000000 7.100000000
+4.838709677 0.193548387 35.760000000 7.100000000
+4.838709677 0.387096774 35.760000000 7.100000000
+4.838709677 0.580645161 35.760000000 7.100000000
+4.838709677 0.774193548 35.760000000 7.100000000
+4.838709677 0.967741935 35.760000000 7.100000000
+4.838709677 1.161290323 35.760000000 7.100000000
+4.838709677 1.354838710 35.760000000 7.100000000
+4.838709677 1.548387097 35.760000000 7.100000000
+4.838709677 1.741935484 35.760000000 7.100000000
+4.838709677 1.935483871 35.760000000 7.100000000
+4.838709677 2.129032258 35.760000000 7.100000000
+4.838709677 2.322580645 35.760000000 7.100000000
+4.838709677 2.516129032 35.760000000 7.100000000
+4.838709677 2.709677419 35.760000000 7.100000000
+4.838709677 2.903225806 35.600000000 7.200000000
+4.838709677 3.096774194 72.960000000 17.640000000
+4.838709677 3.290322581 73.680000000 17.900000000
+4.838709677 3.483870968 73.680000000 17.900000000
+4.838709677 3.677419355 73.680000000 17.900000000
+4.838709677 3.870967742 73.680000000 17.900000000
+4.838709677 4.064516129 73.680000000 17.900000000
+4.838709677 4.258064516 73.680000000 17.900000000
+4.838709677 4.451612903 73.680000000 17.900000000
+4.838709677 4.645161290 73.680000000 17.900000000
+4.838709677 4.838709677 73.680000000 17.900000000
+4.838709677 5.032258065 73.680000000 17.900000000
+4.838709677 5.225806452 73.680000000 17.900000000
+4.838709677 5.419354839 73.680000000 17.900000000
+4.838709677 5.612903226 73.680000000 17.900000000
+4.838709677 5.806451613 73.680000000 17.900000000
+4.838709677 6.000000000 73.680000000 17.900000000
+5.032258065 0.000000000 34.800000000 7.580000000
+5.032258065 0.193548387 34.800000000 7.580000000
+5.032258065 0.387096774 34.800000000 7.580000000
+5.032258065 0.580645161 34.800000000 7.580000000
+5.032258065 0.774193548 34.800000000 7.580000000
+5.032258065 0.967741935 34.800000000 7.580000000
+5.032258065 1.161290323 34.800000000 7.580000000
+5.032258065 1.354838710 34.800000000 7.580000000
+5.032258065 1.548387097 34.800000000 7.580000000
+5.032258065 1.741935484 34.800000000 7.580000000
+5.032258065 1.935483871 34.800000000 7.580000000
+5.032258065 2.129032258 34.800000000 7.580000000
+5.032258065 2.322580645 34.800000000 7.580000000
+5.032258065 2.516129032 34.800000000 7.580000000
+5.032258065 2.709677419 34.800000000 7.580000000
+5.032258065 2.903225806 34.800000000 7.580000000
+5.032258065 3.096774194 34.800000000 10.000000000
+5.032258065 3.290322581 72.240000000 17.420000000
+5.032258065 3.483870968 72.240000000 17.420000000
+5.032258065 3.677419355 72.240000000 17.420000000
+5.032258065 3.870967742 72.240000000 17.420000000
+5.032258065 4.064516129 72.240000000 17.420000000
+5.032258065 4.258064516 72.240000000 17.420000000
+5.032258065 4.451612903 72.240000000 17.420000000
+5.032258065 4.645161290 72.240000000 17.420000000
+5.032258065 4.838709677 72.240000000 17.420000000
+5.032258065 5.032258065 72.240000000 17.420000000
+5.032258065 5.225806452 72.240000000 17.420000000
+5.032258065 5.419354839 72.240000000 17.420000000
+5.032258065 5.612903226 72.240000000 17.420000000
+5.032258065 5.806451613 72.240000000 17.420000000
+5.032258065 6.000000000 72.240000000 17.420000000
+5.225806452 0.000000000 33.840000000 8.060000000
+5.225806452 0.193548387 33.840000000 8.060000000
+5.225806452 0.387096774 33.840000000 8.060000000
+5.225806452 0.580645161 33.840000000 8.060000000
+5.225806452 0.774193548 33.840000000 8.060000000
+5.225806452 0.967741935 33.840000000 8.060000000
+5.225806452 1.161290323 33.840000000 8.060000000
+5.225806452 1.354838710 33.840000000 8.060000000
+5.225806452 1.548387097 33.840000000 8.060000000
+5.225806452 1.741935484 33.840000000 8.060000000
+5.225806452 1.935483871 33.840000000 8.060000000
+5.225806452 2.129032258 33.840000000 8.060000000
+5.225806452 2.322580645 33.840000000 8.060000000
+5.225806452 2.516129032 33.840000000 8.060000000
+5.225806452 2.709677419 33.840000000 10.000000000
+5.225806452 2.903225806 33.840000000 10.000000000
+5.225806452 3.096774194 33.840000000 10.000000000
+5.225806452 3.290322581 33.840000000 10.000000000
+5.225806452 3.483870968 33.840000000 10.000000000
+5.225806452 3.677419355 70.800000000 16.940000000
+5.225806452 3.870967742 70.800000000 16.940000000
+5.225806452 4.064516129 70.800000000 16.940000000
+5.225806452 4.258064516 70.800000000 16.940000000
+5.225806452 4.451612903 70.800000000 16.940000000
+5.225806452 4.645161290 70.800000000 16.940000000
+5.225806452 4.838709677 70.800000000 16.940000000
+5.225806452 5.032258065 70.800000000 16.940000000
+5.225806452 5.225806452 70.800000000 16.940000000
+5.225806452 5.419354839 70.800000000 16.940000000
+5.225806452 5.612903226 70.800000000 16.940000000
+5.225806452 5.806451613 70.800000000 16.940000000
+5.225806452 6.000000000 70.800000000 16.940000000
+5.419354839 0.000000000 32.880000000 8.540000000
+5.419354839 0.193548387 32.880000000 8.540000000
+5.419354839 0.387096774 32.880000000 8.540000000
+5.419354839 0.580645161 32.880000000 8.540000000
+5.419354839 0.774193548 32.880000000 8.540000000
+5.419354839 0.967741935 32.880000000 8.540000000
+5.419354839 1.161290323 32.880000000 8.540000000
+5.419354839 1.354838710 32.880000000 8.540000000
+5.419354839 1.548387097 32.880000000 8.540000000
+5.419354839 1.741935484 32.880000000 8.540000000
+5.419354839 1.935483871 32.880000000 8.540000000
+5.419354839 2.129032258 32.880000000 8.540000000
+5.419354839 2.322580645 32.880000000 10.000000000
+5.419354839 2.516129032 32.880000000 10.000000000
+5.419354839 2.709677419 32.880000000 10.000000000
+5.419354839 2.903225806 32.880000000 10.000000000
+5.419354839 3.096774194 32.880000000 10.000000000
+5.419354839 3.290322581 32.880000000 10.000000000
+5.419354839 3.483870968 32.880000000 10.000000000
+5.419354839 3.677419355 32.880000000 10.000000000
+5.419354839 3.870967742 32.880000000 10.000000000
+5.419354839 4.064516129 69.360000000 16.460000000
+5.419354839 4.258064516 69.360000000 16.460000000
+5.419354839 4.451612903 69.360000000 16.460000000
+5.419354839 4.645161290 69.360000000 16.460000000
+5.419354839 4.838709677 69.360000000 16.460000000
+5.419354839 5.032258065 69.360000000 16.460000000
+5.419354839 5.225806452 69.360000000 16.460000000
+5.419354839 5.419354839 69.360000000 16.460000000
+5.419354839 5.612903226 69.360000000 16.460000000
+5.419354839 5.806451613 69.360000000 16.460000000
+5.419354839 6.000000000 69.360000000 16.460000000
+5.612903226 0.000000000 31.920000000 9.040000000
+5.612903226 0.193548387 31.920000000 9.040000000
+5.612903226 0.387096774 31.920000000 9.040000000
+5.612903226 0.580645161 31.920000000 9.040000000
+5.612903226 0.774193548 31.920000000 9.040000000
+5.612903226 0.967741935 31.920000000 9.040000000
+5.612903226 1.161290323 31.920000000 9.040000000
+5.612903226 1.354838710 31.920000000 9.040000000
+5.612903226 1.548387097 31.920000000 9.040000000
+5.612903226 1.741935484 31.920000000 9.040000000
+5.612903226 1.935483871 31.920000000 9.040000000
+5.612903226 2.129032258 31.920000000 10.000000000
+5.612903226 2.322580645 31.920000000 10.000000000
+5.612903226 2.516129032 31.920000000 10.000000000
+5.612903226 2.709677419 31.920000000 10.000000000
+5.612903226 2.903225806 31.920000000 10.000000000
+5.612903226 3.096774194 31.920000000 10.000000000
+5.612903226 3.290322581 31.920000000 10.000000000
+5.612903226 3.483870968 31.920000000 10.000000000
+5.612903226 3.677419355 31.920000000 10.000000000
+5.612903226 3.870967742 31.920000000 10.000000000
+5.612903226 4.064516129 31.920000000 10.000000000
+5.612903226 4.258064516 31.920000000 10.000000000
+5.612903226 4.451612903 67.920000000 15.960000000
+5.612903226 4.645161290 67.920000000 15.960000000
+5.612903226 4.838709677 67.920000000 15.960000000
+5.612903226 5.032258065 67.920000000 15.960000000
+5.612903226 5.225806452 67.920000000 15.960000000
+5.612903226 5.419354839 67.920000000 15.960000000
+5.612903226 5.612903226 67.920000000 15.960000000
+5.612903226 5.806451613 67.920000000 15.960000000
+5.612903226 6.000000000 67.920000000 15.960000000
+5.806451613 0.000000000 30.960000000 9.520000000
+5.806451613 0.193548387 30.960000000 9.520000000
+5.806451613 0.387096774 30.960000000 9.520000000
+5.806451613 0.580645161 30.960000000 9.520000000
+5.806451613 0.774193548 30.960000000 9.520000000
+5.806451613 0.967741935 30.960000000 9.520000000
+5.806451613 1.161290323 30.960000000 9.520000000
+5.806451613 1.354838710 30.960000000 9.520000000
+5.806451613 1.548387097 30.960000000 10.000000000
+5.806451613 1.741935484 30.960000000 10.000000000
+5.806451613 1.935483871 30.960000000 10.000000000
+5.806451613 2.129032258 30.960000000 10.000000000
+5.806451613 2.322580645 30.960000000 10.000000000
+5.806451613 2.516129032 30.960000000 10.000000000
+5.806451613 2.709677419 30.960000000 10.000000000
+5.806451613 2.903225806 30.960000000 10.000000000
+5.806451613 3.096774194 30.960000000 10.000000000
+5.806451613 3.290322581 30.960000000 10.000000000
+5.806451613 3.483870968 30.960000000 10.000000000
+5.806451613 3.677419355 30.960000000 10.000000000
+5.806451613 3.870967742 30.960000000 10.000000000
+5.806451613 4.064516129 30.960000000 10.000000000
+5.806451613 4.258064516 30.960000000 10.000000000
+5.806451613 4.451612903 30.960000000 10.000000000
+5.806451613 4.645161290 66.480000000 15.480000000
+5.806451613 4.838709677 66.480000000 15.480000000
+5.806451613 5.032258065 66.480000000 15.480000000
+5.806451613 5.225806452 66.480000000 15.480000000
+5.806451613 5.419354839 66.480000000 15.480000000
+5.806451613 5.612903226 66.480000000 15.480000000
+5.806451613 5.806451613 66.480000000 15.480000000
+5.806451613 6.000000000 66.480000000 15.480000000
+6.000000000 0.000000000 nan nan
+6.000000000 0.193548387 nan nan
+6.000000000 0.387096774 nan nan
+6.000000000 0.580645161 nan nan
+6.000000000 0.774193548 nan nan
+6.000000000 0.967741935 nan nan
+6.000000000 1.161290323 nan nan
+6.000000000 1.354838710 nan nan
+6.000000000 1.548387097 nan nan
+6.000000000 1.741935484 nan nan
+6.000000000 1.935483871 nan nan
+6.000000000 2.129032258 nan nan
+6.000000000 2.322580645 nan nan
+6.000000000 2.516129032 nan nan
+6.000000000 2.709677419 nan nan
+6.000000000 2.903225806 nan nan
+6.000000000 3.096774194 nan nan
+6.000000000 3.290322581 nan nan
+6.000000000 3.483870968 nan nan
+6.000000000 3.677419355 nan nan
+6.000000000 3.870967742 nan nan
+6.000000000 4.064516129 nan nan
+6.000000000 4.258064516 nan nan
+6.000000000 4.451612903 nan nan
+6.000000000 4.645161290 nan nan
+6.000000000 4.838709677 nan nan
+6.000000000 5.032258065 nan nan
+6.000000000 5.225806452 nan nan
+6.000000000 5.419354839 nan nan
+6.000000000 5.612903226 nan nan
+6.000000000 5.806451613 nan nan
+6.000000000 6.000000000 nan nan
diff --git a/examples/mamdani/Laundry.fll b/examples/mamdani/Laundry.fll
new file mode 100644
index 0000000..6abf2df
--- /dev/null
+++ b/examples/mamdani/Laundry.fll
@@ -0,0 +1,46 @@
+Engine: Laundry
+InputVariable: Load
+ enabled: true
+ range: 0.000 6.000
+ lock-range: false
+ term: small Discrete 0.000 1.000 1.000 1.000 2.000 0.800 5.000 0.000
+ term: normal Discrete 3.000 0.000 4.000 1.000 6.000 0.000
+InputVariable: Dirt
+ enabled: true
+ range: 0.000 6.000
+ lock-range: false
+ term: low Discrete 0.000 1.000 2.000 0.800 5.000 0.000
+ term: high Discrete 1.000 0.000 2.000 0.200 4.000 0.800 6.000 1.000
+OutputVariable: Detergent
+ enabled: true
+ range: 0.000 80.000
+ lock-range: false
+ aggregation: Maximum
+ defuzzifier: MeanOfMaximum 500
+ default: nan
+ lock-previous: false
+ term: less_than_usual Discrete 10.000 0.000 40.000 1.000 50.000 0.000
+ term: usual Discrete 40.000 0.000 50.000 1.000 60.000 1.000 80.000 0.000
+ term: more_than_usual Discrete 50.000 0.000 80.000 1.000
+OutputVariable: Cycle
+ enabled: true
+ range: 0.000 20.000
+ lock-range: false
+ aggregation: Maximum
+ defuzzifier: MeanOfMaximum 500
+ default: nan
+ lock-previous: false
+ term: short Discrete 0.000 1.000 10.000 1.000 20.000 0.000
+ term: long Discrete 10.000 0.000 20.000 1.000
+RuleBlock:
+ enabled: true
+ conjunction: Minimum
+ disjunction: Maximum
+ implication: Minimum
+ activation: General
+ rule: if Load is small and Dirt is not high then Detergent is less_than_usual
+ rule: if Load is small and Dirt is high then Detergent is usual
+ rule: if Load is normal and Dirt is low then Detergent is less_than_usual
+ rule: if Load is normal and Dirt is high then Detergent is more_than_usual
+ rule: if Detergent is usual or Detergent is less_than_usual then Cycle is short
+ rule: if Detergent is more_than_usual then Cycle is long \ No newline at end of file
diff --git a/examples/mamdani/Laundry.java b/examples/mamdani/Laundry.java
new file mode 100644
index 0000000..95cbe7c
--- /dev/null
+++ b/examples/mamdani/Laundry.java
@@ -0,0 +1,89 @@
+import com.fuzzylite.*;
+import com.fuzzylite.activation.*
+import com.fuzzylite.defuzzifier.*;
+import com.fuzzylite.factory.*;
+import com.fuzzylite.hedge.*;
+import com.fuzzylite.imex.*;
+import com.fuzzylite.norm.*;
+import com.fuzzylite.norm.s.*;
+import com.fuzzylite.norm.t.*;
+import com.fuzzylite.rule.*;
+import com.fuzzylite.term.*;
+import com.fuzzylite.variable.*;
+
+public class Laundry{
+public static void main(String[] args){
+//Code automatically generated with fuzzylite 6.0.
+
+Engine engine = new Engine();
+engine.setName("Laundry");
+engine.setDescription("");
+
+InputVariable Load = new InputVariable();
+Load.setName("Load");
+Load.setDescription("");
+Load.setEnabled(true);
+Load.setRange(0.000, 6.000);
+Load.setLockValueInRange(false);
+Load.addTerm(Discrete.create("small", 0.000, 1.000, 1.000, 1.000, 2.000, 0.800, 5.000, 0.000));
+Load.addTerm(Discrete.create("normal", 3.000, 0.000, 4.000, 1.000, 6.000, 0.000));
+engine.addInputVariable(Load);
+
+InputVariable Dirt = new InputVariable();
+Dirt.setName("Dirt");
+Dirt.setDescription("");
+Dirt.setEnabled(true);
+Dirt.setRange(0.000, 6.000);
+Dirt.setLockValueInRange(false);
+Dirt.addTerm(Discrete.create("low", 0.000, 1.000, 2.000, 0.800, 5.000, 0.000));
+Dirt.addTerm(Discrete.create("high", 1.000, 0.000, 2.000, 0.200, 4.000, 0.800, 6.000, 1.000));
+engine.addInputVariable(Dirt);
+
+OutputVariable Detergent = new OutputVariable();
+Detergent.setName("Detergent");
+Detergent.setDescription("");
+Detergent.setEnabled(true);
+Detergent.setRange(0.000, 80.000);
+Detergent.setLockValueInRange(false);
+Detergent.setAggregation(new Maximum());
+Detergent.setDefuzzifier(new MeanOfMaximum(500));
+Detergent.setDefaultValue(Double.NaN);
+Detergent.setLockPreviousValue(false);
+Detergent.addTerm(Discrete.create("less_than_usual", 10.000, 0.000, 40.000, 1.000, 50.000, 0.000));
+Detergent.addTerm(Discrete.create("usual", 40.000, 0.000, 50.000, 1.000, 60.000, 1.000, 80.000, 0.000));
+Detergent.addTerm(Discrete.create("more_than_usual", 50.000, 0.000, 80.000, 1.000));
+engine.addOutputVariable(Detergent);
+
+OutputVariable Cycle = new OutputVariable();
+Cycle.setName("Cycle");
+Cycle.setDescription("");
+Cycle.setEnabled(true);
+Cycle.setRange(0.000, 20.000);
+Cycle.setLockValueInRange(false);
+Cycle.setAggregation(new Maximum());
+Cycle.setDefuzzifier(new MeanOfMaximum(500));
+Cycle.setDefaultValue(Double.NaN);
+Cycle.setLockPreviousValue(false);
+Cycle.addTerm(Discrete.create("short", 0.000, 1.000, 10.000, 1.000, 20.000, 0.000));
+Cycle.addTerm(Discrete.create("long", 10.000, 0.000, 20.000, 1.000));
+engine.addOutputVariable(Cycle);
+
+RuleBlock ruleBlock = new RuleBlock();
+ruleBlock.setName("");
+ruleBlock.setDescription("");
+ruleBlock.setEnabled(true);
+ruleBlock.setConjunction(new Minimum());
+ruleBlock.setDisjunction(new Maximum());
+ruleBlock.setImplication(new Minimum());
+ruleBlock.setActivation(new General());
+ruleBlock.addRule(Rule.parse("if Load is small and Dirt is not high then Detergent is less_than_usual", engine));
+ruleBlock.addRule(Rule.parse("if Load is small and Dirt is high then Detergent is usual", engine));
+ruleBlock.addRule(Rule.parse("if Load is normal and Dirt is low then Detergent is less_than_usual", engine));
+ruleBlock.addRule(Rule.parse("if Load is normal and Dirt is high then Detergent is more_than_usual", engine));
+ruleBlock.addRule(Rule.parse("if Detergent is usual or Detergent is less_than_usual then Cycle is short", engine));
+ruleBlock.addRule(Rule.parse("if Detergent is more_than_usual then Cycle is long", engine));
+engine.addRuleBlock(ruleBlock);
+
+
+}
+}
diff --git a/examples/mamdani/Laundry.pdf b/examples/mamdani/Laundry.pdf
new file mode 100644
index 0000000..42df3cf
--- /dev/null
+++ b/examples/mamdani/Laundry.pdf
Binary files differ
diff --git a/examples/mamdani/ObstacleAvoidance.R b/examples/mamdani/ObstacleAvoidance.R
new file mode 100644
index 0000000..5533d26
--- /dev/null
+++ b/examples/mamdani/ObstacleAvoidance.R
@@ -0,0 +1,57 @@
+#Code automatically generated with fuzzylite 6.0.
+
+library(ggplot2);
+
+engine.name = "ObstacleAvoidance"
+engine.fll = "Engine: ObstacleAvoidance
+InputVariable: obstacle
+ enabled: true
+ range: 0.000 1.000
+ lock-range: false
+ term: left Ramp 1.000 0.000
+ term: right Ramp 0.000 1.000
+OutputVariable: mSteer
+ enabled: true
+ range: 0.000 1.000
+ lock-range: false
+ aggregation: Maximum
+ defuzzifier: Centroid 100
+ default: nan
+ lock-previous: false
+ term: left Ramp 1.000 0.000
+ term: right Ramp 0.000 1.000
+RuleBlock: mamdani
+ enabled: true
+ conjunction: none
+ disjunction: none
+ implication: AlgebraicProduct
+ activation: General
+ rule: if obstacle is left then mSteer is right
+ rule: if obstacle is right then mSteer is left"
+
+engine.fldFile = "ObstacleAvoidance.fld"
+if (require(data.table)) {
+ engine.df = data.table::fread(engine.fldFile, sep="auto", header="auto")
+} else {
+ engine.df = read.table(engine.fldFile, header=TRUE)
+}
+
+engine.plot.i1_o1 = ggplot(engine.df, aes(obstacle, mSteer)) +
+ geom_line(aes(color=mSteer), size=3, lineend="round", linejoin="mitre") +
+ scale_color_gradient(low="yellow", high="red") +
+ ggtitle("obstacle vs mSteer")
+
+engine.plot.o1_i1 = ggplot(engine.df, aes(obstacle, mSteer)) +
+ geom_line(aes(color=mSteer), size=3, lineend="round", linejoin="mitre") +
+ scale_color_gradient(low="yellow", high="red") +
+ coord_flip() +
+ ggtitle("mSteer vs obstacle")
+
+if (require(gridExtra)) {
+ engine.plots = arrangeGrob(engine.plot.i1_o1, engine.plot.o1_i1, ncol=2, top=engine.name)
+ ggsave(paste0(engine.name, ".pdf"), engine.plots)
+ if (require(grid)) {
+ grid.newpage()
+ grid.draw(engine.plots)
+ }
+}
diff --git a/examples/mamdani/ObstacleAvoidance.cpp b/examples/mamdani/ObstacleAvoidance.cpp
new file mode 100644
index 0000000..341ffe5
--- /dev/null
+++ b/examples/mamdani/ObstacleAvoidance.cpp
@@ -0,0 +1,49 @@
+#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("ObstacleAvoidance");
+engine->setDescription("");
+
+InputVariable* obstacle = new InputVariable;
+obstacle->setName("obstacle");
+obstacle->setDescription("");
+obstacle->setEnabled(true);
+obstacle->setRange(0.000, 1.000);
+obstacle->setLockValueInRange(false);
+obstacle->addTerm(new Ramp("left", 1.000, 0.000));
+obstacle->addTerm(new Ramp("right", 0.000, 1.000));
+engine->addInputVariable(obstacle);
+
+OutputVariable* mSteer = new OutputVariable;
+mSteer->setName("mSteer");
+mSteer->setDescription("");
+mSteer->setEnabled(true);
+mSteer->setRange(0.000, 1.000);
+mSteer->setLockValueInRange(false);
+mSteer->setAggregation(new Maximum);
+mSteer->setDefuzzifier(new Centroid(100));
+mSteer->setDefaultValue(fl::nan);
+mSteer->setLockPreviousValue(false);
+mSteer->addTerm(new Ramp("left", 1.000, 0.000));
+mSteer->addTerm(new Ramp("right", 0.000, 1.000));
+engine->addOutputVariable(mSteer);
+
+RuleBlock* mamdani = new RuleBlock;
+mamdani->setName("mamdani");
+mamdani->setDescription("");
+mamdani->setEnabled(true);
+mamdani->setConjunction(fl::null);
+mamdani->setDisjunction(fl::null);
+mamdani->setImplication(new AlgebraicProduct);
+mamdani->setActivation(new General);
+mamdani->addRule(Rule::parse("if obstacle is left then mSteer is right", engine));
+mamdani->addRule(Rule::parse("if obstacle is right then mSteer is left", engine));
+engine->addRuleBlock(mamdani);
+
+
+}
diff --git a/examples/mamdani/ObstacleAvoidance.fcl b/examples/mamdani/ObstacleAvoidance.fcl
new file mode 100644
index 0000000..1f2bac0
--- /dev/null
+++ b/examples/mamdani/ObstacleAvoidance.fcl
@@ -0,0 +1,34 @@
+//Code automatically generated with fuzzylite 6.0.
+
+FUNCTION_BLOCK ObstacleAvoidance
+
+VAR_INPUT
+ obstacle: REAL;
+END_VAR
+
+VAR_OUTPUT
+ mSteer: REAL;
+END_VAR
+
+FUZZIFY obstacle
+ RANGE := (0.000 .. 1.000);
+ TERM left := Ramp 1.000 0.000;
+ TERM right := Ramp 0.000 1.000;
+END_FUZZIFY
+
+DEFUZZIFY mSteer
+ RANGE := (0.000 .. 1.000);
+ TERM left := Ramp 1.000 0.000;
+ TERM right := Ramp 0.000 1.000;
+ METHOD : COG;
+ ACCU : MAX;
+ DEFAULT := nan;
+END_DEFUZZIFY
+
+RULEBLOCK mamdani
+ ACT : PROD;
+ RULE 1 : if obstacle is left then mSteer is right
+ RULE 2 : if obstacle is right then mSteer is left
+END_RULEBLOCK
+
+END_FUNCTION_BLOCK
diff --git a/examples/mamdani/ObstacleAvoidance.fis b/examples/mamdani/ObstacleAvoidance.fis
new file mode 100644
index 0000000..f938ec0
--- /dev/null
+++ b/examples/mamdani/ObstacleAvoidance.fis
@@ -0,0 +1,32 @@
+#Code automatically generated with fuzzylite 6.0.
+
+[System]
+Name='ObstacleAvoidance'
+Type='mamdani'
+Version=6.0
+NumInputs=1
+NumOutputs=1
+NumRules=2
+AndMethod='min'
+OrMethod='max'
+ImpMethod='prod'
+AggMethod='max'
+DefuzzMethod='centroid'
+
+[Input1]
+Name='obstacle'
+Range=[0.000 1.000]
+NumMFs=2
+MF1='left':'rampmf',[1.000 0.000]
+MF2='right':'rampmf',[0.000 1.000]
+
+[Output1]
+Name='mSteer'
+Range=[0.000 1.000]
+NumMFs=2
+MF1='left':'rampmf',[1.000 0.000]
+MF2='right':'rampmf',[0.000 1.000]
+
+[Rules]
+1.000 , 2.000 (1.000) : 1
+2.000 , 1.000 (1.000) : 1
diff --git a/examples/mamdani/ObstacleAvoidance.fld b/examples/mamdani/ObstacleAvoidance.fld
new file mode 100644
index 0000000..ec259dd
--- /dev/null
+++ b/examples/mamdani/ObstacleAvoidance.fld
@@ -0,0 +1,1025 @@
+obstacle mSteer
+0.000000000 0.666650000
+0.000977517 0.666650000
+0.001955034 0.666650000
+0.002932551 0.666650000
+0.003910068 0.666650000
+0.004887586 0.666650000
+0.005865103 0.666638485
+0.006842620 0.666625450
+0.007820137 0.666612389
+0.008797654 0.666599303
+0.009775171 0.666586193
+0.010752688 0.666573056
+0.011730205 0.666559894
+0.012707722 0.666546707
+0.013685239 0.666533494
+0.014662757 0.666520255
+0.015640274 0.666498518
+0.016617791 0.666472271
+0.017595308 0.666445974
+0.018572825 0.666419626
+0.019550342 0.666393229
+0.020527859 0.666366781
+0.021505376 0.666340282
+0.022482893 0.666313732
+0.023460411 0.666287131
+0.024437928 0.666260479
+0.025415445 0.666228313
+0.026392962 0.666188686
+0.027370479 0.666148986
+0.028347996 0.666109209
+0.029325513 0.666069358
+0.030303030 0.666029432
+0.031280547 0.665989429
+0.032258065 0.665949351
+0.033235582 0.665909196
+0.034213099 0.665868966
+0.035190616 0.665826169
+0.036168133 0.665773005
+0.037145650 0.665719742
+0.038123167 0.665666380
+0.039100684 0.665612917
+0.040078201 0.665559355
+0.041055718 0.665505693
+0.042033236 0.665451930
+0.043010753 0.665398066
+0.043988270 0.665344101
+0.044965787 0.665290034
+0.045943304 0.665223628
+0.046920821 0.665156655
+0.047898338 0.665089559
+0.048875855 0.665022339
+0.049853372 0.664954994
+0.050830890 0.664887525
+0.051808407 0.664819932
+0.052785924 0.664752213
+0.053763441 0.664684369
+0.054740958 0.664616398
+0.055718475 0.664539056
+0.056695992 0.664458237
+0.057673509 0.664377270
+0.058651026 0.664296156
+0.059628543 0.664214895
+0.060606061 0.664133485
+0.061583578 0.664051926
+0.062561095 0.663970218
+0.063538612 0.663888361
+0.064516129 0.663806354
+0.065493646 0.663717900
+0.066471163 0.663623109
+0.067448680 0.663528148
+0.068426197 0.663433016
+0.069403715 0.663337714
+0.070381232 0.663242240
+0.071358749 0.663146594
+0.072336266 0.663050776
+0.073313783 0.662954785
+0.074291300 0.662858620
+0.075268817 0.662758885
+0.076246334 0.662650011
+0.077223851 0.662540943
+0.078201369 0.662431683
+0.079178886 0.662322229
+0.080156403 0.662212581
+0.081133920 0.662102739
+0.082111437 0.661992701
+0.083088954 0.661882468
+0.084066471 0.661772039
+0.085043988 0.661660863
+0.086021505 0.661537806
+0.086999022 0.661414534
+0.087976540 0.661291048
+0.088954057 0.661167346
+0.089931574 0.661043428
+0.090909091 0.660919294
+0.091886608 0.660794942
+0.092864125 0.660670373
+0.093841642 0.660545585
+0.094819159 0.660420579
+0.095796676 0.660285492
+0.096774194 0.660147932
+0.097751711 0.660010136
+0.098729228 0.659872104
+0.099706745 0.659733835
+0.100684262 0.659595328
+0.101661779 0.659456582
+0.102639296 0.659317597
+0.103616813 0.659178373
+0.104594330 0.659038909
+0.105571848 0.658892208
+0.106549365 0.658740291
+0.107526882 0.658588119
+0.108504399 0.658435689
+0.109481916 0.658283002
+0.110459433 0.658130057
+0.111436950 0.657976852
+0.112414467 0.657823389
+0.113391984 0.657669665
+0.114369501 0.657515680
+0.115347019 0.657357242
+0.116324536 0.657190916
+0.117302053 0.657024315
+0.118279570 0.656857437
+0.119257087 0.656690282
+0.120234604 0.656522850
+0.121212121 0.656355139
+0.122189638 0.656187149
+0.123167155 0.656018879
+0.124144673 0.655850329
+0.125122190 0.655680041
+0.126099707 0.655499270
+0.127077224 0.655318205
+0.128054741 0.655136845
+0.129032258 0.654955190
+0.130009775 0.654773238
+0.130987292 0.654590990
+0.131964809 0.654408443
+0.132942326 0.654225598
+0.133919844 0.654042454
+0.134897361 0.653859010
+0.135874878 0.653664982
+0.136852395 0.653469436
+0.137829912 0.653273578
+0.138807429 0.653077407
+0.139784946 0.652880922
+0.140762463 0.652684123
+0.141739980 0.652487008
+0.142717498 0.652289577
+0.143695015 0.652091829
+0.144672532 0.651893763
+0.145650049 0.651687855
+0.146627566 0.651477831
+0.147605083 0.651267477
+0.148582600 0.651056794
+0.149560117 0.650845780
+0.150537634 0.650634436
+0.151515152 0.650422759
+0.152492669 0.650210750
+0.153470186 0.649998407
+0.154447703 0.649785731
+0.155425220 0.649567877
+0.156402737 0.649343393
+0.157380254 0.649118566
+0.158357771 0.648893393
+0.159335288 0.648667875
+0.160312805 0.648442011
+0.161290323 0.648215799
+0.162267840 0.647989239
+0.163245357 0.647762331
+0.164222874 0.647535073
+0.165200391 0.647305221
+0.166177908 0.647066320
+0.167155425 0.646827060
+0.168132942 0.646587441
+0.169110459 0.646347463
+0.170087977 0.646107124
+0.171065494 0.645866424
+0.172043011 0.645625361
+0.173020528 0.645383936
+0.173998045 0.645142147
+0.174975562 0.644899993
+0.175953079 0.644647002
+0.176930596 0.644393373
+0.177908113 0.644139372
+0.178885630 0.643884998
+0.179863148 0.643630251
+0.180840665 0.643375130
+0.181818182 0.643119633
+0.182795699 0.642863761
+0.183773216 0.642607513
+0.184750733 0.642350886
+0.185728250 0.642086038
+0.186705767 0.641818123
+0.187683284 0.641549824
+0.188660802 0.641281142
+0.189638319 0.641012074
+0.190615836 0.640742621
+0.191593353 0.640472782
+0.192570870 0.640202555
+0.193548387 0.639931940
+0.194525904 0.639660937
+0.195503421 0.639384233
+0.196480938 0.639102138
+0.197458456 0.638819650
+0.198435973 0.638536767
+0.199413490 0.638253490
+0.200391007 0.637969817
+0.201368524 0.637685747
+0.202346041 0.637401280
+0.203323558 0.637116415
+0.204301075 0.636831150
+0.205278592 0.636542613
+0.206256109 0.636246466
+0.207233627 0.635949918
+0.208211144 0.635652966
+0.209188661 0.635355612
+0.210166178 0.635057853
+0.211143695 0.634759688
+0.212121212 0.634461118
+0.213098729 0.634162142
+0.214076246 0.633862757
+0.215053763 0.633562423
+0.216031281 0.633252376
+0.217008798 0.632941920
+0.217986315 0.632631055
+0.218963832 0.632319779
+0.219941349 0.632008091
+0.220918866 0.631695992
+0.221896383 0.631383479
+0.222873900 0.631070553
+0.223851417 0.630757212
+0.224828935 0.630443455
+0.225806452 0.630121364
+0.226783969 0.629797178
+0.227761486 0.629472576
+0.228739003 0.629147559
+0.229716520 0.628822125
+0.230694037 0.628496272
+0.231671554 0.628170002
+0.232649071 0.627843312
+0.233626588 0.627516202
+0.234604106 0.627188671
+0.235581623 0.626855159
+0.236559140 0.626517443
+0.237536657 0.626179308
+0.238514174 0.625840753
+0.239491691 0.625501777
+0.240469208 0.625162379
+0.241446725 0.624822559
+0.242424242 0.624482316
+0.243401760 0.624141649
+0.244379277 0.623800557
+0.245356794 0.623455725
+0.246334311 0.623104704
+0.247311828 0.622753262
+0.248289345 0.622401397
+0.249266862 0.622049109
+0.250244379 0.621696398
+0.251221896 0.621343261
+0.252199413 0.620989700
+0.253176931 0.620635712
+0.254154448 0.620281297
+0.255131965 0.619925265
+0.256109482 0.619561189
+0.257086999 0.619196691
+0.258064516 0.618831769
+0.259042033 0.618466424
+0.260019550 0.618100655
+0.260997067 0.617734460
+0.261974585 0.617367839
+0.262952102 0.617000791
+0.263929619 0.616633316
+0.264907136 0.616265413
+0.265884653 0.615889366
+0.266862170 0.615512088
+0.267839687 0.615134387
+0.268817204 0.614756264
+0.269794721 0.614377718
+0.270772239 0.613998747
+0.271749756 0.613619351
+0.272727273 0.613239530
+0.273704790 0.612859282
+0.274682307 0.612478608
+0.275659824 0.612091947
+0.276637341 0.611702189
+0.277614858 0.611312012
+0.278592375 0.610921415
+0.279569892 0.610530398
+0.280547410 0.610138959
+0.281524927 0.609747097
+0.282502444 0.609354813
+0.283479961 0.608962106
+0.284457478 0.608568974
+0.285434995 0.608171886
+0.286412512 0.607769974
+0.287390029 0.607367648
+0.288367546 0.606964906
+0.289345064 0.606561748
+0.290322581 0.606158173
+0.291300098 0.605754180
+0.292277615 0.605349770
+0.293255132 0.604944940
+0.294232649 0.604539690
+0.295210166 0.604132380
+0.296187683 0.603718665
+0.297165200 0.603304542
+0.298142717 0.602890009
+0.299120235 0.602475066
+0.300097752 0.602059712
+0.301075269 0.601643947
+0.302052786 0.601227769
+0.303030303 0.600811179
+0.304007820 0.600394176
+0.304985337 0.599976759
+0.305962854 0.599551726
+0.306940371 0.599126182
+0.307917889 0.598700236
+0.308895406 0.598273888
+0.309872923 0.597847137
+0.310850440 0.597419982
+0.311827957 0.596992424
+0.312805474 0.596564460
+0.313782991 0.596136092
+0.314760508 0.595707318
+0.315738025 0.595272860
+0.316715543 0.594836296
+0.317693060 0.594399340
+0.318670577 0.593961991
+0.319648094 0.593524248
+0.320625611 0.593086112
+0.321603128 0.592647581
+0.322580645 0.592208655
+0.323558162 0.591769334
+0.324535679 0.591329617
+0.325513196 0.590886006
+0.326490714 0.590438847
+0.327468231 0.589991307
+0.328445748 0.589543385
+0.329423265 0.589095081
+0.330400782 0.588646394
+0.331378299 0.588197324
+0.332355816 0.587747870
+0.333333333 0.587298033
+0.334310850 0.586847811
+0.335288368 0.586395337
+0.336265885 0.585938031
+0.337243402 0.585480357
+0.338220919 0.585022313
+0.339198436 0.584563900
+0.340175953 0.584105117
+0.341153470 0.583645965
+0.342130987 0.583186441
+0.343108504 0.582726546
+0.344086022 0.582266280
+0.345063539 0.581805253
+0.346041056 0.581338270
+0.347018573 0.580870934
+0.347996090 0.580403243
+0.348973607 0.579935197
+0.349951124 0.579466795
+0.350928641 0.578998038
+0.351906158 0.578528925
+0.352883675 0.578059455
+0.353861193 0.577589628
+0.354838710 0.577119444
+0.355816227 0.576644207
+0.356793744 0.576167703
+0.357771261 0.575690860
+0.358748778 0.575213679
+0.359726295 0.574736158
+0.360703812 0.574258297
+0.361681329 0.573780096
+0.362658847 0.573301554
+0.363636364 0.572822672
+0.364613881 0.572343449
+0.365591398 0.571860698
+0.366568915 0.571375542
+0.367546432 0.570890065
+0.368523949 0.570404267
+0.369501466 0.569918146
+0.370478983 0.569431703
+0.371456500 0.568944938
+0.372434018 0.568457849
+0.373411535 0.567970438
+0.374389052 0.567482703
+0.375366569 0.566992805
+0.376344086 0.566499534
+0.377321603 0.566005960
+0.378299120 0.565512083
+0.379276637 0.565017903
+0.380254154 0.564523420
+0.381231672 0.564028633
+0.382209189 0.563533542
+0.383186706 0.563038147
+0.384164223 0.562542448
+0.385141740 0.562045786
+0.386119257 0.561544954
+0.387096774 0.561043840
+0.388074291 0.560542444
+0.389051808 0.560040764
+0.390029326 0.559538801
+0.391006843 0.559036555
+0.391984360 0.558534026
+0.392961877 0.558031212
+0.393939394 0.557528114
+0.394916911 0.557024732
+0.395894428 0.556517268
+0.396871945 0.556009189
+0.397849462 0.555500848
+0.398826979 0.554992247
+0.399804497 0.554483383
+0.400782014 0.553974258
+0.401759531 0.553464870
+0.402737048 0.552955221
+0.403714565 0.552445308
+0.404692082 0.551935134
+0.405669599 0.551422112
+0.406647116 0.550907660
+0.407624633 0.550392969
+0.408602151 0.549878039
+0.409579668 0.549362870
+0.410557185 0.548847462
+0.411534702 0.548331815
+0.412512219 0.547815928
+0.413489736 0.547299802
+0.414467253 0.546783436
+0.415444770 0.546265287
+0.416422287 0.545745069
+0.417399804 0.545224637
+0.418377322 0.544703989
+0.419354839 0.544183126
+0.420332356 0.543662048
+0.421309873 0.543140754
+0.422287390 0.542619244
+0.423264907 0.542097518
+0.424242424 0.541575577
+0.425219941 0.541052744
+0.426197458 0.540527383
+0.427174976 0.540001832
+0.428152493 0.539476090
+0.429130010 0.538950158
+0.430107527 0.538424035
+0.431085044 0.537897722
+0.432062561 0.537371217
+0.433040078 0.536844521
+0.434017595 0.536317635
+0.434995112 0.535790557
+0.435972630 0.535260701
+0.436950147 0.534730668
+0.437927664 0.534200469
+0.438905181 0.533670106
+0.439882698 0.533139577
+0.440860215 0.532608883
+0.441837732 0.532078024
+0.442815249 0.531546999
+0.443792766 0.531015810
+0.444770283 0.530484454
+0.445747801 0.529951246
+0.446725318 0.529417377
+0.447702835 0.528883370
+0.448680352 0.528349224
+0.449657869 0.527814939
+0.450635386 0.527280516
+0.451612903 0.526745953
+0.452590420 0.526211252
+0.453567937 0.525676412
+0.454545455 0.525141432
+0.455522972 0.524605346
+0.456500489 0.524068300
+0.457478006 0.523531142
+0.458455523 0.522993872
+0.459433040 0.522456490
+0.460410557 0.521918997
+0.461388074 0.521381392
+0.462365591 0.520843675
+0.463343109 0.520305846
+0.464320626 0.519767905
+0.465298143 0.519229421
+0.466275660 0.518689863
+0.467253177 0.518150220
+0.468230694 0.517610493
+0.469208211 0.517070682
+0.470185728 0.516530787
+0.471163245 0.515990807
+0.472140762 0.515450743
+0.473118280 0.514910594
+0.474095797 0.514370361
+0.475073314 0.513829968
+0.476050831 0.513288569
+0.477028348 0.512747115
+0.478005865 0.512205604
+0.478983382 0.511664036
+0.479960899 0.511122412
+0.480938416 0.510580732
+0.481915934 0.510038995
+0.482893451 0.509497202
+0.483870968 0.508955352
+0.484848485 0.508413446
+0.485826002 0.507870980
+0.486803519 0.507328390
+0.487781036 0.506785773
+0.488758553 0.506243127
+0.489736070 0.505700453
+0.490713587 0.505157751
+0.491691105 0.504615020
+0.492668622 0.504072261
+0.493646139 0.503529474
+0.494623656 0.502986658
+0.495601173 0.502443695
+0.496578690 0.501900652
+0.497556207 0.501357608
+0.498533724 0.500814565
+0.499511241 0.500271522
+0.500488759 0.499728478
+0.501466276 0.499185435
+0.502443793 0.498642392
+0.503421310 0.498099348
+0.504398827 0.497556305
+0.505376344 0.497013342
+0.506353861 0.496470526
+0.507331378 0.495927739
+0.508308895 0.495384980
+0.509286413 0.494842249
+0.510263930 0.494299547
+0.511241447 0.493756873
+0.512218964 0.493214227
+0.513196481 0.492671610
+0.514173998 0.492129020
+0.515151515 0.491586554
+0.516129032 0.491044648
+0.517106549 0.490502798
+0.518084066 0.489961005
+0.519061584 0.489419268
+0.520039101 0.488877588
+0.521016618 0.488335964
+0.521994135 0.487794396
+0.522971652 0.487252885
+0.523949169 0.486711431
+0.524926686 0.486170032
+0.525904203 0.485629639
+0.526881720 0.485089406
+0.527859238 0.484549257
+0.528836755 0.484009193
+0.529814272 0.483469213
+0.530791789 0.482929318
+0.531769306 0.482389507
+0.532746823 0.481849780
+0.533724340 0.481310137
+0.534701857 0.480770579
+0.535679374 0.480232095
+0.536656891 0.479694154
+0.537634409 0.479156325
+0.538611926 0.478618608
+0.539589443 0.478081003
+0.540566960 0.477543510
+0.541544477 0.477006128
+0.542521994 0.476468858
+0.543499511 0.475931700
+0.544477028 0.475394654
+0.545454545 0.474858568
+0.546432063 0.474323588
+0.547409580 0.473788748
+0.548387097 0.473254047
+0.549364614 0.472719484
+0.550342131 0.472185061
+0.551319648 0.471650776
+0.552297165 0.471116630
+0.553274682 0.470582623
+0.554252199 0.470048754
+0.555229717 0.469515546
+0.556207234 0.468984190
+0.557184751 0.468453001
+0.558162268 0.467921976
+0.559139785 0.467391117
+0.560117302 0.466860423
+0.561094819 0.466329894
+0.562072336 0.465799531
+0.563049853 0.465269332
+0.564027370 0.464739299
+0.565004888 0.464209443
+0.565982405 0.463682365
+0.566959922 0.463155479
+0.567937439 0.462628783
+0.568914956 0.462102278
+0.569892473 0.461575965
+0.570869990 0.461049842
+0.571847507 0.460523910
+0.572825024 0.459998168
+0.573802542 0.459472617
+0.574780059 0.458947256
+0.575757576 0.458424423
+0.576735093 0.457902482
+0.577712610 0.457380756
+0.578690127 0.456859246
+0.579667644 0.456337952
+0.580645161 0.455816874
+0.581622678 0.455296011
+0.582600196 0.454775363
+0.583577713 0.454254931
+0.584555230 0.453734713
+0.585532747 0.453216564
+0.586510264 0.452700198
+0.587487781 0.452184072
+0.588465298 0.451668185
+0.589442815 0.451152538
+0.590420332 0.450637130
+0.591397849 0.450121961
+0.592375367 0.449607031
+0.593352884 0.449092340
+0.594330401 0.448577888
+0.595307918 0.448064866
+0.596285435 0.447554692
+0.597262952 0.447044779
+0.598240469 0.446535130
+0.599217986 0.446025742
+0.600195503 0.445516617
+0.601173021 0.445007753
+0.602150538 0.444499152
+0.603128055 0.443990811
+0.604105572 0.443482732
+0.605083089 0.442975268
+0.606060606 0.442471886
+0.607038123 0.441968788
+0.608015640 0.441465974
+0.608993157 0.440963445
+0.609970674 0.440461199
+0.610948192 0.439959236
+0.611925709 0.439457556
+0.612903226 0.438956160
+0.613880743 0.438455046
+0.614858260 0.437954214
+0.615835777 0.437457552
+0.616813294 0.436961853
+0.617790811 0.436466458
+0.618768328 0.435971367
+0.619745846 0.435476580
+0.620723363 0.434982097
+0.621700880 0.434487917
+0.622678397 0.433994040
+0.623655914 0.433500466
+0.624633431 0.433007195
+0.625610948 0.432517297
+0.626588465 0.432029562
+0.627565982 0.431542151
+0.628543500 0.431055062
+0.629521017 0.430568297
+0.630498534 0.430081854
+0.631476051 0.429595733
+0.632453568 0.429109935
+0.633431085 0.428624458
+0.634408602 0.428139302
+0.635386119 0.427656551
+0.636363636 0.427177328
+0.637341153 0.426698446
+0.638318671 0.426219904
+0.639296188 0.425741703
+0.640273705 0.425263842
+0.641251222 0.424786321
+0.642228739 0.424309140
+0.643206256 0.423832297
+0.644183773 0.423355793
+0.645161290 0.422880556
+0.646138807 0.422410372
+0.647116325 0.421940545
+0.648093842 0.421471075
+0.649071359 0.421001962
+0.650048876 0.420533205
+0.651026393 0.420064803
+0.652003910 0.419596757
+0.652981427 0.419129066
+0.653958944 0.418661730
+0.654936461 0.418194747
+0.655913978 0.417733720
+0.656891496 0.417273454
+0.657869013 0.416813559
+0.658846530 0.416354035
+0.659824047 0.415894883
+0.660801564 0.415436100
+0.661779081 0.414977687
+0.662756598 0.414519643
+0.663734115 0.414061969
+0.664711632 0.413604663
+0.665689150 0.413152189
+0.666666667 0.412701967
+0.667644184 0.412252130
+0.668621701 0.411802676
+0.669599218 0.411353606
+0.670576735 0.410904919
+0.671554252 0.410456615
+0.672531769 0.410008693
+0.673509286 0.409561153
+0.674486804 0.409113994
+0.675464321 0.408670383
+0.676441838 0.408230666
+0.677419355 0.407791345
+0.678396872 0.407352419
+0.679374389 0.406913888
+0.680351906 0.406475752
+0.681329423 0.406038009
+0.682306940 0.405600660
+0.683284457 0.405163704
+0.684261975 0.404727140
+0.685239492 0.404292682
+0.686217009 0.403863908
+0.687194526 0.403435540
+0.688172043 0.403007576
+0.689149560 0.402580018
+0.690127077 0.402152863
+0.691104594 0.401726112
+0.692082111 0.401299764
+0.693059629 0.400873818
+0.694037146 0.400448274
+0.695014663 0.400023241
+0.695992180 0.399605824
+0.696969697 0.399188821
+0.697947214 0.398772231
+0.698924731 0.398356053
+0.699902248 0.397940288
+0.700879765 0.397524934
+0.701857283 0.397109991
+0.702834800 0.396695458
+0.703812317 0.396281335
+0.704789834 0.395867620
+0.705767351 0.395460310
+0.706744868 0.395055060
+0.707722385 0.394650230
+0.708699902 0.394245820
+0.709677419 0.393841827
+0.710654936 0.393438252
+0.711632454 0.393035094
+0.712609971 0.392632352
+0.713587488 0.392230026
+0.714565005 0.391828114
+0.715542522 0.391431026
+0.716520039 0.391037894
+0.717497556 0.390645187
+0.718475073 0.390252903
+0.719452590 0.389861041
+0.720430108 0.389469602
+0.721407625 0.389078585
+0.722385142 0.388687988
+0.723362659 0.388297811
+0.724340176 0.387908053
+0.725317693 0.387521392
+0.726295210 0.387140718
+0.727272727 0.386760470
+0.728250244 0.386380649
+0.729227761 0.386001253
+0.730205279 0.385622282
+0.731182796 0.385243736
+0.732160313 0.384865613
+0.733137830 0.384487912
+0.734115347 0.384110634
+0.735092864 0.383734587
+0.736070381 0.383366684
+0.737047898 0.382999209
+0.738025415 0.382632161
+0.739002933 0.382265540
+0.739980450 0.381899345
+0.740957967 0.381533576
+0.741935484 0.381168231
+0.742913001 0.380803309
+0.743890518 0.380438811
+0.744868035 0.380074735
+0.745845552 0.379718703
+0.746823069 0.379364288
+0.747800587 0.379010300
+0.748778104 0.378656739
+0.749755621 0.378303602
+0.750733138 0.377950891
+0.751710655 0.377598603
+0.752688172 0.377246738
+0.753665689 0.376895296
+0.754643206 0.376544275
+0.755620723 0.376199443
+0.756598240 0.375858351
+0.757575758 0.375517684
+0.758553275 0.375177441
+0.759530792 0.374837621
+0.760508309 0.374498223
+0.761485826 0.374159247
+0.762463343 0.373820692
+0.763440860 0.373482557
+0.764418377 0.373144841
+0.765395894 0.372811329
+0.766373412 0.372483798
+0.767350929 0.372156688
+0.768328446 0.371829998
+0.769305963 0.371503728
+0.770283480 0.371177875
+0.771260997 0.370852441
+0.772238514 0.370527424
+0.773216031 0.370202822
+0.774193548 0.369878636
+0.775171065 0.369556545
+0.776148583 0.369242788
+0.777126100 0.368929447
+0.778103617 0.368616521
+0.779081134 0.368304008
+0.780058651 0.367991909
+0.781036168 0.367680221
+0.782013685 0.367368945
+0.782991202 0.367058080
+0.783968719 0.366747624
+0.784946237 0.366437577
+0.785923754 0.366137243
+0.786901271 0.365837858
+0.787878788 0.365538882
+0.788856305 0.365240312
+0.789833822 0.364942147
+0.790811339 0.364644388
+0.791788856 0.364347034
+0.792766373 0.364050082
+0.793743891 0.363753534
+0.794721408 0.363457387
+0.795698925 0.363168850
+0.796676442 0.362883585
+0.797653959 0.362598720
+0.798631476 0.362314253
+0.799608993 0.362030183
+0.800586510 0.361746510
+0.801564027 0.361463233
+0.802541544 0.361180350
+0.803519062 0.360897862
+0.804496579 0.360615767
+0.805474096 0.360339063
+0.806451613 0.360068060
+0.807429130 0.359797445
+0.808406647 0.359527218
+0.809384164 0.359257379
+0.810361681 0.358987926
+0.811339198 0.358718858
+0.812316716 0.358450176
+0.813294233 0.358181877
+0.814271750 0.357913962
+0.815249267 0.357649114
+0.816226784 0.357392487
+0.817204301 0.357136239
+0.818181818 0.356880367
+0.819159335 0.356624870
+0.820136852 0.356369749
+0.821114370 0.356115002
+0.822091887 0.355860628
+0.823069404 0.355606627
+0.824046921 0.355352998
+0.825024438 0.355100007
+0.826001955 0.354857853
+0.826979472 0.354616064
+0.827956989 0.354374639
+0.828934506 0.354133576
+0.829912023 0.353892876
+0.830889541 0.353652537
+0.831867058 0.353412559
+0.832844575 0.353172940
+0.833822092 0.352933680
+0.834799609 0.352694779
+0.835777126 0.352464927
+0.836754643 0.352237669
+0.837732160 0.352010761
+0.838709677 0.351784201
+0.839687195 0.351557989
+0.840664712 0.351332125
+0.841642229 0.351106607
+0.842619746 0.350881434
+0.843597263 0.350656607
+0.844574780 0.350432123
+0.845552297 0.350214269
+0.846529814 0.350001593
+0.847507331 0.349789250
+0.848484848 0.349577241
+0.849462366 0.349365564
+0.850439883 0.349154220
+0.851417400 0.348943206
+0.852394917 0.348732523
+0.853372434 0.348522169
+0.854349951 0.348312145
+0.855327468 0.348106237
+0.856304985 0.347908171
+0.857282502 0.347710423
+0.858260020 0.347512992
+0.859237537 0.347315877
+0.860215054 0.347119078
+0.861192571 0.346922593
+0.862170088 0.346726422
+0.863147605 0.346530564
+0.864125122 0.346335018
+0.865102639 0.346140990
+0.866080156 0.345957546
+0.867057674 0.345774402
+0.868035191 0.345591557
+0.869012708 0.345409010
+0.869990225 0.345226762
+0.870967742 0.345044810
+0.871945259 0.344863155
+0.872922776 0.344681795
+0.873900293 0.344500730
+0.874877810 0.344319959
+0.875855327 0.344149671
+0.876832845 0.343981121
+0.877810362 0.343812851
+0.878787879 0.343644861
+0.879765396 0.343477150
+0.880742913 0.343309718
+0.881720430 0.343142563
+0.882697947 0.342975685
+0.883675464 0.342809084
+0.884652981 0.342642758
+0.885630499 0.342484320
+0.886608016 0.342330335
+0.887585533 0.342176611
+0.888563050 0.342023148
+0.889540567 0.341869943
+0.890518084 0.341716998
+0.891495601 0.341564311
+0.892473118 0.341411881
+0.893450635 0.341259709
+0.894428152 0.341107792
+0.895405670 0.340961091
+0.896383187 0.340821627
+0.897360704 0.340682403
+0.898338221 0.340543418
+0.899315738 0.340404672
+0.900293255 0.340266165
+0.901270772 0.340127896
+0.902248289 0.339989864
+0.903225806 0.339852068
+0.904203324 0.339714508
+0.905180841 0.339579421
+0.906158358 0.339454415
+0.907135875 0.339329627
+0.908113392 0.339205058
+0.909090909 0.339080706
+0.910068426 0.338956572
+0.911045943 0.338832654
+0.912023460 0.338708952
+0.913000978 0.338585466
+0.913978495 0.338462194
+0.914956012 0.338339137
+0.915933529 0.338227961
+0.916911046 0.338117532
+0.917888563 0.338007299
+0.918866080 0.337897261
+0.919843597 0.337787419
+0.920821114 0.337677771
+0.921798631 0.337568317
+0.922776149 0.337459057
+0.923753666 0.337349989
+0.924731183 0.337241115
+0.925708700 0.337141380
+0.926686217 0.337045215
+0.927663734 0.336949224
+0.928641251 0.336853406
+0.929618768 0.336757760
+0.930596285 0.336662286
+0.931573803 0.336566984
+0.932551320 0.336471852
+0.933528837 0.336376891
+0.934506354 0.336282100
+0.935483871 0.336193646
+0.936461388 0.336111639
+0.937438905 0.336029782
+0.938416422 0.335948074
+0.939393939 0.335866515
+0.940371457 0.335785105
+0.941348974 0.335703844
+0.942326491 0.335622730
+0.943304008 0.335541763
+0.944281525 0.335460944
+0.945259042 0.335383602
+0.946236559 0.335315631
+0.947214076 0.335247787
+0.948191593 0.335180068
+0.949169110 0.335112475
+0.950146628 0.335045006
+0.951124145 0.334977661
+0.952101662 0.334910441
+0.953079179 0.334843345
+0.954056696 0.334776372
+0.955034213 0.334709966
+0.956011730 0.334655899
+0.956989247 0.334601934
+0.957966764 0.334548070
+0.958944282 0.334494307
+0.959921799 0.334440645
+0.960899316 0.334387083
+0.961876833 0.334333620
+0.962854350 0.334280258
+0.963831867 0.334226995
+0.964809384 0.334173831
+0.965786901 0.334131034
+0.966764418 0.334090804
+0.967741935 0.334050649
+0.968719453 0.334010571
+0.969696970 0.333970568
+0.970674487 0.333930642
+0.971652004 0.333890791
+0.972629521 0.333851014
+0.973607038 0.333811314
+0.974584555 0.333771687
+0.975562072 0.333739521
+0.976539589 0.333712869
+0.977517107 0.333686268
+0.978494624 0.333659718
+0.979472141 0.333633219
+0.980449658 0.333606771
+0.981427175 0.333580374
+0.982404692 0.333554026
+0.983382209 0.333527729
+0.984359726 0.333501482
+0.985337243 0.333479745
+0.986314761 0.333466506
+0.987292278 0.333453293
+0.988269795 0.333440106
+0.989247312 0.333426944
+0.990224829 0.333413807
+0.991202346 0.333400697
+0.992179863 0.333387611
+0.993157380 0.333374550
+0.994134897 0.333361515
+0.995112414 0.333350000
+0.996089932 0.333350000
+0.997067449 0.333350000
+0.998044966 0.333350000
+0.999022483 0.333350000
+1.000000000 0.333350000
diff --git a/examples/mamdani/ObstacleAvoidance.fll b/examples/mamdani/ObstacleAvoidance.fll
new file mode 100644
index 0000000..a47f1b4
--- /dev/null
+++ b/examples/mamdani/ObstacleAvoidance.fll
@@ -0,0 +1,25 @@
+Engine: ObstacleAvoidance
+InputVariable: obstacle
+ enabled: true
+ range: 0.000 1.000
+ lock-range: false
+ term: left Ramp 1.000 0.000
+ term: right Ramp 0.000 1.000
+OutputVariable: mSteer
+ enabled: true
+ range: 0.000 1.000
+ lock-range: false
+ aggregation: Maximum
+ defuzzifier: Centroid 100
+ default: nan
+ lock-previous: false
+ term: left Ramp 1.000 0.000
+ term: right Ramp 0.000 1.000
+RuleBlock: mamdani
+ enabled: true
+ conjunction: none
+ disjunction: none
+ implication: AlgebraicProduct
+ activation: General
+ rule: if obstacle is left then mSteer is right
+ rule: if obstacle is right then mSteer is left \ No newline at end of file
diff --git a/examples/mamdani/ObstacleAvoidance.java b/examples/mamdani/ObstacleAvoidance.java
new file mode 100644
index 0000000..8efef3b
--- /dev/null
+++ b/examples/mamdani/ObstacleAvoidance.java
@@ -0,0 +1,60 @@
+import com.fuzzylite.*;
+import com.fuzzylite.activation.*
+import com.fuzzylite.defuzzifier.*;
+import com.fuzzylite.factory.*;
+import com.fuzzylite.hedge.*;
+import com.fuzzylite.imex.*;
+import com.fuzzylite.norm.*;
+import com.fuzzylite.norm.s.*;
+import com.fuzzylite.norm.t.*;
+import com.fuzzylite.rule.*;
+import com.fuzzylite.term.*;
+import com.fuzzylite.variable.*;
+
+public class ObstacleAvoidance{
+public static void main(String[] args){
+//Code automatically generated with fuzzylite 6.0.
+
+Engine engine = new Engine();
+engine.setName("ObstacleAvoidance");
+engine.setDescription("");
+
+InputVariable obstacle = new InputVariable();
+obstacle.setName("obstacle");
+obstacle.setDescription("");
+obstacle.setEnabled(true);
+obstacle.setRange(0.000, 1.000);
+obstacle.setLockValueInRange(false);
+obstacle.addTerm(new Ramp("left", 1.000, 0.000));
+obstacle.addTerm(new Ramp("right", 0.000, 1.000));
+engine.addInputVariable(obstacle);
+
+OutputVariable mSteer = new OutputVariable();
+mSteer.setName("mSteer");
+mSteer.setDescription("");
+mSteer.setEnabled(true);
+mSteer.setRange(0.000, 1.000);
+mSteer.setLockValueInRange(false);
+mSteer.setAggregation(new Maximum());
+mSteer.setDefuzzifier(new Centroid(100));
+mSteer.setDefaultValue(Double.NaN);
+mSteer.setLockPreviousValue(false);
+mSteer.addTerm(new Ramp("left", 1.000, 0.000));
+mSteer.addTerm(new Ramp("right", 0.000, 1.000));
+engine.addOutputVariable(mSteer);
+
+RuleBlock mamdani = new RuleBlock();
+mamdani.setName("mamdani");
+mamdani.setDescription("");
+mamdani.setEnabled(true);
+mamdani.setConjunction(null);
+mamdani.setDisjunction(null);
+mamdani.setImplication(new AlgebraicProduct());
+mamdani.setActivation(new General());
+mamdani.addRule(Rule.parse("if obstacle is left then mSteer is right", engine));
+mamdani.addRule(Rule.parse("if obstacle is right then mSteer is left", engine));
+engine.addRuleBlock(mamdani);
+
+
+}
+}
diff --git a/examples/mamdani/ObstacleAvoidance.pdf b/examples/mamdani/ObstacleAvoidance.pdf
new file mode 100644
index 0000000..63e1fe9
--- /dev/null
+++ b/examples/mamdani/ObstacleAvoidance.pdf
Binary files differ
diff --git a/examples/mamdani/SimpleDimmer.R b/examples/mamdani/SimpleDimmer.R
new file mode 100644
index 0000000..77a60f3
--- /dev/null
+++ b/examples/mamdani/SimpleDimmer.R
@@ -0,0 +1,60 @@
+#Code automatically generated with fuzzylite 6.0.
+
+library(ggplot2);
+
+engine.name = "SimpleDimmer"
+engine.fll = "Engine: SimpleDimmer
+InputVariable: Ambient
+ enabled: true
+ range: 0.000 1.000
+ lock-range: false
+ term: DARK Triangle 0.000 0.250 0.500
+ term: MEDIUM Triangle 0.250 0.500 0.750
+ term: BRIGHT Triangle 0.500 0.750 1.000
+OutputVariable: Power
+ enabled: true
+ range: 0.000 1.000
+ lock-range: false
+ aggregation: Maximum
+ defuzzifier: Centroid 200
+ default: nan
+ lock-previous: false
+ term: LOW Triangle 0.000 0.250 0.500
+ term: MEDIUM Triangle 0.250 0.500 0.750
+ term: HIGH Triangle 0.500 0.750 1.000
+RuleBlock:
+ enabled: true
+ conjunction: none
+ disjunction: none
+ implication: Minimum
+ activation: General
+ rule: if Ambient is DARK then Power is HIGH
+ rule: if Ambient is MEDIUM then Power is MEDIUM
+ rule: if Ambient is BRIGHT then Power is LOW"
+
+engine.fldFile = "SimpleDimmer.fld"
+if (require(data.table)) {
+ engine.df = data.table::fread(engine.fldFile, sep="auto", header="auto")
+} else {
+ engine.df = read.table(engine.fldFile, header=TRUE)
+}
+
+engine.plot.i1_o1 = ggplot(engine.df, aes(Ambient, Power)) +
+ geom_line(aes(color=Power), size=3, lineend="round", linejoin="mitre") +
+ scale_color_gradient(low="yellow", high="red") +
+ ggtitle("Ambient vs Power")
+
+engine.plot.o1_i1 = ggplot(engine.df, aes(Ambient, Power)) +
+ geom_line(aes(color=Power), size=3, lineend="round", linejoin="mitre") +
+ scale_color_gradient(low="yellow", high="red") +
+ coord_flip() +
+ ggtitle("Power vs Ambient")
+
+if (require(gridExtra)) {
+ engine.plots = arrangeGrob(engine.plot.i1_o1, engine.plot.o1_i1, ncol=2, top=engine.name)
+ ggsave(paste0(engine.name, ".pdf"), engine.plots)
+ if (require(grid)) {
+ grid.newpage()
+ grid.draw(engine.plots)
+ }
+}
diff --git a/examples/mamdani/SimpleDimmer.cpp b/examples/mamdani/SimpleDimmer.cpp
new file mode 100644
index 0000000..7cd5e73
--- /dev/null
+++ b/examples/mamdani/SimpleDimmer.cpp
@@ -0,0 +1,52 @@
+#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("SimpleDimmer");
+engine->setDescription("");
+
+InputVariable* Ambient = new InputVariable;
+Ambient->setName("Ambient");
+Ambient->setDescription("");
+Ambient->setEnabled(true);
+Ambient->setRange(0.000, 1.000);
+Ambient->setLockValueInRange(false);
+Ambient->addTerm(new Triangle("DARK", 0.000, 0.250, 0.500));
+Ambient->addTerm(new Triangle("MEDIUM", 0.250, 0.500, 0.750));
+Ambient->addTerm(new Triangle("BRIGHT", 0.500, 0.750, 1.000));
+engine->addInputVariable(Ambient);
+
+OutputVariable* Power = new OutputVariable;
+Power->setName("Power");
+Power->setDescription("");
+Power->setEnabled(true);
+Power->setRange(0.000, 1.000);
+Power->setLockValueInRange(false);
+Power->setAggregation(new Maximum);
+Power->setDefuzzifier(new Centroid(200));
+Power->setDefaultValue(fl::nan);
+Power->setLockPreviousValue(false);
+Power->addTerm(new Triangle("LOW", 0.000, 0.250, 0.500));
+Power->addTerm(new Triangle("MEDIUM", 0.250, 0.500, 0.750));
+Power->addTerm(new Triangle("HIGH", 0.500, 0.750, 1.000));
+engine->addOutputVariable(Power);
+
+RuleBlock* ruleBlock = new RuleBlock;
+ruleBlock->setName("");
+ruleBlock->setDescription("");
+ruleBlock->setEnabled(true);
+ruleBlock->setConjunction(fl::null);
+ruleBlock->setDisjunction(fl::null);
+ruleBlock->setImplication(new Minimum);
+ruleBlock->setActivation(new General);
+ruleBlock->addRule(Rule::parse("if Ambient is DARK then Power is HIGH", engine));
+ruleBlock->addRule(Rule::parse("if Ambient is MEDIUM then Power is MEDIUM", engine));
+ruleBlock->addRule(Rule::parse("if Ambient is BRIGHT then Power is LOW", engine));
+engine->addRuleBlock(ruleBlock);
+
+
+}
diff --git a/examples/mamdani/SimpleDimmer.fcl b/examples/mamdani/SimpleDimmer.fcl
new file mode 100644
index 0000000..104990a
--- /dev/null
+++ b/examples/mamdani/SimpleDimmer.fcl
@@ -0,0 +1,37 @@
+//Code automatically generated with fuzzylite 6.0.
+
+FUNCTION_BLOCK SimpleDimmer
+
+VAR_INPUT
+ Ambient: REAL;
+END_VAR
+
+VAR_OUTPUT
+ Power: REAL;
+END_VAR
+
+FUZZIFY Ambient
+ RANGE := (0.000 .. 1.000);
+ TERM DARK := Triangle 0.000 0.250 0.500;
+ TERM MEDIUM := Triangle 0.250 0.500 0.750;
+ TERM BRIGHT := Triangle 0.500 0.750 1.000;
+END_FUZZIFY
+
+DEFUZZIFY Power
+ RANGE := (0.000 .. 1.000);
+ TERM LOW := Triangle 0.000 0.250 0.500;
+ TERM MEDIUM := Triangle 0.250 0.500 0.750;
+ TERM HIGH := Triangle 0.500 0.750 1.000;
+ METHOD : COG;
+ ACCU : MAX;
+ DEFAULT := nan;
+END_DEFUZZIFY
+
+RULEBLOCK
+ ACT : MIN;
+ RULE 1 : if Ambient is DARK then Power is HIGH
+ RULE 2 : if Ambient is MEDIUM then Power is MEDIUM
+ RULE 3 : if Ambient is BRIGHT then Power is LOW
+END_RULEBLOCK
+
+END_FUNCTION_BLOCK
diff --git a/examples/mamdani/SimpleDimmer.fis b/examples/mamdani/SimpleDimmer.fis
new file mode 100644
index 0000000..3435060
--- /dev/null
+++ b/examples/mamdani/SimpleDimmer.fis
@@ -0,0 +1,35 @@
+#Code automatically generated with fuzzylite 6.0.
+
+[System]
+Name='SimpleDimmer'
+Type='mamdani'
+Version=6.0
+NumInputs=1
+NumOutputs=1
+NumRules=3
+AndMethod='min'
+OrMethod='max'
+ImpMethod='min'
+AggMethod='max'
+DefuzzMethod='centroid'
+
+[Input1]
+Name='Ambient'
+Range=[0.000 1.000]
+NumMFs=3
+MF1='DARK':'trimf',[0.000 0.250 0.500]
+MF2='MEDIUM':'trimf',[0.250 0.500 0.750]
+MF3='BRIGHT':'trimf',[0.500 0.750 1.000]
+
+[Output1]
+Name='Power'
+Range=[0.000 1.000]
+NumMFs=3
+MF1='LOW':'trimf',[0.000 0.250 0.500]
+MF2='MEDIUM':'trimf',[0.250 0.500 0.750]
+MF3='HIGH':'trimf',[0.500 0.750 1.000]
+
+[Rules]
+1.000 , 3.000 (1.000) : 1
+2.000 , 2.000 (1.000) : 1
+3.000 , 1.000 (1.000) : 1
diff --git a/examples/mamdani/SimpleDimmer.fld b/examples/mamdani/SimpleDimmer.fld
new file mode 100644
index 0000000..bd4dc51
--- /dev/null
+++ b/examples/mamdani/SimpleDimmer.fld
@@ -0,0 +1,1025 @@
+Ambient Power
+0.000000000 nan
+0.000977517 0.750000000
+0.001955034 0.750000000
+0.002932551 0.750000000
+0.003910068 0.750000000
+0.004887586 0.750000000
+0.005865103 0.750000000
+0.006842620 0.750000000
+0.007820137 0.750000000
+0.008797654 0.750000000
+0.009775171 0.750000000
+0.010752688 0.750000000
+0.011730205 0.750000000
+0.012707722 0.750000000
+0.013685239 0.750000000
+0.014662757 0.750000000
+0.015640274 0.750000000
+0.016617791 0.750000000
+0.017595308 0.750000000
+0.018572825 0.750000000
+0.019550342 0.750000000
+0.020527859 0.750000000
+0.021505376 0.750000000
+0.022482893 0.750000000
+0.023460411 0.750000000
+0.024437928 0.750000000
+0.025415445 0.750000000
+0.026392962 0.750000000
+0.027370479 0.750000000
+0.028347996 0.750000000
+0.029325513 0.750000000
+0.030303030 0.750000000
+0.031280547 0.750000000
+0.032258065 0.750000000
+0.033235582 0.750000000
+0.034213099 0.750000000
+0.035190616 0.750000000
+0.036168133 0.750000000
+0.037145650 0.750000000
+0.038123167 0.750000000
+0.039100684 0.750000000
+0.040078201 0.750000000
+0.041055718 0.750000000
+0.042033236 0.750000000
+0.043010753 0.750000000
+0.043988270 0.750000000
+0.044965787 0.750000000
+0.045943304 0.750000000
+0.046920821 0.750000000
+0.047898338 0.750000000
+0.048875855 0.750000000
+0.049853372 0.750000000
+0.050830890 0.750000000
+0.051808407 0.750000000
+0.052785924 0.750000000
+0.053763441 0.750000000
+0.054740958 0.750000000
+0.055718475 0.750000000
+0.056695992 0.750000000
+0.057673509 0.750000000
+0.058651026 0.750000000
+0.059628543 0.750000000
+0.060606061 0.750000000
+0.061583578 0.750000000
+0.062561095 0.750000000
+0.063538612 0.750000000
+0.064516129 0.750000000
+0.065493646 0.750000000
+0.066471163 0.750000000
+0.067448680 0.750000000
+0.068426197 0.750000000
+0.069403715 0.750000000
+0.070381232 0.750000000
+0.071358749 0.750000000
+0.072336266 0.750000000
+0.073313783 0.750000000
+0.074291300 0.750000000
+0.075268817 0.750000000
+0.076246334 0.750000000
+0.077223851 0.750000000
+0.078201369 0.750000000
+0.079178886 0.750000000
+0.080156403 0.750000000
+0.081133920 0.750000000
+0.082111437 0.750000000
+0.083088954 0.750000000
+0.084066471 0.750000000
+0.085043988 0.750000000
+0.086021505 0.750000000
+0.086999022 0.750000000
+0.087976540 0.750000000
+0.088954057 0.750000000
+0.089931574 0.750000000
+0.090909091 0.750000000
+0.091886608 0.750000000
+0.092864125 0.750000000
+0.093841642 0.750000000
+0.094819159 0.750000000
+0.095796676 0.750000000
+0.096774194 0.750000000
+0.097751711 0.750000000
+0.098729228 0.750000000
+0.099706745 0.750000000
+0.100684262 0.750000000
+0.101661779 0.750000000
+0.102639296 0.750000000
+0.103616813 0.750000000
+0.104594330 0.750000000
+0.105571848 0.750000000
+0.106549365 0.750000000
+0.107526882 0.750000000
+0.108504399 0.750000000
+0.109481916 0.750000000
+0.110459433 0.750000000
+0.111436950 0.750000000
+0.112414467 0.750000000
+0.113391984 0.750000000
+0.114369501 0.750000000
+0.115347019 0.750000000
+0.116324536 0.750000000
+0.117302053 0.750000000
+0.118279570 0.750000000
+0.119257087 0.750000000
+0.120234604 0.750000000
+0.121212121 0.750000000
+0.122189638 0.750000000
+0.123167155 0.750000000
+0.124144673 0.750000000
+0.125122190 0.750000000
+0.126099707 0.750000000
+0.127077224 0.750000000
+0.128054741 0.750000000
+0.129032258 0.750000000
+0.130009775 0.750000000
+0.130987292 0.750000000
+0.131964809 0.750000000
+0.132942326 0.750000000
+0.133919844 0.750000000
+0.134897361 0.750000000
+0.135874878 0.750000000
+0.136852395 0.750000000
+0.137829912 0.750000000
+0.138807429 0.750000000
+0.139784946 0.750000000
+0.140762463 0.750000000
+0.141739980 0.750000000
+0.142717498 0.750000000
+0.143695015 0.750000000
+0.144672532 0.750000000
+0.145650049 0.750000000
+0.146627566 0.750000000
+0.147605083 0.750000000
+0.148582600 0.750000000
+0.149560117 0.750000000
+0.150537634 0.750000000
+0.151515152 0.750000000
+0.152492669 0.750000000
+0.153470186 0.750000000
+0.154447703 0.750000000
+0.155425220 0.750000000
+0.156402737 0.750000000
+0.157380254 0.750000000
+0.158357771 0.750000000
+0.159335288 0.750000000
+0.160312805 0.750000000
+0.161290323 0.750000000
+0.162267840 0.750000000
+0.163245357 0.750000000
+0.164222874 0.750000000
+0.165200391 0.750000000
+0.166177908 0.750000000
+0.167155425 0.750000000
+0.168132942 0.750000000
+0.169110459 0.750000000
+0.170087977 0.750000000
+0.171065494 0.750000000
+0.172043011 0.750000000
+0.173020528 0.750000000
+0.173998045 0.750000000
+0.174975562 0.750000000
+0.175953079 0.750000000
+0.176930596 0.750000000
+0.177908113 0.750000000
+0.178885630 0.750000000
+0.179863148 0.750000000
+0.180840665 0.750000000
+0.181818182 0.750000000
+0.182795699 0.750000000
+0.183773216 0.750000000
+0.184750733 0.750000000
+0.185728250 0.750000000
+0.186705767 0.750000000
+0.187683284 0.750000000
+0.188660802 0.750000000
+0.189638319 0.750000000
+0.190615836 0.750000000
+0.191593353 0.750000000
+0.192570870 0.750000000
+0.193548387 0.750000000
+0.194525904 0.750000000
+0.195503421 0.750000000
+0.196480938 0.750000000
+0.197458456 0.750000000
+0.198435973 0.750000000
+0.199413490 0.750000000
+0.200391007 0.750000000
+0.201368524 0.750000000
+0.202346041 0.750000000
+0.203323558 0.750000000
+0.204301075 0.750000000
+0.205278592 0.750000000
+0.206256109 0.750000000
+0.207233627 0.750000000
+0.208211144 0.750000000
+0.209188661 0.750000000
+0.210166178 0.750000000
+0.211143695 0.750000000
+0.212121212 0.750000000
+0.213098729 0.750000000
+0.214076246 0.750000000
+0.215053763 0.750000000
+0.216031281 0.750000000
+0.217008798 0.750000000
+0.217986315 0.750000000
+0.218963832 0.750000000
+0.219941349 0.750000000
+0.220918866 0.750000000
+0.221896383 0.750000000
+0.222873900 0.750000000
+0.223851417 0.750000000
+0.224828935 0.750000000
+0.225806452 0.750000000
+0.226783969 0.750000000
+0.227761486 0.750000000
+0.228739003 0.750000000
+0.229716520 0.750000000
+0.230694037 0.750000000
+0.231671554 0.750000000
+0.232649071 0.750000000
+0.233626588 0.750000000
+0.234604106 0.750000000
+0.235581623 0.750000000
+0.236559140 0.750000000
+0.237536657 0.750000000
+0.238514174 0.750000000
+0.239491691 0.750000000
+0.240469208 0.750000000
+0.241446725 0.750000000
+0.242424242 0.750000000
+0.243401760 0.750000000
+0.244379277 0.750000000
+0.245356794 0.750000000
+0.246334311 0.750000000
+0.247311828 0.750000000
+0.248289345 0.750000000
+0.249266862 0.750000000
+0.250244379 0.749633789
+0.251221896 0.748176070
+0.252199413 0.746729651
+0.253176931 0.745307268
+0.254154448 0.743901152
+0.255131965 0.742505384
+0.256109482 0.741119851
+0.257086999 0.739744439
+0.258064516 0.738388970
+0.259042033 0.737050250
+0.260019550 0.735720805
+0.260997067 0.734400539
+0.261974585 0.733089356
+0.262952102 0.731794526
+0.263929619 0.730516794
+0.264907136 0.729247388
+0.265884653 0.727986227
+0.266862170 0.726733231
+0.267839687 0.725493442
+0.268817204 0.724270974
+0.269794721 0.723055990
+0.270772239 0.721848423
+0.271749756 0.720648204
+0.272727273 0.719458438
+0.273704790 0.718286101
+0.274682307 0.717120499
+0.275659824 0.715961575
+0.276637341 0.714809270
+0.277614858 0.713665012
+0.278592375 0.712538184
+0.279569892 0.711417421
+0.280547410 0.710302674
+0.281524927 0.709193894
+0.282502444 0.708091063
+0.283479961 0.707005566
+0.284457478 0.705925531
+0.285434995 0.704850918
+0.286412512 0.703781686
+0.287390029 0.702717795
+0.288367546 0.701668621
+0.289345064 0.700625580
+0.290322581 0.699587425
+0.291300098 0.698554121
+0.292277615 0.697525635
+0.293255132 0.696509490
+0.294232649 0.695500037
+0.295210166 0.694494984
+0.296187683 0.693494303
+0.297165200 0.692497965
+0.298142717 0.691511860
+0.299120235 0.690532874
+0.300097752 0.689557847
+0.301075269 0.688586755
+0.302052786 0.687619575
+0.303030303 0.686660765
+0.304007820 0.685709376
+0.304985337 0.684761545
+0.305962854 0.683817249
+0.306940371 0.682876470
+0.307917889 0.681942420
+0.308895406 0.681015980
+0.309872923 0.680092726
+0.310850440 0.679172643
+0.311827957 0.678255714
+0.312805474 0.677344077
+0.313782991 0.676440126
+0.314760508 0.675539023
+0.315738025 0.674640752
+0.316715543 0.673745302
+0.317693060 0.672853893
+0.318670577 0.671970143
+0.319648094 0.671088924
+0.320625611 0.670210227
+0.321603128 0.669334041
+0.322580645 0.668460818
+0.323558162 0.667595126
+0.324535679 0.666731672
+0.325513196 0.665870450
+0.326490714 0.665011449
+0.327468231 0.664154662
+0.328445748 0.663304848
+0.329423265 0.662457164
+0.330400782 0.661611439
+0.331378299 0.660767667
+0.332355816 0.659925840
+0.333333333 0.659089669
+0.334310850 0.658255868
+0.335288368 0.657423770
+0.336265885 0.656593371
+0.337243402 0.655764665
+0.338220919 0.654940458
+0.339198436 0.654118746
+0.340175953 0.653298497
+0.341153470 0.652479705
+0.342130987 0.651662368
+0.343108504 0.650848521
+0.344086022 0.650037186
+0.345063539 0.649227083
+0.346041056 0.648418210
+0.347018573 0.647610563
+0.347996090 0.646805538
+0.348973607 0.646002934
+0.349951124 0.645201343
+0.350928641 0.644400763
+0.351906158 0.643601190
+0.352883675 0.642803505
+0.353861193 0.642008044
+0.354838710 0.641213384
+0.355816227 0.640419523
+0.356793744 0.639626459
+0.357771261 0.638834675
+0.358748778 0.638044814
+0.359726295 0.637255548
+0.360703812 0.636466876
+0.361681329 0.635678797
+0.362658847 0.634891512
+0.363636364 0.634105743
+0.364613881 0.633320368
+0.365591398 0.632535386
+0.366568915 0.631750798
+0.367546432 0.630966638
+0.368523949 0.630183479
+0.369501466 0.629400516
+0.370478983 0.628617749
+0.371456500 0.627835178
+0.372434018 0.627052803
+0.373411535 0.626270772
+0.374389052 0.625488759
+0.375366569 0.624706745
+0.376344086 0.623924731
+0.377321603 0.623142717
+0.378299120 0.622360434
+0.379276637 0.621577912
+0.380254154 0.620795194
+0.381231672 0.620012280
+0.382209189 0.619229171
+0.383186706 0.618445288
+0.384164223 0.617660798
+0.385141740 0.616875914
+0.386119257 0.616090638
+0.387096774 0.615304967
+0.388074291 0.614518130
+0.389051808 0.613730200
+0.390029326 0.612941676
+0.391006843 0.612152558
+0.391984360 0.611362846
+0.392961877 0.610571682
+0.393939394 0.609778818
+0.394916911 0.608985156
+0.395894428 0.608190696
+0.396871945 0.607395436
+0.397849462 0.606598545
+0.398826979 0.605799225
+0.399804497 0.604998896
+0.400782014 0.604197558
+0.401759531 0.603395208
+0.402737048 0.602591157
+0.403714565 0.601783817
+0.404692082 0.600975251
+0.405669599 0.600165455
+0.406647116 0.599354429
+0.407624633 0.598541740
+0.408602151 0.597724765
+0.409579668 0.596906338
+0.410557185 0.596086453
+0.411534702 0.595265107
+0.412512219 0.594442248
+0.413489736 0.593613964
+0.414467253 0.592783988
+0.415444770 0.591952316
+0.416422287 0.591118941
+0.417399804 0.590283858
+0.418377322 0.589442972
+0.419354839 0.588599687
+0.420332356 0.587754450
+0.421309873 0.586907257
+0.422287390 0.586058099
+0.423264907 0.585202955
+0.424242424 0.584344508
+0.425219941 0.583483842
+0.426197458 0.582620947
+0.427174976 0.581755815
+0.428152493 0.580884615
+0.429130010 0.580009054
+0.430107527 0.579130986
+0.431085044 0.578250399
+0.432062561 0.577367283
+0.433040078 0.576478121
+0.434017595 0.575583374
+0.434995112 0.574685810
+0.435972630 0.573785416
+0.436950147 0.572882178
+0.437927664 0.571973027
+0.438905181 0.571056884
+0.439882698 0.570137591
+0.440860215 0.569215132
+0.441837732 0.568289490
+0.442815249 0.567358177
+0.443792766 0.566418275
+0.444770283 0.565474860
+0.445747801 0.564527914
+0.446725318 0.563577417
+0.447702835 0.562621612
+0.448680352 0.561655405
+0.449657869 0.560685294
+0.450635386 0.559711253
+0.451612903 0.558733259
+0.452590420 0.557750445
+0.453567937 0.556755188
+0.454545455 0.555755595
+0.455522972 0.554751638
+0.456500489 0.553743287
+0.457478006 0.552730515
+0.458455523 0.551703450
+0.459433040 0.550671354
+0.460410557 0.549634415
+0.461388074 0.548592599
+0.462365591 0.547545872
+0.463343109 0.546484786
+0.464320626 0.545416893
+0.465298143 0.544343629
+0.466275660 0.543264953
+0.467253177 0.542180826
+0.468230694 0.541082374
+0.469208211 0.539975079
+0.470185728 0.538861828
+0.471163245 0.537742573
+0.472140762 0.536617267
+0.473118280 0.535477779
+0.474095797 0.534327120
+0.475073314 0.533169855
+0.476050831 0.532005928
+0.477028348 0.530835281
+0.478005865 0.529650711
+0.478983382 0.528452318
+0.479960899 0.527246594
+0.480938416 0.526033471
+0.481915934 0.524812880
+0.482893451 0.523578752
+0.483870968 0.522327784
+0.484848485 0.521068672
+0.485826002 0.519801335
+0.486803519 0.518525692
+0.487781036 0.517237031
+0.488758553 0.515928105
+0.489736070 0.514610118
+0.490713587 0.513282977
+0.491691105 0.511946585
+0.492668622 0.510597845
+0.493646139 0.509224947
+0.494623656 0.507841954
+0.495601173 0.506448755
+0.496578690 0.505045237
+0.497556207 0.503630203
+0.498533724 0.502186589
+0.499511241 0.500731707
+0.500488759 0.499268293
+0.501466276 0.497813411
+0.502443793 0.496369797
+0.503421310 0.494954763
+0.504398827 0.493551245
+0.505376344 0.492158046
+0.506353861 0.490775053
+0.507331378 0.489402155
+0.508308895 0.488053415
+0.509286413 0.486717023
+0.510263930 0.485389882
+0.511241447 0.484071895
+0.512218964 0.482762969
+0.513196481 0.481474308
+0.514173998 0.480198665
+0.515151515 0.478931328
+0.516129032 0.477672216
+0.517106549 0.476421248
+0.518084066 0.475187120
+0.519061584 0.473966529
+0.520039101 0.472753406
+0.521016618 0.471547682
+0.521994135 0.470349289
+0.522971652 0.469164719
+0.523949169 0.467994072
+0.524926686 0.466830145
+0.525904203 0.465672880
+0.526881720 0.464522221
+0.527859238 0.463382733
+0.528836755 0.462257427
+0.529814272 0.461138172
+0.530791789 0.460024921
+0.531769306 0.458917626
+0.532746823 0.457819174
+0.533724340 0.456735047
+0.534701857 0.455656371
+0.535679374 0.454583107
+0.536656891 0.453515214
+0.537634409 0.452454128
+0.538611926 0.451407401
+0.539589443 0.450365585
+0.540566960 0.449328646
+0.541544477 0.448296550
+0.542521994 0.447269485
+0.543499511 0.446256713
+0.544477028 0.445248362
+0.545454545 0.444244405
+0.546432063 0.443244812
+0.547409580 0.442249555
+0.548387097 0.441266741
+0.549364614 0.440288747
+0.550342131 0.439314706
+0.551319648 0.438344595
+0.552297165 0.437378388
+0.553274682 0.436422583
+0.554252199 0.435472086
+0.555229717 0.434525140
+0.556207234 0.433581725
+0.557184751 0.432641823
+0.558162268 0.431710510
+0.559139785 0.430784868
+0.560117302 0.429862409
+0.561094819 0.428943116
+0.562072336 0.428026973
+0.563049853 0.427117822
+0.564027370 0.426214584
+0.565004888 0.425314190
+0.565982405 0.424416626
+0.566959922 0.423521879
+0.567937439 0.422632717
+0.568914956 0.421749601
+0.569892473 0.420869014
+0.570869990 0.419990946
+0.571847507 0.419115385
+0.572825024 0.418244185
+0.573802542 0.417379053
+0.574780059 0.416516158
+0.575757576 0.415655492
+0.576735093 0.414797045
+0.577712610 0.413941901
+0.578690127 0.413092743
+0.579667644 0.412245550
+0.580645161 0.411400313
+0.581622678 0.410557028
+0.582600196 0.409716142
+0.583577713 0.408881059
+0.584555230 0.408047684
+0.585532747 0.407216012
+0.586510264 0.406386036
+0.587487781 0.405557752
+0.588465298 0.404734893
+0.589442815 0.403913547
+0.590420332 0.403093662
+0.591397849 0.402275235
+0.592375367 0.401458260
+0.593352884 0.400645571
+0.594330401 0.399834545
+0.595307918 0.399024749
+0.596285435 0.398216183
+0.597262952 0.397408843
+0.598240469 0.396604792
+0.599217986 0.395802442
+0.600195503 0.395001104
+0.601173021 0.394200775
+0.602150538 0.393401455
+0.603128055 0.392604564
+0.604105572 0.391809304
+0.605083089 0.391014844
+0.606060606 0.390221182
+0.607038123 0.389428318
+0.608015640 0.388637154
+0.608993157 0.387847442
+0.609970674 0.387058324
+0.610948192 0.386269800
+0.611925709 0.385481870
+0.612903226 0.384695033
+0.613880743 0.383909362
+0.614858260 0.383124086
+0.615835777 0.382339202
+0.616813294 0.381554712
+0.617790811 0.380770829
+0.618768328 0.379987720
+0.619745846 0.379204806
+0.620723363 0.378422088
+0.621700880 0.377639566
+0.622678397 0.376857283
+0.623655914 0.376075269
+0.624633431 0.375293255
+0.625610948 0.374511241
+0.626588465 0.373729228
+0.627565982 0.372947197
+0.628543500 0.372164822
+0.629521017 0.371382251
+0.630498534 0.370599484
+0.631476051 0.369816521
+0.632453568 0.369033362
+0.633431085 0.368249202
+0.634408602 0.367464614
+0.635386119 0.366679632
+0.636363636 0.365894257
+0.637341153 0.365108488
+0.638318671 0.364321203
+0.639296188 0.363533124
+0.640273705 0.362744452
+0.641251222 0.361955186
+0.642228739 0.361165325
+0.643206256 0.360373541
+0.644183773 0.359580477
+0.645161290 0.358786616
+0.646138807 0.357991956
+0.647116325 0.357196495
+0.648093842 0.356398810
+0.649071359 0.355599237
+0.650048876 0.354798657
+0.651026393 0.353997066
+0.652003910 0.353194462
+0.652981427 0.352389437
+0.653958944 0.351581790
+0.654936461 0.350772917
+0.655913978 0.349962814
+0.656891496 0.349151479
+0.657869013 0.348337632
+0.658846530 0.347520295
+0.659824047 0.346701503
+0.660801564 0.345881254
+0.661779081 0.345059542
+0.662756598 0.344235335
+0.663734115 0.343406629
+0.664711632 0.342576230
+0.665689150 0.341744132
+0.666666667 0.340910331
+0.667644184 0.340074160
+0.668621701 0.339232333
+0.669599218 0.338388561
+0.670576735 0.337542836
+0.671554252 0.336695152
+0.672531769 0.335845338
+0.673509286 0.334988551
+0.674486804 0.334129550
+0.675464321 0.333268328
+0.676441838 0.332404874
+0.677419355 0.331539182
+0.678396872 0.330665959
+0.679374389 0.329789773
+0.680351906 0.328911076
+0.681329423 0.328029857
+0.682306940 0.327146107
+0.683284457 0.326254698
+0.684261975 0.325359248
+0.685239492 0.324460977
+0.686217009 0.323559874
+0.687194526 0.322655923
+0.688172043 0.321744286
+0.689149560 0.320827357
+0.690127077 0.319907274
+0.691104594 0.318984020
+0.692082111 0.318057580
+0.693059629 0.317123530
+0.694037146 0.316182751
+0.695014663 0.315238455
+0.695992180 0.314290624
+0.696969697 0.313339235
+0.697947214 0.312380425
+0.698924731 0.311413245
+0.699902248 0.310442153
+0.700879765 0.309467126
+0.701857283 0.308488140
+0.702834800 0.307502035
+0.703812317 0.306505697
+0.704789834 0.305505016
+0.705767351 0.304499963
+0.706744868 0.303490510
+0.707722385 0.302474365
+0.708699902 0.301445879
+0.709677419 0.300412575
+0.710654936 0.299374420
+0.711632454 0.298331379
+0.712609971 0.297282205
+0.713587488 0.296218314
+0.714565005 0.295149082
+0.715542522 0.294074469
+0.716520039 0.292994434
+0.717497556 0.291908937
+0.718475073 0.290806106
+0.719452590 0.289697326
+0.720430108 0.288582579
+0.721407625 0.287461816
+0.722385142 0.286334988
+0.723362659 0.285190730
+0.724340176 0.284038425
+0.725317693 0.282879501
+0.726295210 0.281713899
+0.727272727 0.280541562
+0.728250244 0.279351796
+0.729227761 0.278151577
+0.730205279 0.276944010
+0.731182796 0.275729026
+0.732160313 0.274506558
+0.733137830 0.273266769
+0.734115347 0.272013773
+0.735092864 0.270752612
+0.736070381 0.269483206
+0.737047898 0.268205474
+0.738025415 0.266910644
+0.739002933 0.265599461
+0.739980450 0.264279195
+0.740957967 0.262949750
+0.741935484 0.261611030
+0.742913001 0.260255561
+0.743890518 0.258880149
+0.744868035 0.257494616
+0.745845552 0.256098848
+0.746823069 0.254692732
+0.747800587 0.253270349
+0.748778104 0.251823930
+0.749755621 0.250366211
+0.750733138 0.250000000
+0.751710655 0.250000000
+0.752688172 0.250000000
+0.753665689 0.250000000
+0.754643206 0.250000000
+0.755620723 0.250000000
+0.756598240 0.250000000
+0.757575758 0.250000000
+0.758553275 0.250000000
+0.759530792 0.250000000
+0.760508309 0.250000000
+0.761485826 0.250000000
+0.762463343 0.250000000
+0.763440860 0.250000000
+0.764418377 0.250000000
+0.765395894 0.250000000
+0.766373412 0.250000000
+0.767350929 0.250000000
+0.768328446 0.250000000
+0.769305963 0.250000000
+0.770283480 0.250000000
+0.771260997 0.250000000
+0.772238514 0.250000000
+0.773216031 0.250000000
+0.774193548 0.250000000
+0.775171065 0.250000000
+0.776148583 0.250000000
+0.777126100 0.250000000
+0.778103617 0.250000000
+0.779081134 0.250000000
+0.780058651 0.250000000
+0.781036168 0.250000000
+0.782013685 0.250000000
+0.782991202 0.250000000
+0.783968719 0.250000000
+0.784946237 0.250000000
+0.785923754 0.250000000
+0.786901271 0.250000000
+0.787878788 0.250000000
+0.788856305 0.250000000
+0.789833822 0.250000000
+0.790811339 0.250000000
+0.791788856 0.250000000
+0.792766373 0.250000000
+0.793743891 0.250000000
+0.794721408 0.250000000
+0.795698925 0.250000000
+0.796676442 0.250000000
+0.797653959 0.250000000
+0.798631476 0.250000000
+0.799608993 0.250000000
+0.800586510 0.250000000
+0.801564027 0.250000000
+0.802541544 0.250000000
+0.803519062 0.250000000
+0.804496579 0.250000000
+0.805474096 0.250000000
+0.806451613 0.250000000
+0.807429130 0.250000000
+0.808406647 0.250000000
+0.809384164 0.250000000
+0.810361681 0.250000000
+0.811339198 0.250000000
+0.812316716 0.250000000
+0.813294233 0.250000000
+0.814271750 0.250000000
+0.815249267 0.250000000
+0.816226784 0.250000000
+0.817204301 0.250000000
+0.818181818 0.250000000
+0.819159335 0.250000000
+0.820136852 0.250000000
+0.821114370 0.250000000
+0.822091887 0.250000000
+0.823069404 0.250000000
+0.824046921 0.250000000
+0.825024438 0.250000000
+0.826001955 0.250000000
+0.826979472 0.250000000
+0.827956989 0.250000000
+0.828934506 0.250000000
+0.829912023 0.250000000
+0.830889541 0.250000000
+0.831867058 0.250000000
+0.832844575 0.250000000
+0.833822092 0.250000000
+0.834799609 0.250000000
+0.835777126 0.250000000
+0.836754643 0.250000000
+0.837732160 0.250000000
+0.838709677 0.250000000
+0.839687195 0.250000000
+0.840664712 0.250000000
+0.841642229 0.250000000
+0.842619746 0.250000000
+0.843597263 0.250000000
+0.844574780 0.250000000
+0.845552297 0.250000000
+0.846529814 0.250000000
+0.847507331 0.250000000
+0.848484848 0.250000000
+0.849462366 0.250000000
+0.850439883 0.250000000
+0.851417400 0.250000000
+0.852394917 0.250000000
+0.853372434 0.250000000
+0.854349951 0.250000000
+0.855327468 0.250000000
+0.856304985 0.250000000
+0.857282502 0.250000000
+0.858260020 0.250000000
+0.859237537 0.250000000
+0.860215054 0.250000000
+0.861192571 0.250000000
+0.862170088 0.250000000
+0.863147605 0.250000000
+0.864125122 0.250000000
+0.865102639 0.250000000
+0.866080156 0.250000000
+0.867057674 0.250000000
+0.868035191 0.250000000
+0.869012708 0.250000000
+0.869990225 0.250000000
+0.870967742 0.250000000
+0.871945259 0.250000000
+0.872922776 0.250000000
+0.873900293 0.250000000
+0.874877810 0.250000000
+0.875855327 0.250000000
+0.876832845 0.250000000
+0.877810362 0.250000000
+0.878787879 0.250000000
+0.879765396 0.250000000
+0.880742913 0.250000000
+0.881720430 0.250000000
+0.882697947 0.250000000
+0.883675464 0.250000000
+0.884652981 0.250000000
+0.885630499 0.250000000
+0.886608016 0.250000000
+0.887585533 0.250000000
+0.888563050 0.250000000
+0.889540567 0.250000000
+0.890518084 0.250000000
+0.891495601 0.250000000
+0.892473118 0.250000000
+0.893450635 0.250000000
+0.894428152 0.250000000
+0.895405670 0.250000000
+0.896383187 0.250000000
+0.897360704 0.250000000
+0.898338221 0.250000000
+0.899315738 0.250000000
+0.900293255 0.250000000
+0.901270772 0.250000000
+0.902248289 0.250000000
+0.903225806 0.250000000
+0.904203324 0.250000000
+0.905180841 0.250000000
+0.906158358 0.250000000
+0.907135875 0.250000000
+0.908113392 0.250000000
+0.909090909 0.250000000
+0.910068426 0.250000000
+0.911045943 0.250000000
+0.912023460 0.250000000
+0.913000978 0.250000000
+0.913978495 0.250000000
+0.914956012 0.250000000
+0.915933529 0.250000000
+0.916911046 0.250000000
+0.917888563 0.250000000
+0.918866080 0.250000000
+0.919843597 0.250000000
+0.920821114 0.250000000
+0.921798631 0.250000000
+0.922776149 0.250000000
+0.923753666 0.250000000
+0.924731183 0.250000000
+0.925708700 0.250000000
+0.926686217 0.250000000
+0.927663734 0.250000000
+0.928641251 0.250000000
+0.929618768 0.250000000
+0.930596285 0.250000000
+0.931573803 0.250000000
+0.932551320 0.250000000
+0.933528837 0.250000000
+0.934506354 0.250000000
+0.935483871 0.250000000
+0.936461388 0.250000000
+0.937438905 0.250000000
+0.938416422 0.250000000
+0.939393939 0.250000000
+0.940371457 0.250000000
+0.941348974 0.250000000
+0.942326491 0.250000000
+0.943304008 0.250000000
+0.944281525 0.250000000
+0.945259042 0.250000000
+0.946236559 0.250000000
+0.947214076 0.250000000
+0.948191593 0.250000000
+0.949169110 0.250000000
+0.950146628 0.250000000
+0.951124145 0.250000000
+0.952101662 0.250000000
+0.953079179 0.250000000
+0.954056696 0.250000000
+0.955034213 0.250000000
+0.956011730 0.250000000
+0.956989247 0.250000000
+0.957966764 0.250000000
+0.958944282 0.250000000
+0.959921799 0.250000000
+0.960899316 0.250000000
+0.961876833 0.250000000
+0.962854350 0.250000000
+0.963831867 0.250000000
+0.964809384 0.250000000
+0.965786901 0.250000000
+0.966764418 0.250000000
+0.967741935 0.250000000
+0.968719453 0.250000000
+0.969696970 0.250000000
+0.970674487 0.250000000
+0.971652004 0.250000000
+0.972629521 0.250000000
+0.973607038 0.250000000
+0.974584555 0.250000000
+0.975562072 0.250000000
+0.976539589 0.250000000
+0.977517107 0.250000000
+0.978494624 0.250000000
+0.979472141 0.250000000
+0.980449658 0.250000000
+0.981427175 0.250000000
+0.982404692 0.250000000
+0.983382209 0.250000000
+0.984359726 0.250000000
+0.985337243 0.250000000
+0.986314761 0.250000000
+0.987292278 0.250000000
+0.988269795 0.250000000
+0.989247312 0.250000000
+0.990224829 0.250000000
+0.991202346 0.250000000
+0.992179863 0.250000000
+0.993157380 0.250000000
+0.994134897 0.250000000
+0.995112414 0.250000000
+0.996089932 0.250000000
+0.997067449 0.250000000
+0.998044966 0.250000000
+0.999022483 0.250000000
+1.000000000 nan
diff --git a/examples/mamdani/SimpleDimmer.fll b/examples/mamdani/SimpleDimmer.fll
new file mode 100644
index 0000000..896bebf
--- /dev/null
+++ b/examples/mamdani/SimpleDimmer.fll
@@ -0,0 +1,28 @@
+Engine: SimpleDimmer
+InputVariable: Ambient
+ enabled: true
+ range: 0.000 1.000
+ lock-range: false
+ term: DARK Triangle 0.000 0.250 0.500
+ term: MEDIUM Triangle 0.250 0.500 0.750
+ term: BRIGHT Triangle 0.500 0.750 1.000
+OutputVariable: Power
+ enabled: true
+ range: 0.000 1.000
+ lock-range: false
+ aggregation: Maximum
+ defuzzifier: Centroid 200
+ default: nan
+ lock-previous: false
+ term: LOW Triangle 0.000 0.250 0.500
+ term: MEDIUM Triangle 0.250 0.500 0.750
+ term: HIGH Triangle 0.500 0.750 1.000
+RuleBlock:
+ enabled: true
+ conjunction: none
+ disjunction: none
+ implication: Minimum
+ activation: General
+ rule: if Ambient is DARK then Power is HIGH
+ rule: if Ambient is MEDIUM then Power is MEDIUM
+ rule: if Ambient is BRIGHT then Power is LOW \ No newline at end of file
diff --git a/examples/mamdani/SimpleDimmer.java b/examples/mamdani/SimpleDimmer.java
new file mode 100644
index 0000000..d7b127d
--- /dev/null
+++ b/examples/mamdani/SimpleDimmer.java
@@ -0,0 +1,63 @@
+import com.fuzzylite.*;
+import com.fuzzylite.activation.*
+import com.fuzzylite.defuzzifier.*;
+import com.fuzzylite.factory.*;
+import com.fuzzylite.hedge.*;
+import com.fuzzylite.imex.*;
+import com.fuzzylite.norm.*;
+import com.fuzzylite.norm.s.*;
+import com.fuzzylite.norm.t.*;
+import com.fuzzylite.rule.*;
+import com.fuzzylite.term.*;
+import com.fuzzylite.variable.*;
+
+public class SimpleDimmer{
+public static void main(String[] args){
+//Code automatically generated with fuzzylite 6.0.
+
+Engine engine = new Engine();
+engine.setName("SimpleDimmer");
+engine.setDescription("");
+
+InputVariable Ambient = new InputVariable();
+Ambient.setName("Ambient");
+Ambient.setDescription("");
+Ambient.setEnabled(true);
+Ambient.setRange(0.000, 1.000);
+Ambient.setLockValueInRange(false);
+Ambient.addTerm(new Triangle("DARK", 0.000, 0.250, 0.500));
+Ambient.addTerm(new Triangle("MEDIUM", 0.250, 0.500, 0.750));
+Ambient.addTerm(new Triangle("BRIGHT", 0.500, 0.750, 1.000));
+engine.addInputVariable(Ambient);
+
+OutputVariable Power = new OutputVariable();
+Power.setName("Power");
+Power.setDescription("");
+Power.setEnabled(true);
+Power.setRange(0.000, 1.000);
+Power.setLockValueInRange(false);
+Power.setAggregation(new Maximum());
+Power.setDefuzzifier(new Centroid(200));
+Power.setDefaultValue(Double.NaN);
+Power.setLockPreviousValue(false);
+Power.addTerm(new Triangle("LOW", 0.000, 0.250, 0.500));
+Power.addTerm(new Triangle("MEDIUM", 0.250, 0.500, 0.750));
+Power.addTerm(new Triangle("HIGH", 0.500, 0.750, 1.000));
+engine.addOutputVariable(Power);
+
+RuleBlock ruleBlock = new RuleBlock();
+ruleBlock.setName("");
+ruleBlock.setDescription("");
+ruleBlock.setEnabled(true);
+ruleBlock.setConjunction(null);
+ruleBlock.setDisjunction(null);
+ruleBlock.setImplication(new Minimum());
+ruleBlock.setActivation(new General());
+ruleBlock.addRule(Rule.parse("if Ambient is DARK then Power is HIGH", engine));
+ruleBlock.addRule(Rule.parse("if Ambient is MEDIUM then Power is MEDIUM", engine));
+ruleBlock.addRule(Rule.parse("if Ambient is BRIGHT then Power is LOW", engine));
+engine.addRuleBlock(ruleBlock);
+
+
+}
+}
diff --git a/examples/mamdani/SimpleDimmer.pdf b/examples/mamdani/SimpleDimmer.pdf
new file mode 100644
index 0000000..82ef82f
--- /dev/null
+++ b/examples/mamdani/SimpleDimmer.pdf
Binary files differ
diff --git a/examples/mamdani/SimpleDimmerChained.R b/examples/mamdani/SimpleDimmerChained.R
new file mode 100644
index 0000000..323aa7d
--- /dev/null
+++ b/examples/mamdani/SimpleDimmerChained.R
@@ -0,0 +1,85 @@
+#Code automatically generated with fuzzylite 6.0.
+
+library(ggplot2);
+
+engine.name = "SimpleDimmerChained"
+engine.fll = "Engine: SimpleDimmerChained
+InputVariable: Ambient
+ enabled: true
+ range: 0.000 1.000
+ lock-range: false
+ term: DARK Triangle 0.000 0.250 0.500
+ term: MEDIUM Triangle 0.250 0.500 0.750
+ term: BRIGHT Triangle 0.500 0.750 1.000
+OutputVariable: Power
+ enabled: true
+ range: 0.000 1.000
+ lock-range: false
+ aggregation: Maximum
+ defuzzifier: Centroid 200
+ default: nan
+ lock-previous: false
+ term: LOW Triangle 0.000 0.250 0.500
+ term: MEDIUM Triangle 0.250 0.500 0.750
+ term: HIGH Triangle 0.500 0.750 1.000
+OutputVariable: InversePower
+ enabled: true
+ range: 0.000 1.000
+ lock-range: false
+ aggregation: Maximum
+ defuzzifier: Centroid 500
+ default: nan
+ lock-previous: false
+ term: LOW Cosine 0.200 0.500
+ term: MEDIUM Cosine 0.500 0.500
+ term: HIGH Cosine 0.800 0.500
+RuleBlock:
+ enabled: true
+ conjunction: none
+ disjunction: none
+ implication: Minimum
+ activation: General
+ rule: if Ambient is DARK then Power is HIGH
+ rule: if Ambient is MEDIUM then Power is MEDIUM
+ rule: if Ambient is BRIGHT then Power is LOW
+ rule: if Power is LOW then InversePower is HIGH
+ rule: if Power is MEDIUM then InversePower is MEDIUM
+ rule: if Power is HIGH then InversePower is LOW"
+
+engine.fldFile = "SimpleDimmerChained.fld"
+if (require(data.table)) {
+ engine.df = data.table::fread(engine.fldFile, sep="auto", header="auto")
+} else {
+ engine.df = read.table(engine.fldFile, header=TRUE)
+}
+
+engine.plot.i1_o1 = ggplot(engine.df, aes(Ambient, Power)) +
+ geom_line(aes(color=Power), size=3, lineend="round", linejoin="mitre") +
+ scale_color_gradient(low="yellow", high="red") +
+ ggtitle("Ambient vs Power")
+
+engine.plot.o1_i1 = ggplot(engine.df, aes(Ambient, Power)) +
+ geom_line(aes(color=Power), size=3, lineend="round", linejoin="mitre") +
+ scale_color_gradient(low="yellow", high="red") +
+ coord_flip() +
+ ggtitle("Power vs Ambient")
+
+engine.plot.i1_o2 = ggplot(engine.df, aes(Ambient, InversePower)) +
+ geom_line(aes(color=InversePower), size=3, lineend="round", linejoin="mitre") +
+ scale_color_gradient(low="yellow", high="red") +
+ ggtitle("Ambient vs InversePower")
+
+engine.plot.o2_i1 = ggplot(engine.df, aes(Ambient, InversePower)) +
+ geom_line(aes(color=InversePower), size=3, lineend="round", linejoin="mitre") +
+ scale_color_gradient(low="yellow", high="red") +
+ coord_flip() +
+ ggtitle("InversePower vs Ambient")
+
+if (require(gridExtra)) {
+ engine.plots = arrangeGrob(engine.plot.i1_o1, engine.plot.o1_i1, engine.plot.i1_o2, engine.plot.o2_i1, ncol=2, top=engine.name)
+ ggsave(paste0(engine.name, ".pdf"), engine.plots)
+ if (require(grid)) {
+ grid.newpage()
+ grid.draw(engine.plots)
+ }
+}
diff --git a/examples/mamdani/SimpleDimmerChained.cpp b/examples/mamdani/SimpleDimmerChained.cpp
new file mode 100644
index 0000000..bc59c8e
--- /dev/null
+++ b/examples/mamdani/SimpleDimmerChained.cpp
@@ -0,0 +1,70 @@
+#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("SimpleDimmerChained");
+engine->setDescription("");
+
+InputVariable* Ambient = new InputVariable;
+Ambient->setName("Ambient");
+Ambient->setDescription("");
+Ambient->setEnabled(true);
+Ambient->setRange(0.000, 1.000);
+Ambient->setLockValueInRange(false);
+Ambient->addTerm(new Triangle("DARK", 0.000, 0.250, 0.500));
+Ambient->addTerm(new Triangle("MEDIUM", 0.250, 0.500, 0.750));
+Ambient->addTerm(new Triangle("BRIGHT", 0.500, 0.750, 1.000));
+engine->addInputVariable(Ambient);
+
+OutputVariable* Power = new OutputVariable;
+Power->setName("Power");
+Power->setDescription("");
+Power->setEnabled(true);
+Power->setRange(0.000, 1.000);
+Power->setLockValueInRange(false);
+Power->setAggregation(new Maximum);
+Power->setDefuzzifier(new Centroid(200));
+Power->setDefaultValue(fl::nan);
+Power->setLockPreviousValue(false);
+Power->addTerm(new Triangle("LOW", 0.000, 0.250, 0.500));
+Power->addTerm(new Triangle("MEDIUM", 0.250, 0.500, 0.750));
+Power->addTerm(new Triangle("HIGH", 0.500, 0.750, 1.000));
+engine->addOutputVariable(Power);
+
+OutputVariable* InversePower = new OutputVariable;
+InversePower->setName("InversePower");
+InversePower->setDescription("");
+InversePower->setEnabled(true);
+InversePower->setRange(0.000, 1.000);
+InversePower->setLockValueInRange(false);
+InversePower->setAggregation(new Maximum);
+InversePower->setDefuzzifier(new Centroid(500));
+InversePower->setDefaultValue(fl::nan);
+InversePower->setLockPreviousValue(false);
+InversePower->addTerm(new Cosine("LOW", 0.200, 0.500));
+InversePower->addTerm(new Cosine("MEDIUM", 0.500, 0.500));
+InversePower->addTerm(new Cosine("HIGH", 0.800, 0.500));
+engine->addOutputVariable(InversePower);
+
+RuleBlock* ruleBlock = new RuleBlock;
+ruleBlock->setName("");
+ruleBlock->setDescription("");
+ruleBlock->setEnabled(true);
+ruleBlock->setConjunction(fl::null);
+ruleBlock->setDisjunction(fl::null);
+ruleBlock->setImplication(new Minimum);
+ruleBlock->setActivation(new General);
+ruleBlock->addRule(Rule::parse("if Ambient is DARK then Power is HIGH", engine));
+ruleBlock->addRule(Rule::parse("if Ambient is MEDIUM then Power is MEDIUM", engine));
+ruleBlock->addRule(Rule::parse("if Ambient is BRIGHT then Power is LOW", engine));
+ruleBlock->addRule(Rule::parse("if Power is LOW then InversePower is HIGH", engine));
+ruleBlock->addRule(Rule::parse("if Power is MEDIUM then InversePower is MEDIUM", engine));
+ruleBlock->addRule(Rule::parse("if Power is HIGH then InversePower is LOW", engine));
+engine->addRuleBlock(ruleBlock);
+
+
+}
diff --git a/examples/mamdani/SimpleDimmerChained.fcl b/examples/mamdani/SimpleDimmerChained.fcl
new file mode 100644
index 0000000..29bb4ea
--- /dev/null
+++ b/examples/mamdani/SimpleDimmerChained.fcl
@@ -0,0 +1,51 @@
+//Code automatically generated with fuzzylite 6.0.
+
+FUNCTION_BLOCK SimpleDimmerChained
+
+VAR_INPUT
+ Ambient: REAL;
+END_VAR
+
+VAR_OUTPUT
+ Power: REAL;
+ InversePower: REAL;
+END_VAR
+
+FUZZIFY Ambient
+ RANGE := (0.000 .. 1.000);
+ TERM DARK := Triangle 0.000 0.250 0.500;
+ TERM MEDIUM := Triangle 0.250 0.500 0.750;
+ TERM BRIGHT := Triangle 0.500 0.750 1.000;
+END_FUZZIFY
+
+DEFUZZIFY Power
+ RANGE := (0.000 .. 1.000);
+ TERM LOW := Triangle 0.000 0.250 0.500;
+ TERM MEDIUM := Triangle 0.250 0.500 0.750;
+ TERM HIGH := Triangle 0.500 0.750 1.000;
+ METHOD : COG;
+ ACCU : MAX;
+ DEFAULT := nan;
+END_DEFUZZIFY
+
+DEFUZZIFY InversePower
+ RANGE := (0.000 .. 1.000);
+ TERM LOW := Cosine 0.200 0.500;
+ TERM MEDIUM := Cosine 0.500 0.500;
+ TERM HIGH := Cosine 0.800 0.500;
+ METHOD : COG;
+ ACCU : MAX;
+ DEFAULT := nan;
+END_DEFUZZIFY
+
+RULEBLOCK
+ ACT : MIN;
+ RULE 1 : if Ambient is DARK then Power is HIGH
+ RULE 2 : if Ambient is MEDIUM then Power is MEDIUM
+ RULE 3 : if Ambient is BRIGHT then Power is LOW
+ RULE 4 : if Power is LOW then InversePower is HIGH
+ RULE 5 : if Power is MEDIUM then InversePower is MEDIUM
+ RULE 6 : if Power is HIGH then InversePower is LOW
+END_RULEBLOCK
+
+END_FUNCTION_BLOCK
diff --git a/examples/mamdani/SimpleDimmerChained.fis b/examples/mamdani/SimpleDimmerChained.fis
new file mode 100644
index 0000000..c2fc642
--- /dev/null
+++ b/examples/mamdani/SimpleDimmerChained.fis
@@ -0,0 +1,46 @@
+#Code automatically generated with fuzzylite 6.0.
+
+[System]
+Name='SimpleDimmerChained'
+Type='mamdani'
+Version=6.0
+NumInputs=1
+NumOutputs=2
+NumRules=6
+AndMethod='min'
+OrMethod='max'
+ImpMethod='min'
+AggMethod='max'
+DefuzzMethod='centroid'
+
+[Input1]
+Name='Ambient'
+Range=[0.000 1.000]
+NumMFs=3
+MF1='DARK':'trimf',[0.000 0.250 0.500]
+MF2='MEDIUM':'trimf',[0.250 0.500 0.750]
+MF3='BRIGHT':'trimf',[0.500 0.750 1.000]
+
+[Output1]
+Name='Power'
+Range=[0.000 1.000]
+NumMFs=3
+MF1='LOW':'trimf',[0.000 0.250 0.500]
+MF2='MEDIUM':'trimf',[0.250 0.500 0.750]
+MF3='HIGH':'trimf',[0.500 0.750 1.000]
+
+[Output2]
+Name='InversePower'
+Range=[0.000 1.000]
+NumMFs=3
+MF1='LOW':'cosinemf',[0.200 0.500]
+MF2='MEDIUM':'cosinemf',[0.500 0.500]
+MF3='HIGH':'cosinemf',[0.800 0.500]
+
+[Rules]
+1.000 , 3.000 0.000 (1.000) : 1
+2.000 , 2.000 0.000 (1.000) : 1
+3.000 , 1.000 0.000 (1.000) : 1
+0.000 , 0.000 3.000 (1.000) : 1
+0.000 , 0.000 2.000 (1.000) : 1
+0.000 , 0.000 1.000 (1.000) : 1
diff --git a/examples/mamdani/SimpleDimmerChained.fld b/examples/mamdani/SimpleDimmerChained.fld
new file mode 100644
index 0000000..843c017
--- /dev/null
+++ b/examples/mamdani/SimpleDimmerChained.fld
@@ -0,0 +1,1025 @@
+Ambient Power InversePower
+0.000000000 nan nan
+0.000977517 0.750000000 0.221671502
+0.001955034 0.750000000 0.220306607
+0.002932551 0.750000000 0.219272108
+0.003910068 0.750000000 0.218372593
+0.004887586 0.750000000 0.217595038
+0.005865103 0.750000000 0.216891736
+0.006842620 0.750000000 0.216242049
+0.007820137 0.750000000 0.215635499
+0.008797654 0.750000000 0.215066121
+0.009775171 0.750000000 0.214530188
+0.010752688 0.750000000 0.214025192
+0.011730205 0.750000000 0.213535928
+0.012707722 0.750000000 0.213059653
+0.013685239 0.750000000 0.212609497
+0.014662757 0.750000000 0.212181500
+0.015640274 0.750000000 0.211749797
+0.016617791 0.750000000 0.211342499
+0.017595308 0.750000000 0.210947791
+0.018572825 0.750000000 0.210554977
+0.019550342 0.750000000 0.210185583
+0.020527859 0.750000000 0.209810047
+0.021505376 0.750000000 0.209453273
+0.022482893 0.750000000 0.209099710
+0.023460411 0.750000000 0.208754784
+0.024437928 0.750000000 0.208418460
+0.025415445 0.750000000 0.208108896
+0.026392962 0.750000000 0.207822337
+0.027370479 0.750000000 0.207557090
+0.028347996 0.750000000 0.207310043
+0.029325513 0.750000000 0.207080132
+0.030303030 0.750000000 0.206864987
+0.031280547 0.750000000 0.206663695
+0.032258065 0.750000000 0.206474685
+0.033235582 0.750000000 0.206296887
+0.034213099 0.750000000 0.206129563
+0.035190616 0.750000000 0.205971282
+0.036168133 0.750000000 0.205822154
+0.037145650 0.750000000 0.205680293
+0.038123167 0.750000000 0.205546551
+0.039100684 0.750000000 0.205418994
+0.040078201 0.750000000 0.205298019
+0.041055718 0.750000000 0.205182743
+0.042033236 0.750000000 0.205072718
+0.043010753 0.750000000 0.204968065
+0.043988270 0.750000000 0.204867643
+0.044965787 0.750000000 0.204772102
+0.045943304 0.750000000 0.204680372
+0.046920821 0.750000000 0.204592478
+0.047898338 0.750000000 0.204508389
+0.048875855 0.750000000 0.204427324
+0.049853372 0.750000000 0.204349869
+0.050830890 0.750000000 0.204275190
+0.051808407 0.750000000 0.204203265
+0.052785924 0.750000000 0.204134275
+0.053763441 0.750000000 0.204067513
+0.054740958 0.750000000 0.204003359
+0.055718475 0.750000000 0.203941436
+0.056695992 0.750000000 0.203881398
+0.057673509 0.750000000 0.203823826
+0.058651026 0.750000000 0.203767941
+0.059628543 0.750000000 0.203713842
+0.060606061 0.750000000 0.203661714
+0.061583578 0.750000000 0.203611030
+0.062561095 0.750000000 0.203562034
+0.063538612 0.750000000 0.203514617
+0.064516129 0.750000000 0.203468446
+0.065493646 0.750000000 0.203423862
+0.066471163 0.750000000 0.203380551
+0.067448680 0.750000000 0.203338322
+0.068426197 0.750000000 0.203297578
+0.069403715 0.750000000 0.203257869
+0.070381232 0.750000000 0.203219115
+0.071358749 0.750000000 0.203181723
+0.072336266 0.750000000 0.203145191
+0.073313783 0.750000000 0.203109538
+0.074291300 0.750000000 0.203075066
+0.075268817 0.750000000 0.203041351
+0.076246334 0.750000000 0.203008438
+0.077223851 0.750000000 0.202976564
+0.078201369 0.750000000 0.202945359
+0.079178886 0.750000000 0.202914878
+0.080156403 0.750000000 0.202885326
+0.081133920 0.750000000 0.202856368
+0.082111437 0.750000000 0.202828056
+0.083088954 0.750000000 0.202800588
+0.084066471 0.750000000 0.202773648
+0.085043988 0.750000000 0.202747278
+0.086021505 0.750000000 0.202721688
+0.086999022 0.750000000 0.202696569
+0.087976540 0.750000000 0.202671946
+0.088954057 0.750000000 0.202648053
+0.089931574 0.750000000 0.202624584
+0.090909091 0.750000000 0.202601536
+0.091886608 0.750000000 0.202579184
+0.092864125 0.750000000 0.202557213
+0.093841642 0.750000000 0.202535613
+0.094819159 0.750000000 0.202514642
+0.095796676 0.750000000 0.202494036
+0.096774194 0.750000000 0.202473765
+0.097751711 0.750000000 0.202454042
+0.098729228 0.750000000 0.202434684
+0.099706745 0.750000000 0.202415629
+0.100684262 0.750000000 0.202397043
+0.101661779 0.750000000 0.202378829
+0.102639296 0.750000000 0.202360889
+0.103616813 0.750000000 0.202343345
+0.104594330 0.750000000 0.202326181
+0.105571848 0.750000000 0.202309267
+0.106549365 0.750000000 0.202292677
+0.107526882 0.750000000 0.202276482
+0.108504399 0.750000000 0.202260514
+0.109481916 0.750000000 0.202244803
+0.110459433 0.750000000 0.202229501
+0.111436950 0.750000000 0.202214406
+0.112414467 0.750000000 0.202199515
+0.113391984 0.750000000 0.202185031
+0.114369501 0.750000000 0.202170746
+0.115347019 0.750000000 0.202156646
+0.116324536 0.750000000 0.202142887
+0.117302053 0.750000000 0.202129352
+0.118279570 0.750000000 0.202115988
+0.119257087 0.750000000 0.202102901
+0.120234604 0.750000000 0.202090065
+0.121212121 0.750000000 0.202077384
+0.122189638 0.750000000 0.202064922
+0.123167155 0.750000000 0.202052737
+0.124144673 0.750000000 0.202040694
+0.125122190 0.750000000 0.202028815
+0.126099707 0.750000000 0.202017236
+0.127077224 0.750000000 0.202005788
+0.128054741 0.750000000 0.201994470
+0.129032258 0.750000000 0.201983442
+0.130009775 0.750000000 0.201972551
+0.130987292 0.750000000 0.201961779
+0.131964809 0.750000000 0.201951246
+0.132942326 0.750000000 0.201940877
+0.133919844 0.750000000 0.201930618
+0.134897361 0.750000000 0.201920549
+0.135874878 0.750000000 0.201910669
+0.136852395 0.750000000 0.201900891
+0.137829912 0.750000000 0.201891259
+0.138807429 0.750000000 0.201881839
+0.139784946 0.750000000 0.201872513
+0.140762463 0.750000000 0.201863294
+0.141739980 0.750000000 0.201854307
+0.142717498 0.750000000 0.201845406
+0.143695015 0.750000000 0.201836590
+0.144672532 0.750000000 0.201827998
+0.145650049 0.750000000 0.201819498
+0.146627566 0.750000000 0.201811078
+0.147605083 0.750000000 0.201802845
+0.148582600 0.750000000 0.201794724
+0.149560117 0.750000000 0.201786676
+0.150537634 0.750000000 0.201778785
+0.151515152 0.750000000 0.201771022
+0.152492669 0.750000000 0.201763326
+0.153470186 0.750000000 0.201755760
+0.154447703 0.750000000 0.201748336
+0.155425220 0.750000000 0.201740974
+0.156402737 0.750000000 0.201733719
+0.157380254 0.750000000 0.201726616
+0.158357771 0.750000000 0.201719570
+0.159335288 0.750000000 0.201712612
+0.160312805 0.750000000 0.201705813
+0.161290323 0.750000000 0.201699068
+0.162267840 0.750000000 0.201692394
+0.163245357 0.750000000 0.201685884
+0.164222874 0.750000000 0.201679424
+0.165200391 0.750000000 0.201673024
+0.166177908 0.750000000 0.201666789
+0.167155425 0.750000000 0.201660600
+0.168132942 0.750000000 0.201654463
+0.169110459 0.750000000 0.201648489
+0.170087977 0.750000000 0.201642558
+0.171065494 0.750000000 0.201636676
+0.172043011 0.750000000 0.201630951
+0.173020528 0.750000000 0.201625266
+0.173998045 0.750000000 0.201619630
+0.174975562 0.750000000 0.201614142
+0.175953079 0.750000000 0.201608691
+0.176930596 0.750000000 0.201603293
+0.177908113 0.750000000 0.201598032
+0.178885630 0.750000000 0.201592805
+0.179863148 0.750000000 0.201587638
+0.180840665 0.750000000 0.201582594
+0.181818182 0.750000000 0.201577581
+0.182795699 0.750000000 0.201572640
+0.183773216 0.750000000 0.201567801
+0.184750733 0.750000000 0.201562993
+0.185728250 0.750000000 0.201558272
+0.186705767 0.750000000 0.201553632
+0.187683284 0.750000000 0.201549019
+0.188660802 0.750000000 0.201544513
+0.189638319 0.750000000 0.201540063
+0.190615836 0.750000000 0.201535638
+0.191593353 0.750000000 0.201531342
+0.192570870 0.750000000 0.201527074
+0.193548387 0.750000000 0.201522856
+0.194525904 0.750000000 0.201518740
+0.195503421 0.750000000 0.201514646
+0.196480938 0.750000000 0.201510635
+0.197458456 0.750000000 0.201506688
+0.198435973 0.750000000 0.201502762
+0.199413490 0.750000000 0.201498955
+0.200391007 0.750000000 0.201495170
+0.201368524 0.750000000 0.201491445
+0.202346041 0.750000000 0.201487799
+0.203323558 0.750000000 0.201484172
+0.204301075 0.750000000 0.201480648
+0.205278592 0.750000000 0.201477155
+0.206256109 0.750000000 0.201473716
+0.207233627 0.750000000 0.201470354
+0.208211144 0.750000000 0.201467007
+0.209188661 0.750000000 0.201463769
+0.210166178 0.750000000 0.201460550
+0.211143695 0.750000000 0.201457402
+0.212121212 0.750000000 0.201454307
+0.213098729 0.750000000 0.201451251
+0.214076246 0.750000000 0.201448278
+0.215053763 0.750000000 0.201445318
+0.216031281 0.750000000 0.201442464
+0.217008798 0.750000000 0.201439621
+0.217986315 0.750000000 0.201436866
+0.218963832 0.750000000 0.201434139
+0.219941349 0.750000000 0.201431486
+0.220918866 0.750000000 0.201428872
+0.221896383 0.750000000 0.201426324
+0.222873900 0.750000000 0.201423821
+0.223851417 0.750000000 0.201421381
+0.224828935 0.750000000 0.201418988
+0.225806452 0.750000000 0.201416661
+0.226783969 0.750000000 0.201414375
+0.227761486 0.750000000 0.201412163
+0.228739003 0.750000000 0.201409982
+0.229716520 0.750000000 0.201407891
+0.230694037 0.750000000 0.201405828
+0.231671554 0.750000000 0.201403846
+0.232649071 0.750000000 0.201401913
+0.233626588 0.750000000 0.201400032
+0.234604106 0.750000000 0.201398232
+0.235581623 0.750000000 0.201396477
+0.236559140 0.750000000 0.201394788
+0.237536657 0.750000000 0.201393176
+0.238514174 0.750000000 0.201391621
+0.239491691 0.750000000 0.201390128
+0.240469208 0.750000000 0.201388719
+0.241446725 0.750000000 0.201387385
+0.242424242 0.750000000 0.201386125
+0.243401760 0.750000000 0.201384946
+0.244379277 0.750000000 0.201383854
+0.245356794 0.750000000 0.201382854
+0.246334311 0.750000000 0.201381954
+0.247311828 0.750000000 0.201381173
+0.248289345 0.750000000 0.201380522
+0.249266862 0.750000000 0.201380043
+0.250244379 0.749633789 0.201846207
+0.251221896 0.748176070 0.203676892
+0.252199413 0.746729651 0.205470420
+0.253176931 0.745307268 0.207232921
+0.254154448 0.743901152 0.208969603
+0.255131965 0.742505384 0.210681995
+0.256109482 0.741119851 0.212371422
+0.257086999 0.739744439 0.214039141
+0.258064516 0.738388970 0.215686343
+0.259042033 0.737050250 0.217314161
+0.260019550 0.735720805 0.218923667
+0.260997067 0.734400539 0.220515879
+0.261974585 0.733089356 0.222091759
+0.262952102 0.731794526 0.223649762
+0.263929619 0.730516794 0.225192151
+0.264907136 0.729247388 0.226720383
+0.265884653 0.727986227 0.228232727
+0.266862170 0.726733231 0.229730635
+0.267839687 0.725493442 0.231216292
+0.268817204 0.724270974 0.232685872
+0.269794721 0.723055990 0.234144013
+0.270772239 0.721848423 0.235588818
+0.271749756 0.720648204 0.237021028
+0.272727273 0.719458438 0.238442032
+0.273704790 0.718286101 0.239849792
+0.274682307 0.717120499 0.241247924
+0.275659824 0.715961575 0.242632618
+0.276637341 0.714809270 0.244008759
+0.277614858 0.713665012 0.245371680
+0.278592375 0.712538184 0.246726670
+0.279569892 0.711417421 0.248069026
+0.280547410 0.710302674 0.249403669
+0.281524927 0.709193894 0.250726587
+0.282502444 0.708091063 0.252041647
+0.283479961 0.707005566 0.253346179
+0.284457478 0.705925531 0.254642389
+0.285434995 0.704850918 0.255929518
+0.286412512 0.703781686 0.257207578
+0.287390029 0.702717795 0.258478219
+0.288367546 0.701668621 0.259738800
+0.289345064 0.700625580 0.260993370
+0.290322581 0.699587425 0.262237549
+0.291300098 0.698554121 0.263475527
+0.292277615 0.697525635 0.264705239
+0.293255132 0.696509490 0.265927232
+0.294232649 0.695500037 0.267143201
+0.295210166 0.694494984 0.268349791
+0.296187683 0.693494303 0.269551115
+0.297165200 0.692497965 0.270744440
+0.298142717 0.691511860 0.271931138
+0.299120235 0.690532874 0.273112342
+0.300097752 0.689557847 0.274284946
+0.301075269 0.688586755 0.275452739
+0.302052786 0.687619575 0.276613621
+0.303030303 0.686660765 0.277768031
+0.304007820 0.685709376 0.278917856
+0.304985337 0.684761545 0.280059697
+0.305962854 0.683817249 0.281196818
+0.306940371 0.682876470 0.282328684
+0.307917889 0.681942420 0.283453563
+0.308895406 0.681015980 0.284574256
+0.309872923 0.680092726 0.285688972
+0.310850440 0.679172643 0.286798049
+0.311827957 0.678255714 0.287903138
+0.312805474 0.677344077 0.289001763
+0.313782991 0.676440126 0.290095833
+0.314760508 0.675539023 0.291186105
+0.315738025 0.674640752 0.292269631
+0.316715543 0.673745302 0.293349456
+0.317693060 0.672853893 0.294425247
+0.318670577 0.671970143 0.295495017
+0.319648094 0.671088924 0.296561328
+0.320625611 0.670210227 0.297623455
+0.321603128 0.669334041 0.298680243
+0.322580645 0.668460818 0.299733738
+0.323558162 0.667595126 0.300783030
+0.324535679 0.666731672 0.301827515
+0.325513196 0.665870450 0.302868868
+0.326490714 0.665011449 0.303906100
+0.327468231 0.664154662 0.304938935
+0.328445748 0.663304848 0.305968793
+0.329423265 0.662457164 0.306994695
+0.330400782 0.661611439 0.308016510
+0.331378299 0.660767667 0.309035496
+0.332355816 0.659925840 0.310050754
+0.333333333 0.659089669 0.311062154
+0.334310850 0.658255868 0.312070870
+0.335288368 0.657423770 0.313076130
+0.336265885 0.656593371 0.314077703
+0.337243402 0.655764665 0.315076729
+0.338220919 0.654940458 0.316071981
+0.339198436 0.654118746 0.317062640
+0.340175953 0.653298497 0.318050990
+0.341153470 0.652479705 0.319036167
+0.342130987 0.651662368 0.320016921
+0.343108504 0.650848521 0.320995595
+0.344086022 0.650037186 0.321971698
+0.345063539 0.649227083 0.322943523
+0.346041056 0.648418210 0.323913488
+0.347018573 0.647610563 0.324881463
+0.347996090 0.646805538 0.325845303
+0.348973607 0.646002934 0.326807497
+0.349951124 0.645201343 0.327768050
+0.350928641 0.644400763 0.328725018
+0.351906158 0.643601190 0.329680354
+0.352883675 0.642803505 0.330634256
+0.353861193 0.642008044 0.331585332
+0.354838710 0.641213384 0.332534700
+0.355816227 0.640419523 0.333482835
+0.356793744 0.639626459 0.334428830
+0.357771261 0.638834675 0.335373101
+0.358748778 0.638044814 0.336316337
+0.359726295 0.637255548 0.337258027
+0.360703812 0.636466876 0.338198057
+0.361681329 0.635678797 0.339137245
+0.362658847 0.634891512 0.340075384
+0.363636364 0.634105743 0.341012014
+0.364613881 0.633320368 0.341947992
+0.365591398 0.632535386 0.342883313
+0.366568915 0.631750798 0.343817374
+0.367546432 0.630966638 0.344750971
+0.368523949 0.630183479 0.345684104
+0.369501466 0.629400516 0.346616504
+0.370478983 0.628617749 0.347548540
+0.371456500 0.627835178 0.348480299
+0.372434018 0.627052803 0.349411745
+0.373411535 0.626270772 0.350343037
+0.374389052 0.625488759 0.351274237
+0.375366569 0.624706745 0.352205426
+0.376344086 0.623924731 0.353136787
+0.377321603 0.623142717 0.354068240
+0.378299120 0.622360434 0.354999866
+0.379276637 0.621577912 0.355932108
+0.380254154 0.620795194 0.356864629
+0.381231672 0.620012280 0.357797428
+0.382209189 0.619229171 0.358731329
+0.383186706 0.618445288 0.359665733
+0.384164223 0.617660798 0.360600602
+0.385141740 0.616875914 0.361536789
+0.386119257 0.616090638 0.362473899
+0.387096774 0.615304967 0.363411663
+0.388074291 0.614518130 0.364350853
+0.389051808 0.613730200 0.365291500
+0.390029326 0.612941676 0.366232990
+0.391006843 0.612152558 0.367175921
+0.391984360 0.611362846 0.368120944
+0.392961877 0.610571682 0.369067005
+0.393939394 0.609778818 0.370014435
+0.394916911 0.608985156 0.370964689
+0.395894428 0.608190696 0.371916178
+0.396871945 0.607395436 0.372868906
+0.397849462 0.606598545 0.373825246
+0.398826979 0.605799225 0.374783038
+0.399804497 0.604998896 0.375742272
+0.400782014 0.604197558 0.376705194
+0.401759531 0.603395208 0.377670184
+0.402737048 0.602591157 0.378636823
+0.403714565 0.601783817 0.379607193
+0.404692082 0.600975251 0.380580296
+0.405669599 0.600165455 0.381555265
+0.406647116 0.599354429 0.382533989
+0.407624633 0.598541740 0.383516150
+0.408602151 0.597724765 0.384500397
+0.409579668 0.596906338 0.385488433
+0.410557185 0.596086453 0.386480623
+0.411534702 0.595265107 0.387475131
+0.412512219 0.594442248 0.388473492
+0.413489736 0.593613964 0.389476718
+0.414467253 0.592783988 0.390482499
+0.415444770 0.591952316 0.391491555
+0.416422287 0.591118941 0.392504668
+0.417399804 0.590283858 0.393520477
+0.418377322 0.589442972 0.394539685
+0.419354839 0.588599687 0.395563270
+0.420332356 0.587754450 0.396589695
+0.421309873 0.586907257 0.397619709
+0.422287390 0.586058099 0.398654373
+0.423264907 0.585202955 0.399692025
+0.424242424 0.584344508 0.400733540
+0.425219941 0.583483842 0.401779909
+0.426197458 0.582620947 0.402829422
+0.427174976 0.581755815 0.403883177
+0.428152493 0.580884615 0.404941902
+0.429130010 0.580009054 0.406003935
+0.430107527 0.579130986 0.407070716
+0.431085044 0.578250399 0.408142475
+0.432062561 0.577367283 0.409217712
+0.433040078 0.576478121 0.410298357
+0.434017595 0.575583374 0.411383856
+0.434995112 0.574685810 0.412473008
+0.435972630 0.573785416 0.413568413
+0.436950147 0.572882178 0.414668387
+0.437927664 0.571973027 0.415772198
+0.438905181 0.571056884 0.416883317
+0.439882698 0.570137591 0.417998533
+0.440860215 0.569215132 0.419118581
+0.441837732 0.568289490 0.420245634
+0.442815249 0.567358177 0.421376894
+0.443792766 0.566418275 0.422514343
+0.444770283 0.565474860 0.423658069
+0.445747801 0.564527914 0.424806212
+0.446725318 0.563577417 0.425962211
+0.447702835 0.562621612 0.427123480
+0.448680352 0.561655405 0.428290282
+0.449657869 0.560685294 0.429465166
+0.450635386 0.559711253 0.430644890
+0.451612903 0.558733259 0.431832308
+0.452590420 0.557750445 0.433026364
+0.453567937 0.556755188 0.434226000
+0.454545455 0.555755595 0.435434924
+0.455522972 0.554751638 0.436649146
+0.456500489 0.553743287 0.437871753
+0.457478006 0.552730515 0.439101626
+0.458455523 0.551703450 0.440338101
+0.459433040 0.550671354 0.441584214
+0.460410557 0.549634415 0.442836126
+0.461388074 0.548592599 0.444098260
+0.462365591 0.547545872 0.445367270
+0.463343109 0.546484786 0.446645195
+0.464320626 0.545416893 0.447931951
+0.465298143 0.544343629 0.449226535
+0.466275660 0.543264953 0.450531713
+0.467253177 0.542180826 0.451843888
+0.468230694 0.541082374 0.453168194
+0.469208211 0.539975079 0.454499403
+0.470185728 0.538861828 0.455843131
+0.471163245 0.537742573 0.457194500
+0.472140762 0.536617267 0.458558366
+0.473118280 0.535477779 0.459930679
+0.474095797 0.534327120 0.461315854
+0.475073314 0.533169855 0.462709935
+0.476050831 0.532005928 0.464117671
+0.477028348 0.530835281 0.465534381
+0.478005865 0.529650711 0.466952620
+0.478983382 0.528452318 0.468377996
+0.479960899 0.527246594 0.469806093
+0.480938416 0.526033471 0.471239943
+0.481915934 0.524812880 0.472678374
+0.482893451 0.523578752 0.474120606
+0.483870968 0.522327784 0.475569070
+0.484848485 0.521068672 0.477020289
+0.485826002 0.519801335 0.478476759
+0.486803519 0.518525692 0.479938796
+0.487781036 0.517237031 0.481403707
+0.488758553 0.515928105 0.482873363
+0.489736070 0.514610118 0.484347894
+0.490713587 0.513282977 0.485826893
+0.491691105 0.511946585 0.487309221
+0.492668622 0.510597845 0.488795133
+0.493646139 0.509224947 0.490284775
+0.494623656 0.507841954 0.491777716
+0.495601173 0.506448755 0.493273513
+0.496578690 0.505045237 0.494770784
+0.497556207 0.503630203 0.496268873
+0.498533724 0.502186589 0.497766318
+0.499511241 0.500731707 0.499259366
+0.500488759 0.499268293 0.500740634
+0.501466276 0.497813411 0.502233682
+0.502443793 0.496369797 0.503731127
+0.503421310 0.494954763 0.505229216
+0.504398827 0.493551245 0.506726487
+0.505376344 0.492158046 0.508222284
+0.506353861 0.490775053 0.509715225
+0.507331378 0.489402155 0.511204867
+0.508308895 0.488053415 0.512690779
+0.509286413 0.486717023 0.514173107
+0.510263930 0.485389882 0.515652106
+0.511241447 0.484071895 0.517126637
+0.512218964 0.482762969 0.518596293
+0.513196481 0.481474308 0.520061204
+0.514173998 0.480198665 0.521523241
+0.515151515 0.478931328 0.522979711
+0.516129032 0.477672216 0.524430930
+0.517106549 0.476421248 0.525879394
+0.518084066 0.475187120 0.527321626
+0.519061584 0.473966529 0.528760057
+0.520039101 0.472753406 0.530193907
+0.521016618 0.471547682 0.531622004
+0.521994135 0.470349289 0.533047380
+0.522971652 0.469164719 0.534465619
+0.523949169 0.467994072 0.535882329
+0.524926686 0.466830145 0.537290065
+0.525904203 0.465672880 0.538684146
+0.526881720 0.464522221 0.540069321
+0.527859238 0.463382733 0.541441634
+0.528836755 0.462257427 0.542805500
+0.529814272 0.461138172 0.544156869
+0.530791789 0.460024921 0.545500597
+0.531769306 0.458917626 0.546831806
+0.532746823 0.457819174 0.548156112
+0.533724340 0.456735047 0.549468287
+0.534701857 0.455656371 0.550773465
+0.535679374 0.454583107 0.552068049
+0.536656891 0.453515214 0.553354805
+0.537634409 0.452454128 0.554632730
+0.538611926 0.451407401 0.555901740
+0.539589443 0.450365585 0.557163874
+0.540566960 0.449328646 0.558415786
+0.541544477 0.448296550 0.559661899
+0.542521994 0.447269485 0.560898374
+0.543499511 0.446256713 0.562128247
+0.544477028 0.445248362 0.563350854
+0.545454545 0.444244405 0.564565076
+0.546432063 0.443244812 0.565774000
+0.547409580 0.442249555 0.566973636
+0.548387097 0.441266741 0.568167692
+0.549364614 0.440288747 0.569355110
+0.550342131 0.439314706 0.570534834
+0.551319648 0.438344595 0.571709718
+0.552297165 0.437378388 0.572876520
+0.553274682 0.436422583 0.574037789
+0.554252199 0.435472086 0.575193788
+0.555229717 0.434525140 0.576341931
+0.556207234 0.433581725 0.577485657
+0.557184751 0.432641823 0.578623106
+0.558162268 0.431710510 0.579754366
+0.559139785 0.430784868 0.580881419
+0.560117302 0.429862409 0.582001467
+0.561094819 0.428943116 0.583116683
+0.562072336 0.428026973 0.584227802
+0.563049853 0.427117822 0.585331613
+0.564027370 0.426214584 0.586431587
+0.565004888 0.425314190 0.587526992
+0.565982405 0.424416626 0.588616144
+0.566959922 0.423521879 0.589701643
+0.567937439 0.422632717 0.590782288
+0.568914956 0.421749601 0.591857525
+0.569892473 0.420869014 0.592929284
+0.570869990 0.419990946 0.593996065
+0.571847507 0.419115385 0.595058098
+0.572825024 0.418244185 0.596116823
+0.573802542 0.417379053 0.597170578
+0.574780059 0.416516158 0.598220091
+0.575757576 0.415655492 0.599266460
+0.576735093 0.414797045 0.600307975
+0.577712610 0.413941901 0.601345627
+0.578690127 0.413092743 0.602380291
+0.579667644 0.412245550 0.603410305
+0.580645161 0.411400313 0.604436730
+0.581622678 0.410557028 0.605460315
+0.582600196 0.409716142 0.606479523
+0.583577713 0.408881059 0.607495332
+0.584555230 0.408047684 0.608508445
+0.585532747 0.407216012 0.609517501
+0.586510264 0.406386036 0.610523282
+0.587487781 0.405557752 0.611526508
+0.588465298 0.404734893 0.612524869
+0.589442815 0.403913547 0.613519377
+0.590420332 0.403093662 0.614511567
+0.591397849 0.402275235 0.615499603
+0.592375367 0.401458260 0.616483850
+0.593352884 0.400645571 0.617466011
+0.594330401 0.399834545 0.618444735
+0.595307918 0.399024749 0.619419704
+0.596285435 0.398216183 0.620392807
+0.597262952 0.397408843 0.621363177
+0.598240469 0.396604792 0.622329816
+0.599217986 0.395802442 0.623294806
+0.600195503 0.395001104 0.624257728
+0.601173021 0.394200775 0.625216962
+0.602150538 0.393401455 0.626174754
+0.603128055 0.392604564 0.627131094
+0.604105572 0.391809304 0.628083822
+0.605083089 0.391014844 0.629035311
+0.606060606 0.390221182 0.629985565
+0.607038123 0.389428318 0.630932995
+0.608015640 0.388637154 0.631879056
+0.608993157 0.387847442 0.632824079
+0.609970674 0.387058324 0.633767010
+0.610948192 0.386269800 0.634708500
+0.611925709 0.385481870 0.635649147
+0.612903226 0.384695033 0.636588337
+0.613880743 0.383909362 0.637526101
+0.614858260 0.383124086 0.638463211
+0.615835777 0.382339202 0.639399398
+0.616813294 0.381554712 0.640334267
+0.617790811 0.380770829 0.641268671
+0.618768328 0.379987720 0.642202572
+0.619745846 0.379204806 0.643135371
+0.620723363 0.378422088 0.644067892
+0.621700880 0.377639566 0.645000134
+0.622678397 0.376857283 0.645931760
+0.623655914 0.376075269 0.646863213
+0.624633431 0.375293255 0.647794574
+0.625610948 0.374511241 0.648725763
+0.626588465 0.373729228 0.649656963
+0.627565982 0.372947197 0.650588255
+0.628543500 0.372164822 0.651519701
+0.629521017 0.371382251 0.652451460
+0.630498534 0.370599484 0.653383496
+0.631476051 0.369816521 0.654315896
+0.632453568 0.369033362 0.655249029
+0.633431085 0.368249202 0.656182626
+0.634408602 0.367464614 0.657116687
+0.635386119 0.366679632 0.658052008
+0.636363636 0.365894257 0.658987986
+0.637341153 0.365108488 0.659924616
+0.638318671 0.364321203 0.660862755
+0.639296188 0.363533124 0.661801943
+0.640273705 0.362744452 0.662741973
+0.641251222 0.361955186 0.663683663
+0.642228739 0.361165325 0.664626899
+0.643206256 0.360373541 0.665571170
+0.644183773 0.359580477 0.666517165
+0.645161290 0.358786616 0.667465300
+0.646138807 0.357991956 0.668414668
+0.647116325 0.357196495 0.669365744
+0.648093842 0.356398810 0.670319646
+0.649071359 0.355599237 0.671274982
+0.650048876 0.354798657 0.672231950
+0.651026393 0.353997066 0.673192503
+0.652003910 0.353194462 0.674154697
+0.652981427 0.352389437 0.675118537
+0.653958944 0.351581790 0.676086512
+0.654936461 0.350772917 0.677056477
+0.655913978 0.349962814 0.678028302
+0.656891496 0.349151479 0.679004405
+0.657869013 0.348337632 0.679983079
+0.658846530 0.347520295 0.680963833
+0.659824047 0.346701503 0.681949010
+0.660801564 0.345881254 0.682937360
+0.661779081 0.345059542 0.683928019
+0.662756598 0.344235335 0.684923271
+0.663734115 0.343406629 0.685922297
+0.664711632 0.342576230 0.686923870
+0.665689150 0.341744132 0.687929130
+0.666666667 0.340910331 0.688937846
+0.667644184 0.340074160 0.689949246
+0.668621701 0.339232333 0.690964504
+0.669599218 0.338388561 0.691983490
+0.670576735 0.337542836 0.693005305
+0.671554252 0.336695152 0.694031207
+0.672531769 0.335845338 0.695061065
+0.673509286 0.334988551 0.696093900
+0.674486804 0.334129550 0.697131132
+0.675464321 0.333268328 0.698172485
+0.676441838 0.332404874 0.699216970
+0.677419355 0.331539182 0.700266262
+0.678396872 0.330665959 0.701319757
+0.679374389 0.329789773 0.702376545
+0.680351906 0.328911076 0.703438672
+0.681329423 0.328029857 0.704504983
+0.682306940 0.327146107 0.705574753
+0.683284457 0.326254698 0.706650544
+0.684261975 0.325359248 0.707730369
+0.685239492 0.324460977 0.708813895
+0.686217009 0.323559874 0.709904167
+0.687194526 0.322655923 0.710998237
+0.688172043 0.321744286 0.712096862
+0.689149560 0.320827357 0.713201951
+0.690127077 0.319907274 0.714311028
+0.691104594 0.318984020 0.715425744
+0.692082111 0.318057580 0.716546437
+0.693059629 0.317123530 0.717671316
+0.694037146 0.316182751 0.718803182
+0.695014663 0.315238455 0.719940303
+0.695992180 0.314290624 0.721082144
+0.696969697 0.313339235 0.722231969
+0.697947214 0.312380425 0.723386379
+0.698924731 0.311413245 0.724547261
+0.699902248 0.310442153 0.725715054
+0.700879765 0.309467126 0.726887658
+0.701857283 0.308488140 0.728068862
+0.702834800 0.307502035 0.729255560
+0.703812317 0.306505697 0.730448885
+0.704789834 0.305505016 0.731650209
+0.705767351 0.304499963 0.732856799
+0.706744868 0.303490510 0.734072768
+0.707722385 0.302474365 0.735294761
+0.708699902 0.301445879 0.736524473
+0.709677419 0.300412575 0.737762451
+0.710654936 0.299374420 0.739006630
+0.711632454 0.298331379 0.740261200
+0.712609971 0.297282205 0.741521781
+0.713587488 0.296218314 0.742792422
+0.714565005 0.295149082 0.744070482
+0.715542522 0.294074469 0.745357611
+0.716520039 0.292994434 0.746653821
+0.717497556 0.291908937 0.747958353
+0.718475073 0.290806106 0.749273413
+0.719452590 0.289697326 0.750596331
+0.720430108 0.288582579 0.751930974
+0.721407625 0.287461816 0.753273330
+0.722385142 0.286334988 0.754628320
+0.723362659 0.285190730 0.755991241
+0.724340176 0.284038425 0.757367382
+0.725317693 0.282879501 0.758752076
+0.726295210 0.281713899 0.760150208
+0.727272727 0.280541562 0.761557968
+0.728250244 0.279351796 0.762978972
+0.729227761 0.278151577 0.764411182
+0.730205279 0.276944010 0.765855987
+0.731182796 0.275729026 0.767314128
+0.732160313 0.274506558 0.768783708
+0.733137830 0.273266769 0.770269365
+0.734115347 0.272013773 0.771767273
+0.735092864 0.270752612 0.773279617
+0.736070381 0.269483206 0.774807849
+0.737047898 0.268205474 0.776350238
+0.738025415 0.266910644 0.777908241
+0.739002933 0.265599461 0.779484121
+0.739980450 0.264279195 0.781076333
+0.740957967 0.262949750 0.782685839
+0.741935484 0.261611030 0.784313657
+0.742913001 0.260255561 0.785960859
+0.743890518 0.258880149 0.787628578
+0.744868035 0.257494616 0.789318005
+0.745845552 0.256098848 0.791030397
+0.746823069 0.254692732 0.792767079
+0.747800587 0.253270349 0.794529580
+0.748778104 0.251823930 0.796323108
+0.749755621 0.250366211 0.798153793
+0.750733138 0.250000000 0.798619957
+0.751710655 0.250000000 0.798619478
+0.752688172 0.250000000 0.798618827
+0.753665689 0.250000000 0.798618046
+0.754643206 0.250000000 0.798617146
+0.755620723 0.250000000 0.798616146
+0.756598240 0.250000000 0.798615054
+0.757575758 0.250000000 0.798613875
+0.758553275 0.250000000 0.798612615
+0.759530792 0.250000000 0.798611281
+0.760508309 0.250000000 0.798609872
+0.761485826 0.250000000 0.798608379
+0.762463343 0.250000000 0.798606824
+0.763440860 0.250000000 0.798605212
+0.764418377 0.250000000 0.798603523
+0.765395894 0.250000000 0.798601768
+0.766373412 0.250000000 0.798599968
+0.767350929 0.250000000 0.798598087
+0.768328446 0.250000000 0.798596154
+0.769305963 0.250000000 0.798594172
+0.770283480 0.250000000 0.798592109
+0.771260997 0.250000000 0.798590018
+0.772238514 0.250000000 0.798587837
+0.773216031 0.250000000 0.798585625
+0.774193548 0.250000000 0.798583339
+0.775171065 0.250000000 0.798581012
+0.776148583 0.250000000 0.798578619
+0.777126100 0.250000000 0.798576179
+0.778103617 0.250000000 0.798573676
+0.779081134 0.250000000 0.798571128
+0.780058651 0.250000000 0.798568514
+0.781036168 0.250000000 0.798565861
+0.782013685 0.250000000 0.798563134
+0.782991202 0.250000000 0.798560379
+0.783968719 0.250000000 0.798557536
+0.784946237 0.250000000 0.798554682
+0.785923754 0.250000000 0.798551722
+0.786901271 0.250000000 0.798548749
+0.787878788 0.250000000 0.798545693
+0.788856305 0.250000000 0.798542598
+0.789833822 0.250000000 0.798539450
+0.790811339 0.250000000 0.798536231
+0.791788856 0.250000000 0.798532993
+0.792766373 0.250000000 0.798529646
+0.793743891 0.250000000 0.798526284
+0.794721408 0.250000000 0.798522845
+0.795698925 0.250000000 0.798519352
+0.796676442 0.250000000 0.798515828
+0.797653959 0.250000000 0.798512201
+0.798631476 0.250000000 0.798508555
+0.799608993 0.250000000 0.798504830
+0.800586510 0.250000000 0.798501045
+0.801564027 0.250000000 0.798497238
+0.802541544 0.250000000 0.798493312
+0.803519062 0.250000000 0.798489365
+0.804496579 0.250000000 0.798485354
+0.805474096 0.250000000 0.798481260
+0.806451613 0.250000000 0.798477144
+0.807429130 0.250000000 0.798472926
+0.808406647 0.250000000 0.798468658
+0.809384164 0.250000000 0.798464362
+0.810361681 0.250000000 0.798459937
+0.811339198 0.250000000 0.798455487
+0.812316716 0.250000000 0.798450981
+0.813294233 0.250000000 0.798446368
+0.814271750 0.250000000 0.798441728
+0.815249267 0.250000000 0.798437007
+0.816226784 0.250000000 0.798432199
+0.817204301 0.250000000 0.798427360
+0.818181818 0.250000000 0.798422419
+0.819159335 0.250000000 0.798417406
+0.820136852 0.250000000 0.798412362
+0.821114370 0.250000000 0.798407195
+0.822091887 0.250000000 0.798401968
+0.823069404 0.250000000 0.798396707
+0.824046921 0.250000000 0.798391309
+0.825024438 0.250000000 0.798385858
+0.826001955 0.250000000 0.798380370
+0.826979472 0.250000000 0.798374734
+0.827956989 0.250000000 0.798369049
+0.828934506 0.250000000 0.798363324
+0.829912023 0.250000000 0.798357442
+0.830889541 0.250000000 0.798351511
+0.831867058 0.250000000 0.798345537
+0.832844575 0.250000000 0.798339400
+0.833822092 0.250000000 0.798333211
+0.834799609 0.250000000 0.798326976
+0.835777126 0.250000000 0.798320576
+0.836754643 0.250000000 0.798314116
+0.837732160 0.250000000 0.798307606
+0.838709677 0.250000000 0.798300932
+0.839687195 0.250000000 0.798294187
+0.840664712 0.250000000 0.798287388
+0.841642229 0.250000000 0.798280430
+0.842619746 0.250000000 0.798273384
+0.843597263 0.250000000 0.798266281
+0.844574780 0.250000000 0.798259026
+0.845552297 0.250000000 0.798251664
+0.846529814 0.250000000 0.798244240
+0.847507331 0.250000000 0.798236674
+0.848484848 0.250000000 0.798228978
+0.849462366 0.250000000 0.798221215
+0.850439883 0.250000000 0.798213324
+0.851417400 0.250000000 0.798205276
+0.852394917 0.250000000 0.798197155
+0.853372434 0.250000000 0.798188922
+0.854349951 0.250000000 0.798180502
+0.855327468 0.250000000 0.798172002
+0.856304985 0.250000000 0.798163410
+0.857282502 0.250000000 0.798154594
+0.858260020 0.250000000 0.798145693
+0.859237537 0.250000000 0.798136706
+0.860215054 0.250000000 0.798127487
+0.861192571 0.250000000 0.798118161
+0.862170088 0.250000000 0.798108741
+0.863147605 0.250000000 0.798099109
+0.864125122 0.250000000 0.798089331
+0.865102639 0.250000000 0.798079451
+0.866080156 0.250000000 0.798069382
+0.867057674 0.250000000 0.798059123
+0.868035191 0.250000000 0.798048754
+0.869012708 0.250000000 0.798038221
+0.869990225 0.250000000 0.798027449
+0.870967742 0.250000000 0.798016558
+0.871945259 0.250000000 0.798005530
+0.872922776 0.250000000 0.797994212
+0.873900293 0.250000000 0.797982764
+0.874877810 0.250000000 0.797971185
+0.875855327 0.250000000 0.797959306
+0.876832845 0.250000000 0.797947263
+0.877810362 0.250000000 0.797935078
+0.878787879 0.250000000 0.797922616
+0.879765396 0.250000000 0.797909935
+0.880742913 0.250000000 0.797897099
+0.881720430 0.250000000 0.797884012
+0.882697947 0.250000000 0.797870648
+0.883675464 0.250000000 0.797857113
+0.884652981 0.250000000 0.797843354
+0.885630499 0.250000000 0.797829254
+0.886608016 0.250000000 0.797814969
+0.887585533 0.250000000 0.797800485
+0.888563050 0.250000000 0.797785594
+0.889540567 0.250000000 0.797770499
+0.890518084 0.250000000 0.797755197
+0.891495601 0.250000000 0.797739486
+0.892473118 0.250000000 0.797723518
+0.893450635 0.250000000 0.797707323
+0.894428152 0.250000000 0.797690733
+0.895405670 0.250000000 0.797673819
+0.896383187 0.250000000 0.797656655
+0.897360704 0.250000000 0.797639111
+0.898338221 0.250000000 0.797621171
+0.899315738 0.250000000 0.797602957
+0.900293255 0.250000000 0.797584371
+0.901270772 0.250000000 0.797565316
+0.902248289 0.250000000 0.797545958
+0.903225806 0.250000000 0.797526235
+0.904203324 0.250000000 0.797505964
+0.905180841 0.250000000 0.797485358
+0.906158358 0.250000000 0.797464387
+0.907135875 0.250000000 0.797442787
+0.908113392 0.250000000 0.797420816
+0.909090909 0.250000000 0.797398464
+0.910068426 0.250000000 0.797375416
+0.911045943 0.250000000 0.797351947
+0.912023460 0.250000000 0.797328054
+0.913000978 0.250000000 0.797303431
+0.913978495 0.250000000 0.797278312
+0.914956012 0.250000000 0.797252722
+0.915933529 0.250000000 0.797226352
+0.916911046 0.250000000 0.797199412
+0.917888563 0.250000000 0.797171944
+0.918866080 0.250000000 0.797143632
+0.919843597 0.250000000 0.797114674
+0.920821114 0.250000000 0.797085122
+0.921798631 0.250000000 0.797054641
+0.922776149 0.250000000 0.797023436
+0.923753666 0.250000000 0.796991562
+0.924731183 0.250000000 0.796958649
+0.925708700 0.250000000 0.796924934
+0.926686217 0.250000000 0.796890462
+0.927663734 0.250000000 0.796854809
+0.928641251 0.250000000 0.796818277
+0.929618768 0.250000000 0.796780885
+0.930596285 0.250000000 0.796742131
+0.931573803 0.250000000 0.796702422
+0.932551320 0.250000000 0.796661678
+0.933528837 0.250000000 0.796619449
+0.934506354 0.250000000 0.796576138
+0.935483871 0.250000000 0.796531554
+0.936461388 0.250000000 0.796485383
+0.937438905 0.250000000 0.796437966
+0.938416422 0.250000000 0.796388970
+0.939393939 0.250000000 0.796338286
+0.940371457 0.250000000 0.796286158
+0.941348974 0.250000000 0.796232059
+0.942326491 0.250000000 0.796176174
+0.943304008 0.250000000 0.796118602
+0.944281525 0.250000000 0.796058564
+0.945259042 0.250000000 0.795996641
+0.946236559 0.250000000 0.795932487
+0.947214076 0.250000000 0.795865725
+0.948191593 0.250000000 0.795796735
+0.949169110 0.250000000 0.795724810
+0.950146628 0.250000000 0.795650131
+0.951124145 0.250000000 0.795572676
+0.952101662 0.250000000 0.795491611
+0.953079179 0.250000000 0.795407522
+0.954056696 0.250000000 0.795319628
+0.955034213 0.250000000 0.795227898
+0.956011730 0.250000000 0.795132357
+0.956989247 0.250000000 0.795031935
+0.957966764 0.250000000 0.794927282
+0.958944282 0.250000000 0.794817257
+0.959921799 0.250000000 0.794701981
+0.960899316 0.250000000 0.794581006
+0.961876833 0.250000000 0.794453449
+0.962854350 0.250000000 0.794319707
+0.963831867 0.250000000 0.794177846
+0.964809384 0.250000000 0.794028718
+0.965786901 0.250000000 0.793870437
+0.966764418 0.250000000 0.793703113
+0.967741935 0.250000000 0.793525315
+0.968719453 0.250000000 0.793336305
+0.969696970 0.250000000 0.793135013
+0.970674487 0.250000000 0.792919868
+0.971652004 0.250000000 0.792689957
+0.972629521 0.250000000 0.792442910
+0.973607038 0.250000000 0.792177663
+0.974584555 0.250000000 0.791891104
+0.975562072 0.250000000 0.791581540
+0.976539589 0.250000000 0.791245216
+0.977517107 0.250000000 0.790900290
+0.978494624 0.250000000 0.790546727
+0.979472141 0.250000000 0.790189953
+0.980449658 0.250000000 0.789814417
+0.981427175 0.250000000 0.789445023
+0.982404692 0.250000000 0.789052209
+0.983382209 0.250000000 0.788657501
+0.984359726 0.250000000 0.788250203
+0.985337243 0.250000000 0.787818500
+0.986314761 0.250000000 0.787390503
+0.987292278 0.250000000 0.786940347
+0.988269795 0.250000000 0.786464072
+0.989247312 0.250000000 0.785974808
+0.990224829 0.250000000 0.785469812
+0.991202346 0.250000000 0.784933879
+0.992179863 0.250000000 0.784364501
+0.993157380 0.250000000 0.783757951
+0.994134897 0.250000000 0.783108264
+0.995112414 0.250000000 0.782404962
+0.996089932 0.250000000 0.781627407
+0.997067449 0.250000000 0.780727892
+0.998044966 0.250000000 0.779693393
+0.999022483 0.250000000 0.778328498
+1.000000000 nan nan
diff --git a/examples/mamdani/SimpleDimmerChained.fll b/examples/mamdani/SimpleDimmerChained.fll
new file mode 100644
index 0000000..02b35cc
--- /dev/null
+++ b/examples/mamdani/SimpleDimmerChained.fll
@@ -0,0 +1,42 @@
+Engine: SimpleDimmerChained
+InputVariable: Ambient
+ enabled: true
+ range: 0.000 1.000
+ lock-range: false
+ term: DARK Triangle 0.000 0.250 0.500
+ term: MEDIUM Triangle 0.250 0.500 0.750
+ term: BRIGHT Triangle 0.500 0.750 1.000
+OutputVariable: Power
+ enabled: true
+ range: 0.000 1.000
+ lock-range: false
+ aggregation: Maximum
+ defuzzifier: Centroid 200
+ default: nan
+ lock-previous: false
+ term: LOW Triangle 0.000 0.250 0.500
+ term: MEDIUM Triangle 0.250 0.500 0.750
+ term: HIGH Triangle 0.500 0.750 1.000
+OutputVariable: InversePower
+ enabled: true
+ range: 0.000 1.000
+ lock-range: false
+ aggregation: Maximum
+ defuzzifier: Centroid 500
+ default: nan
+ lock-previous: false
+ term: LOW Cosine 0.200 0.500
+ term: MEDIUM Cosine 0.500 0.500
+ term: HIGH Cosine 0.800 0.500
+RuleBlock:
+ enabled: true
+ conjunction: none
+ disjunction: none
+ implication: Minimum
+ activation: General
+ rule: if Ambient is DARK then Power is HIGH
+ rule: if Ambient is MEDIUM then Power is MEDIUM
+ rule: if Ambient is BRIGHT then Power is LOW
+ rule: if Power is LOW then InversePower is HIGH
+ rule: if Power is MEDIUM then InversePower is MEDIUM
+ rule: if Power is HIGH then InversePower is LOW \ No newline at end of file
diff --git a/examples/mamdani/SimpleDimmerChained.java b/examples/mamdani/SimpleDimmerChained.java
new file mode 100644
index 0000000..a7c28c6
--- /dev/null
+++ b/examples/mamdani/SimpleDimmerChained.java
@@ -0,0 +1,81 @@
+import com.fuzzylite.*;
+import com.fuzzylite.activation.*
+import com.fuzzylite.defuzzifier.*;
+import com.fuzzylite.factory.*;
+import com.fuzzylite.hedge.*;
+import com.fuzzylite.imex.*;
+import com.fuzzylite.norm.*;
+import com.fuzzylite.norm.s.*;
+import com.fuzzylite.norm.t.*;
+import com.fuzzylite.rule.*;
+import com.fuzzylite.term.*;
+import com.fuzzylite.variable.*;
+
+public class SimpleDimmerChained{
+public static void main(String[] args){
+//Code automatically generated with fuzzylite 6.0.
+
+Engine engine = new Engine();
+engine.setName("SimpleDimmerChained");
+engine.setDescription("");
+
+InputVariable Ambient = new InputVariable();
+Ambient.setName("Ambient");
+Ambient.setDescription("");
+Ambient.setEnabled(true);
+Ambient.setRange(0.000, 1.000);
+Ambient.setLockValueInRange(false);
+Ambient.addTerm(new Triangle("DARK", 0.000, 0.250, 0.500));
+Ambient.addTerm(new Triangle("MEDIUM", 0.250, 0.500, 0.750));
+Ambient.addTerm(new Triangle("BRIGHT", 0.500, 0.750, 1.000));
+engine.addInputVariable(Ambient);
+
+OutputVariable Power = new OutputVariable();
+Power.setName("Power");
+Power.setDescription("");
+Power.setEnabled(true);
+Power.setRange(0.000, 1.000);
+Power.setLockValueInRange(false);
+Power.setAggregation(new Maximum());
+Power.setDefuzzifier(new Centroid(200));
+Power.setDefaultValue(Double.NaN);
+Power.setLockPreviousValue(false);
+Power.addTerm(new Triangle("LOW", 0.000, 0.250, 0.500));
+Power.addTerm(new Triangle("MEDIUM", 0.250, 0.500, 0.750));
+Power.addTerm(new Triangle("HIGH", 0.500, 0.750, 1.000));
+engine.addOutputVariable(Power);
+
+OutputVariable InversePower = new OutputVariable();
+InversePower.setName("InversePower");
+InversePower.setDescription("");
+InversePower.setEnabled(true);
+InversePower.setRange(0.000, 1.000);
+InversePower.setLockValueInRange(false);
+InversePower.setAggregation(new Maximum());
+InversePower.setDefuzzifier(new Centroid(500));
+InversePower.setDefaultValue(Double.NaN);
+InversePower.setLockPreviousValue(false);
+InversePower.addTerm(new Cosine("LOW", 0.200, 0.500));
+InversePower.addTerm(new Cosine("MEDIUM", 0.500, 0.500));
+InversePower.addTerm(new Cosine("HIGH", 0.800, 0.500));
+engine.addOutputVariable(InversePower);
+
+RuleBlock ruleBlock = new RuleBlock();
+ruleBlock.setName("");
+ruleBlock.setDescription("");
+ruleBlock.setEnabled(true);
+ruleBlock.setConjunction(null);
+ruleBlock.setDisjunction(null);
+ruleBlock.setImplication(new Minimum());
+ruleBlock.setActivation(new General());
+ruleBlock.addRule(Rule.parse("if Ambient is DARK then Power is HIGH", engine));
+ruleBlock.addRule(Rule.parse("if Ambient is MEDIUM then Power is MEDIUM", engine));
+ruleBlock.addRule(Rule.parse("if Ambient is BRIGHT then Power is LOW", engine));
+ruleBlock.addRule(Rule.parse("if Power is LOW then InversePower is HIGH", engine));
+ruleBlock.addRule(Rule.parse("if Power is MEDIUM then InversePower is MEDIUM", engine));
+ruleBlock.addRule(Rule.parse("if Power is HIGH then InversePower is LOW", engine));
+engine.addRuleBlock(ruleBlock);
+
+
+}
+}
diff --git a/examples/mamdani/SimpleDimmerChained.pdf b/examples/mamdani/SimpleDimmerChained.pdf
new file mode 100644
index 0000000..bc22cfa
--- /dev/null
+++ b/examples/mamdani/SimpleDimmerChained.pdf
Binary files differ
diff --git a/examples/mamdani/SimpleDimmerInverse.R b/examples/mamdani/SimpleDimmerInverse.R
new file mode 100644
index 0000000..358916d
--- /dev/null
+++ b/examples/mamdani/SimpleDimmerInverse.R
@@ -0,0 +1,85 @@
+#Code automatically generated with fuzzylite 6.0.
+
+library(ggplot2);
+
+engine.name = "SimpleDimmerInverse"
+engine.fll = "Engine: SimpleDimmerInverse
+InputVariable: Ambient
+ enabled: true
+ range: 0.000 1.000
+ lock-range: false
+ term: DARK Triangle 0.000 0.250 0.500
+ term: MEDIUM Triangle 0.250 0.500 0.750
+ term: BRIGHT Triangle 0.500 0.750 1.000
+OutputVariable: Power
+ enabled: true
+ range: 0.000 1.000
+ lock-range: false
+ aggregation: Maximum
+ defuzzifier: Centroid 200
+ default: nan
+ lock-previous: false
+ term: LOW Triangle 0.000 0.250 0.500
+ term: MEDIUM Triangle 0.250 0.500 0.750
+ term: HIGH Triangle 0.500 0.750 1.000
+OutputVariable: InversePower
+ enabled: true
+ range: 0.000 1.000
+ lock-range: false
+ aggregation: Maximum
+ defuzzifier: Centroid 500
+ default: nan
+ lock-previous: false
+ term: LOW Cosine 0.200 0.500
+ term: MEDIUM Cosine 0.500 0.500
+ term: HIGH Cosine 0.800 0.500
+RuleBlock:
+ enabled: true
+ conjunction: none
+ disjunction: none
+ implication: Minimum
+ activation: General
+ rule: if Ambient is DARK then Power is HIGH
+ rule: if Ambient is MEDIUM then Power is MEDIUM
+ rule: if Ambient is BRIGHT then Power is LOW
+ rule: if Power is LOW then InversePower is HIGH
+ rule: if Power is MEDIUM then InversePower is MEDIUM
+ rule: if Power is HIGH then InversePower is LOW"
+
+engine.fldFile = "SimpleDimmerInverse.fld"
+if (require(data.table)) {
+ engine.df = data.table::fread(engine.fldFile, sep="auto", header="auto")
+} else {
+ engine.df = read.table(engine.fldFile, header=TRUE)
+}
+
+engine.plot.i1_o1 = ggplot(engine.df, aes(Ambient, Power)) +
+ geom_line(aes(color=Power), size=3, lineend="round", linejoin="mitre") +
+ scale_color_gradient(low="yellow", high="red") +
+ ggtitle("Ambient vs Power")
+
+engine.plot.o1_i1 = ggplot(engine.df, aes(Ambient, Power)) +
+ geom_line(aes(color=Power), size=3, lineend="round", linejoin="mitre") +
+ scale_color_gradient(low="yellow", high="red") +
+ coord_flip() +
+ ggtitle("Power vs Ambient")
+
+engine.plot.i1_o2 = ggplot(engine.df, aes(Ambient, InversePower)) +
+ geom_line(aes(color=InversePower), size=3, lineend="round", linejoin="mitre") +
+ scale_color_gradient(low="yellow", high="red") +
+ ggtitle("Ambient vs InversePower")
+
+engine.plot.o2_i1 = ggplot(engine.df, aes(Ambient, InversePower)) +
+ geom_line(aes(color=InversePower), size=3, lineend="round", linejoin="mitre") +
+ scale_color_gradient(low="yellow", high="red") +
+ coord_flip() +
+ ggtitle("InversePower vs Ambient")
+
+if (require(gridExtra)) {
+ engine.plots = arrangeGrob(engine.plot.i1_o1, engine.plot.o1_i1, engine.plot.i1_o2, engine.plot.o2_i1, ncol=2, top=engine.name)
+ ggsave(paste0(engine.name, ".pdf"), engine.plots)
+ if (require(grid)) {
+ grid.newpage()
+ grid.draw(engine.plots)
+ }
+}
diff --git a/examples/mamdani/SimpleDimmerInverse.cpp b/examples/mamdani/SimpleDimmerInverse.cpp
new file mode 100644
index 0000000..1c22275
--- /dev/null
+++ b/examples/mamdani/SimpleDimmerInverse.cpp
@@ -0,0 +1,70 @@
+#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("SimpleDimmerInverse");
+engine->setDescription("");
+
+InputVariable* Ambient = new InputVariable;
+Ambient->setName("Ambient");
+Ambient->setDescription("");
+Ambient->setEnabled(true);
+Ambient->setRange(0.000, 1.000);
+Ambient->setLockValueInRange(false);
+Ambient->addTerm(new Triangle("DARK", 0.000, 0.250, 0.500));
+Ambient->addTerm(new Triangle("MEDIUM", 0.250, 0.500, 0.750));
+Ambient->addTerm(new Triangle("BRIGHT", 0.500, 0.750, 1.000));
+engine->addInputVariable(Ambient);
+
+OutputVariable* Power = new OutputVariable;
+Power->setName("Power");
+Power->setDescription("");
+Power->setEnabled(true);
+Power->setRange(0.000, 1.000);
+Power->setLockValueInRange(false);
+Power->setAggregation(new Maximum);
+Power->setDefuzzifier(new Centroid(200));
+Power->setDefaultValue(fl::nan);
+Power->setLockPreviousValue(false);
+Power->addTerm(new Triangle("LOW", 0.000, 0.250, 0.500));
+Power->addTerm(new Triangle("MEDIUM", 0.250, 0.500, 0.750));
+Power->addTerm(new Triangle("HIGH", 0.500, 0.750, 1.000));
+engine->addOutputVariable(Power);
+
+OutputVariable* InversePower = new OutputVariable;
+InversePower->setName("InversePower");
+InversePower->setDescription("");
+InversePower->setEnabled(true);
+InversePower->setRange(0.000, 1.000);
+InversePower->setLockValueInRange(false);
+InversePower->setAggregation(new Maximum);
+InversePower->setDefuzzifier(new Centroid(500));
+InversePower->setDefaultValue(fl::nan);
+InversePower->setLockPreviousValue(false);
+InversePower->addTerm(new Cosine("LOW", 0.200, 0.500));
+InversePower->addTerm(new Cosine("MEDIUM", 0.500, 0.500));
+InversePower->addTerm(new Cosine("HIGH", 0.800, 0.500));
+engine->addOutputVariable(InversePower);
+
+RuleBlock* ruleBlock = new RuleBlock;
+ruleBlock->setName("");
+ruleBlock->setDescription("");
+ruleBlock->setEnabled(true);
+ruleBlock->setConjunction(fl::null);
+ruleBlock->setDisjunction(fl::null);
+ruleBlock->setImplication(new Minimum);
+ruleBlock->setActivation(new General);
+ruleBlock->addRule(Rule::parse("if Ambient is DARK then Power is HIGH", engine));
+ruleBlock->addRule(Rule::parse("if Ambient is MEDIUM then Power is MEDIUM", engine));
+ruleBlock->addRule(Rule::parse("if Ambient is BRIGHT then Power is LOW", engine));
+ruleBlock->addRule(Rule::parse("if Power is LOW then InversePower is HIGH", engine));
+ruleBlock->addRule(Rule::parse("if Power is MEDIUM then InversePower is MEDIUM", engine));
+ruleBlock->addRule(Rule::parse("if Power is HIGH then InversePower is LOW", engine));
+engine->addRuleBlock(ruleBlock);
+
+
+}
diff --git a/examples/mamdani/SimpleDimmerInverse.fcl b/examples/mamdani/SimpleDimmerInverse.fcl
new file mode 100644
index 0000000..d8043d3
--- /dev/null
+++ b/examples/mamdani/SimpleDimmerInverse.fcl
@@ -0,0 +1,51 @@
+//Code automatically generated with fuzzylite 6.0.
+
+FUNCTION_BLOCK SimpleDimmerInverse
+
+VAR_INPUT
+ Ambient: REAL;
+END_VAR
+
+VAR_OUTPUT
+ Power: REAL;
+ InversePower: REAL;
+END_VAR
+
+FUZZIFY Ambient
+ RANGE := (0.000 .. 1.000);
+ TERM DARK := Triangle 0.000 0.250 0.500;
+ TERM MEDIUM := Triangle 0.250 0.500 0.750;
+ TERM BRIGHT := Triangle 0.500 0.750 1.000;
+END_FUZZIFY
+
+DEFUZZIFY Power
+ RANGE := (0.000 .. 1.000);
+ TERM LOW := Triangle 0.000 0.250 0.500;
+ TERM MEDIUM := Triangle 0.250 0.500 0.750;
+ TERM HIGH := Triangle 0.500 0.750 1.000;
+ METHOD : COG;
+ ACCU : MAX;
+ DEFAULT := nan;
+END_DEFUZZIFY
+
+DEFUZZIFY InversePower
+ RANGE := (0.000 .. 1.000);
+ TERM LOW := Cosine 0.200 0.500;
+ TERM MEDIUM := Cosine 0.500 0.500;
+ TERM HIGH := Cosine 0.800 0.500;
+ METHOD : COG;
+ ACCU : MAX;
+ DEFAULT := nan;
+END_DEFUZZIFY
+
+RULEBLOCK
+ ACT : MIN;
+ RULE 1 : if Ambient is DARK then Power is HIGH
+ RULE 2 : if Ambient is MEDIUM then Power is MEDIUM
+ RULE 3 : if Ambient is BRIGHT then Power is LOW
+ RULE 4 : if Power is LOW then InversePower is HIGH
+ RULE 5 : if Power is MEDIUM then InversePower is MEDIUM
+ RULE 6 : if Power is HIGH then InversePower is LOW
+END_RULEBLOCK
+
+END_FUNCTION_BLOCK
diff --git a/examples/mamdani/SimpleDimmerInverse.fis b/examples/mamdani/SimpleDimmerInverse.fis
new file mode 100644
index 0000000..b044014
--- /dev/null
+++ b/examples/mamdani/SimpleDimmerInverse.fis
@@ -0,0 +1,46 @@
+#Code automatically generated with fuzzylite 6.0.
+
+[System]
+Name='SimpleDimmerInverse'
+Type='mamdani'
+Version=6.0
+NumInputs=1
+NumOutputs=2
+NumRules=6
+AndMethod='min'
+OrMethod='max'
+ImpMethod='min'
+AggMethod='max'
+DefuzzMethod='centroid'
+
+[Input1]
+Name='Ambient'
+Range=[0.000 1.000]
+NumMFs=3
+MF1='DARK':'trimf',[0.000 0.250 0.500]
+MF2='MEDIUM':'trimf',[0.250 0.500 0.750]
+MF3='BRIGHT':'trimf',[0.500 0.750 1.000]
+
+[Output1]
+Name='Power'
+Range=[0.000 1.000]
+NumMFs=3
+MF1='LOW':'trimf',[0.000 0.250 0.500]
+MF2='MEDIUM':'trimf',[0.250 0.500 0.750]
+MF3='HIGH':'trimf',[0.500 0.750 1.000]
+
+[Output2]
+Name='InversePower'
+Range=[0.000 1.000]
+NumMFs=3
+MF1='LOW':'cosinemf',[0.200 0.500]
+MF2='MEDIUM':'cosinemf',[0.500 0.500]
+MF3='HIGH':'cosinemf',[0.800 0.500]
+
+[Rules]
+1.000 , 3.000 0.000 (1.000) : 1
+2.000 , 2.000 0.000 (1.000) : 1
+3.000 , 1.000 0.000 (1.000) : 1
+0.000 , 0.000 3.000 (1.000) : 1
+0.000 , 0.000 2.000 (1.000) : 1
+0.000 , 0.000 1.000 (1.000) : 1
diff --git a/examples/mamdani/SimpleDimmerInverse.fld b/examples/mamdani/SimpleDimmerInverse.fld
new file mode 100644
index 0000000..843c017
--- /dev/null
+++ b/examples/mamdani/SimpleDimmerInverse.fld
@@ -0,0 +1,1025 @@
+Ambient Power InversePower
+0.000000000 nan nan
+0.000977517 0.750000000 0.221671502
+0.001955034 0.750000000 0.220306607
+0.002932551 0.750000000 0.219272108
+0.003910068 0.750000000 0.218372593
+0.004887586 0.750000000 0.217595038
+0.005865103 0.750000000 0.216891736
+0.006842620 0.750000000 0.216242049
+0.007820137 0.750000000 0.215635499
+0.008797654 0.750000000 0.215066121
+0.009775171 0.750000000 0.214530188
+0.010752688 0.750000000 0.214025192
+0.011730205 0.750000000 0.213535928
+0.012707722 0.750000000 0.213059653
+0.013685239 0.750000000 0.212609497
+0.014662757 0.750000000 0.212181500
+0.015640274 0.750000000 0.211749797
+0.016617791 0.750000000 0.211342499
+0.017595308 0.750000000 0.210947791
+0.018572825 0.750000000 0.210554977
+0.019550342 0.750000000 0.210185583
+0.020527859 0.750000000 0.209810047
+0.021505376 0.750000000 0.209453273
+0.022482893 0.750000000 0.209099710
+0.023460411 0.750000000 0.208754784
+0.024437928 0.750000000 0.208418460
+0.025415445 0.750000000 0.208108896
+0.026392962 0.750000000 0.207822337
+0.027370479 0.750000000 0.207557090
+0.028347996 0.750000000 0.207310043
+0.029325513 0.750000000 0.207080132
+0.030303030 0.750000000 0.206864987
+0.031280547 0.750000000 0.206663695
+0.032258065 0.750000000 0.206474685
+0.033235582 0.750000000 0.206296887
+0.034213099 0.750000000 0.206129563
+0.035190616 0.750000000 0.205971282
+0.036168133 0.750000000 0.205822154
+0.037145650 0.750000000 0.205680293
+0.038123167 0.750000000 0.205546551
+0.039100684 0.750000000 0.205418994
+0.040078201 0.750000000 0.205298019
+0.041055718 0.750000000 0.205182743
+0.042033236 0.750000000 0.205072718
+0.043010753 0.750000000 0.204968065
+0.043988270 0.750000000 0.204867643
+0.044965787 0.750000000 0.204772102
+0.045943304 0.750000000 0.204680372
+0.046920821 0.750000000 0.204592478
+0.047898338 0.750000000 0.204508389
+0.048875855 0.750000000 0.204427324
+0.049853372 0.750000000 0.204349869
+0.050830890 0.750000000 0.204275190
+0.051808407 0.750000000 0.204203265
+0.052785924 0.750000000 0.204134275
+0.053763441 0.750000000 0.204067513
+0.054740958 0.750000000 0.204003359
+0.055718475 0.750000000 0.203941436
+0.056695992 0.750000000 0.203881398
+0.057673509 0.750000000 0.203823826
+0.058651026 0.750000000 0.203767941
+0.059628543 0.750000000 0.203713842
+0.060606061 0.750000000 0.203661714
+0.061583578 0.750000000 0.203611030
+0.062561095 0.750000000 0.203562034
+0.063538612 0.750000000 0.203514617
+0.064516129 0.750000000 0.203468446
+0.065493646 0.750000000 0.203423862
+0.066471163 0.750000000 0.203380551
+0.067448680 0.750000000 0.203338322
+0.068426197 0.750000000 0.203297578
+0.069403715 0.750000000 0.203257869
+0.070381232 0.750000000 0.203219115
+0.071358749 0.750000000 0.203181723
+0.072336266 0.750000000 0.203145191
+0.073313783 0.750000000 0.203109538
+0.074291300 0.750000000 0.203075066
+0.075268817 0.750000000 0.203041351
+0.076246334 0.750000000 0.203008438
+0.077223851 0.750000000 0.202976564
+0.078201369 0.750000000 0.202945359
+0.079178886 0.750000000 0.202914878
+0.080156403 0.750000000 0.202885326
+0.081133920 0.750000000 0.202856368
+0.082111437 0.750000000 0.202828056
+0.083088954 0.750000000 0.202800588
+0.084066471 0.750000000 0.202773648
+0.085043988 0.750000000 0.202747278
+0.086021505 0.750000000 0.202721688
+0.086999022 0.750000000 0.202696569
+0.087976540 0.750000000 0.202671946
+0.088954057 0.750000000 0.202648053
+0.089931574 0.750000000 0.202624584
+0.090909091 0.750000000 0.202601536
+0.091886608 0.750000000 0.202579184
+0.092864125 0.750000000 0.202557213
+0.093841642 0.750000000 0.202535613
+0.094819159 0.750000000 0.202514642
+0.095796676 0.750000000 0.202494036
+0.096774194 0.750000000 0.202473765
+0.097751711 0.750000000 0.202454042
+0.098729228 0.750000000 0.202434684
+0.099706745 0.750000000 0.202415629
+0.100684262 0.750000000 0.202397043
+0.101661779 0.750000000 0.202378829
+0.102639296 0.750000000 0.202360889
+0.103616813 0.750000000 0.202343345
+0.104594330 0.750000000 0.202326181
+0.105571848 0.750000000 0.202309267
+0.106549365 0.750000000 0.202292677
+0.107526882 0.750000000 0.202276482
+0.108504399 0.750000000 0.202260514
+0.109481916 0.750000000 0.202244803
+0.110459433 0.750000000 0.202229501
+0.111436950 0.750000000 0.202214406
+0.112414467 0.750000000 0.202199515
+0.113391984 0.750000000 0.202185031
+0.114369501 0.750000000 0.202170746
+0.115347019 0.750000000 0.202156646
+0.116324536 0.750000000 0.202142887
+0.117302053 0.750000000 0.202129352
+0.118279570 0.750000000 0.202115988
+0.119257087 0.750000000 0.202102901
+0.120234604 0.750000000 0.202090065
+0.121212121 0.750000000 0.202077384
+0.122189638 0.750000000 0.202064922
+0.123167155 0.750000000 0.202052737
+0.124144673 0.750000000 0.202040694
+0.125122190 0.750000000 0.202028815
+0.126099707 0.750000000 0.202017236
+0.127077224 0.750000000 0.202005788
+0.128054741 0.750000000 0.201994470
+0.129032258 0.750000000 0.201983442
+0.130009775 0.750000000 0.201972551
+0.130987292 0.750000000 0.201961779
+0.131964809 0.750000000 0.201951246
+0.132942326 0.750000000 0.201940877
+0.133919844 0.750000000 0.201930618
+0.134897361 0.750000000 0.201920549
+0.135874878 0.750000000 0.201910669
+0.136852395 0.750000000 0.201900891
+0.137829912 0.750000000 0.201891259
+0.138807429 0.750000000 0.201881839
+0.139784946 0.750000000 0.201872513
+0.140762463 0.750000000 0.201863294
+0.141739980 0.750000000 0.201854307
+0.142717498 0.750000000 0.201845406
+0.143695015 0.750000000 0.201836590
+0.144672532 0.750000000 0.201827998
+0.145650049 0.750000000 0.201819498
+0.146627566 0.750000000 0.201811078
+0.147605083 0.750000000 0.201802845
+0.148582600 0.750000000 0.201794724
+0.149560117 0.750000000 0.201786676
+0.150537634 0.750000000 0.201778785
+0.151515152 0.750000000 0.201771022
+0.152492669 0.750000000 0.201763326
+0.153470186 0.750000000 0.201755760
+0.154447703 0.750000000 0.201748336
+0.155425220 0.750000000 0.201740974
+0.156402737 0.750000000 0.201733719
+0.157380254 0.750000000 0.201726616
+0.158357771 0.750000000 0.201719570
+0.159335288 0.750000000 0.201712612
+0.160312805 0.750000000 0.201705813
+0.161290323 0.750000000 0.201699068
+0.162267840 0.750000000 0.201692394
+0.163245357 0.750000000 0.201685884
+0.164222874 0.750000000 0.201679424
+0.165200391 0.750000000 0.201673024
+0.166177908 0.750000000 0.201666789
+0.167155425 0.750000000 0.201660600
+0.168132942 0.750000000 0.201654463
+0.169110459 0.750000000 0.201648489
+0.170087977 0.750000000 0.201642558
+0.171065494 0.750000000 0.201636676
+0.172043011 0.750000000 0.201630951
+0.173020528 0.750000000 0.201625266
+0.173998045 0.750000000 0.201619630
+0.174975562 0.750000000 0.201614142
+0.175953079 0.750000000 0.201608691
+0.176930596 0.750000000 0.201603293
+0.177908113 0.750000000 0.201598032
+0.178885630 0.750000000 0.201592805
+0.179863148 0.750000000 0.201587638
+0.180840665 0.750000000 0.201582594
+0.181818182 0.750000000 0.201577581
+0.182795699 0.750000000 0.201572640
+0.183773216 0.750000000 0.201567801
+0.184750733 0.750000000 0.201562993
+0.185728250 0.750000000 0.201558272
+0.186705767 0.750000000 0.201553632
+0.187683284 0.750000000 0.201549019
+0.188660802 0.750000000 0.201544513
+0.189638319 0.750000000 0.201540063
+0.190615836 0.750000000 0.201535638
+0.191593353 0.750000000 0.201531342
+0.192570870 0.750000000 0.201527074
+0.193548387 0.750000000 0.201522856
+0.194525904 0.750000000 0.201518740
+0.195503421 0.750000000 0.201514646
+0.196480938 0.750000000 0.201510635
+0.197458456 0.750000000 0.201506688
+0.198435973 0.750000000 0.201502762
+0.199413490 0.750000000 0.201498955
+0.200391007 0.750000000 0.201495170
+0.201368524 0.750000000 0.201491445
+0.202346041 0.750000000 0.201487799
+0.203323558 0.750000000 0.201484172
+0.204301075 0.750000000 0.201480648
+0.205278592 0.750000000 0.201477155
+0.206256109 0.750000000 0.201473716
+0.207233627 0.750000000 0.201470354
+0.208211144 0.750000000 0.201467007
+0.209188661 0.750000000 0.201463769
+0.210166178 0.750000000 0.201460550
+0.211143695 0.750000000 0.201457402
+0.212121212 0.750000000 0.201454307
+0.213098729 0.750000000 0.201451251
+0.214076246 0.750000000 0.201448278
+0.215053763 0.750000000 0.201445318
+0.216031281 0.750000000 0.201442464
+0.217008798 0.750000000 0.201439621
+0.217986315 0.750000000 0.201436866
+0.218963832 0.750000000 0.201434139
+0.219941349 0.750000000 0.201431486
+0.220918866 0.750000000 0.201428872
+0.221896383 0.750000000 0.201426324
+0.222873900 0.750000000 0.201423821
+0.223851417 0.750000000 0.201421381
+0.224828935 0.750000000 0.201418988
+0.225806452 0.750000000 0.201416661
+0.226783969 0.750000000 0.201414375
+0.227761486 0.750000000 0.201412163
+0.228739003 0.750000000 0.201409982
+0.229716520 0.750000000 0.201407891
+0.230694037 0.750000000 0.201405828
+0.231671554 0.750000000 0.201403846
+0.232649071 0.750000000 0.201401913
+0.233626588 0.750000000 0.201400032
+0.234604106 0.750000000 0.201398232
+0.235581623 0.750000000 0.201396477
+0.236559140 0.750000000 0.201394788
+0.237536657 0.750000000 0.201393176
+0.238514174 0.750000000 0.201391621
+0.239491691 0.750000000 0.201390128
+0.240469208 0.750000000 0.201388719
+0.241446725 0.750000000 0.201387385
+0.242424242 0.750000000 0.201386125
+0.243401760 0.750000000 0.201384946
+0.244379277 0.750000000 0.201383854
+0.245356794 0.750000000 0.201382854
+0.246334311 0.750000000 0.201381954
+0.247311828 0.750000000 0.201381173
+0.248289345 0.750000000 0.201380522
+0.249266862 0.750000000 0.201380043
+0.250244379 0.749633789 0.201846207
+0.251221896 0.748176070 0.203676892
+0.252199413 0.746729651 0.205470420
+0.253176931 0.745307268 0.207232921
+0.254154448 0.743901152 0.208969603
+0.255131965 0.742505384 0.210681995
+0.256109482 0.741119851 0.212371422
+0.257086999 0.739744439 0.214039141
+0.258064516 0.738388970 0.215686343
+0.259042033 0.737050250 0.217314161
+0.260019550 0.735720805 0.218923667
+0.260997067 0.734400539 0.220515879
+0.261974585 0.733089356 0.222091759
+0.262952102 0.731794526 0.223649762
+0.263929619 0.730516794 0.225192151
+0.264907136 0.729247388 0.226720383
+0.265884653 0.727986227 0.228232727
+0.266862170 0.726733231 0.229730635
+0.267839687 0.725493442 0.231216292
+0.268817204 0.724270974 0.232685872
+0.269794721 0.723055990 0.234144013
+0.270772239 0.721848423 0.235588818
+0.271749756 0.720648204 0.237021028
+0.272727273 0.719458438 0.238442032
+0.273704790 0.718286101 0.239849792
+0.274682307 0.717120499 0.241247924
+0.275659824 0.715961575 0.242632618
+0.276637341 0.714809270 0.244008759
+0.277614858 0.713665012 0.245371680
+0.278592375 0.712538184 0.246726670
+0.279569892 0.711417421 0.248069026
+0.280547410 0.710302674 0.249403669
+0.281524927 0.709193894 0.250726587
+0.282502444 0.708091063 0.252041647
+0.283479961 0.707005566 0.253346179
+0.284457478 0.705925531 0.254642389
+0.285434995 0.704850918 0.255929518
+0.286412512 0.703781686 0.257207578
+0.287390029 0.702717795 0.258478219
+0.288367546 0.701668621 0.259738800
+0.289345064 0.700625580 0.260993370
+0.290322581 0.699587425 0.262237549
+0.291300098 0.698554121 0.263475527
+0.292277615 0.697525635 0.264705239
+0.293255132 0.696509490 0.265927232
+0.294232649 0.695500037 0.267143201
+0.295210166 0.694494984 0.268349791
+0.296187683 0.693494303 0.269551115
+0.297165200 0.692497965 0.270744440
+0.298142717 0.691511860 0.271931138
+0.299120235 0.690532874 0.273112342
+0.300097752 0.689557847 0.274284946
+0.301075269 0.688586755 0.275452739
+0.302052786 0.687619575 0.276613621
+0.303030303 0.686660765 0.277768031
+0.304007820 0.685709376 0.278917856
+0.304985337 0.684761545 0.280059697
+0.305962854 0.683817249 0.281196818
+0.306940371 0.682876470 0.282328684
+0.307917889 0.681942420 0.283453563
+0.308895406 0.681015980 0.284574256
+0.309872923 0.680092726 0.285688972
+0.310850440 0.679172643 0.286798049
+0.311827957 0.678255714 0.287903138
+0.312805474 0.677344077 0.289001763
+0.313782991 0.676440126 0.290095833
+0.314760508 0.675539023 0.291186105
+0.315738025 0.674640752 0.292269631
+0.316715543 0.673745302 0.293349456
+0.317693060 0.672853893 0.294425247
+0.318670577 0.671970143 0.295495017
+0.319648094 0.671088924 0.296561328
+0.320625611 0.670210227 0.297623455
+0.321603128 0.669334041 0.298680243
+0.322580645 0.668460818 0.299733738
+0.323558162 0.667595126 0.300783030
+0.324535679 0.666731672 0.301827515
+0.325513196 0.665870450 0.302868868
+0.326490714 0.665011449 0.303906100
+0.327468231 0.664154662 0.304938935
+0.328445748 0.663304848 0.305968793
+0.329423265 0.662457164 0.306994695
+0.330400782 0.661611439 0.308016510
+0.331378299 0.660767667 0.309035496
+0.332355816 0.659925840 0.310050754
+0.333333333 0.659089669 0.311062154
+0.334310850 0.658255868 0.312070870
+0.335288368 0.657423770 0.313076130
+0.336265885 0.656593371 0.314077703
+0.337243402 0.655764665 0.315076729
+0.338220919 0.654940458 0.316071981
+0.339198436 0.654118746 0.317062640
+0.340175953 0.653298497 0.318050990
+0.341153470 0.652479705 0.319036167
+0.342130987 0.651662368 0.320016921
+0.343108504 0.650848521 0.320995595
+0.344086022 0.650037186 0.321971698
+0.345063539 0.649227083 0.322943523
+0.346041056 0.648418210 0.323913488
+0.347018573 0.647610563 0.324881463
+0.347996090 0.646805538 0.325845303
+0.348973607 0.646002934 0.326807497
+0.349951124 0.645201343 0.327768050
+0.350928641 0.644400763 0.328725018
+0.351906158 0.643601190 0.329680354
+0.352883675 0.642803505 0.330634256
+0.353861193 0.642008044 0.331585332
+0.354838710 0.641213384 0.332534700
+0.355816227 0.640419523 0.333482835
+0.356793744 0.639626459 0.334428830
+0.357771261 0.638834675 0.335373101
+0.358748778 0.638044814 0.336316337
+0.359726295 0.637255548 0.337258027
+0.360703812 0.636466876 0.338198057
+0.361681329 0.635678797 0.339137245
+0.362658847 0.634891512 0.340075384
+0.363636364 0.634105743 0.341012014
+0.364613881 0.633320368 0.341947992
+0.365591398 0.632535386 0.342883313
+0.366568915 0.631750798 0.343817374
+0.367546432 0.630966638 0.344750971
+0.368523949 0.630183479 0.345684104
+0.369501466 0.629400516 0.346616504
+0.370478983 0.628617749 0.347548540
+0.371456500 0.627835178 0.348480299
+0.372434018 0.627052803 0.349411745
+0.373411535 0.626270772 0.350343037
+0.374389052 0.625488759 0.351274237
+0.375366569 0.624706745 0.352205426
+0.376344086 0.623924731 0.353136787
+0.377321603 0.623142717 0.354068240
+0.378299120 0.622360434 0.354999866
+0.379276637 0.621577912 0.355932108
+0.380254154 0.620795194 0.356864629
+0.381231672 0.620012280 0.357797428
+0.382209189 0.619229171 0.358731329
+0.383186706 0.618445288 0.359665733
+0.384164223 0.617660798 0.360600602
+0.385141740 0.616875914 0.361536789
+0.386119257 0.616090638 0.362473899
+0.387096774 0.615304967 0.363411663
+0.388074291 0.614518130 0.364350853
+0.389051808 0.613730200 0.365291500
+0.390029326 0.612941676 0.366232990
+0.391006843 0.612152558 0.367175921
+0.391984360 0.611362846 0.368120944
+0.392961877 0.610571682 0.369067005
+0.393939394 0.609778818 0.370014435
+0.394916911 0.608985156 0.370964689
+0.395894428 0.608190696 0.371916178
+0.396871945 0.607395436 0.372868906
+0.397849462 0.606598545 0.373825246
+0.398826979 0.605799225 0.374783038
+0.399804497 0.604998896 0.375742272
+0.400782014 0.604197558 0.376705194
+0.401759531 0.603395208 0.377670184
+0.402737048 0.602591157 0.378636823
+0.403714565 0.601783817 0.379607193
+0.404692082 0.600975251 0.380580296
+0.405669599 0.600165455 0.381555265
+0.406647116 0.599354429 0.382533989
+0.407624633 0.598541740 0.383516150
+0.408602151 0.597724765 0.384500397
+0.409579668 0.596906338 0.385488433
+0.410557185 0.596086453 0.386480623
+0.411534702 0.595265107 0.387475131
+0.412512219 0.594442248 0.388473492
+0.413489736 0.593613964 0.389476718
+0.414467253 0.592783988 0.390482499
+0.415444770 0.591952316 0.391491555
+0.416422287 0.591118941 0.392504668
+0.417399804 0.590283858 0.393520477
+0.418377322 0.589442972 0.394539685
+0.419354839 0.588599687 0.395563270
+0.420332356 0.587754450 0.396589695
+0.421309873 0.586907257 0.397619709
+0.422287390 0.586058099 0.398654373
+0.423264907 0.585202955 0.399692025
+0.424242424 0.584344508 0.400733540
+0.425219941 0.583483842 0.401779909
+0.426197458 0.582620947 0.402829422
+0.427174976 0.581755815 0.403883177
+0.428152493 0.580884615 0.404941902
+0.429130010 0.580009054 0.406003935
+0.430107527 0.579130986 0.407070716
+0.431085044 0.578250399 0.408142475
+0.432062561 0.577367283 0.409217712
+0.433040078 0.576478121 0.410298357
+0.434017595 0.575583374 0.411383856
+0.434995112 0.574685810 0.412473008
+0.435972630 0.573785416 0.413568413
+0.436950147 0.572882178 0.414668387
+0.437927664 0.571973027 0.415772198
+0.438905181 0.571056884 0.416883317
+0.439882698 0.570137591 0.417998533
+0.440860215 0.569215132 0.419118581
+0.441837732 0.568289490 0.420245634
+0.442815249 0.567358177 0.421376894
+0.443792766 0.566418275 0.422514343
+0.444770283 0.565474860 0.423658069
+0.445747801 0.564527914 0.424806212
+0.446725318 0.563577417 0.425962211
+0.447702835 0.562621612 0.427123480
+0.448680352 0.561655405 0.428290282
+0.449657869 0.560685294 0.429465166
+0.450635386 0.559711253 0.430644890
+0.451612903 0.558733259 0.431832308
+0.452590420 0.557750445 0.433026364
+0.453567937 0.556755188 0.434226000
+0.454545455 0.555755595 0.435434924
+0.455522972 0.554751638 0.436649146
+0.456500489 0.553743287 0.437871753
+0.457478006 0.552730515 0.439101626
+0.458455523 0.551703450 0.440338101
+0.459433040 0.550671354 0.441584214
+0.460410557 0.549634415 0.442836126
+0.461388074 0.548592599 0.444098260
+0.462365591 0.547545872 0.445367270
+0.463343109 0.546484786 0.446645195
+0.464320626 0.545416893 0.447931951
+0.465298143 0.544343629 0.449226535
+0.466275660 0.543264953 0.450531713
+0.467253177 0.542180826 0.451843888
+0.468230694 0.541082374 0.453168194
+0.469208211 0.539975079 0.454499403
+0.470185728 0.538861828 0.455843131
+0.471163245 0.537742573 0.457194500
+0.472140762 0.536617267 0.458558366
+0.473118280 0.535477779 0.459930679
+0.474095797 0.534327120 0.461315854
+0.475073314 0.533169855 0.462709935
+0.476050831 0.532005928 0.464117671
+0.477028348 0.530835281 0.465534381
+0.478005865 0.529650711 0.466952620
+0.478983382 0.528452318 0.468377996
+0.479960899 0.527246594 0.469806093
+0.480938416 0.526033471 0.471239943
+0.481915934 0.524812880 0.472678374
+0.482893451 0.523578752 0.474120606
+0.483870968 0.522327784 0.475569070
+0.484848485 0.521068672 0.477020289
+0.485826002 0.519801335 0.478476759
+0.486803519 0.518525692 0.479938796
+0.487781036 0.517237031 0.481403707
+0.488758553 0.515928105 0.482873363
+0.489736070 0.514610118 0.484347894
+0.490713587 0.513282977 0.485826893
+0.491691105 0.511946585 0.487309221
+0.492668622 0.510597845 0.488795133
+0.493646139 0.509224947 0.490284775
+0.494623656 0.507841954 0.491777716
+0.495601173 0.506448755 0.493273513
+0.496578690 0.505045237 0.494770784
+0.497556207 0.503630203 0.496268873
+0.498533724 0.502186589 0.497766318
+0.499511241 0.500731707 0.499259366
+0.500488759 0.499268293 0.500740634
+0.501466276 0.497813411 0.502233682
+0.502443793 0.496369797 0.503731127
+0.503421310 0.494954763 0.505229216
+0.504398827 0.493551245 0.506726487
+0.505376344 0.492158046 0.508222284
+0.506353861 0.490775053 0.509715225
+0.507331378 0.489402155 0.511204867
+0.508308895 0.488053415 0.512690779
+0.509286413 0.486717023 0.514173107
+0.510263930 0.485389882 0.515652106
+0.511241447 0.484071895 0.517126637
+0.512218964 0.482762969 0.518596293
+0.513196481 0.481474308 0.520061204
+0.514173998 0.480198665 0.521523241
+0.515151515 0.478931328 0.522979711
+0.516129032 0.477672216 0.524430930
+0.517106549 0.476421248 0.525879394
+0.518084066 0.475187120 0.527321626
+0.519061584 0.473966529 0.528760057
+0.520039101 0.472753406 0.530193907
+0.521016618 0.471547682 0.531622004
+0.521994135 0.470349289 0.533047380
+0.522971652 0.469164719 0.534465619
+0.523949169 0.467994072 0.535882329
+0.524926686 0.466830145 0.537290065
+0.525904203 0.465672880 0.538684146
+0.526881720 0.464522221 0.540069321
+0.527859238 0.463382733 0.541441634
+0.528836755 0.462257427 0.542805500
+0.529814272 0.461138172 0.544156869
+0.530791789 0.460024921 0.545500597
+0.531769306 0.458917626 0.546831806
+0.532746823 0.457819174 0.548156112
+0.533724340 0.456735047 0.549468287
+0.534701857 0.455656371 0.550773465
+0.535679374 0.454583107 0.552068049
+0.536656891 0.453515214 0.553354805
+0.537634409 0.452454128 0.554632730
+0.538611926 0.451407401 0.555901740
+0.539589443 0.450365585 0.557163874
+0.540566960 0.449328646 0.558415786
+0.541544477 0.448296550 0.559661899
+0.542521994 0.447269485 0.560898374
+0.543499511 0.446256713 0.562128247
+0.544477028 0.445248362 0.563350854
+0.545454545 0.444244405 0.564565076
+0.546432063 0.443244812 0.565774000
+0.547409580 0.442249555 0.566973636
+0.548387097 0.441266741 0.568167692
+0.549364614 0.440288747 0.569355110
+0.550342131 0.439314706 0.570534834
+0.551319648 0.438344595 0.571709718
+0.552297165 0.437378388 0.572876520
+0.553274682 0.436422583 0.574037789
+0.554252199 0.435472086 0.575193788
+0.555229717 0.434525140 0.576341931
+0.556207234 0.433581725 0.577485657
+0.557184751 0.432641823 0.578623106
+0.558162268 0.431710510 0.579754366
+0.559139785 0.430784868 0.580881419
+0.560117302 0.429862409 0.582001467
+0.561094819 0.428943116 0.583116683
+0.562072336 0.428026973 0.584227802
+0.563049853 0.427117822 0.585331613
+0.564027370 0.426214584 0.586431587
+0.565004888 0.425314190 0.587526992
+0.565982405 0.424416626 0.588616144
+0.566959922 0.423521879 0.589701643
+0.567937439 0.422632717 0.590782288
+0.568914956 0.421749601 0.591857525
+0.569892473 0.420869014 0.592929284
+0.570869990 0.419990946 0.593996065
+0.571847507 0.419115385 0.595058098
+0.572825024 0.418244185 0.596116823
+0.573802542 0.417379053 0.597170578
+0.574780059 0.416516158 0.598220091
+0.575757576 0.415655492 0.599266460
+0.576735093 0.414797045 0.600307975
+0.577712610 0.413941901 0.601345627
+0.578690127 0.413092743 0.602380291
+0.579667644 0.412245550 0.603410305
+0.580645161 0.411400313 0.604436730
+0.581622678 0.410557028 0.605460315
+0.582600196 0.409716142 0.606479523
+0.583577713 0.408881059 0.607495332
+0.584555230 0.408047684 0.608508445
+0.585532747 0.407216012 0.609517501
+0.586510264 0.406386036 0.610523282
+0.587487781 0.405557752 0.611526508
+0.588465298 0.404734893 0.612524869
+0.589442815 0.403913547 0.613519377
+0.590420332 0.403093662 0.614511567
+0.591397849 0.402275235 0.615499603
+0.592375367 0.401458260 0.616483850
+0.593352884 0.400645571 0.617466011
+0.594330401 0.399834545 0.618444735
+0.595307918 0.399024749 0.619419704
+0.596285435 0.398216183 0.620392807
+0.597262952 0.397408843 0.621363177
+0.598240469 0.396604792 0.622329816
+0.599217986 0.395802442 0.623294806
+0.600195503 0.395001104 0.624257728
+0.601173021 0.394200775 0.625216962
+0.602150538 0.393401455 0.626174754
+0.603128055 0.392604564 0.627131094
+0.604105572 0.391809304 0.628083822
+0.605083089 0.391014844 0.629035311
+0.606060606 0.390221182 0.629985565
+0.607038123 0.389428318 0.630932995
+0.608015640 0.388637154 0.631879056
+0.608993157 0.387847442 0.632824079
+0.609970674 0.387058324 0.633767010
+0.610948192 0.386269800 0.634708500
+0.611925709 0.385481870 0.635649147
+0.612903226 0.384695033 0.636588337
+0.613880743 0.383909362 0.637526101
+0.614858260 0.383124086 0.638463211
+0.615835777 0.382339202 0.639399398
+0.616813294 0.381554712 0.640334267
+0.617790811 0.380770829 0.641268671
+0.618768328 0.379987720 0.642202572
+0.619745846 0.379204806 0.643135371
+0.620723363 0.378422088 0.644067892
+0.621700880 0.377639566 0.645000134
+0.622678397 0.376857283 0.645931760
+0.623655914 0.376075269 0.646863213
+0.624633431 0.375293255 0.647794574
+0.625610948 0.374511241 0.648725763
+0.626588465 0.373729228 0.649656963
+0.627565982 0.372947197 0.650588255
+0.628543500 0.372164822 0.651519701
+0.629521017 0.371382251 0.652451460
+0.630498534 0.370599484 0.653383496
+0.631476051 0.369816521 0.654315896
+0.632453568 0.369033362 0.655249029
+0.633431085 0.368249202 0.656182626
+0.634408602 0.367464614 0.657116687
+0.635386119 0.366679632 0.658052008
+0.636363636 0.365894257 0.658987986
+0.637341153 0.365108488 0.659924616
+0.638318671 0.364321203 0.660862755
+0.639296188 0.363533124 0.661801943
+0.640273705 0.362744452 0.662741973
+0.641251222 0.361955186 0.663683663
+0.642228739 0.361165325 0.664626899
+0.643206256 0.360373541 0.665571170
+0.644183773 0.359580477 0.666517165
+0.645161290 0.358786616 0.667465300
+0.646138807 0.357991956 0.668414668
+0.647116325 0.357196495 0.669365744
+0.648093842 0.356398810 0.670319646
+0.649071359 0.355599237 0.671274982
+0.650048876 0.354798657 0.672231950
+0.651026393 0.353997066 0.673192503
+0.652003910 0.353194462 0.674154697
+0.652981427 0.352389437 0.675118537
+0.653958944 0.351581790 0.676086512
+0.654936461 0.350772917 0.677056477
+0.655913978 0.349962814 0.678028302
+0.656891496 0.349151479 0.679004405
+0.657869013 0.348337632 0.679983079
+0.658846530 0.347520295 0.680963833
+0.659824047 0.346701503 0.681949010
+0.660801564 0.345881254 0.682937360
+0.661779081 0.345059542 0.683928019
+0.662756598 0.344235335 0.684923271
+0.663734115 0.343406629 0.685922297
+0.664711632 0.342576230 0.686923870
+0.665689150 0.341744132 0.687929130
+0.666666667 0.340910331 0.688937846
+0.667644184 0.340074160 0.689949246
+0.668621701 0.339232333 0.690964504
+0.669599218 0.338388561 0.691983490
+0.670576735 0.337542836 0.693005305
+0.671554252 0.336695152 0.694031207
+0.672531769 0.335845338 0.695061065
+0.673509286 0.334988551 0.696093900
+0.674486804 0.334129550 0.697131132
+0.675464321 0.333268328 0.698172485
+0.676441838 0.332404874 0.699216970
+0.677419355 0.331539182 0.700266262
+0.678396872 0.330665959 0.701319757
+0.679374389 0.329789773 0.702376545
+0.680351906 0.328911076 0.703438672
+0.681329423 0.328029857 0.704504983
+0.682306940 0.327146107 0.705574753
+0.683284457 0.326254698 0.706650544
+0.684261975 0.325359248 0.707730369
+0.685239492 0.324460977 0.708813895
+0.686217009 0.323559874 0.709904167
+0.687194526 0.322655923 0.710998237
+0.688172043 0.321744286 0.712096862
+0.689149560 0.320827357 0.713201951
+0.690127077 0.319907274 0.714311028
+0.691104594 0.318984020 0.715425744
+0.692082111 0.318057580 0.716546437
+0.693059629 0.317123530 0.717671316
+0.694037146 0.316182751 0.718803182
+0.695014663 0.315238455 0.719940303
+0.695992180 0.314290624 0.721082144
+0.696969697 0.313339235 0.722231969
+0.697947214 0.312380425 0.723386379
+0.698924731 0.311413245 0.724547261
+0.699902248 0.310442153 0.725715054
+0.700879765 0.309467126 0.726887658
+0.701857283 0.308488140 0.728068862
+0.702834800 0.307502035 0.729255560
+0.703812317 0.306505697 0.730448885
+0.704789834 0.305505016 0.731650209
+0.705767351 0.304499963 0.732856799
+0.706744868 0.303490510 0.734072768
+0.707722385 0.302474365 0.735294761
+0.708699902 0.301445879 0.736524473
+0.709677419 0.300412575 0.737762451
+0.710654936 0.299374420 0.739006630
+0.711632454 0.298331379 0.740261200
+0.712609971 0.297282205 0.741521781
+0.713587488 0.296218314 0.742792422
+0.714565005 0.295149082 0.744070482
+0.715542522 0.294074469 0.745357611
+0.716520039 0.292994434 0.746653821
+0.717497556 0.291908937 0.747958353
+0.718475073 0.290806106 0.749273413
+0.719452590 0.289697326 0.750596331
+0.720430108 0.288582579 0.751930974
+0.721407625 0.287461816 0.753273330
+0.722385142 0.286334988 0.754628320
+0.723362659 0.285190730 0.755991241
+0.724340176 0.284038425 0.757367382
+0.725317693 0.282879501 0.758752076
+0.726295210 0.281713899 0.760150208
+0.727272727 0.280541562 0.761557968
+0.728250244 0.279351796 0.762978972
+0.729227761 0.278151577 0.764411182
+0.730205279 0.276944010 0.765855987
+0.731182796 0.275729026 0.767314128
+0.732160313 0.274506558 0.768783708
+0.733137830 0.273266769 0.770269365
+0.734115347 0.272013773 0.771767273
+0.735092864 0.270752612 0.773279617
+0.736070381 0.269483206 0.774807849
+0.737047898 0.268205474 0.776350238
+0.738025415 0.266910644 0.777908241
+0.739002933 0.265599461 0.779484121
+0.739980450 0.264279195 0.781076333
+0.740957967 0.262949750 0.782685839
+0.741935484 0.261611030 0.784313657
+0.742913001 0.260255561 0.785960859
+0.743890518 0.258880149 0.787628578
+0.744868035 0.257494616 0.789318005
+0.745845552 0.256098848 0.791030397
+0.746823069 0.254692732 0.792767079
+0.747800587 0.253270349 0.794529580
+0.748778104 0.251823930 0.796323108
+0.749755621 0.250366211 0.798153793
+0.750733138 0.250000000 0.798619957
+0.751710655 0.250000000 0.798619478
+0.752688172 0.250000000 0.798618827
+0.753665689 0.250000000 0.798618046
+0.754643206 0.250000000 0.798617146
+0.755620723 0.250000000 0.798616146
+0.756598240 0.250000000 0.798615054
+0.757575758 0.250000000 0.798613875
+0.758553275 0.250000000 0.798612615
+0.759530792 0.250000000 0.798611281
+0.760508309 0.250000000 0.798609872
+0.761485826 0.250000000 0.798608379
+0.762463343 0.250000000 0.798606824
+0.763440860 0.250000000 0.798605212
+0.764418377 0.250000000 0.798603523
+0.765395894 0.250000000 0.798601768
+0.766373412 0.250000000 0.798599968
+0.767350929 0.250000000 0.798598087
+0.768328446 0.250000000 0.798596154
+0.769305963 0.250000000 0.798594172
+0.770283480 0.250000000 0.798592109
+0.771260997 0.250000000 0.798590018
+0.772238514 0.250000000 0.798587837
+0.773216031 0.250000000 0.798585625
+0.774193548 0.250000000 0.798583339
+0.775171065 0.250000000 0.798581012
+0.776148583 0.250000000 0.798578619
+0.777126100 0.250000000 0.798576179
+0.778103617 0.250000000 0.798573676
+0.779081134 0.250000000 0.798571128
+0.780058651 0.250000000 0.798568514
+0.781036168 0.250000000 0.798565861
+0.782013685 0.250000000 0.798563134
+0.782991202 0.250000000 0.798560379
+0.783968719 0.250000000 0.798557536
+0.784946237 0.250000000 0.798554682
+0.785923754 0.250000000 0.798551722
+0.786901271 0.250000000 0.798548749
+0.787878788 0.250000000 0.798545693
+0.788856305 0.250000000 0.798542598
+0.789833822 0.250000000 0.798539450
+0.790811339 0.250000000 0.798536231
+0.791788856 0.250000000 0.798532993
+0.792766373 0.250000000 0.798529646
+0.793743891 0.250000000 0.798526284
+0.794721408 0.250000000 0.798522845
+0.795698925 0.250000000 0.798519352
+0.796676442 0.250000000 0.798515828
+0.797653959 0.250000000 0.798512201
+0.798631476 0.250000000 0.798508555
+0.799608993 0.250000000 0.798504830
+0.800586510 0.250000000 0.798501045
+0.801564027 0.250000000 0.798497238
+0.802541544 0.250000000 0.798493312
+0.803519062 0.250000000 0.798489365
+0.804496579 0.250000000 0.798485354
+0.805474096 0.250000000 0.798481260
+0.806451613 0.250000000 0.798477144
+0.807429130 0.250000000 0.798472926
+0.808406647 0.250000000 0.798468658
+0.809384164 0.250000000 0.798464362
+0.810361681 0.250000000 0.798459937
+0.811339198 0.250000000 0.798455487
+0.812316716 0.250000000 0.798450981
+0.813294233 0.250000000 0.798446368
+0.814271750 0.250000000 0.798441728
+0.815249267 0.250000000 0.798437007
+0.816226784 0.250000000 0.798432199
+0.817204301 0.250000000 0.798427360
+0.818181818 0.250000000 0.798422419
+0.819159335 0.250000000 0.798417406
+0.820136852 0.250000000 0.798412362
+0.821114370 0.250000000 0.798407195
+0.822091887 0.250000000 0.798401968
+0.823069404 0.250000000 0.798396707
+0.824046921 0.250000000 0.798391309
+0.825024438 0.250000000 0.798385858
+0.826001955 0.250000000 0.798380370
+0.826979472 0.250000000 0.798374734
+0.827956989 0.250000000 0.798369049
+0.828934506 0.250000000 0.798363324
+0.829912023 0.250000000 0.798357442
+0.830889541 0.250000000 0.798351511
+0.831867058 0.250000000 0.798345537
+0.832844575 0.250000000 0.798339400
+0.833822092 0.250000000 0.798333211
+0.834799609 0.250000000 0.798326976
+0.835777126 0.250000000 0.798320576
+0.836754643 0.250000000 0.798314116
+0.837732160 0.250000000 0.798307606
+0.838709677 0.250000000 0.798300932
+0.839687195 0.250000000 0.798294187
+0.840664712 0.250000000 0.798287388
+0.841642229 0.250000000 0.798280430
+0.842619746 0.250000000 0.798273384
+0.843597263 0.250000000 0.798266281
+0.844574780 0.250000000 0.798259026
+0.845552297 0.250000000 0.798251664
+0.846529814 0.250000000 0.798244240
+0.847507331 0.250000000 0.798236674
+0.848484848 0.250000000 0.798228978
+0.849462366 0.250000000 0.798221215
+0.850439883 0.250000000 0.798213324
+0.851417400 0.250000000 0.798205276
+0.852394917 0.250000000 0.798197155
+0.853372434 0.250000000 0.798188922
+0.854349951 0.250000000 0.798180502
+0.855327468 0.250000000 0.798172002
+0.856304985 0.250000000 0.798163410
+0.857282502 0.250000000 0.798154594
+0.858260020 0.250000000 0.798145693
+0.859237537 0.250000000 0.798136706
+0.860215054 0.250000000 0.798127487
+0.861192571 0.250000000 0.798118161
+0.862170088 0.250000000 0.798108741
+0.863147605 0.250000000 0.798099109
+0.864125122 0.250000000 0.798089331
+0.865102639 0.250000000 0.798079451
+0.866080156 0.250000000 0.798069382
+0.867057674 0.250000000 0.798059123
+0.868035191 0.250000000 0.798048754
+0.869012708 0.250000000 0.798038221
+0.869990225 0.250000000 0.798027449
+0.870967742 0.250000000 0.798016558
+0.871945259 0.250000000 0.798005530
+0.872922776 0.250000000 0.797994212
+0.873900293 0.250000000 0.797982764
+0.874877810 0.250000000 0.797971185
+0.875855327 0.250000000 0.797959306
+0.876832845 0.250000000 0.797947263
+0.877810362 0.250000000 0.797935078
+0.878787879 0.250000000 0.797922616
+0.879765396 0.250000000 0.797909935
+0.880742913 0.250000000 0.797897099
+0.881720430 0.250000000 0.797884012
+0.882697947 0.250000000 0.797870648
+0.883675464 0.250000000 0.797857113
+0.884652981 0.250000000 0.797843354
+0.885630499 0.250000000 0.797829254
+0.886608016 0.250000000 0.797814969
+0.887585533 0.250000000 0.797800485
+0.888563050 0.250000000 0.797785594
+0.889540567 0.250000000 0.797770499
+0.890518084 0.250000000 0.797755197
+0.891495601 0.250000000 0.797739486
+0.892473118 0.250000000 0.797723518
+0.893450635 0.250000000 0.797707323
+0.894428152 0.250000000 0.797690733
+0.895405670 0.250000000 0.797673819
+0.896383187 0.250000000 0.797656655
+0.897360704 0.250000000 0.797639111
+0.898338221 0.250000000 0.797621171
+0.899315738 0.250000000 0.797602957
+0.900293255 0.250000000 0.797584371
+0.901270772 0.250000000 0.797565316
+0.902248289 0.250000000 0.797545958
+0.903225806 0.250000000 0.797526235
+0.904203324 0.250000000 0.797505964
+0.905180841 0.250000000 0.797485358
+0.906158358 0.250000000 0.797464387
+0.907135875 0.250000000 0.797442787
+0.908113392 0.250000000 0.797420816
+0.909090909 0.250000000 0.797398464
+0.910068426 0.250000000 0.797375416
+0.911045943 0.250000000 0.797351947
+0.912023460 0.250000000 0.797328054
+0.913000978 0.250000000 0.797303431
+0.913978495 0.250000000 0.797278312
+0.914956012 0.250000000 0.797252722
+0.915933529 0.250000000 0.797226352
+0.916911046 0.250000000 0.797199412
+0.917888563 0.250000000 0.797171944
+0.918866080 0.250000000 0.797143632
+0.919843597 0.250000000 0.797114674
+0.920821114 0.250000000 0.797085122
+0.921798631 0.250000000 0.797054641
+0.922776149 0.250000000 0.797023436
+0.923753666 0.250000000 0.796991562
+0.924731183 0.250000000 0.796958649
+0.925708700 0.250000000 0.796924934
+0.926686217 0.250000000 0.796890462
+0.927663734 0.250000000 0.796854809
+0.928641251 0.250000000 0.796818277
+0.929618768 0.250000000 0.796780885
+0.930596285 0.250000000 0.796742131
+0.931573803 0.250000000 0.796702422
+0.932551320 0.250000000 0.796661678
+0.933528837 0.250000000 0.796619449
+0.934506354 0.250000000 0.796576138
+0.935483871 0.250000000 0.796531554
+0.936461388 0.250000000 0.796485383
+0.937438905 0.250000000 0.796437966
+0.938416422 0.250000000 0.796388970
+0.939393939 0.250000000 0.796338286
+0.940371457 0.250000000 0.796286158
+0.941348974 0.250000000 0.796232059
+0.942326491 0.250000000 0.796176174
+0.943304008 0.250000000 0.796118602
+0.944281525 0.250000000 0.796058564
+0.945259042 0.250000000 0.795996641
+0.946236559 0.250000000 0.795932487
+0.947214076 0.250000000 0.795865725
+0.948191593 0.250000000 0.795796735
+0.949169110 0.250000000 0.795724810
+0.950146628 0.250000000 0.795650131
+0.951124145 0.250000000 0.795572676
+0.952101662 0.250000000 0.795491611
+0.953079179 0.250000000 0.795407522
+0.954056696 0.250000000 0.795319628
+0.955034213 0.250000000 0.795227898
+0.956011730 0.250000000 0.795132357
+0.956989247 0.250000000 0.795031935
+0.957966764 0.250000000 0.794927282
+0.958944282 0.250000000 0.794817257
+0.959921799 0.250000000 0.794701981
+0.960899316 0.250000000 0.794581006
+0.961876833 0.250000000 0.794453449
+0.962854350 0.250000000 0.794319707
+0.963831867 0.250000000 0.794177846
+0.964809384 0.250000000 0.794028718
+0.965786901 0.250000000 0.793870437
+0.966764418 0.250000000 0.793703113
+0.967741935 0.250000000 0.793525315
+0.968719453 0.250000000 0.793336305
+0.969696970 0.250000000 0.793135013
+0.970674487 0.250000000 0.792919868
+0.971652004 0.250000000 0.792689957
+0.972629521 0.250000000 0.792442910
+0.973607038 0.250000000 0.792177663
+0.974584555 0.250000000 0.791891104
+0.975562072 0.250000000 0.791581540
+0.976539589 0.250000000 0.791245216
+0.977517107 0.250000000 0.790900290
+0.978494624 0.250000000 0.790546727
+0.979472141 0.250000000 0.790189953
+0.980449658 0.250000000 0.789814417
+0.981427175 0.250000000 0.789445023
+0.982404692 0.250000000 0.789052209
+0.983382209 0.250000000 0.788657501
+0.984359726 0.250000000 0.788250203
+0.985337243 0.250000000 0.787818500
+0.986314761 0.250000000 0.787390503
+0.987292278 0.250000000 0.786940347
+0.988269795 0.250000000 0.786464072
+0.989247312 0.250000000 0.785974808
+0.990224829 0.250000000 0.785469812
+0.991202346 0.250000000 0.784933879
+0.992179863 0.250000000 0.784364501
+0.993157380 0.250000000 0.783757951
+0.994134897 0.250000000 0.783108264
+0.995112414 0.250000000 0.782404962
+0.996089932 0.250000000 0.781627407
+0.997067449 0.250000000 0.780727892
+0.998044966 0.250000000 0.779693393
+0.999022483 0.250000000 0.778328498
+1.000000000 nan nan
diff --git a/examples/mamdani/SimpleDimmerInverse.fll b/examples/mamdani/SimpleDimmerInverse.fll
new file mode 100644
index 0000000..4ce7313
--- /dev/null
+++ b/examples/mamdani/SimpleDimmerInverse.fll
@@ -0,0 +1,42 @@
+Engine: SimpleDimmerInverse
+InputVariable: Ambient
+ enabled: true
+ range: 0.000 1.000
+ lock-range: false
+ term: DARK Triangle 0.000 0.250 0.500
+ term: MEDIUM Triangle 0.250 0.500 0.750
+ term: BRIGHT Triangle 0.500 0.750 1.000
+OutputVariable: Power
+ enabled: true
+ range: 0.000 1.000
+ lock-range: false
+ aggregation: Maximum
+ defuzzifier: Centroid 200
+ default: nan
+ lock-previous: false
+ term: LOW Triangle 0.000 0.250 0.500
+ term: MEDIUM Triangle 0.250 0.500 0.750
+ term: HIGH Triangle 0.500 0.750 1.000
+OutputVariable: InversePower
+ enabled: true
+ range: 0.000 1.000
+ lock-range: false
+ aggregation: Maximum
+ defuzzifier: Centroid 500
+ default: nan
+ lock-previous: false
+ term: LOW Cosine 0.200 0.500
+ term: MEDIUM Cosine 0.500 0.500
+ term: HIGH Cosine 0.800 0.500
+RuleBlock:
+ enabled: true
+ conjunction: none
+ disjunction: none
+ implication: Minimum
+ activation: General
+ rule: if Ambient is DARK then Power is HIGH
+ rule: if Ambient is MEDIUM then Power is MEDIUM
+ rule: if Ambient is BRIGHT then Power is LOW
+ rule: if Power is LOW then InversePower is HIGH
+ rule: if Power is MEDIUM then InversePower is MEDIUM
+ rule: if Power is HIGH then InversePower is LOW \ No newline at end of file
diff --git a/examples/mamdani/SimpleDimmerInverse.java b/examples/mamdani/SimpleDimmerInverse.java
new file mode 100644
index 0000000..218f831
--- /dev/null
+++ b/examples/mamdani/SimpleDimmerInverse.java
@@ -0,0 +1,81 @@
+import com.fuzzylite.*;
+import com.fuzzylite.activation.*
+import com.fuzzylite.defuzzifier.*;
+import com.fuzzylite.factory.*;
+import com.fuzzylite.hedge.*;
+import com.fuzzylite.imex.*;
+import com.fuzzylite.norm.*;
+import com.fuzzylite.norm.s.*;
+import com.fuzzylite.norm.t.*;
+import com.fuzzylite.rule.*;
+import com.fuzzylite.term.*;
+import com.fuzzylite.variable.*;
+
+public class SimpleDimmerInverse{
+public static void main(String[] args){
+//Code automatically generated with fuzzylite 6.0.
+
+Engine engine = new Engine();
+engine.setName("SimpleDimmerInverse");
+engine.setDescription("");
+
+InputVariable Ambient = new InputVariable();
+Ambient.setName("Ambient");
+Ambient.setDescription("");
+Ambient.setEnabled(true);
+Ambient.setRange(0.000, 1.000);
+Ambient.setLockValueInRange(false);
+Ambient.addTerm(new Triangle("DARK", 0.000, 0.250, 0.500));
+Ambient.addTerm(new Triangle("MEDIUM", 0.250, 0.500, 0.750));
+Ambient.addTerm(new Triangle("BRIGHT", 0.500, 0.750, 1.000));
+engine.addInputVariable(Ambient);
+
+OutputVariable Power = new OutputVariable();
+Power.setName("Power");
+Power.setDescription("");
+Power.setEnabled(true);
+Power.setRange(0.000, 1.000);
+Power.setLockValueInRange(false);
+Power.setAggregation(new Maximum());
+Power.setDefuzzifier(new Centroid(200));
+Power.setDefaultValue(Double.NaN);
+Power.setLockPreviousValue(false);
+Power.addTerm(new Triangle("LOW", 0.000, 0.250, 0.500));
+Power.addTerm(new Triangle("MEDIUM", 0.250, 0.500, 0.750));
+Power.addTerm(new Triangle("HIGH", 0.500, 0.750, 1.000));
+engine.addOutputVariable(Power);
+
+OutputVariable InversePower = new OutputVariable();
+InversePower.setName("InversePower");
+InversePower.setDescription("");
+InversePower.setEnabled(true);
+InversePower.setRange(0.000, 1.000);
+InversePower.setLockValueInRange(false);
+InversePower.setAggregation(new Maximum());
+InversePower.setDefuzzifier(new Centroid(500));
+InversePower.setDefaultValue(Double.NaN);
+InversePower.setLockPreviousValue(false);
+InversePower.addTerm(new Cosine("LOW", 0.200, 0.500));
+InversePower.addTerm(new Cosine("MEDIUM", 0.500, 0.500));
+InversePower.addTerm(new Cosine("HIGH", 0.800, 0.500));
+engine.addOutputVariable(InversePower);
+
+RuleBlock ruleBlock = new RuleBlock();
+ruleBlock.setName("");
+ruleBlock.setDescription("");
+ruleBlock.setEnabled(true);
+ruleBlock.setConjunction(null);
+ruleBlock.setDisjunction(null);
+ruleBlock.setImplication(new Minimum());
+ruleBlock.setActivation(new General());
+ruleBlock.addRule(Rule.parse("if Ambient is DARK then Power is HIGH", engine));
+ruleBlock.addRule(Rule.parse("if Ambient is MEDIUM then Power is MEDIUM", engine));
+ruleBlock.addRule(Rule.parse("if Ambient is BRIGHT then Power is LOW", engine));
+ruleBlock.addRule(Rule.parse("if Power is LOW then InversePower is HIGH", engine));
+ruleBlock.addRule(Rule.parse("if Power is MEDIUM then InversePower is MEDIUM", engine));
+ruleBlock.addRule(Rule.parse("if Power is HIGH then InversePower is LOW", engine));
+engine.addRuleBlock(ruleBlock);
+
+
+}
+}
diff --git a/examples/mamdani/SimpleDimmerInverse.pdf b/examples/mamdani/SimpleDimmerInverse.pdf
new file mode 100644
index 0000000..0cfb26d
--- /dev/null
+++ b/examples/mamdani/SimpleDimmerInverse.pdf
Binary files differ
diff --git a/examples/mamdani/octave/COPYING b/examples/mamdani/octave/COPYING
new file mode 100644
index 0000000..94a9ed0
--- /dev/null
+++ b/examples/mamdani/octave/COPYING
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/examples/mamdani/octave/DESCRIPTION b/examples/mamdani/octave/DESCRIPTION
new file mode 100644
index 0000000..35df57d
--- /dev/null
+++ b/examples/mamdani/octave/DESCRIPTION
@@ -0,0 +1,12 @@
+Name: fuzzy-logic-toolkit
+Version: 0.4.2
+Date: 2012-10-02
+Author: L. Markowsky <lmarkov@users.sourceforge.net>
+Maintainer: L. Markowsky <lmarkov@users.sourceforge.net>
+Title: Octave Fuzzy Logic Toolkit
+Description: A mostly MATLAB-compatible fuzzy logic toolkit for Octave.
+Depends: octave (>= 3.2.4)
+Autoload: no
+License: GPLv3+
+Url: http://octave.sf.net
+ http://sf.net/projects/octave-fuzzy
diff --git a/examples/mamdani/octave/investment_portfolio.R b/examples/mamdani/octave/investment_portfolio.R
new file mode 100644
index 0000000..c752dab
--- /dev/null
+++ b/examples/mamdani/octave/investment_portfolio.R
@@ -0,0 +1,67 @@
+#Code automatically generated with fuzzylite 6.0.
+
+library(ggplot2);
+
+engine.name = "investment_portfolio"
+engine.fll = "Engine: investment_portfolio
+InputVariable: Age
+ enabled: true
+ range: 20.000 100.000
+ lock-range: false
+ term: Young ZShape 30.000 90.000
+ term: Old SShape 30.000 90.000
+InputVariable: RiskTolerance
+ enabled: true
+ range: 0.000 10.000
+ lock-range: false
+ term: Low ZShape 2.000 8.000
+ term: High SShape 2.000 8.000
+OutputVariable: PercentageInStocks
+ enabled: true
+ range: 0.000 100.000
+ lock-range: false
+ aggregation: EinsteinSum
+ defuzzifier: Centroid 200
+ default: nan
+ lock-previous: false
+ term: AboutFifteen Gaussian 15.000 10.000
+ term: AboutFifty Gaussian 50.000 10.000
+ term: AboutEightyFive Gaussian 85.000 10.000
+RuleBlock:
+ enabled: true
+ conjunction: EinsteinProduct
+ disjunction: EinsteinSum
+ implication: EinsteinProduct
+ activation: General
+ rule: if Age is Young or RiskTolerance is High then PercentageInStocks is AboutEightyFive
+ rule: if Age is Old or RiskTolerance is Low then PercentageInStocks is AboutFifteen
+ rule: if Age is not extremely Old and RiskTolerance is not extremely Low then PercentageInStocks is AboutFifty with 0.500
+ rule: if Age is not extremely Young and RiskTolerance is not extremely High then PercentageInStocks is AboutFifty with 0.500"
+
+engine.fldFile = "investment_portfolio.fld"
+if (require(data.table)) {
+ engine.df = data.table::fread(engine.fldFile, sep="auto", header="auto")
+} else {
+ engine.df = read.table(engine.fldFile, header=TRUE)
+}
+
+engine.plot.i1i2_o1 = ggplot(engine.df, aes(Age, RiskTolerance)) +
+ geom_tile(aes(fill=PercentageInStocks)) +
+ scale_fill_gradient(low="yellow", high="red") +
+ stat_contour(aes(x=Age, y=RiskTolerance, z=PercentageInStocks), color="black") +
+ ggtitle("(Age, RiskTolerance) = PercentageInStocks")
+
+engine.plot.i2i1_o1 = ggplot(engine.df, aes(RiskTolerance, Age)) +
+ geom_tile(aes(fill=PercentageInStocks)) +
+ scale_fill_gradient(low="yellow", high="red") +
+ stat_contour(aes(x=RiskTolerance, y=Age, z=PercentageInStocks), color="black") +
+ ggtitle("(RiskTolerance, Age) = PercentageInStocks")
+
+if (require(gridExtra)) {
+ engine.plots = arrangeGrob(engine.plot.i1i2_o1, engine.plot.i2i1_o1, ncol=2, top=engine.name)
+ ggsave(paste0(engine.name, ".pdf"), engine.plots)
+ if (require(grid)) {
+ grid.newpage()
+ grid.draw(engine.plots)
+ }
+}
diff --git a/examples/mamdani/octave/investment_portfolio.cpp b/examples/mamdani/octave/investment_portfolio.cpp
new file mode 100644
index 0000000..2b82b8c
--- /dev/null
+++ b/examples/mamdani/octave/investment_portfolio.cpp
@@ -0,0 +1,62 @@
+#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("investment_portfolio");
+engine->setDescription("");
+
+InputVariable* Age = new InputVariable;
+Age->setName("Age");
+Age->setDescription("");
+Age->setEnabled(true);
+Age->setRange(20.000, 100.000);
+Age->setLockValueInRange(false);
+Age->addTerm(new ZShape("Young", 30.000, 90.000));
+Age->addTerm(new SShape("Old", 30.000, 90.000));
+engine->addInputVariable(Age);
+
+InputVariable* RiskTolerance = new InputVariable;
+RiskTolerance->setName("RiskTolerance");
+RiskTolerance->setDescription("");
+RiskTolerance->setEnabled(true);
+RiskTolerance->setRange(0.000, 10.000);
+RiskTolerance->setLockValueInRange(false);
+RiskTolerance->addTerm(new ZShape("Low", 2.000, 8.000));
+RiskTolerance->addTerm(new SShape("High", 2.000, 8.000));
+engine->addInputVariable(RiskTolerance);
+
+OutputVariable* PercentageInStocks = new OutputVariable;
+PercentageInStocks->setName("PercentageInStocks");
+PercentageInStocks->setDescription("");
+PercentageInStocks->setEnabled(true);
+PercentageInStocks->setRange(0.000, 100.000);
+PercentageInStocks->setLockValueInRange(false);
+PercentageInStocks->setAggregation(new EinsteinSum);
+PercentageInStocks->setDefuzzifier(new Centroid(200));
+PercentageInStocks->setDefaultValue(fl::nan);
+PercentageInStocks->setLockPreviousValue(false);
+PercentageInStocks->addTerm(new Gaussian("AboutFifteen", 15.000, 10.000));
+PercentageInStocks->addTerm(new Gaussian("AboutFifty", 50.000, 10.000));
+PercentageInStocks->addTerm(new Gaussian("AboutEightyFive", 85.000, 10.000));
+engine->addOutputVariable(PercentageInStocks);
+
+RuleBlock* ruleBlock = new RuleBlock;
+ruleBlock->setName("");
+ruleBlock->setDescription("");
+ruleBlock->setEnabled(true);
+ruleBlock->setConjunction(new EinsteinProduct);
+ruleBlock->setDisjunction(new EinsteinSum);
+ruleBlock->setImplication(new EinsteinProduct);
+ruleBlock->setActivation(new General);
+ruleBlock->addRule(Rule::parse("if Age is Young or RiskTolerance is High then PercentageInStocks is AboutEightyFive", engine));
+ruleBlock->addRule(Rule::parse("if Age is Old or RiskTolerance is Low then PercentageInStocks is AboutFifteen", engine));
+ruleBlock->addRule(Rule::parse("if Age is not extremely Old and RiskTolerance is not extremely Low then PercentageInStocks is AboutFifty with 0.500", engine));
+ruleBlock->addRule(Rule::parse("if Age is not extremely Young and RiskTolerance is not extremely High then PercentageInStocks is AboutFifty with 0.500", engine));
+engine->addRuleBlock(ruleBlock);
+
+
+}
diff --git a/examples/mamdani/octave/investment_portfolio.fcl b/examples/mamdani/octave/investment_portfolio.fcl
new file mode 100644
index 0000000..ec837a7
--- /dev/null
+++ b/examples/mamdani/octave/investment_portfolio.fcl
@@ -0,0 +1,46 @@
+//Code automatically generated with fuzzylite 6.0.
+
+FUNCTION_BLOCK investment_portfolio
+
+VAR_INPUT
+ Age: REAL;
+ RiskTolerance: REAL;
+END_VAR
+
+VAR_OUTPUT
+ PercentageInStocks: REAL;
+END_VAR
+
+FUZZIFY Age
+ RANGE := (20.000 .. 100.000);
+ TERM Young := ZShape 30.000 90.000;
+ TERM Old := SShape 30.000 90.000;
+END_FUZZIFY
+
+FUZZIFY RiskTolerance
+ RANGE := (0.000 .. 10.000);
+ TERM Low := ZShape 2.000 8.000;
+ TERM High := SShape 2.000 8.000;
+END_FUZZIFY
+
+DEFUZZIFY PercentageInStocks
+ RANGE := (0.000 .. 100.000);
+ TERM AboutFifteen := Gaussian 15.000 10.000;
+ TERM AboutFifty := Gaussian 50.000 10.000;
+ TERM AboutEightyFive := Gaussian 85.000 10.000;
+ METHOD : COG;
+ ACCU : ESUM;
+ DEFAULT := nan;
+END_DEFUZZIFY
+
+RULEBLOCK
+ AND : EPROD;
+ OR : ESUM;
+ ACT : EPROD;
+ RULE 1 : if Age is Young or RiskTolerance is High then PercentageInStocks is AboutEightyFive
+ RULE 2 : if Age is Old or RiskTolerance is Low then PercentageInStocks is AboutFifteen
+ RULE 3 : if Age is not extremely Old and RiskTolerance is not extremely Low then PercentageInStocks is AboutFifty with 0.500
+ RULE 4 : if Age is not extremely Young and RiskTolerance is not extremely High then PercentageInStocks is AboutFifty with 0.500
+END_RULEBLOCK
+
+END_FUNCTION_BLOCK
diff --git a/examples/mamdani/octave/investment_portfolio.fis b/examples/mamdani/octave/investment_portfolio.fis
new file mode 100644
index 0000000..b512a68
--- /dev/null
+++ b/examples/mamdani/octave/investment_portfolio.fis
@@ -0,0 +1,42 @@
+#Code automatically generated with fuzzylite 6.0.
+
+[System]
+Name='investment_portfolio'
+Type='mamdani'
+Version=6.0
+NumInputs=2
+NumOutputs=1
+NumRules=4
+AndMethod='einstein_product'
+OrMethod='einstein_sum'
+ImpMethod='einstein_product'
+AggMethod='einstein_sum'
+DefuzzMethod='centroid'
+
+[Input1]
+Name='Age'
+Range=[20.000 100.000]
+NumMFs=2
+MF1='Young':'zmf',[30.000 90.000]
+MF2='Old':'smf',[30.000 90.000]
+
+[Input2]
+Name='RiskTolerance'
+Range=[0.000 10.000]
+NumMFs=2
+MF1='Low':'zmf',[2.000 8.000]
+MF2='High':'smf',[2.000 8.000]
+
+[Output1]
+Name='PercentageInStocks'
+Range=[0.000 100.000]
+NumMFs=3
+MF1='AboutFifteen':'gaussmf',[10.000 15.000]
+MF2='AboutFifty':'gaussmf',[10.000 50.000]
+MF3='AboutEightyFive':'gaussmf',[10.000 85.000]
+
+[Rules]
+1.000 2.000 , 3.000 (1.000) : 2
+2.000 1.000 , 1.000 (1.000) : 2
+-2.300 -1.300 , 2.000 (0.500) : 1
+-1.300 -2.300 , 2.000 (0.500) : 1
diff --git a/examples/mamdani/octave/investment_portfolio.fld b/examples/mamdani/octave/investment_portfolio.fld
new file mode 100644
index 0000000..4da9cb9
--- /dev/null
+++ b/examples/mamdani/octave/investment_portfolio.fld
@@ -0,0 +1,1025 @@
+Age RiskTolerance PercentageInStocks
+20.000000000 0.000000000 50.000000000
+20.000000000 0.322580645 50.000000000
+20.000000000 0.645161290 50.000000000
+20.000000000 0.967741935 50.000000000
+20.000000000 1.290322581 50.000000000
+20.000000000 1.612903226 50.000000000
+20.000000000 1.935483871 50.000000000
+20.000000000 2.258064516 50.076648486
+20.000000000 2.580645161 50.390076379
+20.000000000 2.903225806 50.952326813
+20.000000000 3.225806452 51.774928323
+20.000000000 3.548387097 52.870980129
+20.000000000 3.870967742 54.250136129
+20.000000000 4.193548387 55.910060541
+20.000000000 4.516129032 57.823117640
+20.000000000 4.838709677 59.917996684
+20.000000000 5.161290323 62.043162940
+20.000000000 5.483870968 64.006621117
+20.000000000 5.806451613 65.820682078
+20.000000000 6.129032258 67.494976640
+20.000000000 6.451612903 69.013706618
+20.000000000 6.774193548 70.341645817
+20.000000000 7.096774194 71.431615962
+20.000000000 7.419354839 72.233442079
+20.000000000 7.741935484 72.703595829
+20.000000000 8.064516129 72.821314025
+20.000000000 8.387096774 72.821314025
+20.000000000 8.709677419 72.821314025
+20.000000000 9.032258065 72.821314025
+20.000000000 9.354838710 72.821314025
+20.000000000 9.677419355 72.821314025
+20.000000000 10.000000000 72.821314025
+22.580645161 0.000000000 50.000000000
+22.580645161 0.322580645 50.000000000
+22.580645161 0.645161290 50.000000000
+22.580645161 0.967741935 50.000000000
+22.580645161 1.290322581 50.000000000
+22.580645161 1.612903226 50.000000000
+22.580645161 1.935483871 50.000000000
+22.580645161 2.258064516 50.076648486
+22.580645161 2.580645161 50.390076379
+22.580645161 2.903225806 50.952326813
+22.580645161 3.225806452 51.774928323
+22.580645161 3.548387097 52.870980129
+22.580645161 3.870967742 54.250136129
+22.580645161 4.193548387 55.910060541
+22.580645161 4.516129032 57.823117640
+22.580645161 4.838709677 59.917996684
+22.580645161 5.161290323 62.043162940
+22.580645161 5.483870968 64.006621117
+22.580645161 5.806451613 65.820682078
+22.580645161 6.129032258 67.494976640
+22.580645161 6.451612903 69.013706618
+22.580645161 6.774193548 70.341645817
+22.580645161 7.096774194 71.431615962
+22.580645161 7.419354839 72.233442079
+22.580645161 7.741935484 72.703595829
+22.580645161 8.064516129 72.821314025
+22.580645161 8.387096774 72.821314025
+22.580645161 8.709677419 72.821314025
+22.580645161 9.032258065 72.821314025
+22.580645161 9.354838710 72.821314025
+22.580645161 9.677419355 72.821314025
+22.580645161 10.000000000 72.821314025
+25.161290323 0.000000000 50.000000000
+25.161290323 0.322580645 50.000000000
+25.161290323 0.645161290 50.000000000
+25.161290323 0.967741935 50.000000000
+25.161290323 1.290322581 50.000000000
+25.161290323 1.612903226 50.000000000
+25.161290323 1.935483871 50.000000000
+25.161290323 2.258064516 50.076648486
+25.161290323 2.580645161 50.390076379
+25.161290323 2.903225806 50.952326813
+25.161290323 3.225806452 51.774928323
+25.161290323 3.548387097 52.870980129
+25.161290323 3.870967742 54.250136129
+25.161290323 4.193548387 55.910060541
+25.161290323 4.516129032 57.823117640
+25.161290323 4.838709677 59.917996684
+25.161290323 5.161290323 62.043162940
+25.161290323 5.483870968 64.006621117
+25.161290323 5.806451613 65.820682078
+25.161290323 6.129032258 67.494976640
+25.161290323 6.451612903 69.013706618
+25.161290323 6.774193548 70.341645817
+25.161290323 7.096774194 71.431615962
+25.161290323 7.419354839 72.233442079
+25.161290323 7.741935484 72.703595829
+25.161290323 8.064516129 72.821314025
+25.161290323 8.387096774 72.821314025
+25.161290323 8.709677419 72.821314025
+25.161290323 9.032258065 72.821314025
+25.161290323 9.354838710 72.821314025
+25.161290323 9.677419355 72.821314025
+25.161290323 10.000000000 72.821314025
+27.741935484 0.000000000 50.000000000
+27.741935484 0.322580645 50.000000000
+27.741935484 0.645161290 50.000000000
+27.741935484 0.967741935 50.000000000
+27.741935484 1.290322581 50.000000000
+27.741935484 1.612903226 50.000000000
+27.741935484 1.935483871 50.000000000
+27.741935484 2.258064516 50.076648486
+27.741935484 2.580645161 50.390076379
+27.741935484 2.903225806 50.952326813
+27.741935484 3.225806452 51.774928323
+27.741935484 3.548387097 52.870980129
+27.741935484 3.870967742 54.250136129
+27.741935484 4.193548387 55.910060541
+27.741935484 4.516129032 57.823117640
+27.741935484 4.838709677 59.917996684
+27.741935484 5.161290323 62.043162940
+27.741935484 5.483870968 64.006621117
+27.741935484 5.806451613 65.820682078
+27.741935484 6.129032258 67.494976640
+27.741935484 6.451612903 69.013706618
+27.741935484 6.774193548 70.341645817
+27.741935484 7.096774194 71.431615962
+27.741935484 7.419354839 72.233442079
+27.741935484 7.741935484 72.703595829
+27.741935484 8.064516129 72.821314025
+27.741935484 8.387096774 72.821314025
+27.741935484 8.709677419 72.821314025
+27.741935484 9.032258065 72.821314025
+27.741935484 9.354838710 72.821314025
+27.741935484 9.677419355 72.821314025
+27.741935484 10.000000000 72.821314025
+30.322580645 0.000000000 49.998803919
+30.322580645 0.322580645 49.998803919
+30.322580645 0.645161290 49.998803919
+30.322580645 0.967741935 49.998803919
+30.322580645 1.290322581 49.998803919
+30.322580645 1.612903226 49.998803919
+30.322580645 1.935483871 49.998803919
+30.322580645 2.258064516 50.075452379
+30.322580645 2.580645161 50.388879647
+30.322580645 2.903225806 50.951126990
+30.322580645 3.225806452 51.773719919
+30.322580645 3.548387097 52.869753955
+30.322580645 3.870967742 54.248879432
+30.322580645 4.193548387 55.908758472
+30.322580645 4.516129032 57.821756837
+30.322580645 4.838709677 59.916571839
+30.322580645 5.161290323 62.041682326
+30.322580645 5.483870968 64.005085024
+30.322580645 5.806451613 65.819089933
+30.322580645 6.129032258 67.493329173
+30.322580645 6.451612903 69.012006089
+30.322580645 6.774193548 70.339896659
+30.322580645 7.096774194 71.429825333
+30.322580645 7.419354839 72.231620048
+30.322580645 7.741935484 72.701755036
+30.322580645 8.064516129 72.819468494
+30.322580645 8.387096774 72.819468494
+30.322580645 8.709677419 72.819468494
+30.322580645 9.032258065 72.819468494
+30.322580645 9.354838710 72.819468494
+30.322580645 9.677419355 72.819468494
+30.322580645 10.000000000 72.819468494
+32.903225806 0.000000000 49.902957979
+32.903225806 0.322580645 49.902957979
+32.903225806 0.645161290 49.902957979
+32.903225806 0.967741935 49.902957979
+32.903225806 1.290322581 49.902957979
+32.903225806 1.612903226 49.902957979
+32.903225806 1.935483871 49.902957979
+32.903225806 2.258064516 49.979607017
+32.903225806 2.580645161 50.292994821
+32.903225806 2.903225806 50.855013655
+32.903225806 3.225806452 51.676947279
+32.903225806 3.548387097 52.771596216
+32.903225806 3.870967742 54.148327846
+32.903225806 4.193548387 55.804640065
+32.903225806 4.516129032 57.713021387
+32.903225806 4.838709677 59.802814253
+32.903225806 5.161290323 61.923569792
+32.903225806 5.483870968 63.882614176
+32.903225806 5.806451613 65.692193202
+32.903225806 6.129032258 67.362058048
+32.903225806 6.451612903 68.876521949
+32.903225806 6.774193548 70.200548955
+32.903225806 7.096774194 71.287181858
+32.903225806 7.419354839 72.086480819
+32.903225806 7.741935484 72.555124481
+32.903225806 8.064516129 72.672461319
+32.903225806 8.387096774 72.672461319
+32.903225806 8.709677419 72.672461319
+32.903225806 9.032258065 72.672461319
+32.903225806 9.354838710 72.672461319
+32.903225806 9.677419355 72.672461319
+32.903225806 10.000000000 72.672461319
+35.483870968 0.000000000 49.652304243
+35.483870968 0.322580645 49.652304243
+35.483870968 0.645161290 49.652304243
+35.483870968 0.967741935 49.652304243
+35.483870968 1.290322581 49.652304243
+35.483870968 1.612903226 49.652304243
+35.483870968 1.935483871 49.652304243
+35.483870968 2.258064516 49.728978589
+35.483870968 2.580645161 50.042360495
+35.483870968 2.903225806 50.603956690
+35.483870968 3.225806452 51.424424786
+35.483870968 3.548387097 52.515806201
+35.483870968 3.870967742 53.886750889
+35.483870968 4.193548387 55.534360928
+35.483870968 4.516129032 57.431479038
+35.483870968 4.838709677 59.509129544
+35.483870968 5.161290323 61.619524277
+35.483870968 5.483870968 63.567960518
+35.483870968 5.806451613 65.366559879
+35.483870968 6.129032258 67.025427611
+35.483870968 6.451612903 68.529270750
+35.483870968 6.774193548 69.843520900
+35.483870968 7.096774194 70.921801863
+35.483870968 7.419354839 71.714759421
+35.483870968 7.741935484 72.179613221
+35.483870968 8.064516129 72.295992918
+35.483870968 8.387096774 72.295992918
+35.483870968 8.709677419 72.295992918
+35.483870968 9.032258065 72.295992918
+35.483870968 9.354838710 72.295992918
+35.483870968 9.677419355 72.295992918
+35.483870968 10.000000000 72.295992918
+38.064516129 0.000000000 49.243098952
+38.064516129 0.322580645 49.243098952
+38.064516129 0.645161290 49.243098952
+38.064516129 0.967741935 49.243098952
+38.064516129 1.290322581 49.243098952
+38.064516129 1.612903226 49.243098952
+38.064516129 1.935483871 49.243098952
+38.064516129 2.258064516 49.319884816
+38.064516129 2.580645161 49.633543934
+38.064516129 2.903225806 50.194964997
+38.064516129 3.225806452 51.013799907
+38.064516129 3.548387097 52.100885441
+38.064516129 3.870967742 53.463764454
+38.064516129 4.193548387 55.098988836
+38.064516129 4.516129032 56.980073530
+38.064516129 4.838709677 59.040771242
+38.064516129 5.161290323 61.137226881
+38.064516129 5.483870968 63.070642355
+38.064516129 5.806451613 64.853053568
+38.064516129 6.129032258 66.495347777
+38.064516129 6.451612903 67.982967596
+38.064516129 6.774193548 69.282183577
+38.064516129 7.096774194 70.347560475
+38.064516129 7.419354839 71.130729588
+38.064516129 7.741935484 71.589715449
+38.064516129 8.064516129 71.704613000
+38.064516129 8.387096774 71.704613000
+38.064516129 8.709677419 71.704613000
+38.064516129 9.032258065 71.704613000
+38.064516129 9.354838710 71.704613000
+38.064516129 9.677419355 71.704613000
+38.064516129 10.000000000 71.704613000
+40.645161290 0.000000000 48.669743020
+40.645161290 0.322580645 48.669743020
+40.645161290 0.645161290 48.669743020
+40.645161290 0.967741935 48.669743020
+40.645161290 1.290322581 48.669743020
+40.645161290 1.612903226 48.669743020
+40.645161290 1.935483871 48.669743020
+40.645161290 2.258064516 48.746819724
+40.645161290 2.580645161 49.061416258
+40.645161290 2.903225806 49.623573900
+40.645161290 3.225806452 50.441561774
+40.645161290 3.548387097 51.524588313
+40.645161290 3.870967742 52.878759776
+40.645161290 4.193548387 54.500031239
+40.645161290 4.516129032 56.363029835
+40.645161290 4.838709677 58.405298469
+40.645161290 5.161290323 60.487754513
+40.645161290 5.483870968 62.404445671
+40.645161290 5.806451613 64.167465175
+40.645161290 6.129032258 65.789133360
+40.645161290 6.451612903 67.256143706
+40.645161290 6.774193548 68.536047010
+40.645161290 7.096774194 69.584753827
+40.645161290 7.419354839 70.355212405
+40.645161290 7.741935484 70.806584970
+40.645161290 8.064516129 70.919555525
+40.645161290 8.387096774 70.919555525
+40.645161290 8.709677419 70.919555525
+40.645161290 9.032258065 70.919555525
+40.645161290 9.354838710 70.919555525
+40.645161290 9.677419355 70.919555525
+40.645161290 10.000000000 70.919555525
+43.225806452 0.000000000 47.925533624
+43.225806452 0.322580645 47.925533624
+43.225806452 0.645161290 47.925533624
+43.225806452 0.967741935 47.925533624
+43.225806452 1.290322581 47.925533624
+43.225806452 1.612903226 47.925533624
+43.225806452 1.935483871 47.925533624
+43.225806452 2.258064516 48.003196119
+43.225806452 2.580645161 48.319856471
+43.225806452 2.903225806 48.884475705
+43.225806452 3.225806452 49.703554418
+43.225806452 3.548387097 50.784261421
+43.225806452 3.870967742 52.130995284
+43.225806452 4.193548387 53.739185104
+43.225806452 4.516129032 55.585152066
+43.225806452 4.838709677 57.611329633
+43.225806452 5.161290323 59.683821844
+43.225806452 5.483870968 61.585369310
+43.225806452 5.806451613 63.328281417
+43.225806452 6.129032258 64.927182028
+43.225806452 6.451612903 66.370699474
+43.225806452 6.774193548 67.628203974
+43.225806452 7.096774194 68.657390741
+43.225806452 7.419354839 69.412890949
+43.225806452 7.741935484 69.855269182
+43.225806452 8.064516129 69.965961562
+43.225806452 8.387096774 69.965961562
+43.225806452 8.709677419 69.965961562
+43.225806452 9.032258065 69.965961562
+43.225806452 9.354838710 69.965961562
+43.225806452 9.677419355 69.965961562
+43.225806452 10.000000000 69.965961562
+45.806451613 0.000000000 47.003934865
+45.806451613 0.322580645 47.003934865
+45.806451613 0.645161290 47.003934865
+45.806451613 0.967741935 47.003934865
+45.806451613 1.290322581 47.003934865
+45.806451613 1.612903226 47.003934865
+45.806451613 1.935483871 47.003934865
+45.806451613 2.258064516 47.082602480
+45.806451613 2.580645161 47.402950274
+45.806451613 2.903225806 47.972607613
+45.806451613 3.225806452 48.795888161
+45.806451613 3.548387097 49.877495327
+45.806451613 3.870967742 51.219883421
+45.806451613 4.193548387 52.818130271
+45.806451613 4.516129032 54.650985755
+45.806451613 4.838709677 56.666980792
+45.806451613 5.161290323 58.737589822
+45.806451613 5.483870968 60.629114424
+45.806451613 5.806451613 62.354014142
+45.806451613 6.129032258 63.930194608
+45.806451613 6.451612903 65.349040002
+45.806451613 6.774193548 66.582379353
+45.806451613 7.096774194 67.590187304
+45.806451613 7.419354839 68.329162947
+45.806451613 7.741935484 68.761558609
+45.806451613 8.064516129 68.869717097
+45.806451613 8.387096774 68.869717097
+45.806451613 8.709677419 68.869717097
+45.806451613 9.032258065 68.869717097
+45.806451613 9.354838710 68.869717097
+45.806451613 9.677419355 68.869717097
+45.806451613 10.000000000 68.869717097
+48.387096774 0.000000000 45.900598613
+48.387096774 0.322580645 45.900598613
+48.387096774 0.645161290 45.900598613
+48.387096774 0.967741935 45.900598613
+48.387096774 1.290322581 45.900598613
+48.387096774 1.612903226 45.900598613
+48.387096774 1.935483871 45.900598613
+48.387096774 2.258064516 45.980803355
+48.387096774 2.580645161 46.306905089
+48.387096774 2.903225806 46.884906961
+48.387096774 3.225806452 47.716447362
+48.387096774 3.548387097 48.803279055
+48.387096774 3.870967742 50.145663256
+48.387096774 4.193548387 51.738567788
+48.387096774 4.516129032 53.564064802
+48.387096774 4.838709677 55.578226605
+48.387096774 5.161290323 57.658283364
+48.387096774 5.483870968 59.548370180
+48.387096774 5.806451613 61.260362735
+48.387096774 6.129032258 62.816285423
+48.387096774 6.451612903 64.211142848
+48.387096774 6.774193548 65.419944811
+48.387096774 7.096774194 66.405514442
+48.387096774 7.419354839 67.127059853
+48.387096774 7.741935484 67.548845082
+48.387096774 8.064516129 67.654301037
+48.387096774 8.387096774 67.654301037
+48.387096774 8.709677419 67.654301037
+48.387096774 9.032258065 67.654301037
+48.387096774 9.354838710 67.654301037
+48.387096774 9.677419355 67.654301037
+48.387096774 10.000000000 67.654301037
+50.967741935 0.000000000 44.616415770
+50.967741935 0.322580645 44.616415770
+50.967741935 0.645161290 44.616415770
+50.967741935 0.967741935 44.616415770
+50.967741935 1.290322581 44.616415770
+50.967741935 1.612903226 44.616415770
+50.967741935 1.935483871 44.616415770
+50.967741935 2.258064516 44.698760304
+50.967741935 2.580645161 45.032946883
+50.967741935 2.903225806 45.622985345
+50.967741935 3.225806452 46.467238467
+50.967741935 3.548387097 47.563910116
+50.967741935 3.870967742 48.910743445
+50.967741935 4.193548387 50.502840212
+50.967741935 4.516129032 52.326633965
+50.967741935 4.838709677 54.347588260
+50.967741935 5.161290323 56.449954685
+50.967741935 5.483870968 58.350161475
+50.967741935 5.806451613 60.057440330
+50.967741935 6.129032258 61.598198804
+50.967741935 6.451612903 62.971785017
+50.967741935 6.774193548 64.157141145
+50.967741935 7.096774194 65.120596669
+50.967741935 7.419354839 65.824409419
+50.967741935 7.741935484 66.235264649
+50.967741935 8.064516129 66.337921286
+50.967741935 8.387096774 66.337921286
+50.967741935 8.709677419 66.337921286
+50.967741935 9.032258065 66.337921286
+50.967741935 9.354838710 66.337921286
+50.967741935 9.677419355 66.337921286
+50.967741935 10.000000000 66.337921286
+53.548387097 0.000000000 43.161863967
+53.548387097 0.322580645 43.161863967
+53.548387097 0.645161290 43.161863967
+53.548387097 0.967741935 43.161863967
+53.548387097 1.290322581 43.161863967
+53.548387097 1.612903226 43.161863967
+53.548387097 1.935483871 43.161863967
+53.548387097 2.258064516 43.246935669
+53.548387097 2.580645161 43.591449152
+53.548387097 2.903225806 44.196962107
+53.548387097 3.225806452 45.057826729
+53.548387097 3.548387097 46.167949378
+53.548387097 3.870967742 47.522086534
+53.548387097 4.193548387 49.115617384
+53.548387097 4.516129032 50.940434962
+53.548387097 4.838709677 52.973755088
+53.548387097 5.161290323 55.109848682
+53.548387097 5.483870968 57.033537819
+53.548387097 5.806451613 58.747231415
+53.548387097 6.129032258 60.280747236
+53.548387097 6.451612903 61.638028848
+53.548387097 6.774193548 62.802609961
+53.548387097 7.096774194 63.745066439
+53.548387097 7.419354839 64.431393253
+53.548387097 7.741935484 64.831240735
+53.548387097 8.064516129 64.931066230
+53.548387097 8.387096774 64.931066230
+53.548387097 8.709677419 64.931066230
+53.548387097 9.032258065 64.931066230
+53.548387097 9.354838710 64.931066230
+53.548387097 9.677419355 64.931066230
+53.548387097 10.000000000 64.931066230
+56.129032258 0.000000000 41.562757424
+56.129032258 0.322580645 41.562757424
+56.129032258 0.645161290 41.562757424
+56.129032258 0.967741935 41.562757424
+56.129032258 1.290322581 41.562757424
+56.129032258 1.612903226 41.562757424
+56.129032258 1.935483871 41.562757424
+56.129032258 2.258064516 41.650983104
+56.129032258 2.580645161 42.007394877
+56.129032258 2.903225806 42.630567878
+56.129032258 3.225806452 43.510014838
+56.129032258 3.548387097 44.634466681
+56.129032258 3.870967742 45.995029495
+56.129032258 4.193548387 47.587232438
+56.129032258 4.516129032 49.409320054
+56.129032258 4.838709677 51.452965804
+56.129032258 5.161290323 53.627995525
+56.129032258 5.483870968 55.587931245
+56.129032258 5.806451613 57.321397482
+56.129032258 6.129032258 58.858477926
+56.129032258 6.451612903 60.206932126
+56.129032258 6.774193548 61.355194390
+56.129032258 7.096774194 62.278842892
+56.129032258 7.419354839 62.948475434
+56.129032258 7.741935484 63.337473295
+56.129032258 8.064516129 63.434463522
+56.129032258 8.387096774 63.434463522
+56.129032258 8.709677419 63.434463522
+56.129032258 9.032258065 63.434463522
+56.129032258 9.354838710 63.434463522
+56.129032258 9.677419355 63.434463522
+56.129032258 10.000000000 63.434463522
+58.709677419 0.000000000 39.867082291
+58.709677419 0.322580645 39.867082291
+58.709677419 0.645161290 39.867082291
+58.709677419 0.967741935 39.867082291
+58.709677419 1.290322581 39.867082291
+58.709677419 1.612903226 39.867082291
+58.709677419 1.935483871 39.867082291
+58.709677419 2.258064516 39.958513244
+58.709677419 2.580645161 40.326884614
+58.709677419 2.903225806 40.967289350
+58.709677419 3.225806452 41.863642692
+58.709677419 3.548387097 42.998628756
+58.709677419 3.870967742 44.358835965
+58.709677419 4.193548387 45.939269950
+58.709677419 4.516129032 47.744614100
+58.709677419 4.838709677 49.783268810
+58.709677419 5.161290323 51.988970730
+58.709677419 5.483870968 53.992678480
+58.709677419 5.806451613 55.759559804
+58.709677419 6.129032258 57.313492323
+58.709677419 6.451612903 58.663327822
+58.709677419 6.774193548 59.801844372
+58.709677419 7.096774194 60.710189164
+58.709677419 7.419354839 61.364580282
+58.709677419 7.741935484 61.743138699
+58.709677419 8.064516129 61.837345788
+58.709677419 8.387096774 61.837345788
+58.709677419 8.709677419 61.837345788
+58.709677419 9.032258065 61.837345788
+58.709677419 9.354838710 61.837345788
+58.709677419 9.677419355 61.837345788
+58.709677419 10.000000000 61.837345788
+61.290322581 0.000000000 38.162654212
+61.290322581 0.322580645 38.162654212
+61.290322581 0.645161290 38.162654212
+61.290322581 0.967741935 38.162654212
+61.290322581 1.290322581 38.162654212
+61.290322581 1.612903226 38.162654212
+61.290322581 1.935483871 38.162654212
+61.290322581 2.258064516 38.256861301
+61.290322581 2.580645161 38.635419718
+61.290322581 2.903225806 39.289810836
+61.290322581 3.225806452 40.198155628
+61.290322581 3.548387097 41.336672178
+61.290322581 3.870967742 42.686507677
+61.290322581 4.193548387 44.240440196
+61.290322581 4.516129032 46.007321520
+61.290322581 4.838709677 48.011029270
+61.290322581 5.161290323 50.216731190
+61.290322581 5.483870968 52.255385900
+61.290322581 5.806451613 54.060730050
+61.290322581 6.129032258 55.641164035
+61.290322581 6.451612903 57.001371244
+61.290322581 6.774193548 58.136357308
+61.290322581 7.096774194 59.032710650
+61.290322581 7.419354839 59.673115386
+61.290322581 7.741935484 60.041486756
+61.290322581 8.064516129 60.132917709
+61.290322581 8.387096774 60.132917709
+61.290322581 8.709677419 60.132917709
+61.290322581 9.032258065 60.132917709
+61.290322581 9.354838710 60.132917709
+61.290322581 9.677419355 60.132917709
+61.290322581 10.000000000 60.132917709
+63.870967742 0.000000000 36.565536478
+63.870967742 0.322580645 36.565536478
+63.870967742 0.645161290 36.565536478
+63.870967742 0.967741935 36.565536478
+63.870967742 1.290322581 36.565536478
+63.870967742 1.612903226 36.565536478
+63.870967742 1.935483871 36.565536478
+63.870967742 2.258064516 36.662526705
+63.870967742 2.580645161 37.051524566
+63.870967742 2.903225806 37.721157108
+63.870967742 3.225806452 38.644805610
+63.870967742 3.548387097 39.793067874
+63.870967742 3.870967742 41.141522074
+63.870967742 4.193548387 42.678602518
+63.870967742 4.516129032 44.412068755
+63.870967742 4.838709677 46.372004475
+63.870967742 5.161290323 48.547034196
+63.870967742 5.483870968 50.590679946
+63.870967742 5.806451613 52.412767562
+63.870967742 6.129032258 54.004970505
+63.870967742 6.451612903 55.365533319
+63.870967742 6.774193548 56.489985162
+63.870967742 7.096774194 57.369432122
+63.870967742 7.419354839 57.992605123
+63.870967742 7.741935484 58.349016896
+63.870967742 8.064516129 58.437242576
+63.870967742 8.387096774 58.437242576
+63.870967742 8.709677419 58.437242576
+63.870967742 9.032258065 58.437242576
+63.870967742 9.354838710 58.437242576
+63.870967742 9.677419355 58.437242576
+63.870967742 10.000000000 58.437242576
+66.451612903 0.000000000 35.068933770
+66.451612903 0.322580645 35.068933770
+66.451612903 0.645161290 35.068933770
+66.451612903 0.967741935 35.068933770
+66.451612903 1.290322581 35.068933770
+66.451612903 1.612903226 35.068933770
+66.451612903 1.935483871 35.068933770
+66.451612903 2.258064516 35.168759265
+66.451612903 2.580645161 35.568606747
+66.451612903 2.903225806 36.254933561
+66.451612903 3.225806452 37.197390039
+66.451612903 3.548387097 38.361971152
+66.451612903 3.870967742 39.719252764
+66.451612903 4.193548387 41.252768585
+66.451612903 4.516129032 42.966462181
+66.451612903 4.838709677 44.890151318
+66.451612903 5.161290323 47.026244912
+66.451612903 5.483870968 49.059565038
+66.451612903 5.806451613 50.884382616
+66.451612903 6.129032258 52.477913466
+66.451612903 6.451612903 53.832050622
+66.451612903 6.774193548 54.942173271
+66.451612903 7.096774194 55.803037893
+66.451612903 7.419354839 56.408550848
+66.451612903 7.741935484 56.753064331
+66.451612903 8.064516129 56.838136033
+66.451612903 8.387096774 56.838136033
+66.451612903 8.709677419 56.838136033
+66.451612903 9.032258065 56.838136033
+66.451612903 9.354838710 56.838136033
+66.451612903 9.677419355 56.838136033
+66.451612903 10.000000000 56.838136033
+69.032258065 0.000000000 33.662078714
+69.032258065 0.322580645 33.662078714
+69.032258065 0.645161290 33.662078714
+69.032258065 0.967741935 33.662078714
+69.032258065 1.290322581 33.662078714
+69.032258065 1.612903226 33.662078714
+69.032258065 1.935483871 33.662078714
+69.032258065 2.258064516 33.764735351
+69.032258065 2.580645161 34.175590581
+69.032258065 2.903225806 34.879403331
+69.032258065 3.225806452 35.842858855
+69.032258065 3.548387097 37.028214983
+69.032258065 3.870967742 38.401801196
+69.032258065 4.193548387 39.942559670
+69.032258065 4.516129032 41.649838525
+69.032258065 4.838709677 43.550045315
+69.032258065 5.161290323 45.652411740
+69.032258065 5.483870968 47.673366035
+69.032258065 5.806451613 49.497159788
+69.032258065 6.129032258 51.089256555
+69.032258065 6.451612903 52.436089884
+69.032258065 6.774193548 53.532761533
+69.032258065 7.096774194 54.377014655
+69.032258065 7.419354839 54.967053117
+69.032258065 7.741935484 55.301239696
+69.032258065 8.064516129 55.383584230
+69.032258065 8.387096774 55.383584230
+69.032258065 8.709677419 55.383584230
+69.032258065 9.032258065 55.383584230
+69.032258065 9.354838710 55.383584230
+69.032258065 9.677419355 55.383584230
+69.032258065 10.000000000 55.383584230
+71.612903226 0.000000000 32.345698963
+71.612903226 0.322580645 32.345698963
+71.612903226 0.645161290 32.345698963
+71.612903226 0.967741935 32.345698963
+71.612903226 1.290322581 32.345698963
+71.612903226 1.612903226 32.345698963
+71.612903226 1.935483871 32.345698963
+71.612903226 2.258064516 32.451154918
+71.612903226 2.580645161 32.872940147
+71.612903226 2.903225806 33.594485558
+71.612903226 3.225806452 34.580055189
+71.612903226 3.548387097 35.788857152
+71.612903226 3.870967742 37.183714577
+71.612903226 4.193548387 38.739637265
+71.612903226 4.516129032 40.451629820
+71.612903226 4.838709677 42.341716636
+71.612903226 5.161290323 44.421773395
+71.612903226 5.483870968 46.435935198
+71.612903226 5.806451613 48.261432212
+71.612903226 6.129032258 49.854336744
+71.612903226 6.451612903 51.196720945
+71.612903226 6.774193548 52.283552638
+71.612903226 7.096774194 53.115093039
+71.612903226 7.419354839 53.693094911
+71.612903226 7.741935484 54.019196645
+71.612903226 8.064516129 54.099401387
+71.612903226 8.387096774 54.099401387
+71.612903226 8.709677419 54.099401387
+71.612903226 9.032258065 54.099401387
+71.612903226 9.354838710 54.099401387
+71.612903226 9.677419355 54.099401387
+71.612903226 10.000000000 54.099401387
+74.193548387 0.000000000 31.130282903
+74.193548387 0.322580645 31.130282903
+74.193548387 0.645161290 31.130282903
+74.193548387 0.967741935 31.130282903
+74.193548387 1.290322581 31.130282903
+74.193548387 1.612903226 31.130282903
+74.193548387 1.935483871 31.130282903
+74.193548387 2.258064516 31.238441391
+74.193548387 2.580645161 31.670837053
+74.193548387 2.903225806 32.409812696
+74.193548387 3.225806452 33.417620647
+74.193548387 3.548387097 34.650959998
+74.193548387 3.870967742 36.069805392
+74.193548387 4.193548387 37.645985858
+74.193548387 4.516129032 39.370885576
+74.193548387 4.838709677 41.262410178
+74.193548387 5.161290323 43.333019208
+74.193548387 5.483870968 45.349014245
+74.193548387 5.806451613 47.181869729
+74.193548387 6.129032258 48.780116579
+74.193548387 6.451612903 50.122504673
+74.193548387 6.774193548 51.204111839
+74.193548387 7.096774194 52.027392387
+74.193548387 7.419354839 52.597049726
+74.193548387 7.741935484 52.917397520
+74.193548387 8.064516129 52.996065135
+74.193548387 8.387096774 52.996065135
+74.193548387 8.709677419 52.996065135
+74.193548387 9.032258065 52.996065135
+74.193548387 9.354838710 52.996065135
+74.193548387 9.677419355 52.996065135
+74.193548387 10.000000000 52.996065135
+76.774193548 0.000000000 30.034038438
+76.774193548 0.322580645 30.034038438
+76.774193548 0.645161290 30.034038438
+76.774193548 0.967741935 30.034038438
+76.774193548 1.290322581 30.034038438
+76.774193548 1.612903226 30.034038438
+76.774193548 1.935483871 30.034038438
+76.774193548 2.258064516 30.144730818
+76.774193548 2.580645161 30.587109051
+76.774193548 2.903225806 31.342609259
+76.774193548 3.225806452 32.371796026
+76.774193548 3.548387097 33.629300526
+76.774193548 3.870967742 35.072817972
+76.774193548 4.193548387 36.671718583
+76.774193548 4.516129032 38.414630690
+76.774193548 4.838709677 40.316178156
+76.774193548 5.161290323 42.388670367
+76.774193548 5.483870968 44.414847934
+76.774193548 5.806451613 46.260814896
+76.774193548 6.129032258 47.869004716
+76.774193548 6.451612903 49.215738579
+76.774193548 6.774193548 50.296445582
+76.774193548 7.096774194 51.115524295
+76.774193548 7.419354839 51.680143529
+76.774193548 7.741935484 51.996803881
+76.774193548 8.064516129 52.074466376
+76.774193548 8.387096774 52.074466376
+76.774193548 8.709677419 52.074466376
+76.774193548 9.032258065 52.074466376
+76.774193548 9.354838710 52.074466376
+76.774193548 9.677419355 52.074466376
+76.774193548 10.000000000 52.074466376
+79.354838710 0.000000000 29.080444475
+79.354838710 0.322580645 29.080444475
+79.354838710 0.645161290 29.080444475
+79.354838710 0.967741935 29.080444475
+79.354838710 1.290322581 29.080444475
+79.354838710 1.612903226 29.080444475
+79.354838710 1.935483871 29.080444475
+79.354838710 2.258064516 29.193415030
+79.354838710 2.580645161 29.644787595
+79.354838710 2.903225806 30.415246173
+79.354838710 3.225806452 31.463952990
+79.354838710 3.548387097 32.743856294
+79.354838710 3.870967742 34.210866640
+79.354838710 4.193548387 35.832534825
+79.354838710 4.516129032 37.595554329
+79.354838710 4.838709677 39.512245487
+79.354838710 5.161290323 41.594701531
+79.354838710 5.483870968 43.636970165
+79.354838710 5.806451613 45.499968761
+79.354838710 6.129032258 47.121240224
+79.354838710 6.451612903 48.475411687
+79.354838710 6.774193548 49.558438226
+79.354838710 7.096774194 50.376426100
+79.354838710 7.419354839 50.938583742
+79.354838710 7.741935484 51.253180276
+79.354838710 8.064516129 51.330256980
+79.354838710 8.387096774 51.330256980
+79.354838710 8.709677419 51.330256980
+79.354838710 9.032258065 51.330256980
+79.354838710 9.354838710 51.330256980
+79.354838710 9.677419355 51.330256980
+79.354838710 10.000000000 51.330256980
+81.935483871 0.000000000 28.295387000
+81.935483871 0.322580645 28.295387000
+81.935483871 0.645161290 28.295387000
+81.935483871 0.967741935 28.295387000
+81.935483871 1.290322581 28.295387000
+81.935483871 1.612903226 28.295387000
+81.935483871 1.935483871 28.295387000
+81.935483871 2.258064516 28.410284551
+81.935483871 2.580645161 28.869270412
+81.935483871 2.903225806 29.652439525
+81.935483871 3.225806452 30.717816423
+81.935483871 3.548387097 32.017032404
+81.935483871 3.870967742 33.504652223
+81.935483871 4.193548387 35.146946432
+81.935483871 4.516129032 36.929357645
+81.935483871 4.838709677 38.862773119
+81.935483871 5.161290323 40.959228758
+81.935483871 5.483870968 43.019926470
+81.935483871 5.806451613 44.901011164
+81.935483871 6.129032258 46.536235546
+81.935483871 6.451612903 47.899114559
+81.935483871 6.774193548 48.986200093
+81.935483871 7.096774194 49.805035003
+81.935483871 7.419354839 50.366456066
+81.935483871 7.741935484 50.680115184
+81.935483871 8.064516129 50.756901048
+81.935483871 8.387096774 50.756901048
+81.935483871 8.709677419 50.756901048
+81.935483871 9.032258065 50.756901048
+81.935483871 9.354838710 50.756901048
+81.935483871 9.677419355 50.756901048
+81.935483871 10.000000000 50.756901048
+84.516129032 0.000000000 27.704007082
+84.516129032 0.322580645 27.704007082
+84.516129032 0.645161290 27.704007082
+84.516129032 0.967741935 27.704007082
+84.516129032 1.290322581 27.704007082
+84.516129032 1.612903226 27.704007082
+84.516129032 1.935483871 27.704007082
+84.516129032 2.258064516 27.820386779
+84.516129032 2.580645161 28.285240579
+84.516129032 2.903225806 29.078198137
+84.516129032 3.225806452 30.156479100
+84.516129032 3.548387097 31.470729250
+84.516129032 3.870967742 32.974572389
+84.516129032 4.193548387 34.633440121
+84.516129032 4.516129032 36.432039482
+84.516129032 4.838709677 38.380475723
+84.516129032 5.161290323 40.490870456
+84.516129032 5.483870968 42.568520962
+84.516129032 5.806451613 44.465639072
+84.516129032 6.129032258 46.113249111
+84.516129032 6.451612903 47.484193799
+84.516129032 6.774193548 48.575575214
+84.516129032 7.096774194 49.396043310
+84.516129032 7.419354839 49.957639505
+84.516129032 7.741935484 50.271021411
+84.516129032 8.064516129 50.347695757
+84.516129032 8.387096774 50.347695757
+84.516129032 8.709677419 50.347695757
+84.516129032 9.032258065 50.347695757
+84.516129032 9.354838710 50.347695757
+84.516129032 9.677419355 50.347695757
+84.516129032 10.000000000 50.347695757
+87.096774194 0.000000000 27.327538681
+87.096774194 0.322580645 27.327538681
+87.096774194 0.645161290 27.327538681
+87.096774194 0.967741935 27.327538681
+87.096774194 1.290322581 27.327538681
+87.096774194 1.612903226 27.327538681
+87.096774194 1.935483871 27.327538681
+87.096774194 2.258064516 27.444875519
+87.096774194 2.580645161 27.913519181
+87.096774194 2.903225806 28.712818142
+87.096774194 3.225806452 29.799451045
+87.096774194 3.548387097 31.123478051
+87.096774194 3.870967742 32.637941952
+87.096774194 4.193548387 34.307806798
+87.096774194 4.516129032 36.117385824
+87.096774194 4.838709677 38.076430208
+87.096774194 5.161290323 40.197185747
+87.096774194 5.483870968 42.286978613
+87.096774194 5.806451613 44.195359935
+87.096774194 6.129032258 45.851672154
+87.096774194 6.451612903 47.228403784
+87.096774194 6.774193548 48.323052721
+87.096774194 7.096774194 49.144986345
+87.096774194 7.419354839 49.707005179
+87.096774194 7.741935484 50.020392983
+87.096774194 8.064516129 50.097042021
+87.096774194 8.387096774 50.097042021
+87.096774194 8.709677419 50.097042021
+87.096774194 9.032258065 50.097042021
+87.096774194 9.354838710 50.097042021
+87.096774194 9.677419355 50.097042021
+87.096774194 10.000000000 50.097042021
+89.677419355 0.000000000 27.180531506
+89.677419355 0.322580645 27.180531506
+89.677419355 0.645161290 27.180531506
+89.677419355 0.967741935 27.180531506
+89.677419355 1.290322581 27.180531506
+89.677419355 1.612903226 27.180531506
+89.677419355 1.935483871 27.180531506
+89.677419355 2.258064516 27.298244964
+89.677419355 2.580645161 27.768379952
+89.677419355 2.903225806 28.570174667
+89.677419355 3.225806452 29.660103341
+89.677419355 3.548387097 30.987993911
+89.677419355 3.870967742 32.506670827
+89.677419355 4.193548387 34.180910067
+89.677419355 4.516129032 35.994914976
+89.677419355 4.838709677 37.958317674
+89.677419355 5.161290323 40.083428161
+89.677419355 5.483870968 42.178243163
+89.677419355 5.806451613 44.091241528
+89.677419355 6.129032258 45.751120568
+89.677419355 6.451612903 47.130246045
+89.677419355 6.774193548 48.226280081
+89.677419355 7.096774194 49.048873010
+89.677419355 7.419354839 49.611120353
+89.677419355 7.741935484 49.924547621
+89.677419355 8.064516129 50.001196081
+89.677419355 8.387096774 50.001196081
+89.677419355 8.709677419 50.001196081
+89.677419355 9.032258065 50.001196081
+89.677419355 9.354838710 50.001196081
+89.677419355 9.677419355 50.001196081
+89.677419355 10.000000000 50.001196081
+92.258064516 0.000000000 27.178685975
+92.258064516 0.322580645 27.178685975
+92.258064516 0.645161290 27.178685975
+92.258064516 0.967741935 27.178685975
+92.258064516 1.290322581 27.178685975
+92.258064516 1.612903226 27.178685975
+92.258064516 1.935483871 27.178685975
+92.258064516 2.258064516 27.296404171
+92.258064516 2.580645161 27.766557921
+92.258064516 2.903225806 28.568384038
+92.258064516 3.225806452 29.658354183
+92.258064516 3.548387097 30.986293382
+92.258064516 3.870967742 32.505023360
+92.258064516 4.193548387 34.179317922
+92.258064516 4.516129032 35.993378883
+92.258064516 4.838709677 37.956837060
+92.258064516 5.161290323 40.082003316
+92.258064516 5.483870968 42.176882360
+92.258064516 5.806451613 44.089939459
+92.258064516 6.129032258 45.749863871
+92.258064516 6.451612903 47.129019871
+92.258064516 6.774193548 48.225071677
+92.258064516 7.096774194 49.047673187
+92.258064516 7.419354839 49.609923621
+92.258064516 7.741935484 49.923351514
+92.258064516 8.064516129 50.000000000
+92.258064516 8.387096774 50.000000000
+92.258064516 8.709677419 50.000000000
+92.258064516 9.032258065 50.000000000
+92.258064516 9.354838710 50.000000000
+92.258064516 9.677419355 50.000000000
+92.258064516 10.000000000 50.000000000
+94.838709677 0.000000000 27.178685975
+94.838709677 0.322580645 27.178685975
+94.838709677 0.645161290 27.178685975
+94.838709677 0.967741935 27.178685975
+94.838709677 1.290322581 27.178685975
+94.838709677 1.612903226 27.178685975
+94.838709677 1.935483871 27.178685975
+94.838709677 2.258064516 27.296404171
+94.838709677 2.580645161 27.766557921
+94.838709677 2.903225806 28.568384038
+94.838709677 3.225806452 29.658354183
+94.838709677 3.548387097 30.986293382
+94.838709677 3.870967742 32.505023360
+94.838709677 4.193548387 34.179317922
+94.838709677 4.516129032 35.993378883
+94.838709677 4.838709677 37.956837060
+94.838709677 5.161290323 40.082003316
+94.838709677 5.483870968 42.176882360
+94.838709677 5.806451613 44.089939459
+94.838709677 6.129032258 45.749863871
+94.838709677 6.451612903 47.129019871
+94.838709677 6.774193548 48.225071677
+94.838709677 7.096774194 49.047673187
+94.838709677 7.419354839 49.609923621
+94.838709677 7.741935484 49.923351514
+94.838709677 8.064516129 50.000000000
+94.838709677 8.387096774 50.000000000
+94.838709677 8.709677419 50.000000000
+94.838709677 9.032258065 50.000000000
+94.838709677 9.354838710 50.000000000
+94.838709677 9.677419355 50.000000000
+94.838709677 10.000000000 50.000000000
+97.419354839 0.000000000 27.178685975
+97.419354839 0.322580645 27.178685975
+97.419354839 0.645161290 27.178685975
+97.419354839 0.967741935 27.178685975
+97.419354839 1.290322581 27.178685975
+97.419354839 1.612903226 27.178685975
+97.419354839 1.935483871 27.178685975
+97.419354839 2.258064516 27.296404171
+97.419354839 2.580645161 27.766557921
+97.419354839 2.903225806 28.568384038
+97.419354839 3.225806452 29.658354183
+97.419354839 3.548387097 30.986293382
+97.419354839 3.870967742 32.505023360
+97.419354839 4.193548387 34.179317922
+97.419354839 4.516129032 35.993378883
+97.419354839 4.838709677 37.956837060
+97.419354839 5.161290323 40.082003316
+97.419354839 5.483870968 42.176882360
+97.419354839 5.806451613 44.089939459
+97.419354839 6.129032258 45.749863871
+97.419354839 6.451612903 47.129019871
+97.419354839 6.774193548 48.225071677
+97.419354839 7.096774194 49.047673187
+97.419354839 7.419354839 49.609923621
+97.419354839 7.741935484 49.923351514
+97.419354839 8.064516129 50.000000000
+97.419354839 8.387096774 50.000000000
+97.419354839 8.709677419 50.000000000
+97.419354839 9.032258065 50.000000000
+97.419354839 9.354838710 50.000000000
+97.419354839 9.677419355 50.000000000
+97.419354839 10.000000000 50.000000000
+100.000000000 0.000000000 27.178685975
+100.000000000 0.322580645 27.178685975
+100.000000000 0.645161290 27.178685975
+100.000000000 0.967741935 27.178685975
+100.000000000 1.290322581 27.178685975
+100.000000000 1.612903226 27.178685975
+100.000000000 1.935483871 27.178685975
+100.000000000 2.258064516 27.296404171
+100.000000000 2.580645161 27.766557921
+100.000000000 2.903225806 28.568384038
+100.000000000 3.225806452 29.658354183
+100.000000000 3.548387097 30.986293382
+100.000000000 3.870967742 32.505023360
+100.000000000 4.193548387 34.179317922
+100.000000000 4.516129032 35.993378883
+100.000000000 4.838709677 37.956837060
+100.000000000 5.161290323 40.082003316
+100.000000000 5.483870968 42.176882360
+100.000000000 5.806451613 44.089939459
+100.000000000 6.129032258 45.749863871
+100.000000000 6.451612903 47.129019871
+100.000000000 6.774193548 48.225071677
+100.000000000 7.096774194 49.047673187
+100.000000000 7.419354839 49.609923621
+100.000000000 7.741935484 49.923351514
+100.000000000 8.064516129 50.000000000
+100.000000000 8.387096774 50.000000000
+100.000000000 8.709677419 50.000000000
+100.000000000 9.032258065 50.000000000
+100.000000000 9.354838710 50.000000000
+100.000000000 9.677419355 50.000000000
+100.000000000 10.000000000 50.000000000
diff --git a/examples/mamdani/octave/investment_portfolio.fll b/examples/mamdani/octave/investment_portfolio.fll
new file mode 100644
index 0000000..628fdef
--- /dev/null
+++ b/examples/mamdani/octave/investment_portfolio.fll
@@ -0,0 +1,34 @@
+Engine: investment_portfolio
+InputVariable: Age
+ enabled: true
+ range: 20.000 100.000
+ lock-range: false
+ term: Young ZShape 30.000 90.000
+ term: Old SShape 30.000 90.000
+InputVariable: RiskTolerance
+ enabled: true
+ range: 0.000 10.000
+ lock-range: false
+ term: Low ZShape 2.000 8.000
+ term: High SShape 2.000 8.000
+OutputVariable: PercentageInStocks
+ enabled: true
+ range: 0.000 100.000
+ lock-range: false
+ aggregation: EinsteinSum
+ defuzzifier: Centroid 200
+ default: nan
+ lock-previous: false
+ term: AboutFifteen Gaussian 15.000 10.000
+ term: AboutFifty Gaussian 50.000 10.000
+ term: AboutEightyFive Gaussian 85.000 10.000
+RuleBlock:
+ enabled: true
+ conjunction: EinsteinProduct
+ disjunction: EinsteinSum
+ implication: EinsteinProduct
+ activation: General
+ rule: if Age is Young or RiskTolerance is High then PercentageInStocks is AboutEightyFive
+ rule: if Age is Old or RiskTolerance is Low then PercentageInStocks is AboutFifteen
+ rule: if Age is not extremely Old and RiskTolerance is not extremely Low then PercentageInStocks is AboutFifty with 0.500
+ rule: if Age is not extremely Young and RiskTolerance is not extremely High then PercentageInStocks is AboutFifty with 0.500 \ No newline at end of file
diff --git a/examples/mamdani/octave/investment_portfolio.java b/examples/mamdani/octave/investment_portfolio.java
new file mode 100644
index 0000000..9dff687
--- /dev/null
+++ b/examples/mamdani/octave/investment_portfolio.java
@@ -0,0 +1,73 @@
+import com.fuzzylite.*;
+import com.fuzzylite.activation.*
+import com.fuzzylite.defuzzifier.*;
+import com.fuzzylite.factory.*;
+import com.fuzzylite.hedge.*;
+import com.fuzzylite.imex.*;
+import com.fuzzylite.norm.*;
+import com.fuzzylite.norm.s.*;
+import com.fuzzylite.norm.t.*;
+import com.fuzzylite.rule.*;
+import com.fuzzylite.term.*;
+import com.fuzzylite.variable.*;
+
+public class investment_portfolio{
+public static void main(String[] args){
+//Code automatically generated with fuzzylite 6.0.
+
+Engine engine = new Engine();
+engine.setName("investment_portfolio");
+engine.setDescription("");
+
+InputVariable Age = new InputVariable();
+Age.setName("Age");
+Age.setDescription("");
+Age.setEnabled(true);
+Age.setRange(20.000, 100.000);
+Age.setLockValueInRange(false);
+Age.addTerm(new ZShape("Young", 30.000, 90.000));
+Age.addTerm(new SShape("Old", 30.000, 90.000));
+engine.addInputVariable(Age);
+
+InputVariable RiskTolerance = new InputVariable();
+RiskTolerance.setName("RiskTolerance");
+RiskTolerance.setDescription("");
+RiskTolerance.setEnabled(true);
+RiskTolerance.setRange(0.000, 10.000);
+RiskTolerance.setLockValueInRange(false);
+RiskTolerance.addTerm(new ZShape("Low", 2.000, 8.000));
+RiskTolerance.addTerm(new SShape("High", 2.000, 8.000));
+engine.addInputVariable(RiskTolerance);
+
+OutputVariable PercentageInStocks = new OutputVariable();
+PercentageInStocks.setName("PercentageInStocks");
+PercentageInStocks.setDescription("");
+PercentageInStocks.setEnabled(true);
+PercentageInStocks.setRange(0.000, 100.000);
+PercentageInStocks.setLockValueInRange(false);
+PercentageInStocks.setAggregation(new EinsteinSum());
+PercentageInStocks.setDefuzzifier(new Centroid(200));
+PercentageInStocks.setDefaultValue(Double.NaN);
+PercentageInStocks.setLockPreviousValue(false);
+PercentageInStocks.addTerm(new Gaussian("AboutFifteen", 15.000, 10.000));
+PercentageInStocks.addTerm(new Gaussian("AboutFifty", 50.000, 10.000));
+PercentageInStocks.addTerm(new Gaussian("AboutEightyFive", 85.000, 10.000));
+engine.addOutputVariable(PercentageInStocks);
+
+RuleBlock ruleBlock = new RuleBlock();
+ruleBlock.setName("");
+ruleBlock.setDescription("");
+ruleBlock.setEnabled(true);
+ruleBlock.setConjunction(new EinsteinProduct());
+ruleBlock.setDisjunction(new EinsteinSum());
+ruleBlock.setImplication(new EinsteinProduct());
+ruleBlock.setActivation(new General());
+ruleBlock.addRule(Rule.parse("if Age is Young or RiskTolerance is High then PercentageInStocks is AboutEightyFive", engine));
+ruleBlock.addRule(Rule.parse("if Age is Old or RiskTolerance is Low then PercentageInStocks is AboutFifteen", engine));
+ruleBlock.addRule(Rule.parse("if Age is not extremely Old and RiskTolerance is not extremely Low then PercentageInStocks is AboutFifty with 0.500", engine));
+ruleBlock.addRule(Rule.parse("if Age is not extremely Young and RiskTolerance is not extremely High then PercentageInStocks is AboutFifty with 0.500", engine));
+engine.addRuleBlock(ruleBlock);
+
+
+}
+}
diff --git a/examples/mamdani/octave/investment_portfolio.pdf b/examples/mamdani/octave/investment_portfolio.pdf
new file mode 100644
index 0000000..c9c897e
--- /dev/null
+++ b/examples/mamdani/octave/investment_portfolio.pdf
Binary files differ
diff --git a/examples/mamdani/octave/mamdani_tip_calculator.R b/examples/mamdani/octave/mamdani_tip_calculator.R
new file mode 100644
index 0000000..81eabe2
--- /dev/null
+++ b/examples/mamdani/octave/mamdani_tip_calculator.R
@@ -0,0 +1,90 @@
+#Code automatically generated with fuzzylite 6.0.
+
+library(ggplot2);
+
+engine.name = "mamdani_tip_calculator"
+engine.fll = "Engine: mamdani_tip_calculator
+InputVariable: FoodQuality
+ enabled: true
+ range: 1.000 10.000
+ lock-range: false
+ term: Bad Trapezoid 0.000 1.000 3.000 7.000
+ term: Good Trapezoid 3.000 7.000 10.000 11.000
+InputVariable: Service
+ enabled: true
+ range: 1.000 10.000
+ lock-range: false
+ term: Bad Trapezoid 0.000 1.000 3.000 7.000
+ term: Good Trapezoid 3.000 7.000 10.000 11.000
+OutputVariable: Tip
+ enabled: true
+ range: 0.000 30.000
+ lock-range: false
+ aggregation: AlgebraicSum
+ defuzzifier: Centroid 200
+ default: nan
+ lock-previous: false
+ term: AboutTenPercent Gaussian 10.000 2.000
+ term: AboutFifteenPercent Gaussian 15.000 2.000
+ term: AboutTwentyPercent Gaussian 20.000 2.000
+OutputVariable: CheckPlusTip
+ enabled: true
+ range: 1.000 1.300
+ lock-range: false
+ aggregation: AlgebraicSum
+ defuzzifier: Centroid 200
+ default: nan
+ lock-previous: false
+ term: PlusAboutTenPercent Gaussian 1.100 0.020
+ term: PlusAboutFifteenPercent Gaussian 1.150 0.020
+ term: PlusAboutTwentyPercent Gaussian 1.200 0.020
+RuleBlock:
+ enabled: true
+ conjunction: AlgebraicProduct
+ disjunction: Maximum
+ implication: Minimum
+ activation: General
+ rule: if FoodQuality is Bad and Service is Bad then Tip is AboutTenPercent and CheckPlusTip is PlusAboutTenPercent
+ rule: if FoodQuality is Bad and Service is Good then Tip is AboutFifteenPercent and CheckPlusTip is PlusAboutFifteenPercent
+ rule: if FoodQuality is Good and Service is Bad then Tip is AboutFifteenPercent and CheckPlusTip is PlusAboutFifteenPercent
+ rule: if FoodQuality is Good and Service is Good then Tip is AboutTwentyPercent and CheckPlusTip is PlusAboutTwentyPercent"
+
+engine.fldFile = "mamdani_tip_calculator.fld"
+if (require(data.table)) {
+ engine.df = data.table::fread(engine.fldFile, sep="auto", header="auto")
+} else {
+ engine.df = read.table(engine.fldFile, header=TRUE)
+}
+
+engine.plot.i1i2_o1 = ggplot(engine.df, aes(FoodQuality, Service)) +
+ geom_tile(aes(fill=Tip)) +
+ scale_fill_gradient(low="yellow", high="red") +
+ stat_contour(aes(x=FoodQuality, y=Service, z=Tip), color="black") +
+ ggtitle("(FoodQuality, Service) = Tip")
+
+engine.plot.i2i1_o1 = ggplot(engine.df, aes(Service, FoodQuality)) +
+ geom_tile(aes(fill=Tip)) +
+ scale_fill_gradient(low="yellow", high="red") +
+ stat_contour(aes(x=Service, y=FoodQuality, z=Tip), color="black") +
+ ggtitle("(Service, FoodQuality) = Tip")
+
+engine.plot.i1i2_o2 = ggplot(engine.df, aes(FoodQuality, Service)) +
+ geom_tile(aes(fill=CheckPlusTip)) +
+ scale_fill_gradient(low="yellow", high="red") +
+ stat_contour(aes(x=FoodQuality, y=Service, z=CheckPlusTip), color="black") +
+ ggtitle("(FoodQuality, Service) = CheckPlusTip")
+
+engine.plot.i2i1_o2 = ggplot(engine.df, aes(Service, FoodQuality)) +
+ geom_tile(aes(fill=CheckPlusTip)) +
+ scale_fill_gradient(low="yellow", high="red") +
+ stat_contour(aes(x=Service, y=FoodQuality, z=CheckPlusTip), color="black") +
+ ggtitle("(Service, FoodQuality) = CheckPlusTip")
+
+if (require(gridExtra)) {
+ engine.plots = arrangeGrob(engine.plot.i1i2_o1, engine.plot.i2i1_o1, engine.plot.i1i2_o2, engine.plot.i2i1_o2, ncol=2, top=engine.name)
+ ggsave(paste0(engine.name, ".pdf"), engine.plots)
+ if (require(grid)) {
+ grid.newpage()
+ grid.draw(engine.plots)
+ }
+}
diff --git a/examples/mamdani/octave/mamdani_tip_calculator.cpp b/examples/mamdani/octave/mamdani_tip_calculator.cpp
new file mode 100644
index 0000000..86d6464
--- /dev/null
+++ b/examples/mamdani/octave/mamdani_tip_calculator.cpp
@@ -0,0 +1,77 @@
+#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("mamdani_tip_calculator");
+engine->setDescription("");
+
+InputVariable* FoodQuality = new InputVariable;
+FoodQuality->setName("FoodQuality");
+FoodQuality->setDescription("");
+FoodQuality->setEnabled(true);
+FoodQuality->setRange(1.000, 10.000);
+FoodQuality->setLockValueInRange(false);
+FoodQuality->addTerm(new Trapezoid("Bad", 0.000, 1.000, 3.000, 7.000));
+FoodQuality->addTerm(new Trapezoid("Good", 3.000, 7.000, 10.000, 11.000));
+engine->addInputVariable(FoodQuality);
+
+InputVariable* Service = new InputVariable;
+Service->setName("Service");
+Service->setDescription("");
+Service->setEnabled(true);
+Service->setRange(1.000, 10.000);
+Service->setLockValueInRange(false);
+Service->addTerm(new Trapezoid("Bad", 0.000, 1.000, 3.000, 7.000));
+Service->addTerm(new Trapezoid("Good", 3.000, 7.000, 10.000, 11.000));
+engine->addInputVariable(Service);
+
+OutputVariable* Tip = new OutputVariable;
+Tip->setName("Tip");
+Tip->setDescription("");
+Tip->setEnabled(true);
+Tip->setRange(0.000, 30.000);
+Tip->setLockValueInRange(false);
+Tip->setAggregation(new AlgebraicSum);
+Tip->setDefuzzifier(new Centroid(200));
+Tip->setDefaultValue(fl::nan);
+Tip->setLockPreviousValue(false);
+Tip->addTerm(new Gaussian("AboutTenPercent", 10.000, 2.000));
+Tip->addTerm(new Gaussian("AboutFifteenPercent", 15.000, 2.000));
+Tip->addTerm(new Gaussian("AboutTwentyPercent", 20.000, 2.000));
+engine->addOutputVariable(Tip);
+
+OutputVariable* CheckPlusTip = new OutputVariable;
+CheckPlusTip->setName("CheckPlusTip");
+CheckPlusTip->setDescription("");
+CheckPlusTip->setEnabled(true);
+CheckPlusTip->setRange(1.000, 1.300);
+CheckPlusTip->setLockValueInRange(false);
+CheckPlusTip->setAggregation(new AlgebraicSum);
+CheckPlusTip->setDefuzzifier(new Centroid(200));
+CheckPlusTip->setDefaultValue(fl::nan);
+CheckPlusTip->setLockPreviousValue(false);
+CheckPlusTip->addTerm(new Gaussian("PlusAboutTenPercent", 1.100, 0.020));
+CheckPlusTip->addTerm(new Gaussian("PlusAboutFifteenPercent", 1.150, 0.020));
+CheckPlusTip->addTerm(new Gaussian("PlusAboutTwentyPercent", 1.200, 0.020));
+engine->addOutputVariable(CheckPlusTip);
+
+RuleBlock* ruleBlock = new RuleBlock;
+ruleBlock->setName("");
+ruleBlock->setDescription("");
+ruleBlock->setEnabled(true);
+ruleBlock->setConjunction(new AlgebraicProduct);
+ruleBlock->setDisjunction(new Maximum);
+ruleBlock->setImplication(new Minimum);
+ruleBlock->setActivation(new General);
+ruleBlock->addRule(Rule::parse("if FoodQuality is Bad and Service is Bad then Tip is AboutTenPercent and CheckPlusTip is PlusAboutTenPercent", engine));
+ruleBlock->addRule(Rule::parse("if FoodQuality is Bad and Service is Good then Tip is AboutFifteenPercent and CheckPlusTip is PlusAboutFifteenPercent", engine));
+ruleBlock->addRule(Rule::parse("if FoodQuality is Good and Service is Bad then Tip is AboutFifteenPercent and CheckPlusTip is PlusAboutFifteenPercent", engine));
+ruleBlock->addRule(Rule::parse("if FoodQuality is Good and Service is Good then Tip is AboutTwentyPercent and CheckPlusTip is PlusAboutTwentyPercent", engine));
+engine->addRuleBlock(ruleBlock);
+
+
+}
diff --git a/examples/mamdani/octave/mamdani_tip_calculator.fcl b/examples/mamdani/octave/mamdani_tip_calculator.fcl
new file mode 100644
index 0000000..0265bc2
--- /dev/null
+++ b/examples/mamdani/octave/mamdani_tip_calculator.fcl
@@ -0,0 +1,57 @@
+//Code automatically generated with fuzzylite 6.0.
+
+FUNCTION_BLOCK mamdani_tip_calculator
+
+VAR_INPUT
+ FoodQuality: REAL;
+ Service: REAL;
+END_VAR
+
+VAR_OUTPUT
+ Tip: REAL;
+ CheckPlusTip: REAL;
+END_VAR
+
+FUZZIFY FoodQuality
+ RANGE := (1.000 .. 10.000);
+ TERM Bad := Trapezoid 0.000 1.000 3.000 7.000;
+ TERM Good := Trapezoid 3.000 7.000 10.000 11.000;
+END_FUZZIFY
+
+FUZZIFY Service
+ RANGE := (1.000 .. 10.000);
+ TERM Bad := Trapezoid 0.000 1.000 3.000 7.000;
+ TERM Good := Trapezoid 3.000 7.000 10.000 11.000;
+END_FUZZIFY
+
+DEFUZZIFY Tip
+ RANGE := (0.000 .. 30.000);
+ TERM AboutTenPercent := Gaussian 10.000 2.000;
+ TERM AboutFifteenPercent := Gaussian 15.000 2.000;
+ TERM AboutTwentyPercent := Gaussian 20.000 2.000;
+ METHOD : COG;
+ ACCU : ASUM;
+ DEFAULT := nan;
+END_DEFUZZIFY
+
+DEFUZZIFY CheckPlusTip
+ RANGE := (1.000 .. 1.300);
+ TERM PlusAboutTenPercent := Gaussian 1.100 0.020;
+ TERM PlusAboutFifteenPercent := Gaussian 1.150 0.020;
+ TERM PlusAboutTwentyPercent := Gaussian 1.200 0.020;
+ METHOD : COG;
+ ACCU : ASUM;
+ DEFAULT := nan;
+END_DEFUZZIFY
+
+RULEBLOCK
+ AND : PROD;
+ OR : MAX;
+ ACT : MIN;
+ RULE 1 : if FoodQuality is Bad and Service is Bad then Tip is AboutTenPercent and CheckPlusTip is PlusAboutTenPercent
+ RULE 2 : if FoodQuality is Bad and Service is Good then Tip is AboutFifteenPercent and CheckPlusTip is PlusAboutFifteenPercent
+ RULE 3 : if FoodQuality is Good and Service is Bad then Tip is AboutFifteenPercent and CheckPlusTip is PlusAboutFifteenPercent
+ RULE 4 : if FoodQuality is Good and Service is Good then Tip is AboutTwentyPercent and CheckPlusTip is PlusAboutTwentyPercent
+END_RULEBLOCK
+
+END_FUNCTION_BLOCK
diff --git a/examples/mamdani/octave/mamdani_tip_calculator.fis b/examples/mamdani/octave/mamdani_tip_calculator.fis
new file mode 100644
index 0000000..13cd802
--- /dev/null
+++ b/examples/mamdani/octave/mamdani_tip_calculator.fis
@@ -0,0 +1,50 @@
+#Code automatically generated with fuzzylite 6.0.
+
+[System]
+Name='mamdani_tip_calculator'
+Type='mamdani'
+Version=6.0
+NumInputs=2
+NumOutputs=2
+NumRules=4
+AndMethod='prod'
+OrMethod='max'
+ImpMethod='min'
+AggMethod='probor'
+DefuzzMethod='centroid'
+
+[Input1]
+Name='FoodQuality'
+Range=[1.000 10.000]
+NumMFs=2
+MF1='Bad':'trapmf',[0.000 1.000 3.000 7.000]
+MF2='Good':'trapmf',[3.000 7.000 10.000 11.000]
+
+[Input2]
+Name='Service'
+Range=[1.000 10.000]
+NumMFs=2
+MF1='Bad':'trapmf',[0.000 1.000 3.000 7.000]
+MF2='Good':'trapmf',[3.000 7.000 10.000 11.000]
+
+[Output1]
+Name='Tip'
+Range=[0.000 30.000]
+NumMFs=3
+MF1='AboutTenPercent':'gaussmf',[2.000 10.000]
+MF2='AboutFifteenPercent':'gaussmf',[2.000 15.000]
+MF3='AboutTwentyPercent':'gaussmf',[2.000 20.000]
+
+[Output2]
+Name='CheckPlusTip'
+Range=[1.000 1.300]
+NumMFs=3
+MF1='PlusAboutTenPercent':'gaussmf',[0.020 1.100]
+MF2='PlusAboutFifteenPercent':'gaussmf',[0.020 1.150]
+MF3='PlusAboutTwentyPercent':'gaussmf',[0.020 1.200]
+
+[Rules]
+1.000 1.000 , 1.000 1.000 (1.000) : 1
+1.000 2.000 , 2.000 2.000 (1.000) : 1
+2.000 1.000 , 2.000 2.000 (1.000) : 1
+2.000 2.000 , 3.000 3.000 (1.000) : 1
diff --git a/examples/mamdani/octave/mamdani_tip_calculator.fld b/examples/mamdani/octave/mamdani_tip_calculator.fld
new file mode 100644
index 0000000..9d87eab
--- /dev/null
+++ b/examples/mamdani/octave/mamdani_tip_calculator.fld
@@ -0,0 +1,1025 @@
+FoodQuality Service Tip CheckPlusTip
+1.000000000 1.000000000 10.000002957 1.100000030
+1.000000000 1.290322581 10.000002957 1.100000030
+1.000000000 1.580645161 10.000002957 1.100000030
+1.000000000 1.870967742 10.000002957 1.100000030
+1.000000000 2.161290323 10.000002957 1.100000030
+1.000000000 2.451612903 10.000002957 1.100000030
+1.000000000 2.741935484 10.000002957 1.100000030
+1.000000000 3.032258065 10.103612040 1.101036120
+1.000000000 3.322580645 10.708467388 1.107084674
+1.000000000 3.612903226 11.133945555 1.111339456
+1.000000000 3.903225806 11.479248807 1.114792488
+1.000000000 4.193548387 11.778370516 1.117783705
+1.000000000 4.483870968 12.050104922 1.120501049
+1.000000000 4.774193548 12.305762763 1.123057628
+1.000000000 5.064516129 12.555175445 1.125551754
+1.000000000 5.354838710 12.806659860 1.128066599
+1.000000000 5.645161290 13.068093230 1.130680932
+1.000000000 5.935483871 13.350561957 1.133505620
+1.000000000 6.225806452 13.666570669 1.136665707
+1.000000000 6.516129032 14.042124914 1.140421249
+1.000000000 6.806451613 14.524928709 1.145249287
+1.000000000 7.096774194 15.000000000 1.150000000
+1.000000000 7.387096774 15.000000000 1.150000000
+1.000000000 7.677419355 15.000000000 1.150000000
+1.000000000 7.967741935 15.000000000 1.150000000
+1.000000000 8.258064516 15.000000000 1.150000000
+1.000000000 8.548387097 15.000000000 1.150000000
+1.000000000 8.838709677 15.000000000 1.150000000
+1.000000000 9.129032258 15.000000000 1.150000000
+1.000000000 9.419354839 15.000000000 1.150000000
+1.000000000 9.709677419 15.000000000 1.150000000
+1.000000000 10.000000000 15.000000000 1.150000000
+1.290322581 1.000000000 10.000002957 1.100000030
+1.290322581 1.290322581 10.000002957 1.100000030
+1.290322581 1.580645161 10.000002957 1.100000030
+1.290322581 1.870967742 10.000002957 1.100000030
+1.290322581 2.161290323 10.000002957 1.100000030
+1.290322581 2.451612903 10.000002957 1.100000030
+1.290322581 2.741935484 10.000002957 1.100000030
+1.290322581 3.032258065 10.103612040 1.101036120
+1.290322581 3.322580645 10.708467388 1.107084674
+1.290322581 3.612903226 11.133945555 1.111339456
+1.290322581 3.903225806 11.479248807 1.114792488
+1.290322581 4.193548387 11.778370516 1.117783705
+1.290322581 4.483870968 12.050104922 1.120501049
+1.290322581 4.774193548 12.305762763 1.123057628
+1.290322581 5.064516129 12.555175445 1.125551754
+1.290322581 5.354838710 12.806659860 1.128066599
+1.290322581 5.645161290 13.068093230 1.130680932
+1.290322581 5.935483871 13.350561957 1.133505620
+1.290322581 6.225806452 13.666570669 1.136665707
+1.290322581 6.516129032 14.042124914 1.140421249
+1.290322581 6.806451613 14.524928709 1.145249287
+1.290322581 7.096774194 15.000000000 1.150000000
+1.290322581 7.387096774 15.000000000 1.150000000
+1.290322581 7.677419355 15.000000000 1.150000000
+1.290322581 7.967741935 15.000000000 1.150000000
+1.290322581 8.258064516 15.000000000 1.150000000
+1.290322581 8.548387097 15.000000000 1.150000000
+1.290322581 8.838709677 15.000000000 1.150000000
+1.290322581 9.129032258 15.000000000 1.150000000
+1.290322581 9.419354839 15.000000000 1.150000000
+1.290322581 9.709677419 15.000000000 1.150000000
+1.290322581 10.000000000 15.000000000 1.150000000
+1.580645161 1.000000000 10.000002957 1.100000030
+1.580645161 1.290322581 10.000002957 1.100000030
+1.580645161 1.580645161 10.000002957 1.100000030
+1.580645161 1.870967742 10.000002957 1.100000030
+1.580645161 2.161290323 10.000002957 1.100000030
+1.580645161 2.451612903 10.000002957 1.100000030
+1.580645161 2.741935484 10.000002957 1.100000030
+1.580645161 3.032258065 10.103612040 1.101036120
+1.580645161 3.322580645 10.708467388 1.107084674
+1.580645161 3.612903226 11.133945555 1.111339456
+1.580645161 3.903225806 11.479248807 1.114792488
+1.580645161 4.193548387 11.778370516 1.117783705
+1.580645161 4.483870968 12.050104922 1.120501049
+1.580645161 4.774193548 12.305762763 1.123057628
+1.580645161 5.064516129 12.555175445 1.125551754
+1.580645161 5.354838710 12.806659860 1.128066599
+1.580645161 5.645161290 13.068093230 1.130680932
+1.580645161 5.935483871 13.350561957 1.133505620
+1.580645161 6.225806452 13.666570669 1.136665707
+1.580645161 6.516129032 14.042124914 1.140421249
+1.580645161 6.806451613 14.524928709 1.145249287
+1.580645161 7.096774194 15.000000000 1.150000000
+1.580645161 7.387096774 15.000000000 1.150000000
+1.580645161 7.677419355 15.000000000 1.150000000
+1.580645161 7.967741935 15.000000000 1.150000000
+1.580645161 8.258064516 15.000000000 1.150000000
+1.580645161 8.548387097 15.000000000 1.150000000
+1.580645161 8.838709677 15.000000000 1.150000000
+1.580645161 9.129032258 15.000000000 1.150000000
+1.580645161 9.419354839 15.000000000 1.150000000
+1.580645161 9.709677419 15.000000000 1.150000000
+1.580645161 10.000000000 15.000000000 1.150000000
+1.870967742 1.000000000 10.000002957 1.100000030
+1.870967742 1.290322581 10.000002957 1.100000030
+1.870967742 1.580645161 10.000002957 1.100000030
+1.870967742 1.870967742 10.000002957 1.100000030
+1.870967742 2.161290323 10.000002957 1.100000030
+1.870967742 2.451612903 10.000002957 1.100000030
+1.870967742 2.741935484 10.000002957 1.100000030
+1.870967742 3.032258065 10.103612040 1.101036120
+1.870967742 3.322580645 10.708467388 1.107084674
+1.870967742 3.612903226 11.133945555 1.111339456
+1.870967742 3.903225806 11.479248807 1.114792488
+1.870967742 4.193548387 11.778370516 1.117783705
+1.870967742 4.483870968 12.050104922 1.120501049
+1.870967742 4.774193548 12.305762763 1.123057628
+1.870967742 5.064516129 12.555175445 1.125551754
+1.870967742 5.354838710 12.806659860 1.128066599
+1.870967742 5.645161290 13.068093230 1.130680932
+1.870967742 5.935483871 13.350561957 1.133505620
+1.870967742 6.225806452 13.666570669 1.136665707
+1.870967742 6.516129032 14.042124914 1.140421249
+1.870967742 6.806451613 14.524928709 1.145249287
+1.870967742 7.096774194 15.000000000 1.150000000
+1.870967742 7.387096774 15.000000000 1.150000000
+1.870967742 7.677419355 15.000000000 1.150000000
+1.870967742 7.967741935 15.000000000 1.150000000
+1.870967742 8.258064516 15.000000000 1.150000000
+1.870967742 8.548387097 15.000000000 1.150000000
+1.870967742 8.838709677 15.000000000 1.150000000
+1.870967742 9.129032258 15.000000000 1.150000000
+1.870967742 9.419354839 15.000000000 1.150000000
+1.870967742 9.709677419 15.000000000 1.150000000
+1.870967742 10.000000000 15.000000000 1.150000000
+2.161290323 1.000000000 10.000002957 1.100000030
+2.161290323 1.290322581 10.000002957 1.100000030
+2.161290323 1.580645161 10.000002957 1.100000030
+2.161290323 1.870967742 10.000002957 1.100000030
+2.161290323 2.161290323 10.000002957 1.100000030
+2.161290323 2.451612903 10.000002957 1.100000030
+2.161290323 2.741935484 10.000002957 1.100000030
+2.161290323 3.032258065 10.103612040 1.101036120
+2.161290323 3.322580645 10.708467388 1.107084674
+2.161290323 3.612903226 11.133945555 1.111339456
+2.161290323 3.903225806 11.479248807 1.114792488
+2.161290323 4.193548387 11.778370516 1.117783705
+2.161290323 4.483870968 12.050104922 1.120501049
+2.161290323 4.774193548 12.305762763 1.123057628
+2.161290323 5.064516129 12.555175445 1.125551754
+2.161290323 5.354838710 12.806659860 1.128066599
+2.161290323 5.645161290 13.068093230 1.130680932
+2.161290323 5.935483871 13.350561957 1.133505620
+2.161290323 6.225806452 13.666570669 1.136665707
+2.161290323 6.516129032 14.042124914 1.140421249
+2.161290323 6.806451613 14.524928709 1.145249287
+2.161290323 7.096774194 15.000000000 1.150000000
+2.161290323 7.387096774 15.000000000 1.150000000
+2.161290323 7.677419355 15.000000000 1.150000000
+2.161290323 7.967741935 15.000000000 1.150000000
+2.161290323 8.258064516 15.000000000 1.150000000
+2.161290323 8.548387097 15.000000000 1.150000000
+2.161290323 8.838709677 15.000000000 1.150000000
+2.161290323 9.129032258 15.000000000 1.150000000
+2.161290323 9.419354839 15.000000000 1.150000000
+2.161290323 9.709677419 15.000000000 1.150000000
+2.161290323 10.000000000 15.000000000 1.150000000
+2.451612903 1.000000000 10.000002957 1.100000030
+2.451612903 1.290322581 10.000002957 1.100000030
+2.451612903 1.580645161 10.000002957 1.100000030
+2.451612903 1.870967742 10.000002957 1.100000030
+2.451612903 2.161290323 10.000002957 1.100000030
+2.451612903 2.451612903 10.000002957 1.100000030
+2.451612903 2.741935484 10.000002957 1.100000030
+2.451612903 3.032258065 10.103612040 1.101036120
+2.451612903 3.322580645 10.708467388 1.107084674
+2.451612903 3.612903226 11.133945555 1.111339456
+2.451612903 3.903225806 11.479248807 1.114792488
+2.451612903 4.193548387 11.778370516 1.117783705
+2.451612903 4.483870968 12.050104922 1.120501049
+2.451612903 4.774193548 12.305762763 1.123057628
+2.451612903 5.064516129 12.555175445 1.125551754
+2.451612903 5.354838710 12.806659860 1.128066599
+2.451612903 5.645161290 13.068093230 1.130680932
+2.451612903 5.935483871 13.350561957 1.133505620
+2.451612903 6.225806452 13.666570669 1.136665707
+2.451612903 6.516129032 14.042124914 1.140421249
+2.451612903 6.806451613 14.524928709 1.145249287
+2.451612903 7.096774194 15.000000000 1.150000000
+2.451612903 7.387096774 15.000000000 1.150000000
+2.451612903 7.677419355 15.000000000 1.150000000
+2.451612903 7.967741935 15.000000000 1.150000000
+2.451612903 8.258064516 15.000000000 1.150000000
+2.451612903 8.548387097 15.000000000 1.150000000
+2.451612903 8.838709677 15.000000000 1.150000000
+2.451612903 9.129032258 15.000000000 1.150000000
+2.451612903 9.419354839 15.000000000 1.150000000
+2.451612903 9.709677419 15.000000000 1.150000000
+2.451612903 10.000000000 15.000000000 1.150000000
+2.741935484 1.000000000 10.000002957 1.100000030
+2.741935484 1.290322581 10.000002957 1.100000030
+2.741935484 1.580645161 10.000002957 1.100000030
+2.741935484 1.870967742 10.000002957 1.100000030
+2.741935484 2.161290323 10.000002957 1.100000030
+2.741935484 2.451612903 10.000002957 1.100000030
+2.741935484 2.741935484 10.000002957 1.100000030
+2.741935484 3.032258065 10.103612040 1.101036120
+2.741935484 3.322580645 10.708467388 1.107084674
+2.741935484 3.612903226 11.133945555 1.111339456
+2.741935484 3.903225806 11.479248807 1.114792488
+2.741935484 4.193548387 11.778370516 1.117783705
+2.741935484 4.483870968 12.050104922 1.120501049
+2.741935484 4.774193548 12.305762763 1.123057628
+2.741935484 5.064516129 12.555175445 1.125551754
+2.741935484 5.354838710 12.806659860 1.128066599
+2.741935484 5.645161290 13.068093230 1.130680932
+2.741935484 5.935483871 13.350561957 1.133505620
+2.741935484 6.225806452 13.666570669 1.136665707
+2.741935484 6.516129032 14.042124914 1.140421249
+2.741935484 6.806451613 14.524928709 1.145249287
+2.741935484 7.096774194 15.000000000 1.150000000
+2.741935484 7.387096774 15.000000000 1.150000000
+2.741935484 7.677419355 15.000000000 1.150000000
+2.741935484 7.967741935 15.000000000 1.150000000
+2.741935484 8.258064516 15.000000000 1.150000000
+2.741935484 8.548387097 15.000000000 1.150000000
+2.741935484 8.838709677 15.000000000 1.150000000
+2.741935484 9.129032258 15.000000000 1.150000000
+2.741935484 9.419354839 15.000000000 1.150000000
+2.741935484 9.709677419 15.000000000 1.150000000
+2.741935484 10.000000000 15.000000000 1.150000000
+3.032258065 1.000000000 10.103612040 1.101036120
+3.032258065 1.290322581 10.103612040 1.101036120
+3.032258065 1.580645161 10.103612040 1.101036120
+3.032258065 1.870967742 10.103612040 1.101036120
+3.032258065 2.161290323 10.103612040 1.101036120
+3.032258065 2.451612903 10.103612040 1.101036120
+3.032258065 2.741935484 10.103612040 1.101036120
+3.032258065 3.032258065 10.204358113 1.102043581
+3.032258065 3.322580645 10.796018218 1.107960182
+3.032258065 3.612903226 11.215358735 1.112153587
+3.032258065 3.903225806 11.557846462 1.115578465
+3.032258065 4.193548387 11.855790361 1.118557904
+3.032258065 4.483870968 12.127240434 1.121272404
+3.032258065 4.774193548 12.384052580 1.123840526
+3.032258065 5.064516129 12.634997421 1.126349974
+3.032258065 5.354838710 12.888585631 1.128885856
+3.032258065 5.645161290 13.153230669 1.131532307
+3.032258065 5.935483871 13.438880990 1.134388810
+3.032258065 6.225806452 13.759265462 1.137592655
+3.032258065 6.516129032 14.139344845 1.141393448
+3.032258065 6.806451613 14.626746497 1.146267465
+3.032258065 7.096774194 15.103574890 1.151035749
+3.032258065 7.387096774 15.103574890 1.151035749
+3.032258065 7.677419355 15.103574890 1.151035749
+3.032258065 7.967741935 15.103574890 1.151035749
+3.032258065 8.258064516 15.103574890 1.151035749
+3.032258065 8.548387097 15.103574890 1.151035749
+3.032258065 8.838709677 15.103574890 1.151035749
+3.032258065 9.129032258 15.103574890 1.151035749
+3.032258065 9.419354839 15.103574890 1.151035749
+3.032258065 9.709677419 15.103574890 1.151035749
+3.032258065 10.000000000 15.103574890 1.151035749
+3.322580645 1.000000000 10.708467388 1.107084674
+3.322580645 1.290322581 10.708467388 1.107084674
+3.322580645 1.580645161 10.708467388 1.107084674
+3.322580645 1.870967742 10.708467388 1.107084674
+3.322580645 2.161290323 10.708467388 1.107084674
+3.322580645 2.451612903 10.708467388 1.107084674
+3.322580645 2.741935484 10.708467388 1.107084674
+3.322580645 3.032258065 10.796018218 1.107960182
+3.322580645 3.322580645 11.322661747 1.113226617
+3.322580645 3.612903226 11.712913158 1.117129132
+3.322580645 3.903225806 12.043415217 1.120434152
+3.322580645 4.193548387 12.339709404 1.123397094
+3.322580645 4.483870968 12.615733153 1.126157332
+3.322580645 4.774193548 12.881223868 1.128812239
+3.322580645 5.064516129 13.144835022 1.131448350
+3.322580645 5.354838710 13.414082467 1.134140825
+3.322580645 5.645161290 13.696138923 1.136961389
+3.322580645 5.935483871 14.000777693 1.140007777
+3.322580645 6.225806452 14.342258539 1.143422585
+3.322580645 6.516129032 14.739964250 1.147399642
+3.322580645 6.806451613 15.239164015 1.152391640
+3.322580645 7.096774194 15.708449495 1.157084495
+3.322580645 7.387096774 15.708449495 1.157084495
+3.322580645 7.677419355 15.708449495 1.157084495
+3.322580645 7.967741935 15.708449495 1.157084495
+3.322580645 8.258064516 15.708449495 1.157084495
+3.322580645 8.548387097 15.708449495 1.157084495
+3.322580645 8.838709677 15.708449495 1.157084495
+3.322580645 9.129032258 15.708449495 1.157084495
+3.322580645 9.419354839 15.708449495 1.157084495
+3.322580645 9.709677419 15.708449495 1.157084495
+3.322580645 10.000000000 15.708449495 1.157084495
+3.612903226 1.000000000 11.133945555 1.111339456
+3.612903226 1.290322581 11.133945555 1.111339456
+3.612903226 1.580645161 11.133945555 1.111339456
+3.612903226 1.870967742 11.133945555 1.111339456
+3.612903226 2.161290323 11.133945555 1.111339456
+3.612903226 2.451612903 11.133945555 1.111339456
+3.612903226 2.741935484 11.133945555 1.111339456
+3.612903226 3.032258065 11.215358735 1.112153587
+3.612903226 3.322580645 11.712913158 1.117129132
+3.612903226 3.612903226 12.090486886 1.120904869
+3.612903226 3.903225806 12.417951094 1.124179511
+3.612903226 4.193548387 12.717020386 1.127170204
+3.612903226 4.483870968 12.999111631 1.129991116
+3.612903226 4.774193548 13.273780609 1.132737806
+3.612903226 5.064516129 13.547717972 1.135477180
+3.612903226 5.354838710 13.827512227 1.138275122
+3.612903226 5.645161290 14.120187657 1.141201877
+3.612903226 5.935483871 14.435371678 1.144353717
+3.612903226 6.225806452 14.784914127 1.147849141
+3.612903226 6.516129032 15.187004870 1.151870049
+3.612903226 6.806451613 15.681548005 1.156815480
+3.612903226 7.096774194 16.133823742 1.161338237
+3.612903226 7.387096774 16.133823742 1.161338237
+3.612903226 7.677419355 16.133823742 1.161338237
+3.612903226 7.967741935 16.133823742 1.161338237
+3.612903226 8.258064516 16.133823742 1.161338237
+3.612903226 8.548387097 16.133823742 1.161338237
+3.612903226 8.838709677 16.133823742 1.161338237
+3.612903226 9.129032258 16.133823742 1.161338237
+3.612903226 9.419354839 16.133823742 1.161338237
+3.612903226 9.709677419 16.133823742 1.161338237
+3.612903226 10.000000000 16.133823742 1.161338237
+3.903225806 1.000000000 11.479248807 1.114792488
+3.903225806 1.290322581 11.479248807 1.114792488
+3.903225806 1.580645161 11.479248807 1.114792488
+3.903225806 1.870967742 11.479248807 1.114792488
+3.903225806 2.161290323 11.479248807 1.114792488
+3.903225806 2.451612903 11.479248807 1.114792488
+3.903225806 2.741935484 11.479248807 1.114792488
+3.903225806 3.032258065 11.557846462 1.115578465
+3.903225806 3.322580645 12.043415217 1.120434152
+3.903225806 3.612903226 12.417951094 1.124179511
+3.903225806 3.903225806 12.746299057 1.127462991
+3.903225806 4.193548387 13.049696353 1.130496964
+3.903225806 4.483870968 13.337970486 1.133379705
+3.903225806 4.774193548 13.620159587 1.136201596
+3.903225806 5.064516129 13.901946604 1.139019466
+3.903225806 5.354838710 14.188883155 1.141888832
+3.903225806 5.645161290 14.489540684 1.144895407
+3.903225806 5.935483871 14.809822020 1.148098220
+3.903225806 6.225806452 15.160748839 1.151607488
+3.903225806 6.516129032 15.560871420 1.155608714
+3.903225806 6.806451613 16.043900181 1.160439002
+3.903225806 7.096774194 16.479227686 1.164792277
+3.903225806 7.387096774 16.479227686 1.164792277
+3.903225806 7.677419355 16.479227686 1.164792277
+3.903225806 7.967741935 16.479227686 1.164792277
+3.903225806 8.258064516 16.479227686 1.164792277
+3.903225806 8.548387097 16.479227686 1.164792277
+3.903225806 8.838709677 16.479227686 1.164792277
+3.903225806 9.129032258 16.479227686 1.164792277
+3.903225806 9.419354839 16.479227686 1.164792277
+3.903225806 9.709677419 16.479227686 1.164792277
+3.903225806 10.000000000 16.479227686 1.164792277
+4.193548387 1.000000000 11.778370516 1.117783705
+4.193548387 1.290322581 11.778370516 1.117783705
+4.193548387 1.580645161 11.778370516 1.117783705
+4.193548387 1.870967742 11.778370516 1.117783705
+4.193548387 2.161290323 11.778370516 1.117783705
+4.193548387 2.451612903 11.778370516 1.117783705
+4.193548387 2.741935484 11.778370516 1.117783705
+4.193548387 3.032258065 11.855790361 1.118557904
+4.193548387 3.322580645 12.339709404 1.123397094
+4.193548387 3.612903226 12.717020386 1.127170204
+4.193548387 3.903225806 13.049696353 1.130496964
+4.193548387 4.193548387 13.357895418 1.133578954
+4.193548387 4.483870968 13.652146644 1.136521466
+4.193548387 4.774193548 13.940357897 1.139403579
+4.193548387 5.064516129 14.228197117 1.142281971
+4.193548387 5.354838710 14.520452601 1.145204526
+4.193548387 5.645161290 14.824425958 1.148244260
+4.193548387 5.935483871 15.146110946 1.151461109
+4.193548387 6.225806452 15.495840162 1.154958402
+4.193548387 6.516129032 15.889898831 1.158898988
+4.193548387 6.806451613 16.360710958 1.163607110
+4.193548387 7.096774194 16.778452741 1.167784527
+4.193548387 7.387096774 16.778452741 1.167784527
+4.193548387 7.677419355 16.778452741 1.167784527
+4.193548387 7.967741935 16.778452741 1.167784527
+4.193548387 8.258064516 16.778452741 1.167784527
+4.193548387 8.548387097 16.778452741 1.167784527
+4.193548387 8.838709677 16.778452741 1.167784527
+4.193548387 9.129032258 16.778452741 1.167784527
+4.193548387 9.419354839 16.778452741 1.167784527
+4.193548387 9.709677419 16.778452741 1.167784527
+4.193548387 10.000000000 16.778452741 1.167784527
+4.483870968 1.000000000 12.050104922 1.120501049
+4.483870968 1.290322581 12.050104922 1.120501049
+4.483870968 1.580645161 12.050104922 1.120501049
+4.483870968 1.870967742 12.050104922 1.120501049
+4.483870968 2.161290323 12.050104922 1.120501049
+4.483870968 2.451612903 12.050104922 1.120501049
+4.483870968 2.741935484 12.050104922 1.120501049
+4.483870968 3.032258065 12.127240434 1.121272404
+4.483870968 3.322580645 12.615733153 1.126157332
+4.483870968 3.612903226 12.999111631 1.129991116
+4.483870968 3.903225806 13.337970486 1.133379705
+4.483870968 4.193548387 13.652146644 1.136521466
+4.483870968 4.483870968 13.951679758 1.139516798
+4.483870968 4.774193548 14.245365454 1.142453655
+4.483870968 5.064516129 14.537425993 1.145374260
+4.483870968 5.354838710 14.832538034 1.148325380
+4.483870968 5.645161290 15.137036426 1.151370364
+4.483870968 5.935483871 15.457098960 1.154570990
+4.483870968 6.225806452 15.803334671 1.158033347
+4.483870968 6.516129032 16.189645887 1.161896459
+4.483870968 6.806451613 16.646502949 1.166465029
+4.483870968 7.096774194 17.050023823 1.170500238
+4.483870968 7.387096774 17.050023823 1.170500238
+4.483870968 7.677419355 17.050023823 1.170500238
+4.483870968 7.967741935 17.050023823 1.170500238
+4.483870968 8.258064516 17.050023823 1.170500238
+4.483870968 8.548387097 17.050023823 1.170500238
+4.483870968 8.838709677 17.050023823 1.170500238
+4.483870968 9.129032258 17.050023823 1.170500238
+4.483870968 9.419354839 17.050023823 1.170500238
+4.483870968 9.709677419 17.050023823 1.170500238
+4.483870968 10.000000000 17.050023823 1.170500238
+4.774193548 1.000000000 12.305762763 1.123057628
+4.774193548 1.290322581 12.305762763 1.123057628
+4.774193548 1.580645161 12.305762763 1.123057628
+4.774193548 1.870967742 12.305762763 1.123057628
+4.774193548 2.161290323 12.305762763 1.123057628
+4.774193548 2.451612903 12.305762763 1.123057628
+4.774193548 2.741935484 12.305762763 1.123057628
+4.774193548 3.032258065 12.384052580 1.123840526
+4.774193548 3.322580645 12.881223868 1.128812239
+4.774193548 3.612903226 13.273780609 1.132737806
+4.774193548 3.903225806 13.620159587 1.136201596
+4.774193548 4.193548387 13.940357897 1.139403579
+4.774193548 4.483870968 14.245365454 1.142453655
+4.774193548 4.774193548 14.542253555 1.145422536
+4.774193548 5.064516129 14.836186297 1.148361863
+4.774193548 5.354838710 15.132216948 1.151322169
+4.774193548 5.645161290 15.435976637 1.154359766
+4.774193548 5.935483871 15.753650335 1.157536503
+4.774193548 6.225806452 16.094398574 1.160943986
+4.774193548 6.516129032 16.472016458 1.164720165
+4.774193548 6.806451613 16.915328759 1.169153288
+4.774193548 7.096774194 17.305719073 1.173057191
+4.774193548 7.387096774 17.305719073 1.173057191
+4.774193548 7.677419355 17.305719073 1.173057191
+4.774193548 7.967741935 17.305719073 1.173057191
+4.774193548 8.258064516 17.305719073 1.173057191
+4.774193548 8.548387097 17.305719073 1.173057191
+4.774193548 8.838709677 17.305719073 1.173057191
+4.774193548 9.129032258 17.305719073 1.173057191
+4.774193548 9.419354839 17.305719073 1.173057191
+4.774193548 9.709677419 17.305719073 1.173057191
+4.774193548 10.000000000 17.305719073 1.173057191
+5.064516129 1.000000000 12.555175445 1.125551754
+5.064516129 1.290322581 12.555175445 1.125551754
+5.064516129 1.580645161 12.555175445 1.125551754
+5.064516129 1.870967742 12.555175445 1.125551754
+5.064516129 2.161290323 12.555175445 1.125551754
+5.064516129 2.451612903 12.555175445 1.125551754
+5.064516129 2.741935484 12.555175445 1.125551754
+5.064516129 3.032258065 12.634997421 1.126349974
+5.064516129 3.322580645 13.144835022 1.131448350
+5.064516129 3.612903226 13.547717972 1.135477180
+5.064516129 3.903225806 13.901946604 1.139019466
+5.064516129 4.193548387 14.228197117 1.142281971
+5.064516129 4.483870968 14.537425993 1.145374260
+5.064516129 4.774193548 14.836186297 1.148361863
+5.064516129 5.064516129 15.130822202 1.151308222
+5.064516129 5.354838710 15.426134812 1.154261348
+5.064516129 5.645161290 15.727608429 1.157276084
+5.064516129 5.935483871 16.040918075 1.160409181
+5.064516129 6.225806452 16.374971626 1.163749716
+5.064516129 6.516129032 16.743479696 1.167434797
+5.064516129 6.806451613 17.175031887 1.171750319
+5.064516129 7.096774194 17.555546435 1.175555464
+5.064516129 7.387096774 17.555546435 1.175555464
+5.064516129 7.677419355 17.555546435 1.175555464
+5.064516129 7.967741935 17.555546435 1.175555464
+5.064516129 8.258064516 17.555546435 1.175555464
+5.064516129 8.548387097 17.555546435 1.175555464
+5.064516129 8.838709677 17.555546435 1.175555464
+5.064516129 9.129032258 17.555546435 1.175555464
+5.064516129 9.419354839 17.555546435 1.175555464
+5.064516129 9.709677419 17.555546435 1.175555464
+5.064516129 10.000000000 17.555546435 1.175555464
+5.354838710 1.000000000 12.806659860 1.128066599
+5.354838710 1.290322581 12.806659860 1.128066599
+5.354838710 1.580645161 12.806659860 1.128066599
+5.354838710 1.870967742 12.806659860 1.128066599
+5.354838710 2.161290323 12.806659860 1.128066599
+5.354838710 2.451612903 12.806659860 1.128066599
+5.354838710 2.741935484 12.806659860 1.128066599
+5.354838710 3.032258065 12.888585631 1.128885856
+5.354838710 3.322580645 13.414082467 1.134140825
+5.354838710 3.612903226 13.827512227 1.138275122
+5.354838710 3.903225806 14.188883155 1.141888832
+5.354838710 4.193548387 14.520452601 1.145204526
+5.354838710 4.483870968 14.832538034 1.148325380
+5.354838710 4.774193548 15.132216948 1.151322169
+5.354838710 5.064516129 15.426134812 1.154261348
+5.354838710 5.354838710 15.719361905 1.157193619
+5.354838710 5.645161290 16.017791161 1.160177912
+5.354838710 5.935483871 16.325903819 1.163259038
+5.354838710 6.225806452 16.653358486 1.166533585
+5.354838710 6.516129032 17.013348713 1.170133487
+5.354838710 6.806451613 17.434097089 1.174340971
+5.354838710 7.096774194 17.806398651 1.178063987
+5.354838710 7.387096774 17.806398651 1.178063987
+5.354838710 7.677419355 17.806398651 1.178063987
+5.354838710 7.967741935 17.806398651 1.178063987
+5.354838710 8.258064516 17.806398651 1.178063987
+5.354838710 8.548387097 17.806398651 1.178063987
+5.354838710 8.838709677 17.806398651 1.178063987
+5.354838710 9.129032258 17.806398651 1.178063987
+5.354838710 9.419354839 17.806398651 1.178063987
+5.354838710 9.709677419 17.806398651 1.178063987
+5.354838710 10.000000000 17.806398651 1.178063987
+5.645161290 1.000000000 13.068093230 1.130680932
+5.645161290 1.290322581 13.068093230 1.130680932
+5.645161290 1.580645161 13.068093230 1.130680932
+5.645161290 1.870967742 13.068093230 1.130680932
+5.645161290 2.161290323 13.068093230 1.130680932
+5.645161290 2.451612903 13.068093230 1.130680932
+5.645161290 2.741935484 13.068093230 1.130680932
+5.645161290 3.032258065 13.153230669 1.131532307
+5.645161290 3.322580645 13.696138923 1.136961389
+5.645161290 3.612903226 14.120187657 1.141201877
+5.645161290 3.903225806 14.489540684 1.144895407
+5.645161290 4.193548387 14.824425958 1.148244260
+5.645161290 4.483870968 15.137036426 1.151370364
+5.645161290 4.774193548 15.435976637 1.154359766
+5.645161290 5.064516129 15.727608429 1.157276084
+5.645161290 5.354838710 16.017791161 1.160177912
+5.645161290 5.645161290 16.311598605 1.163115986
+5.645161290 5.935483871 16.613732570 1.166137326
+5.645161290 6.225806452 16.933994986 1.169339950
+5.645161290 6.516129032 17.286819066 1.172868191
+5.645161290 6.806451613 17.700020869 1.177000209
+5.645161290 7.096774194 18.068098179 1.180680982
+5.645161290 7.387096774 18.068098179 1.180680982
+5.645161290 7.677419355 18.068098179 1.180680982
+5.645161290 7.967741935 18.068098179 1.180680982
+5.645161290 8.258064516 18.068098179 1.180680982
+5.645161290 8.548387097 18.068098179 1.180680982
+5.645161290 8.838709677 18.068098179 1.180680982
+5.645161290 9.129032258 18.068098179 1.180680982
+5.645161290 9.419354839 18.068098179 1.180680982
+5.645161290 9.709677419 18.068098179 1.180680982
+5.645161290 10.000000000 18.068098179 1.180680982
+5.935483871 1.000000000 13.350561957 1.133505620
+5.935483871 1.290322581 13.350561957 1.133505620
+5.935483871 1.580645161 13.350561957 1.133505620
+5.935483871 1.870967742 13.350561957 1.133505620
+5.935483871 2.161290323 13.350561957 1.133505620
+5.935483871 2.451612903 13.350561957 1.133505620
+5.935483871 2.741935484 13.350561957 1.133505620
+5.935483871 3.032258065 13.438880990 1.134388810
+5.935483871 3.322580645 14.000777693 1.140007777
+5.935483871 3.612903226 14.435371678 1.144353717
+5.935483871 3.903225806 14.809822020 1.148098220
+5.935483871 4.193548387 15.146110946 1.151461109
+5.935483871 4.483870968 15.457098960 1.154570990
+5.935483871 4.774193548 15.753650335 1.157536503
+5.935483871 5.064516129 16.040918075 1.160409181
+5.935483871 5.354838710 16.325903819 1.163259038
+5.935483871 5.645161290 16.613732570 1.166137326
+5.935483871 5.935483871 16.911019483 1.169110195
+5.935483871 6.225806452 17.225563024 1.172255630
+5.935483871 6.516129032 17.572635415 1.175726354
+5.935483871 6.806451613 17.982106473 1.179821065
+5.935483871 7.096774194 18.349962605 1.183499626
+5.935483871 7.387096774 18.349962605 1.183499626
+5.935483871 7.677419355 18.349962605 1.183499626
+5.935483871 7.967741935 18.349962605 1.183499626
+5.935483871 8.258064516 18.349962605 1.183499626
+5.935483871 8.548387097 18.349962605 1.183499626
+5.935483871 8.838709677 18.349962605 1.183499626
+5.935483871 9.129032258 18.349962605 1.183499626
+5.935483871 9.419354839 18.349962605 1.183499626
+5.935483871 9.709677419 18.349962605 1.183499626
+5.935483871 10.000000000 18.349962605 1.183499626
+6.225806452 1.000000000 13.666570669 1.136665707
+6.225806452 1.290322581 13.666570669 1.136665707
+6.225806452 1.580645161 13.666570669 1.136665707
+6.225806452 1.870967742 13.666570669 1.136665707
+6.225806452 2.161290323 13.666570669 1.136665707
+6.225806452 2.451612903 13.666570669 1.136665707
+6.225806452 2.741935484 13.666570669 1.136665707
+6.225806452 3.032258065 13.759265462 1.137592655
+6.225806452 3.322580645 14.342258539 1.143422585
+6.225806452 3.612903226 14.784914127 1.147849141
+6.225806452 3.903225806 15.160748839 1.151607488
+6.225806452 4.193548387 15.495840162 1.154958402
+6.225806452 4.483870968 15.803334671 1.158033347
+6.225806452 4.774193548 16.094398574 1.160943986
+6.225806452 5.064516129 16.374971626 1.163749716
+6.225806452 5.354838710 16.653358486 1.166533585
+6.225806452 5.645161290 16.933994986 1.169339950
+6.225806452 5.935483871 17.225563024 1.172255630
+6.225806452 6.225806452 17.536694601 1.175366946
+6.225806452 6.516129032 17.882140340 1.178821403
+6.225806452 6.806451613 18.292111531 1.182921115
+6.225806452 7.096774194 18.667017714 1.186670177
+6.225806452 7.387096774 18.667017714 1.186670177
+6.225806452 7.677419355 18.667017714 1.186670177
+6.225806452 7.967741935 18.667017714 1.186670177
+6.225806452 8.258064516 18.667017714 1.186670177
+6.225806452 8.548387097 18.667017714 1.186670177
+6.225806452 8.838709677 18.667017714 1.186670177
+6.225806452 9.129032258 18.667017714 1.186670177
+6.225806452 9.419354839 18.667017714 1.186670177
+6.225806452 9.709677419 18.667017714 1.186670177
+6.225806452 10.000000000 18.667017714 1.186670177
+6.516129032 1.000000000 14.042124914 1.140421249
+6.516129032 1.290322581 14.042124914 1.140421249
+6.516129032 1.580645161 14.042124914 1.140421249
+6.516129032 1.870967742 14.042124914 1.140421249
+6.516129032 2.161290323 14.042124914 1.140421249
+6.516129032 2.451612903 14.042124914 1.140421249
+6.516129032 2.741935484 14.042124914 1.140421249
+6.516129032 3.032258065 14.139344845 1.141393448
+6.516129032 3.322580645 14.739964250 1.147399642
+6.516129032 3.612903226 15.187004870 1.151870049
+6.516129032 3.903225806 15.560871420 1.155608714
+6.516129032 4.193548387 15.889898831 1.158898988
+6.516129032 4.483870968 16.189645887 1.161896459
+6.516129032 4.774193548 16.472016458 1.164720165
+6.516129032 5.064516129 16.743479696 1.167434797
+6.516129032 5.354838710 17.013348713 1.170133487
+6.516129032 5.645161290 17.286819066 1.172868191
+6.516129032 5.935483871 17.572635415 1.175726354
+6.516129032 6.225806452 17.882140340 1.178821403
+6.516129032 6.516129032 18.229995875 1.182299959
+6.516129032 6.806451613 18.651088969 1.186510890
+6.516129032 7.096774194 19.041899081 1.190418991
+6.516129032 7.387096774 19.041899081 1.190418991
+6.516129032 7.677419355 19.041899081 1.190418991
+6.516129032 7.967741935 19.041899081 1.190418991
+6.516129032 8.258064516 19.041899081 1.190418991
+6.516129032 8.548387097 19.041899081 1.190418991
+6.516129032 8.838709677 19.041899081 1.190418991
+6.516129032 9.129032258 19.041899081 1.190418991
+6.516129032 9.419354839 19.041899081 1.190418991
+6.516129032 9.709677419 19.041899081 1.190418991
+6.516129032 10.000000000 19.041899081 1.190418991
+6.806451613 1.000000000 14.524928709 1.145249287
+6.806451613 1.290322581 14.524928709 1.145249287
+6.806451613 1.580645161 14.524928709 1.145249287
+6.806451613 1.870967742 14.524928709 1.145249287
+6.806451613 2.161290323 14.524928709 1.145249287
+6.806451613 2.451612903 14.524928709 1.145249287
+6.806451613 2.741935484 14.524928709 1.145249287
+6.806451613 3.032258065 14.626746497 1.146267465
+6.806451613 3.322580645 15.239164015 1.152391640
+6.806451613 3.612903226 15.681548005 1.156815480
+6.806451613 3.903225806 16.043900181 1.160439002
+6.806451613 4.193548387 16.360710958 1.163607110
+6.806451613 4.483870968 16.646502949 1.166465029
+6.806451613 4.774193548 16.915328759 1.169153288
+6.806451613 5.064516129 17.175031887 1.171750319
+6.806451613 5.354838710 17.434097089 1.174340971
+6.806451613 5.645161290 17.700020869 1.177000209
+6.806451613 5.935483871 17.982106473 1.179821065
+6.806451613 6.225806452 18.292111531 1.182921115
+6.806451613 6.516129032 18.651088969 1.186510890
+6.806451613 6.806451613 19.098880252 1.190988803
+6.806451613 7.096774194 19.524964154 1.195249642
+6.806451613 7.387096774 19.524964154 1.195249642
+6.806451613 7.677419355 19.524964154 1.195249642
+6.806451613 7.967741935 19.524964154 1.195249642
+6.806451613 8.258064516 19.524964154 1.195249642
+6.806451613 8.548387097 19.524964154 1.195249642
+6.806451613 8.838709677 19.524964154 1.195249642
+6.806451613 9.129032258 19.524964154 1.195249642
+6.806451613 9.419354839 19.524964154 1.195249642
+6.806451613 9.709677419 19.524964154 1.195249642
+6.806451613 10.000000000 19.524964154 1.195249642
+7.096774194 1.000000000 15.000000000 1.150000000
+7.096774194 1.290322581 15.000000000 1.150000000
+7.096774194 1.580645161 15.000000000 1.150000000
+7.096774194 1.870967742 15.000000000 1.150000000
+7.096774194 2.161290323 15.000000000 1.150000000
+7.096774194 2.451612903 15.000000000 1.150000000
+7.096774194 2.741935484 15.000000000 1.150000000
+7.096774194 3.032258065 15.103574890 1.151035749
+7.096774194 3.322580645 15.708449495 1.157084495
+7.096774194 3.612903226 16.133823742 1.161338237
+7.096774194 3.903225806 16.479227686 1.164792277
+7.096774194 4.193548387 16.778452741 1.167784527
+7.096774194 4.483870968 17.050023823 1.170500238
+7.096774194 4.774193548 17.305719073 1.173057191
+7.096774194 5.064516129 17.555546435 1.175555464
+7.096774194 5.354838710 17.806398651 1.178063987
+7.096774194 5.645161290 18.068098179 1.180680982
+7.096774194 5.935483871 18.349962605 1.183499626
+7.096774194 6.225806452 18.667017714 1.186670177
+7.096774194 6.516129032 19.041899081 1.190418991
+7.096774194 6.806451613 19.524964154 1.195249642
+7.096774194 7.096774194 19.999997043 1.199999970
+7.096774194 7.387096774 19.999997043 1.199999970
+7.096774194 7.677419355 19.999997043 1.199999970
+7.096774194 7.967741935 19.999997043 1.199999970
+7.096774194 8.258064516 19.999997043 1.199999970
+7.096774194 8.548387097 19.999997043 1.199999970
+7.096774194 8.838709677 19.999997043 1.199999970
+7.096774194 9.129032258 19.999997043 1.199999970
+7.096774194 9.419354839 19.999997043 1.199999970
+7.096774194 9.709677419 19.999997043 1.199999970
+7.096774194 10.000000000 19.999997043 1.199999970
+7.387096774 1.000000000 15.000000000 1.150000000
+7.387096774 1.290322581 15.000000000 1.150000000
+7.387096774 1.580645161 15.000000000 1.150000000
+7.387096774 1.870967742 15.000000000 1.150000000
+7.387096774 2.161290323 15.000000000 1.150000000
+7.387096774 2.451612903 15.000000000 1.150000000
+7.387096774 2.741935484 15.000000000 1.150000000
+7.387096774 3.032258065 15.103574890 1.151035749
+7.387096774 3.322580645 15.708449495 1.157084495
+7.387096774 3.612903226 16.133823742 1.161338237
+7.387096774 3.903225806 16.479227686 1.164792277
+7.387096774 4.193548387 16.778452741 1.167784527
+7.387096774 4.483870968 17.050023823 1.170500238
+7.387096774 4.774193548 17.305719073 1.173057191
+7.387096774 5.064516129 17.555546435 1.175555464
+7.387096774 5.354838710 17.806398651 1.178063987
+7.387096774 5.645161290 18.068098179 1.180680982
+7.387096774 5.935483871 18.349962605 1.183499626
+7.387096774 6.225806452 18.667017714 1.186670177
+7.387096774 6.516129032 19.041899081 1.190418991
+7.387096774 6.806451613 19.524964154 1.195249642
+7.387096774 7.096774194 19.999997043 1.199999970
+7.387096774 7.387096774 19.999997043 1.199999970
+7.387096774 7.677419355 19.999997043 1.199999970
+7.387096774 7.967741935 19.999997043 1.199999970
+7.387096774 8.258064516 19.999997043 1.199999970
+7.387096774 8.548387097 19.999997043 1.199999970
+7.387096774 8.838709677 19.999997043 1.199999970
+7.387096774 9.129032258 19.999997043 1.199999970
+7.387096774 9.419354839 19.999997043 1.199999970
+7.387096774 9.709677419 19.999997043 1.199999970
+7.387096774 10.000000000 19.999997043 1.199999970
+7.677419355 1.000000000 15.000000000 1.150000000
+7.677419355 1.290322581 15.000000000 1.150000000
+7.677419355 1.580645161 15.000000000 1.150000000
+7.677419355 1.870967742 15.000000000 1.150000000
+7.677419355 2.161290323 15.000000000 1.150000000
+7.677419355 2.451612903 15.000000000 1.150000000
+7.677419355 2.741935484 15.000000000 1.150000000
+7.677419355 3.032258065 15.103574890 1.151035749
+7.677419355 3.322580645 15.708449495 1.157084495
+7.677419355 3.612903226 16.133823742 1.161338237
+7.677419355 3.903225806 16.479227686 1.164792277
+7.677419355 4.193548387 16.778452741 1.167784527
+7.677419355 4.483870968 17.050023823 1.170500238
+7.677419355 4.774193548 17.305719073 1.173057191
+7.677419355 5.064516129 17.555546435 1.175555464
+7.677419355 5.354838710 17.806398651 1.178063987
+7.677419355 5.645161290 18.068098179 1.180680982
+7.677419355 5.935483871 18.349962605 1.183499626
+7.677419355 6.225806452 18.667017714 1.186670177
+7.677419355 6.516129032 19.041899081 1.190418991
+7.677419355 6.806451613 19.524964154 1.195249642
+7.677419355 7.096774194 19.999997043 1.199999970
+7.677419355 7.387096774 19.999997043 1.199999970
+7.677419355 7.677419355 19.999997043 1.199999970
+7.677419355 7.967741935 19.999997043 1.199999970
+7.677419355 8.258064516 19.999997043 1.199999970
+7.677419355 8.548387097 19.999997043 1.199999970
+7.677419355 8.838709677 19.999997043 1.199999970
+7.677419355 9.129032258 19.999997043 1.199999970
+7.677419355 9.419354839 19.999997043 1.199999970
+7.677419355 9.709677419 19.999997043 1.199999970
+7.677419355 10.000000000 19.999997043 1.199999970
+7.967741935 1.000000000 15.000000000 1.150000000
+7.967741935 1.290322581 15.000000000 1.150000000
+7.967741935 1.580645161 15.000000000 1.150000000
+7.967741935 1.870967742 15.000000000 1.150000000
+7.967741935 2.161290323 15.000000000 1.150000000
+7.967741935 2.451612903 15.000000000 1.150000000
+7.967741935 2.741935484 15.000000000 1.150000000
+7.967741935 3.032258065 15.103574890 1.151035749
+7.967741935 3.322580645 15.708449495 1.157084495
+7.967741935 3.612903226 16.133823742 1.161338237
+7.967741935 3.903225806 16.479227686 1.164792277
+7.967741935 4.193548387 16.778452741 1.167784527
+7.967741935 4.483870968 17.050023823 1.170500238
+7.967741935 4.774193548 17.305719073 1.173057191
+7.967741935 5.064516129 17.555546435 1.175555464
+7.967741935 5.354838710 17.806398651 1.178063987
+7.967741935 5.645161290 18.068098179 1.180680982
+7.967741935 5.935483871 18.349962605 1.183499626
+7.967741935 6.225806452 18.667017714 1.186670177
+7.967741935 6.516129032 19.041899081 1.190418991
+7.967741935 6.806451613 19.524964154 1.195249642
+7.967741935 7.096774194 19.999997043 1.199999970
+7.967741935 7.387096774 19.999997043 1.199999970
+7.967741935 7.677419355 19.999997043 1.199999970
+7.967741935 7.967741935 19.999997043 1.199999970
+7.967741935 8.258064516 19.999997043 1.199999970
+7.967741935 8.548387097 19.999997043 1.199999970
+7.967741935 8.838709677 19.999997043 1.199999970
+7.967741935 9.129032258 19.999997043 1.199999970
+7.967741935 9.419354839 19.999997043 1.199999970
+7.967741935 9.709677419 19.999997043 1.199999970
+7.967741935 10.000000000 19.999997043 1.199999970
+8.258064516 1.000000000 15.000000000 1.150000000
+8.258064516 1.290322581 15.000000000 1.150000000
+8.258064516 1.580645161 15.000000000 1.150000000
+8.258064516 1.870967742 15.000000000 1.150000000
+8.258064516 2.161290323 15.000000000 1.150000000
+8.258064516 2.451612903 15.000000000 1.150000000
+8.258064516 2.741935484 15.000000000 1.150000000
+8.258064516 3.032258065 15.103574890 1.151035749
+8.258064516 3.322580645 15.708449495 1.157084495
+8.258064516 3.612903226 16.133823742 1.161338237
+8.258064516 3.903225806 16.479227686 1.164792277
+8.258064516 4.193548387 16.778452741 1.167784527
+8.258064516 4.483870968 17.050023823 1.170500238
+8.258064516 4.774193548 17.305719073 1.173057191
+8.258064516 5.064516129 17.555546435 1.175555464
+8.258064516 5.354838710 17.806398651 1.178063987
+8.258064516 5.645161290 18.068098179 1.180680982
+8.258064516 5.935483871 18.349962605 1.183499626
+8.258064516 6.225806452 18.667017714 1.186670177
+8.258064516 6.516129032 19.041899081 1.190418991
+8.258064516 6.806451613 19.524964154 1.195249642
+8.258064516 7.096774194 19.999997043 1.199999970
+8.258064516 7.387096774 19.999997043 1.199999970
+8.258064516 7.677419355 19.999997043 1.199999970
+8.258064516 7.967741935 19.999997043 1.199999970
+8.258064516 8.258064516 19.999997043 1.199999970
+8.258064516 8.548387097 19.999997043 1.199999970
+8.258064516 8.838709677 19.999997043 1.199999970
+8.258064516 9.129032258 19.999997043 1.199999970
+8.258064516 9.419354839 19.999997043 1.199999970
+8.258064516 9.709677419 19.999997043 1.199999970
+8.258064516 10.000000000 19.999997043 1.199999970
+8.548387097 1.000000000 15.000000000 1.150000000
+8.548387097 1.290322581 15.000000000 1.150000000
+8.548387097 1.580645161 15.000000000 1.150000000
+8.548387097 1.870967742 15.000000000 1.150000000
+8.548387097 2.161290323 15.000000000 1.150000000
+8.548387097 2.451612903 15.000000000 1.150000000
+8.548387097 2.741935484 15.000000000 1.150000000
+8.548387097 3.032258065 15.103574890 1.151035749
+8.548387097 3.322580645 15.708449495 1.157084495
+8.548387097 3.612903226 16.133823742 1.161338237
+8.548387097 3.903225806 16.479227686 1.164792277
+8.548387097 4.193548387 16.778452741 1.167784527
+8.548387097 4.483870968 17.050023823 1.170500238
+8.548387097 4.774193548 17.305719073 1.173057191
+8.548387097 5.064516129 17.555546435 1.175555464
+8.548387097 5.354838710 17.806398651 1.178063987
+8.548387097 5.645161290 18.068098179 1.180680982
+8.548387097 5.935483871 18.349962605 1.183499626
+8.548387097 6.225806452 18.667017714 1.186670177
+8.548387097 6.516129032 19.041899081 1.190418991
+8.548387097 6.806451613 19.524964154 1.195249642
+8.548387097 7.096774194 19.999997043 1.199999970
+8.548387097 7.387096774 19.999997043 1.199999970
+8.548387097 7.677419355 19.999997043 1.199999970
+8.548387097 7.967741935 19.999997043 1.199999970
+8.548387097 8.258064516 19.999997043 1.199999970
+8.548387097 8.548387097 19.999997043 1.199999970
+8.548387097 8.838709677 19.999997043 1.199999970
+8.548387097 9.129032258 19.999997043 1.199999970
+8.548387097 9.419354839 19.999997043 1.199999970
+8.548387097 9.709677419 19.999997043 1.199999970
+8.548387097 10.000000000 19.999997043 1.199999970
+8.838709677 1.000000000 15.000000000 1.150000000
+8.838709677 1.290322581 15.000000000 1.150000000
+8.838709677 1.580645161 15.000000000 1.150000000
+8.838709677 1.870967742 15.000000000 1.150000000
+8.838709677 2.161290323 15.000000000 1.150000000
+8.838709677 2.451612903 15.000000000 1.150000000
+8.838709677 2.741935484 15.000000000 1.150000000
+8.838709677 3.032258065 15.103574890 1.151035749
+8.838709677 3.322580645 15.708449495 1.157084495
+8.838709677 3.612903226 16.133823742 1.161338237
+8.838709677 3.903225806 16.479227686 1.164792277
+8.838709677 4.193548387 16.778452741 1.167784527
+8.838709677 4.483870968 17.050023823 1.170500238
+8.838709677 4.774193548 17.305719073 1.173057191
+8.838709677 5.064516129 17.555546435 1.175555464
+8.838709677 5.354838710 17.806398651 1.178063987
+8.838709677 5.645161290 18.068098179 1.180680982
+8.838709677 5.935483871 18.349962605 1.183499626
+8.838709677 6.225806452 18.667017714 1.186670177
+8.838709677 6.516129032 19.041899081 1.190418991
+8.838709677 6.806451613 19.524964154 1.195249642
+8.838709677 7.096774194 19.999997043 1.199999970
+8.838709677 7.387096774 19.999997043 1.199999970
+8.838709677 7.677419355 19.999997043 1.199999970
+8.838709677 7.967741935 19.999997043 1.199999970
+8.838709677 8.258064516 19.999997043 1.199999970
+8.838709677 8.548387097 19.999997043 1.199999970
+8.838709677 8.838709677 19.999997043 1.199999970
+8.838709677 9.129032258 19.999997043 1.199999970
+8.838709677 9.419354839 19.999997043 1.199999970
+8.838709677 9.709677419 19.999997043 1.199999970
+8.838709677 10.000000000 19.999997043 1.199999970
+9.129032258 1.000000000 15.000000000 1.150000000
+9.129032258 1.290322581 15.000000000 1.150000000
+9.129032258 1.580645161 15.000000000 1.150000000
+9.129032258 1.870967742 15.000000000 1.150000000
+9.129032258 2.161290323 15.000000000 1.150000000
+9.129032258 2.451612903 15.000000000 1.150000000
+9.129032258 2.741935484 15.000000000 1.150000000
+9.129032258 3.032258065 15.103574890 1.151035749
+9.129032258 3.322580645 15.708449495 1.157084495
+9.129032258 3.612903226 16.133823742 1.161338237
+9.129032258 3.903225806 16.479227686 1.164792277
+9.129032258 4.193548387 16.778452741 1.167784527
+9.129032258 4.483870968 17.050023823 1.170500238
+9.129032258 4.774193548 17.305719073 1.173057191
+9.129032258 5.064516129 17.555546435 1.175555464
+9.129032258 5.354838710 17.806398651 1.178063987
+9.129032258 5.645161290 18.068098179 1.180680982
+9.129032258 5.935483871 18.349962605 1.183499626
+9.129032258 6.225806452 18.667017714 1.186670177
+9.129032258 6.516129032 19.041899081 1.190418991
+9.129032258 6.806451613 19.524964154 1.195249642
+9.129032258 7.096774194 19.999997043 1.199999970
+9.129032258 7.387096774 19.999997043 1.199999970
+9.129032258 7.677419355 19.999997043 1.199999970
+9.129032258 7.967741935 19.999997043 1.199999970
+9.129032258 8.258064516 19.999997043 1.199999970
+9.129032258 8.548387097 19.999997043 1.199999970
+9.129032258 8.838709677 19.999997043 1.199999970
+9.129032258 9.129032258 19.999997043 1.199999970
+9.129032258 9.419354839 19.999997043 1.199999970
+9.129032258 9.709677419 19.999997043 1.199999970
+9.129032258 10.000000000 19.999997043 1.199999970
+9.419354839 1.000000000 15.000000000 1.150000000
+9.419354839 1.290322581 15.000000000 1.150000000
+9.419354839 1.580645161 15.000000000 1.150000000
+9.419354839 1.870967742 15.000000000 1.150000000
+9.419354839 2.161290323 15.000000000 1.150000000
+9.419354839 2.451612903 15.000000000 1.150000000
+9.419354839 2.741935484 15.000000000 1.150000000
+9.419354839 3.032258065 15.103574890 1.151035749
+9.419354839 3.322580645 15.708449495 1.157084495
+9.419354839 3.612903226 16.133823742 1.161338237
+9.419354839 3.903225806 16.479227686 1.164792277
+9.419354839 4.193548387 16.778452741 1.167784527
+9.419354839 4.483870968 17.050023823 1.170500238
+9.419354839 4.774193548 17.305719073 1.173057191
+9.419354839 5.064516129 17.555546435 1.175555464
+9.419354839 5.354838710 17.806398651 1.178063987
+9.419354839 5.645161290 18.068098179 1.180680982
+9.419354839 5.935483871 18.349962605 1.183499626
+9.419354839 6.225806452 18.667017714 1.186670177
+9.419354839 6.516129032 19.041899081 1.190418991
+9.419354839 6.806451613 19.524964154 1.195249642
+9.419354839 7.096774194 19.999997043 1.199999970
+9.419354839 7.387096774 19.999997043 1.199999970
+9.419354839 7.677419355 19.999997043 1.199999970
+9.419354839 7.967741935 19.999997043 1.199999970
+9.419354839 8.258064516 19.999997043 1.199999970
+9.419354839 8.548387097 19.999997043 1.199999970
+9.419354839 8.838709677 19.999997043 1.199999970
+9.419354839 9.129032258 19.999997043 1.199999970
+9.419354839 9.419354839 19.999997043 1.199999970
+9.419354839 9.709677419 19.999997043 1.199999970
+9.419354839 10.000000000 19.999997043 1.199999970
+9.709677419 1.000000000 15.000000000 1.150000000
+9.709677419 1.290322581 15.000000000 1.150000000
+9.709677419 1.580645161 15.000000000 1.150000000
+9.709677419 1.870967742 15.000000000 1.150000000
+9.709677419 2.161290323 15.000000000 1.150000000
+9.709677419 2.451612903 15.000000000 1.150000000
+9.709677419 2.741935484 15.000000000 1.150000000
+9.709677419 3.032258065 15.103574890 1.151035749
+9.709677419 3.322580645 15.708449495 1.157084495
+9.709677419 3.612903226 16.133823742 1.161338237
+9.709677419 3.903225806 16.479227686 1.164792277
+9.709677419 4.193548387 16.778452741 1.167784527
+9.709677419 4.483870968 17.050023823 1.170500238
+9.709677419 4.774193548 17.305719073 1.173057191
+9.709677419 5.064516129 17.555546435 1.175555464
+9.709677419 5.354838710 17.806398651 1.178063987
+9.709677419 5.645161290 18.068098179 1.180680982
+9.709677419 5.935483871 18.349962605 1.183499626
+9.709677419 6.225806452 18.667017714 1.186670177
+9.709677419 6.516129032 19.041899081 1.190418991
+9.709677419 6.806451613 19.524964154 1.195249642
+9.709677419 7.096774194 19.999997043 1.199999970
+9.709677419 7.387096774 19.999997043 1.199999970
+9.709677419 7.677419355 19.999997043 1.199999970
+9.709677419 7.967741935 19.999997043 1.199999970
+9.709677419 8.258064516 19.999997043 1.199999970
+9.709677419 8.548387097 19.999997043 1.199999970
+9.709677419 8.838709677 19.999997043 1.199999970
+9.709677419 9.129032258 19.999997043 1.199999970
+9.709677419 9.419354839 19.999997043 1.199999970
+9.709677419 9.709677419 19.999997043 1.199999970
+9.709677419 10.000000000 19.999997043 1.199999970
+10.000000000 1.000000000 15.000000000 1.150000000
+10.000000000 1.290322581 15.000000000 1.150000000
+10.000000000 1.580645161 15.000000000 1.150000000
+10.000000000 1.870967742 15.000000000 1.150000000
+10.000000000 2.161290323 15.000000000 1.150000000
+10.000000000 2.451612903 15.000000000 1.150000000
+10.000000000 2.741935484 15.000000000 1.150000000
+10.000000000 3.032258065 15.103574890 1.151035749
+10.000000000 3.322580645 15.708449495 1.157084495
+10.000000000 3.612903226 16.133823742 1.161338237
+10.000000000 3.903225806 16.479227686 1.164792277
+10.000000000 4.193548387 16.778452741 1.167784527
+10.000000000 4.483870968 17.050023823 1.170500238
+10.000000000 4.774193548 17.305719073 1.173057191
+10.000000000 5.064516129 17.555546435 1.175555464
+10.000000000 5.354838710 17.806398651 1.178063987
+10.000000000 5.645161290 18.068098179 1.180680982
+10.000000000 5.935483871 18.349962605 1.183499626
+10.000000000 6.225806452 18.667017714 1.186670177
+10.000000000 6.516129032 19.041899081 1.190418991
+10.000000000 6.806451613 19.524964154 1.195249642
+10.000000000 7.096774194 19.999997043 1.199999970
+10.000000000 7.387096774 19.999997043 1.199999970
+10.000000000 7.677419355 19.999997043 1.199999970
+10.000000000 7.967741935 19.999997043 1.199999970
+10.000000000 8.258064516 19.999997043 1.199999970
+10.000000000 8.548387097 19.999997043 1.199999970
+10.000000000 8.838709677 19.999997043 1.199999970
+10.000000000 9.129032258 19.999997043 1.199999970
+10.000000000 9.419354839 19.999997043 1.199999970
+10.000000000 9.709677419 19.999997043 1.199999970
+10.000000000 10.000000000 19.999997043 1.199999970
diff --git a/examples/mamdani/octave/mamdani_tip_calculator.fll b/examples/mamdani/octave/mamdani_tip_calculator.fll
new file mode 100644
index 0000000..516d870
--- /dev/null
+++ b/examples/mamdani/octave/mamdani_tip_calculator.fll
@@ -0,0 +1,45 @@
+Engine: mamdani_tip_calculator
+InputVariable: FoodQuality
+ enabled: true
+ range: 1.000 10.000
+ lock-range: false
+ term: Bad Trapezoid 0.000 1.000 3.000 7.000
+ term: Good Trapezoid 3.000 7.000 10.000 11.000
+InputVariable: Service
+ enabled: true
+ range: 1.000 10.000
+ lock-range: false
+ term: Bad Trapezoid 0.000 1.000 3.000 7.000
+ term: Good Trapezoid 3.000 7.000 10.000 11.000
+OutputVariable: Tip
+ enabled: true
+ range: 0.000 30.000
+ lock-range: false
+ aggregation: AlgebraicSum
+ defuzzifier: Centroid 200
+ default: nan
+ lock-previous: false
+ term: AboutTenPercent Gaussian 10.000 2.000
+ term: AboutFifteenPercent Gaussian 15.000 2.000
+ term: AboutTwentyPercent Gaussian 20.000 2.000
+OutputVariable: CheckPlusTip
+ enabled: true
+ range: 1.000 1.300
+ lock-range: false
+ aggregation: AlgebraicSum
+ defuzzifier: Centroid 200
+ default: nan
+ lock-previous: false
+ term: PlusAboutTenPercent Gaussian 1.100 0.020
+ term: PlusAboutFifteenPercent Gaussian 1.150 0.020
+ term: PlusAboutTwentyPercent Gaussian 1.200 0.020
+RuleBlock:
+ enabled: true
+ conjunction: AlgebraicProduct
+ disjunction: Maximum
+ implication: Minimum
+ activation: General
+ rule: if FoodQuality is Bad and Service is Bad then Tip is AboutTenPercent and CheckPlusTip is PlusAboutTenPercent
+ rule: if FoodQuality is Bad and Service is Good then Tip is AboutFifteenPercent and CheckPlusTip is PlusAboutFifteenPercent
+ rule: if FoodQuality is Good and Service is Bad then Tip is AboutFifteenPercent and CheckPlusTip is PlusAboutFifteenPercent
+ rule: if FoodQuality is Good and Service is Good then Tip is AboutTwentyPercent and CheckPlusTip is PlusAboutTwentyPercent \ No newline at end of file
diff --git a/examples/mamdani/octave/mamdani_tip_calculator.java b/examples/mamdani/octave/mamdani_tip_calculator.java
new file mode 100644
index 0000000..faea466
--- /dev/null
+++ b/examples/mamdani/octave/mamdani_tip_calculator.java
@@ -0,0 +1,88 @@
+import com.fuzzylite.*;
+import com.fuzzylite.activation.*
+import com.fuzzylite.defuzzifier.*;
+import com.fuzzylite.factory.*;
+import com.fuzzylite.hedge.*;
+import com.fuzzylite.imex.*;
+import com.fuzzylite.norm.*;
+import com.fuzzylite.norm.s.*;
+import com.fuzzylite.norm.t.*;
+import com.fuzzylite.rule.*;
+import com.fuzzylite.term.*;
+import com.fuzzylite.variable.*;
+
+public class mamdani_tip_calculator{
+public static void main(String[] args){
+//Code automatically generated with fuzzylite 6.0.
+
+Engine engine = new Engine();
+engine.setName("mamdani_tip_calculator");
+engine.setDescription("");
+
+InputVariable FoodQuality = new InputVariable();
+FoodQuality.setName("FoodQuality");
+FoodQuality.setDescription("");
+FoodQuality.setEnabled(true);
+FoodQuality.setRange(1.000, 10.000);
+FoodQuality.setLockValueInRange(false);
+FoodQuality.addTerm(new Trapezoid("Bad", 0.000, 1.000, 3.000, 7.000));
+FoodQuality.addTerm(new Trapezoid("Good", 3.000, 7.000, 10.000, 11.000));
+engine.addInputVariable(FoodQuality);
+
+InputVariable Service = new InputVariable();
+Service.setName("Service");
+Service.setDescription("");
+Service.setEnabled(true);
+Service.setRange(1.000, 10.000);
+Service.setLockValueInRange(false);
+Service.addTerm(new Trapezoid("Bad", 0.000, 1.000, 3.000, 7.000));
+Service.addTerm(new Trapezoid("Good", 3.000, 7.000, 10.000, 11.000));
+engine.addInputVariable(Service);
+
+OutputVariable Tip = new OutputVariable();
+Tip.setName("Tip");
+Tip.setDescription("");
+Tip.setEnabled(true);
+Tip.setRange(0.000, 30.000);
+Tip.setLockValueInRange(false);
+Tip.setAggregation(new AlgebraicSum());
+Tip.setDefuzzifier(new Centroid(200));
+Tip.setDefaultValue(Double.NaN);
+Tip.setLockPreviousValue(false);
+Tip.addTerm(new Gaussian("AboutTenPercent", 10.000, 2.000));
+Tip.addTerm(new Gaussian("AboutFifteenPercent", 15.000, 2.000));
+Tip.addTerm(new Gaussian("AboutTwentyPercent", 20.000, 2.000));
+engine.addOutputVariable(Tip);
+
+OutputVariable CheckPlusTip = new OutputVariable();
+CheckPlusTip.setName("CheckPlusTip");
+CheckPlusTip.setDescription("");
+CheckPlusTip.setEnabled(true);
+CheckPlusTip.setRange(1.000, 1.300);
+CheckPlusTip.setLockValueInRange(false);
+CheckPlusTip.setAggregation(new AlgebraicSum());
+CheckPlusTip.setDefuzzifier(new Centroid(200));
+CheckPlusTip.setDefaultValue(Double.NaN);
+CheckPlusTip.setLockPreviousValue(false);
+CheckPlusTip.addTerm(new Gaussian("PlusAboutTenPercent", 1.100, 0.020));
+CheckPlusTip.addTerm(new Gaussian("PlusAboutFifteenPercent", 1.150, 0.020));
+CheckPlusTip.addTerm(new Gaussian("PlusAboutTwentyPercent", 1.200, 0.020));
+engine.addOutputVariable(CheckPlusTip);
+
+RuleBlock ruleBlock = new RuleBlock();
+ruleBlock.setName("");
+ruleBlock.setDescription("");
+ruleBlock.setEnabled(true);
+ruleBlock.setConjunction(new AlgebraicProduct());
+ruleBlock.setDisjunction(new Maximum());
+ruleBlock.setImplication(new Minimum());
+ruleBlock.setActivation(new General());
+ruleBlock.addRule(Rule.parse("if FoodQuality is Bad and Service is Bad then Tip is AboutTenPercent and CheckPlusTip is PlusAboutTenPercent", engine));
+ruleBlock.addRule(Rule.parse("if FoodQuality is Bad and Service is Good then Tip is AboutFifteenPercent and CheckPlusTip is PlusAboutFifteenPercent", engine));
+ruleBlock.addRule(Rule.parse("if FoodQuality is Good and Service is Bad then Tip is AboutFifteenPercent and CheckPlusTip is PlusAboutFifteenPercent", engine));
+ruleBlock.addRule(Rule.parse("if FoodQuality is Good and Service is Good then Tip is AboutTwentyPercent and CheckPlusTip is PlusAboutTwentyPercent", engine));
+engine.addRuleBlock(ruleBlock);
+
+
+}
+}
diff --git a/examples/mamdani/octave/mamdani_tip_calculator.pdf b/examples/mamdani/octave/mamdani_tip_calculator.pdf
new file mode 100644
index 0000000..d62a142
--- /dev/null
+++ b/examples/mamdani/octave/mamdani_tip_calculator.pdf
Binary files differ