summaryrefslogtreecommitdiff
path: root/examples/hybrid
diff options
context:
space:
mode:
Diffstat (limited to 'examples/hybrid')
-rw-r--r--examples/hybrid/ObstacleAvoidance.R86
-rw-r--r--examples/hybrid/ObstacleAvoidance.cpp75
-rw-r--r--examples/hybrid/ObstacleAvoidance.fcl49
-rw-r--r--examples/hybrid/ObstacleAvoidance.fis43
-rw-r--r--examples/hybrid/ObstacleAvoidance.fld1025
-rw-r--r--examples/hybrid/ObstacleAvoidance.fll43
-rw-r--r--examples/hybrid/ObstacleAvoidance.java86
-rw-r--r--examples/hybrid/ObstacleAvoidance.pdfbin0 -> 45584 bytes
-rw-r--r--examples/hybrid/tipper.R109
-rw-r--r--examples/hybrid/tipper.cpp92
-rw-r--r--examples/hybrid/tipper.fcl66
-rw-r--r--examples/hybrid/tipper.fis57
-rw-r--r--examples/hybrid/tipper.fld1025
-rw-r--r--examples/hybrid/tipper.fll63
-rw-r--r--examples/hybrid/tipper.java103
-rw-r--r--examples/hybrid/tipper.pdfbin0 -> 32309 bytes
16 files changed, 2922 insertions, 0 deletions
diff --git a/examples/hybrid/ObstacleAvoidance.R b/examples/hybrid/ObstacleAvoidance.R
new file mode 100644
index 0000000..5a94543
--- /dev/null
+++ b/examples/hybrid/ObstacleAvoidance.R
@@ -0,0 +1,86 @@
+#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
+OutputVariable: tsSteer
+ enabled: true
+ range: 0.000 1.000
+ lock-range: false
+ aggregation: Maximum
+ defuzzifier: WeightedAverage Automatic
+ default: nan
+ lock-previous: false
+ term: left Constant 0.333
+ term: right Constant 0.666
+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
+RuleBlock: takagiSugeno
+ enabled: true
+ conjunction: none
+ disjunction: none
+ implication: none
+ activation: General
+ rule: if obstacle is left then tsSteer is right
+ rule: if obstacle is right then tsSteer 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")
+
+engine.plot.i1_o2 = ggplot(engine.df, aes(obstacle, tsSteer)) +
+ geom_line(aes(color=tsSteer), size=3, lineend="round", linejoin="mitre") +
+ scale_color_gradient(low="yellow", high="red") +
+ ggtitle("obstacle vs tsSteer")
+
+engine.plot.o2_i1 = ggplot(engine.df, aes(obstacle, tsSteer)) +
+ geom_line(aes(color=tsSteer), size=3, lineend="round", linejoin="mitre") +
+ scale_color_gradient(low="yellow", high="red") +
+ coord_flip() +
+ ggtitle("tsSteer vs obstacle")
+
+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/hybrid/ObstacleAvoidance.cpp b/examples/hybrid/ObstacleAvoidance.cpp
new file mode 100644
index 0000000..a5e42e1
--- /dev/null
+++ b/examples/hybrid/ObstacleAvoidance.cpp
@@ -0,0 +1,75 @@
+#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);
+
+OutputVariable* tsSteer = new OutputVariable;
+tsSteer->setName("tsSteer");
+tsSteer->setDescription("");
+tsSteer->setEnabled(true);
+tsSteer->setRange(0.000, 1.000);
+tsSteer->setLockValueInRange(false);
+tsSteer->setAggregation(new Maximum);
+tsSteer->setDefuzzifier(new WeightedAverage("Automatic"));
+tsSteer->setDefaultValue(fl::nan);
+tsSteer->setLockPreviousValue(false);
+tsSteer->addTerm(new Constant("left", 0.333));
+tsSteer->addTerm(new Constant("right", 0.666));
+engine->addOutputVariable(tsSteer);
+
+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);
+
+RuleBlock* takagiSugeno = new RuleBlock;
+takagiSugeno->setName("takagiSugeno");
+takagiSugeno->setDescription("");
+takagiSugeno->setEnabled(true);
+takagiSugeno->setConjunction(fl::null);
+takagiSugeno->setDisjunction(fl::null);
+takagiSugeno->setImplication(fl::null);
+takagiSugeno->setActivation(new General);
+takagiSugeno->addRule(Rule::parse("if obstacle is left then tsSteer is right", engine));
+takagiSugeno->addRule(Rule::parse("if obstacle is right then tsSteer is left", engine));
+engine->addRuleBlock(takagiSugeno);
+
+
+}
diff --git a/examples/hybrid/ObstacleAvoidance.fcl b/examples/hybrid/ObstacleAvoidance.fcl
new file mode 100644
index 0000000..81a30a7
--- /dev/null
+++ b/examples/hybrid/ObstacleAvoidance.fcl
@@ -0,0 +1,49 @@
+//Code automatically generated with fuzzylite 6.0.
+
+FUNCTION_BLOCK ObstacleAvoidance
+
+VAR_INPUT
+ obstacle: REAL;
+END_VAR
+
+VAR_OUTPUT
+ mSteer: REAL;
+ tsSteer: 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
+
+DEFUZZIFY tsSteer
+ RANGE := (0.000 .. 1.000);
+ TERM left := 0.333;
+ TERM right := 0.666;
+ METHOD : COGS;
+ 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
+
+RULEBLOCK takagiSugeno
+ RULE 1 : if obstacle is left then tsSteer is right
+ RULE 2 : if obstacle is right then tsSteer is left
+END_RULEBLOCK
+
+END_FUNCTION_BLOCK
diff --git a/examples/hybrid/ObstacleAvoidance.fis b/examples/hybrid/ObstacleAvoidance.fis
new file mode 100644
index 0000000..1bf0476
--- /dev/null
+++ b/examples/hybrid/ObstacleAvoidance.fis
@@ -0,0 +1,43 @@
+#Code automatically generated with fuzzylite 6.0.
+
+[System]
+Name='ObstacleAvoidance'
+Type='hybrid'
+Version=6.0
+NumInputs=1
+NumOutputs=2
+NumRules=4
+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]
+
+[Output2]
+Name='tsSteer'
+Range=[0.000 1.000]
+NumMFs=2
+MF1='left':'constant',[0.333]
+MF2='right':'constant',[0.666]
+
+[Rules]
+# RuleBlock mamdani
+1.000 , 2.000 0.000 (1.000) : 1
+2.000 , 1.000 0.000 (1.000) : 1
+# RuleBlock takagiSugeno
+1.000 , 0.000 2.000 (1.000) : 1
+2.000 , 0.000 1.000 (1.000) : 1
diff --git a/examples/hybrid/ObstacleAvoidance.fld b/examples/hybrid/ObstacleAvoidance.fld
new file mode 100644
index 0000000..bd96696
--- /dev/null
+++ b/examples/hybrid/ObstacleAvoidance.fld
@@ -0,0 +1,1025 @@
+obstacle mSteer tsSteer
+0.000000000 0.666650000 0.666000000
+0.000977517 0.666650000 0.665674487
+0.001955034 0.666650000 0.665348974
+0.002932551 0.666650000 0.665023460
+0.003910068 0.666650000 0.664697947
+0.004887586 0.666650000 0.664372434
+0.005865103 0.666638485 0.664046921
+0.006842620 0.666625450 0.663721408
+0.007820137 0.666612389 0.663395894
+0.008797654 0.666599303 0.663070381
+0.009775171 0.666586193 0.662744868
+0.010752688 0.666573056 0.662419355
+0.011730205 0.666559894 0.662093842
+0.012707722 0.666546707 0.661768328
+0.013685239 0.666533494 0.661442815
+0.014662757 0.666520255 0.661117302
+0.015640274 0.666498518 0.660791789
+0.016617791 0.666472271 0.660466276
+0.017595308 0.666445974 0.660140762
+0.018572825 0.666419626 0.659815249
+0.019550342 0.666393229 0.659489736
+0.020527859 0.666366781 0.659164223
+0.021505376 0.666340282 0.658838710
+0.022482893 0.666313732 0.658513196
+0.023460411 0.666287131 0.658187683
+0.024437928 0.666260479 0.657862170
+0.025415445 0.666228313 0.657536657
+0.026392962 0.666188686 0.657211144
+0.027370479 0.666148986 0.656885630
+0.028347996 0.666109209 0.656560117
+0.029325513 0.666069358 0.656234604
+0.030303030 0.666029432 0.655909091
+0.031280547 0.665989429 0.655583578
+0.032258065 0.665949351 0.655258065
+0.033235582 0.665909196 0.654932551
+0.034213099 0.665868966 0.654607038
+0.035190616 0.665826169 0.654281525
+0.036168133 0.665773005 0.653956012
+0.037145650 0.665719742 0.653630499
+0.038123167 0.665666380 0.653304985
+0.039100684 0.665612917 0.652979472
+0.040078201 0.665559355 0.652653959
+0.041055718 0.665505693 0.652328446
+0.042033236 0.665451930 0.652002933
+0.043010753 0.665398066 0.651677419
+0.043988270 0.665344101 0.651351906
+0.044965787 0.665290034 0.651026393
+0.045943304 0.665223628 0.650700880
+0.046920821 0.665156655 0.650375367
+0.047898338 0.665089559 0.650049853
+0.048875855 0.665022339 0.649724340
+0.049853372 0.664954994 0.649398827
+0.050830890 0.664887525 0.649073314
+0.051808407 0.664819932 0.648747801
+0.052785924 0.664752213 0.648422287
+0.053763441 0.664684369 0.648096774
+0.054740958 0.664616398 0.647771261
+0.055718475 0.664539056 0.647445748
+0.056695992 0.664458237 0.647120235
+0.057673509 0.664377270 0.646794721
+0.058651026 0.664296156 0.646469208
+0.059628543 0.664214895 0.646143695
+0.060606061 0.664133485 0.645818182
+0.061583578 0.664051926 0.645492669
+0.062561095 0.663970218 0.645167155
+0.063538612 0.663888361 0.644841642
+0.064516129 0.663806354 0.644516129
+0.065493646 0.663717900 0.644190616
+0.066471163 0.663623109 0.643865103
+0.067448680 0.663528148 0.643539589
+0.068426197 0.663433016 0.643214076
+0.069403715 0.663337714 0.642888563
+0.070381232 0.663242240 0.642563050
+0.071358749 0.663146594 0.642237537
+0.072336266 0.663050776 0.641912023
+0.073313783 0.662954785 0.641586510
+0.074291300 0.662858620 0.641260997
+0.075268817 0.662758885 0.640935484
+0.076246334 0.662650011 0.640609971
+0.077223851 0.662540943 0.640284457
+0.078201369 0.662431683 0.639958944
+0.079178886 0.662322229 0.639633431
+0.080156403 0.662212581 0.639307918
+0.081133920 0.662102739 0.638982405
+0.082111437 0.661992701 0.638656891
+0.083088954 0.661882468 0.638331378
+0.084066471 0.661772039 0.638005865
+0.085043988 0.661660863 0.637680352
+0.086021505 0.661537806 0.637354839
+0.086999022 0.661414534 0.637029326
+0.087976540 0.661291048 0.636703812
+0.088954057 0.661167346 0.636378299
+0.089931574 0.661043428 0.636052786
+0.090909091 0.660919294 0.635727273
+0.091886608 0.660794942 0.635401760
+0.092864125 0.660670373 0.635076246
+0.093841642 0.660545585 0.634750733
+0.094819159 0.660420579 0.634425220
+0.095796676 0.660285492 0.634099707
+0.096774194 0.660147932 0.633774194
+0.097751711 0.660010136 0.633448680
+0.098729228 0.659872104 0.633123167
+0.099706745 0.659733835 0.632797654
+0.100684262 0.659595328 0.632472141
+0.101661779 0.659456582 0.632146628
+0.102639296 0.659317597 0.631821114
+0.103616813 0.659178373 0.631495601
+0.104594330 0.659038909 0.631170088
+0.105571848 0.658892208 0.630844575
+0.106549365 0.658740291 0.630519062
+0.107526882 0.658588119 0.630193548
+0.108504399 0.658435689 0.629868035
+0.109481916 0.658283002 0.629542522
+0.110459433 0.658130057 0.629217009
+0.111436950 0.657976852 0.628891496
+0.112414467 0.657823389 0.628565982
+0.113391984 0.657669665 0.628240469
+0.114369501 0.657515680 0.627914956
+0.115347019 0.657357242 0.627589443
+0.116324536 0.657190916 0.627263930
+0.117302053 0.657024315 0.626938416
+0.118279570 0.656857437 0.626612903
+0.119257087 0.656690282 0.626287390
+0.120234604 0.656522850 0.625961877
+0.121212121 0.656355139 0.625636364
+0.122189638 0.656187149 0.625310850
+0.123167155 0.656018879 0.624985337
+0.124144673 0.655850329 0.624659824
+0.125122190 0.655680041 0.624334311
+0.126099707 0.655499270 0.624008798
+0.127077224 0.655318205 0.623683284
+0.128054741 0.655136845 0.623357771
+0.129032258 0.654955190 0.623032258
+0.130009775 0.654773238 0.622706745
+0.130987292 0.654590990 0.622381232
+0.131964809 0.654408443 0.622055718
+0.132942326 0.654225598 0.621730205
+0.133919844 0.654042454 0.621404692
+0.134897361 0.653859010 0.621079179
+0.135874878 0.653664982 0.620753666
+0.136852395 0.653469436 0.620428152
+0.137829912 0.653273578 0.620102639
+0.138807429 0.653077407 0.619777126
+0.139784946 0.652880922 0.619451613
+0.140762463 0.652684123 0.619126100
+0.141739980 0.652487008 0.618800587
+0.142717498 0.652289577 0.618475073
+0.143695015 0.652091829 0.618149560
+0.144672532 0.651893763 0.617824047
+0.145650049 0.651687855 0.617498534
+0.146627566 0.651477831 0.617173021
+0.147605083 0.651267477 0.616847507
+0.148582600 0.651056794 0.616521994
+0.149560117 0.650845780 0.616196481
+0.150537634 0.650634436 0.615870968
+0.151515152 0.650422759 0.615545455
+0.152492669 0.650210750 0.615219941
+0.153470186 0.649998407 0.614894428
+0.154447703 0.649785731 0.614568915
+0.155425220 0.649567877 0.614243402
+0.156402737 0.649343393 0.613917889
+0.157380254 0.649118566 0.613592375
+0.158357771 0.648893393 0.613266862
+0.159335288 0.648667875 0.612941349
+0.160312805 0.648442011 0.612615836
+0.161290323 0.648215799 0.612290323
+0.162267840 0.647989239 0.611964809
+0.163245357 0.647762331 0.611639296
+0.164222874 0.647535073 0.611313783
+0.165200391 0.647305221 0.610988270
+0.166177908 0.647066320 0.610662757
+0.167155425 0.646827060 0.610337243
+0.168132942 0.646587441 0.610011730
+0.169110459 0.646347463 0.609686217
+0.170087977 0.646107124 0.609360704
+0.171065494 0.645866424 0.609035191
+0.172043011 0.645625361 0.608709677
+0.173020528 0.645383936 0.608384164
+0.173998045 0.645142147 0.608058651
+0.174975562 0.644899993 0.607733138
+0.175953079 0.644647002 0.607407625
+0.176930596 0.644393373 0.607082111
+0.177908113 0.644139372 0.606756598
+0.178885630 0.643884998 0.606431085
+0.179863148 0.643630251 0.606105572
+0.180840665 0.643375130 0.605780059
+0.181818182 0.643119633 0.605454545
+0.182795699 0.642863761 0.605129032
+0.183773216 0.642607513 0.604803519
+0.184750733 0.642350886 0.604478006
+0.185728250 0.642086038 0.604152493
+0.186705767 0.641818123 0.603826979
+0.187683284 0.641549824 0.603501466
+0.188660802 0.641281142 0.603175953
+0.189638319 0.641012074 0.602850440
+0.190615836 0.640742621 0.602524927
+0.191593353 0.640472782 0.602199413
+0.192570870 0.640202555 0.601873900
+0.193548387 0.639931940 0.601548387
+0.194525904 0.639660937 0.601222874
+0.195503421 0.639384233 0.600897361
+0.196480938 0.639102138 0.600571848
+0.197458456 0.638819650 0.600246334
+0.198435973 0.638536767 0.599920821
+0.199413490 0.638253490 0.599595308
+0.200391007 0.637969817 0.599269795
+0.201368524 0.637685747 0.598944282
+0.202346041 0.637401280 0.598618768
+0.203323558 0.637116415 0.598293255
+0.204301075 0.636831150 0.597967742
+0.205278592 0.636542613 0.597642229
+0.206256109 0.636246466 0.597316716
+0.207233627 0.635949918 0.596991202
+0.208211144 0.635652966 0.596665689
+0.209188661 0.635355612 0.596340176
+0.210166178 0.635057853 0.596014663
+0.211143695 0.634759688 0.595689150
+0.212121212 0.634461118 0.595363636
+0.213098729 0.634162142 0.595038123
+0.214076246 0.633862757 0.594712610
+0.215053763 0.633562423 0.594387097
+0.216031281 0.633252376 0.594061584
+0.217008798 0.632941920 0.593736070
+0.217986315 0.632631055 0.593410557
+0.218963832 0.632319779 0.593085044
+0.219941349 0.632008091 0.592759531
+0.220918866 0.631695992 0.592434018
+0.221896383 0.631383479 0.592108504
+0.222873900 0.631070553 0.591782991
+0.223851417 0.630757212 0.591457478
+0.224828935 0.630443455 0.591131965
+0.225806452 0.630121364 0.590806452
+0.226783969 0.629797178 0.590480938
+0.227761486 0.629472576 0.590155425
+0.228739003 0.629147559 0.589829912
+0.229716520 0.628822125 0.589504399
+0.230694037 0.628496272 0.589178886
+0.231671554 0.628170002 0.588853372
+0.232649071 0.627843312 0.588527859
+0.233626588 0.627516202 0.588202346
+0.234604106 0.627188671 0.587876833
+0.235581623 0.626855159 0.587551320
+0.236559140 0.626517443 0.587225806
+0.237536657 0.626179308 0.586900293
+0.238514174 0.625840753 0.586574780
+0.239491691 0.625501777 0.586249267
+0.240469208 0.625162379 0.585923754
+0.241446725 0.624822559 0.585598240
+0.242424242 0.624482316 0.585272727
+0.243401760 0.624141649 0.584947214
+0.244379277 0.623800557 0.584621701
+0.245356794 0.623455725 0.584296188
+0.246334311 0.623104704 0.583970674
+0.247311828 0.622753262 0.583645161
+0.248289345 0.622401397 0.583319648
+0.249266862 0.622049109 0.582994135
+0.250244379 0.621696398 0.582668622
+0.251221896 0.621343261 0.582343109
+0.252199413 0.620989700 0.582017595
+0.253176931 0.620635712 0.581692082
+0.254154448 0.620281297 0.581366569
+0.255131965 0.619925265 0.581041056
+0.256109482 0.619561189 0.580715543
+0.257086999 0.619196691 0.580390029
+0.258064516 0.618831769 0.580064516
+0.259042033 0.618466424 0.579739003
+0.260019550 0.618100655 0.579413490
+0.260997067 0.617734460 0.579087977
+0.261974585 0.617367839 0.578762463
+0.262952102 0.617000791 0.578436950
+0.263929619 0.616633316 0.578111437
+0.264907136 0.616265413 0.577785924
+0.265884653 0.615889366 0.577460411
+0.266862170 0.615512088 0.577134897
+0.267839687 0.615134387 0.576809384
+0.268817204 0.614756264 0.576483871
+0.269794721 0.614377718 0.576158358
+0.270772239 0.613998747 0.575832845
+0.271749756 0.613619351 0.575507331
+0.272727273 0.613239530 0.575181818
+0.273704790 0.612859282 0.574856305
+0.274682307 0.612478608 0.574530792
+0.275659824 0.612091947 0.574205279
+0.276637341 0.611702189 0.573879765
+0.277614858 0.611312012 0.573554252
+0.278592375 0.610921415 0.573228739
+0.279569892 0.610530398 0.572903226
+0.280547410 0.610138959 0.572577713
+0.281524927 0.609747097 0.572252199
+0.282502444 0.609354813 0.571926686
+0.283479961 0.608962106 0.571601173
+0.284457478 0.608568974 0.571275660
+0.285434995 0.608171886 0.570950147
+0.286412512 0.607769974 0.570624633
+0.287390029 0.607367648 0.570299120
+0.288367546 0.606964906 0.569973607
+0.289345064 0.606561748 0.569648094
+0.290322581 0.606158173 0.569322581
+0.291300098 0.605754180 0.568997067
+0.292277615 0.605349770 0.568671554
+0.293255132 0.604944940 0.568346041
+0.294232649 0.604539690 0.568020528
+0.295210166 0.604132380 0.567695015
+0.296187683 0.603718665 0.567369501
+0.297165200 0.603304542 0.567043988
+0.298142717 0.602890009 0.566718475
+0.299120235 0.602475066 0.566392962
+0.300097752 0.602059712 0.566067449
+0.301075269 0.601643947 0.565741935
+0.302052786 0.601227769 0.565416422
+0.303030303 0.600811179 0.565090909
+0.304007820 0.600394176 0.564765396
+0.304985337 0.599976759 0.564439883
+0.305962854 0.599551726 0.564114370
+0.306940371 0.599126182 0.563788856
+0.307917889 0.598700236 0.563463343
+0.308895406 0.598273888 0.563137830
+0.309872923 0.597847137 0.562812317
+0.310850440 0.597419982 0.562486804
+0.311827957 0.596992424 0.562161290
+0.312805474 0.596564460 0.561835777
+0.313782991 0.596136092 0.561510264
+0.314760508 0.595707318 0.561184751
+0.315738025 0.595272860 0.560859238
+0.316715543 0.594836296 0.560533724
+0.317693060 0.594399340 0.560208211
+0.318670577 0.593961991 0.559882698
+0.319648094 0.593524248 0.559557185
+0.320625611 0.593086112 0.559231672
+0.321603128 0.592647581 0.558906158
+0.322580645 0.592208655 0.558580645
+0.323558162 0.591769334 0.558255132
+0.324535679 0.591329617 0.557929619
+0.325513196 0.590886006 0.557604106
+0.326490714 0.590438847 0.557278592
+0.327468231 0.589991307 0.556953079
+0.328445748 0.589543385 0.556627566
+0.329423265 0.589095081 0.556302053
+0.330400782 0.588646394 0.555976540
+0.331378299 0.588197324 0.555651026
+0.332355816 0.587747870 0.555325513
+0.333333333 0.587298033 0.555000000
+0.334310850 0.586847811 0.554674487
+0.335288368 0.586395337 0.554348974
+0.336265885 0.585938031 0.554023460
+0.337243402 0.585480357 0.553697947
+0.338220919 0.585022313 0.553372434
+0.339198436 0.584563900 0.553046921
+0.340175953 0.584105117 0.552721408
+0.341153470 0.583645965 0.552395894
+0.342130987 0.583186441 0.552070381
+0.343108504 0.582726546 0.551744868
+0.344086022 0.582266280 0.551419355
+0.345063539 0.581805253 0.551093842
+0.346041056 0.581338270 0.550768328
+0.347018573 0.580870934 0.550442815
+0.347996090 0.580403243 0.550117302
+0.348973607 0.579935197 0.549791789
+0.349951124 0.579466795 0.549466276
+0.350928641 0.578998038 0.549140762
+0.351906158 0.578528925 0.548815249
+0.352883675 0.578059455 0.548489736
+0.353861193 0.577589628 0.548164223
+0.354838710 0.577119444 0.547838710
+0.355816227 0.576644207 0.547513196
+0.356793744 0.576167703 0.547187683
+0.357771261 0.575690860 0.546862170
+0.358748778 0.575213679 0.546536657
+0.359726295 0.574736158 0.546211144
+0.360703812 0.574258297 0.545885630
+0.361681329 0.573780096 0.545560117
+0.362658847 0.573301554 0.545234604
+0.363636364 0.572822672 0.544909091
+0.364613881 0.572343449 0.544583578
+0.365591398 0.571860698 0.544258065
+0.366568915 0.571375542 0.543932551
+0.367546432 0.570890065 0.543607038
+0.368523949 0.570404267 0.543281525
+0.369501466 0.569918146 0.542956012
+0.370478983 0.569431703 0.542630499
+0.371456500 0.568944938 0.542304985
+0.372434018 0.568457849 0.541979472
+0.373411535 0.567970438 0.541653959
+0.374389052 0.567482703 0.541328446
+0.375366569 0.566992805 0.541002933
+0.376344086 0.566499534 0.540677419
+0.377321603 0.566005960 0.540351906
+0.378299120 0.565512083 0.540026393
+0.379276637 0.565017903 0.539700880
+0.380254154 0.564523420 0.539375367
+0.381231672 0.564028633 0.539049853
+0.382209189 0.563533542 0.538724340
+0.383186706 0.563038147 0.538398827
+0.384164223 0.562542448 0.538073314
+0.385141740 0.562045786 0.537747801
+0.386119257 0.561544954 0.537422287
+0.387096774 0.561043840 0.537096774
+0.388074291 0.560542444 0.536771261
+0.389051808 0.560040764 0.536445748
+0.390029326 0.559538801 0.536120235
+0.391006843 0.559036555 0.535794721
+0.391984360 0.558534026 0.535469208
+0.392961877 0.558031212 0.535143695
+0.393939394 0.557528114 0.534818182
+0.394916911 0.557024732 0.534492669
+0.395894428 0.556517268 0.534167155
+0.396871945 0.556009189 0.533841642
+0.397849462 0.555500848 0.533516129
+0.398826979 0.554992247 0.533190616
+0.399804497 0.554483383 0.532865103
+0.400782014 0.553974258 0.532539589
+0.401759531 0.553464870 0.532214076
+0.402737048 0.552955221 0.531888563
+0.403714565 0.552445308 0.531563050
+0.404692082 0.551935134 0.531237537
+0.405669599 0.551422112 0.530912023
+0.406647116 0.550907660 0.530586510
+0.407624633 0.550392969 0.530260997
+0.408602151 0.549878039 0.529935484
+0.409579668 0.549362870 0.529609971
+0.410557185 0.548847462 0.529284457
+0.411534702 0.548331815 0.528958944
+0.412512219 0.547815928 0.528633431
+0.413489736 0.547299802 0.528307918
+0.414467253 0.546783436 0.527982405
+0.415444770 0.546265287 0.527656891
+0.416422287 0.545745069 0.527331378
+0.417399804 0.545224637 0.527005865
+0.418377322 0.544703989 0.526680352
+0.419354839 0.544183126 0.526354839
+0.420332356 0.543662048 0.526029326
+0.421309873 0.543140754 0.525703812
+0.422287390 0.542619244 0.525378299
+0.423264907 0.542097518 0.525052786
+0.424242424 0.541575577 0.524727273
+0.425219941 0.541052744 0.524401760
+0.426197458 0.540527383 0.524076246
+0.427174976 0.540001832 0.523750733
+0.428152493 0.539476090 0.523425220
+0.429130010 0.538950158 0.523099707
+0.430107527 0.538424035 0.522774194
+0.431085044 0.537897722 0.522448680
+0.432062561 0.537371217 0.522123167
+0.433040078 0.536844521 0.521797654
+0.434017595 0.536317635 0.521472141
+0.434995112 0.535790557 0.521146628
+0.435972630 0.535260701 0.520821114
+0.436950147 0.534730668 0.520495601
+0.437927664 0.534200469 0.520170088
+0.438905181 0.533670106 0.519844575
+0.439882698 0.533139577 0.519519062
+0.440860215 0.532608883 0.519193548
+0.441837732 0.532078024 0.518868035
+0.442815249 0.531546999 0.518542522
+0.443792766 0.531015810 0.518217009
+0.444770283 0.530484454 0.517891496
+0.445747801 0.529951246 0.517565982
+0.446725318 0.529417377 0.517240469
+0.447702835 0.528883370 0.516914956
+0.448680352 0.528349224 0.516589443
+0.449657869 0.527814939 0.516263930
+0.450635386 0.527280516 0.515938416
+0.451612903 0.526745953 0.515612903
+0.452590420 0.526211252 0.515287390
+0.453567937 0.525676412 0.514961877
+0.454545455 0.525141432 0.514636364
+0.455522972 0.524605346 0.514310850
+0.456500489 0.524068300 0.513985337
+0.457478006 0.523531142 0.513659824
+0.458455523 0.522993872 0.513334311
+0.459433040 0.522456490 0.513008798
+0.460410557 0.521918997 0.512683284
+0.461388074 0.521381392 0.512357771
+0.462365591 0.520843675 0.512032258
+0.463343109 0.520305846 0.511706745
+0.464320626 0.519767905 0.511381232
+0.465298143 0.519229421 0.511055718
+0.466275660 0.518689863 0.510730205
+0.467253177 0.518150220 0.510404692
+0.468230694 0.517610493 0.510079179
+0.469208211 0.517070682 0.509753666
+0.470185728 0.516530787 0.509428152
+0.471163245 0.515990807 0.509102639
+0.472140762 0.515450743 0.508777126
+0.473118280 0.514910594 0.508451613
+0.474095797 0.514370361 0.508126100
+0.475073314 0.513829968 0.507800587
+0.476050831 0.513288569 0.507475073
+0.477028348 0.512747115 0.507149560
+0.478005865 0.512205604 0.506824047
+0.478983382 0.511664036 0.506498534
+0.479960899 0.511122412 0.506173021
+0.480938416 0.510580732 0.505847507
+0.481915934 0.510038995 0.505521994
+0.482893451 0.509497202 0.505196481
+0.483870968 0.508955352 0.504870968
+0.484848485 0.508413446 0.504545455
+0.485826002 0.507870980 0.504219941
+0.486803519 0.507328390 0.503894428
+0.487781036 0.506785773 0.503568915
+0.488758553 0.506243127 0.503243402
+0.489736070 0.505700453 0.502917889
+0.490713587 0.505157751 0.502592375
+0.491691105 0.504615020 0.502266862
+0.492668622 0.504072261 0.501941349
+0.493646139 0.503529474 0.501615836
+0.494623656 0.502986658 0.501290323
+0.495601173 0.502443695 0.500964809
+0.496578690 0.501900652 0.500639296
+0.497556207 0.501357608 0.500313783
+0.498533724 0.500814565 0.499988270
+0.499511241 0.500271522 0.499662757
+0.500488759 0.499728478 0.499337243
+0.501466276 0.499185435 0.499011730
+0.502443793 0.498642392 0.498686217
+0.503421310 0.498099348 0.498360704
+0.504398827 0.497556305 0.498035191
+0.505376344 0.497013342 0.497709677
+0.506353861 0.496470526 0.497384164
+0.507331378 0.495927739 0.497058651
+0.508308895 0.495384980 0.496733138
+0.509286413 0.494842249 0.496407625
+0.510263930 0.494299547 0.496082111
+0.511241447 0.493756873 0.495756598
+0.512218964 0.493214227 0.495431085
+0.513196481 0.492671610 0.495105572
+0.514173998 0.492129020 0.494780059
+0.515151515 0.491586554 0.494454545
+0.516129032 0.491044648 0.494129032
+0.517106549 0.490502798 0.493803519
+0.518084066 0.489961005 0.493478006
+0.519061584 0.489419268 0.493152493
+0.520039101 0.488877588 0.492826979
+0.521016618 0.488335964 0.492501466
+0.521994135 0.487794396 0.492175953
+0.522971652 0.487252885 0.491850440
+0.523949169 0.486711431 0.491524927
+0.524926686 0.486170032 0.491199413
+0.525904203 0.485629639 0.490873900
+0.526881720 0.485089406 0.490548387
+0.527859238 0.484549257 0.490222874
+0.528836755 0.484009193 0.489897361
+0.529814272 0.483469213 0.489571848
+0.530791789 0.482929318 0.489246334
+0.531769306 0.482389507 0.488920821
+0.532746823 0.481849780 0.488595308
+0.533724340 0.481310137 0.488269795
+0.534701857 0.480770579 0.487944282
+0.535679374 0.480232095 0.487618768
+0.536656891 0.479694154 0.487293255
+0.537634409 0.479156325 0.486967742
+0.538611926 0.478618608 0.486642229
+0.539589443 0.478081003 0.486316716
+0.540566960 0.477543510 0.485991202
+0.541544477 0.477006128 0.485665689
+0.542521994 0.476468858 0.485340176
+0.543499511 0.475931700 0.485014663
+0.544477028 0.475394654 0.484689150
+0.545454545 0.474858568 0.484363636
+0.546432063 0.474323588 0.484038123
+0.547409580 0.473788748 0.483712610
+0.548387097 0.473254047 0.483387097
+0.549364614 0.472719484 0.483061584
+0.550342131 0.472185061 0.482736070
+0.551319648 0.471650776 0.482410557
+0.552297165 0.471116630 0.482085044
+0.553274682 0.470582623 0.481759531
+0.554252199 0.470048754 0.481434018
+0.555229717 0.469515546 0.481108504
+0.556207234 0.468984190 0.480782991
+0.557184751 0.468453001 0.480457478
+0.558162268 0.467921976 0.480131965
+0.559139785 0.467391117 0.479806452
+0.560117302 0.466860423 0.479480938
+0.561094819 0.466329894 0.479155425
+0.562072336 0.465799531 0.478829912
+0.563049853 0.465269332 0.478504399
+0.564027370 0.464739299 0.478178886
+0.565004888 0.464209443 0.477853372
+0.565982405 0.463682365 0.477527859
+0.566959922 0.463155479 0.477202346
+0.567937439 0.462628783 0.476876833
+0.568914956 0.462102278 0.476551320
+0.569892473 0.461575965 0.476225806
+0.570869990 0.461049842 0.475900293
+0.571847507 0.460523910 0.475574780
+0.572825024 0.459998168 0.475249267
+0.573802542 0.459472617 0.474923754
+0.574780059 0.458947256 0.474598240
+0.575757576 0.458424423 0.474272727
+0.576735093 0.457902482 0.473947214
+0.577712610 0.457380756 0.473621701
+0.578690127 0.456859246 0.473296188
+0.579667644 0.456337952 0.472970674
+0.580645161 0.455816874 0.472645161
+0.581622678 0.455296011 0.472319648
+0.582600196 0.454775363 0.471994135
+0.583577713 0.454254931 0.471668622
+0.584555230 0.453734713 0.471343109
+0.585532747 0.453216564 0.471017595
+0.586510264 0.452700198 0.470692082
+0.587487781 0.452184072 0.470366569
+0.588465298 0.451668185 0.470041056
+0.589442815 0.451152538 0.469715543
+0.590420332 0.450637130 0.469390029
+0.591397849 0.450121961 0.469064516
+0.592375367 0.449607031 0.468739003
+0.593352884 0.449092340 0.468413490
+0.594330401 0.448577888 0.468087977
+0.595307918 0.448064866 0.467762463
+0.596285435 0.447554692 0.467436950
+0.597262952 0.447044779 0.467111437
+0.598240469 0.446535130 0.466785924
+0.599217986 0.446025742 0.466460411
+0.600195503 0.445516617 0.466134897
+0.601173021 0.445007753 0.465809384
+0.602150538 0.444499152 0.465483871
+0.603128055 0.443990811 0.465158358
+0.604105572 0.443482732 0.464832845
+0.605083089 0.442975268 0.464507331
+0.606060606 0.442471886 0.464181818
+0.607038123 0.441968788 0.463856305
+0.608015640 0.441465974 0.463530792
+0.608993157 0.440963445 0.463205279
+0.609970674 0.440461199 0.462879765
+0.610948192 0.439959236 0.462554252
+0.611925709 0.439457556 0.462228739
+0.612903226 0.438956160 0.461903226
+0.613880743 0.438455046 0.461577713
+0.614858260 0.437954214 0.461252199
+0.615835777 0.437457552 0.460926686
+0.616813294 0.436961853 0.460601173
+0.617790811 0.436466458 0.460275660
+0.618768328 0.435971367 0.459950147
+0.619745846 0.435476580 0.459624633
+0.620723363 0.434982097 0.459299120
+0.621700880 0.434487917 0.458973607
+0.622678397 0.433994040 0.458648094
+0.623655914 0.433500466 0.458322581
+0.624633431 0.433007195 0.457997067
+0.625610948 0.432517297 0.457671554
+0.626588465 0.432029562 0.457346041
+0.627565982 0.431542151 0.457020528
+0.628543500 0.431055062 0.456695015
+0.629521017 0.430568297 0.456369501
+0.630498534 0.430081854 0.456043988
+0.631476051 0.429595733 0.455718475
+0.632453568 0.429109935 0.455392962
+0.633431085 0.428624458 0.455067449
+0.634408602 0.428139302 0.454741935
+0.635386119 0.427656551 0.454416422
+0.636363636 0.427177328 0.454090909
+0.637341153 0.426698446 0.453765396
+0.638318671 0.426219904 0.453439883
+0.639296188 0.425741703 0.453114370
+0.640273705 0.425263842 0.452788856
+0.641251222 0.424786321 0.452463343
+0.642228739 0.424309140 0.452137830
+0.643206256 0.423832297 0.451812317
+0.644183773 0.423355793 0.451486804
+0.645161290 0.422880556 0.451161290
+0.646138807 0.422410372 0.450835777
+0.647116325 0.421940545 0.450510264
+0.648093842 0.421471075 0.450184751
+0.649071359 0.421001962 0.449859238
+0.650048876 0.420533205 0.449533724
+0.651026393 0.420064803 0.449208211
+0.652003910 0.419596757 0.448882698
+0.652981427 0.419129066 0.448557185
+0.653958944 0.418661730 0.448231672
+0.654936461 0.418194747 0.447906158
+0.655913978 0.417733720 0.447580645
+0.656891496 0.417273454 0.447255132
+0.657869013 0.416813559 0.446929619
+0.658846530 0.416354035 0.446604106
+0.659824047 0.415894883 0.446278592
+0.660801564 0.415436100 0.445953079
+0.661779081 0.414977687 0.445627566
+0.662756598 0.414519643 0.445302053
+0.663734115 0.414061969 0.444976540
+0.664711632 0.413604663 0.444651026
+0.665689150 0.413152189 0.444325513
+0.666666667 0.412701967 0.444000000
+0.667644184 0.412252130 0.443674487
+0.668621701 0.411802676 0.443348974
+0.669599218 0.411353606 0.443023460
+0.670576735 0.410904919 0.442697947
+0.671554252 0.410456615 0.442372434
+0.672531769 0.410008693 0.442046921
+0.673509286 0.409561153 0.441721408
+0.674486804 0.409113994 0.441395894
+0.675464321 0.408670383 0.441070381
+0.676441838 0.408230666 0.440744868
+0.677419355 0.407791345 0.440419355
+0.678396872 0.407352419 0.440093842
+0.679374389 0.406913888 0.439768328
+0.680351906 0.406475752 0.439442815
+0.681329423 0.406038009 0.439117302
+0.682306940 0.405600660 0.438791789
+0.683284457 0.405163704 0.438466276
+0.684261975 0.404727140 0.438140762
+0.685239492 0.404292682 0.437815249
+0.686217009 0.403863908 0.437489736
+0.687194526 0.403435540 0.437164223
+0.688172043 0.403007576 0.436838710
+0.689149560 0.402580018 0.436513196
+0.690127077 0.402152863 0.436187683
+0.691104594 0.401726112 0.435862170
+0.692082111 0.401299764 0.435536657
+0.693059629 0.400873818 0.435211144
+0.694037146 0.400448274 0.434885630
+0.695014663 0.400023241 0.434560117
+0.695992180 0.399605824 0.434234604
+0.696969697 0.399188821 0.433909091
+0.697947214 0.398772231 0.433583578
+0.698924731 0.398356053 0.433258065
+0.699902248 0.397940288 0.432932551
+0.700879765 0.397524934 0.432607038
+0.701857283 0.397109991 0.432281525
+0.702834800 0.396695458 0.431956012
+0.703812317 0.396281335 0.431630499
+0.704789834 0.395867620 0.431304985
+0.705767351 0.395460310 0.430979472
+0.706744868 0.395055060 0.430653959
+0.707722385 0.394650230 0.430328446
+0.708699902 0.394245820 0.430002933
+0.709677419 0.393841827 0.429677419
+0.710654936 0.393438252 0.429351906
+0.711632454 0.393035094 0.429026393
+0.712609971 0.392632352 0.428700880
+0.713587488 0.392230026 0.428375367
+0.714565005 0.391828114 0.428049853
+0.715542522 0.391431026 0.427724340
+0.716520039 0.391037894 0.427398827
+0.717497556 0.390645187 0.427073314
+0.718475073 0.390252903 0.426747801
+0.719452590 0.389861041 0.426422287
+0.720430108 0.389469602 0.426096774
+0.721407625 0.389078585 0.425771261
+0.722385142 0.388687988 0.425445748
+0.723362659 0.388297811 0.425120235
+0.724340176 0.387908053 0.424794721
+0.725317693 0.387521392 0.424469208
+0.726295210 0.387140718 0.424143695
+0.727272727 0.386760470 0.423818182
+0.728250244 0.386380649 0.423492669
+0.729227761 0.386001253 0.423167155
+0.730205279 0.385622282 0.422841642
+0.731182796 0.385243736 0.422516129
+0.732160313 0.384865613 0.422190616
+0.733137830 0.384487912 0.421865103
+0.734115347 0.384110634 0.421539589
+0.735092864 0.383734587 0.421214076
+0.736070381 0.383366684 0.420888563
+0.737047898 0.382999209 0.420563050
+0.738025415 0.382632161 0.420237537
+0.739002933 0.382265540 0.419912023
+0.739980450 0.381899345 0.419586510
+0.740957967 0.381533576 0.419260997
+0.741935484 0.381168231 0.418935484
+0.742913001 0.380803309 0.418609971
+0.743890518 0.380438811 0.418284457
+0.744868035 0.380074735 0.417958944
+0.745845552 0.379718703 0.417633431
+0.746823069 0.379364288 0.417307918
+0.747800587 0.379010300 0.416982405
+0.748778104 0.378656739 0.416656891
+0.749755621 0.378303602 0.416331378
+0.750733138 0.377950891 0.416005865
+0.751710655 0.377598603 0.415680352
+0.752688172 0.377246738 0.415354839
+0.753665689 0.376895296 0.415029326
+0.754643206 0.376544275 0.414703812
+0.755620723 0.376199443 0.414378299
+0.756598240 0.375858351 0.414052786
+0.757575758 0.375517684 0.413727273
+0.758553275 0.375177441 0.413401760
+0.759530792 0.374837621 0.413076246
+0.760508309 0.374498223 0.412750733
+0.761485826 0.374159247 0.412425220
+0.762463343 0.373820692 0.412099707
+0.763440860 0.373482557 0.411774194
+0.764418377 0.373144841 0.411448680
+0.765395894 0.372811329 0.411123167
+0.766373412 0.372483798 0.410797654
+0.767350929 0.372156688 0.410472141
+0.768328446 0.371829998 0.410146628
+0.769305963 0.371503728 0.409821114
+0.770283480 0.371177875 0.409495601
+0.771260997 0.370852441 0.409170088
+0.772238514 0.370527424 0.408844575
+0.773216031 0.370202822 0.408519062
+0.774193548 0.369878636 0.408193548
+0.775171065 0.369556545 0.407868035
+0.776148583 0.369242788 0.407542522
+0.777126100 0.368929447 0.407217009
+0.778103617 0.368616521 0.406891496
+0.779081134 0.368304008 0.406565982
+0.780058651 0.367991909 0.406240469
+0.781036168 0.367680221 0.405914956
+0.782013685 0.367368945 0.405589443
+0.782991202 0.367058080 0.405263930
+0.783968719 0.366747624 0.404938416
+0.784946237 0.366437577 0.404612903
+0.785923754 0.366137243 0.404287390
+0.786901271 0.365837858 0.403961877
+0.787878788 0.365538882 0.403636364
+0.788856305 0.365240312 0.403310850
+0.789833822 0.364942147 0.402985337
+0.790811339 0.364644388 0.402659824
+0.791788856 0.364347034 0.402334311
+0.792766373 0.364050082 0.402008798
+0.793743891 0.363753534 0.401683284
+0.794721408 0.363457387 0.401357771
+0.795698925 0.363168850 0.401032258
+0.796676442 0.362883585 0.400706745
+0.797653959 0.362598720 0.400381232
+0.798631476 0.362314253 0.400055718
+0.799608993 0.362030183 0.399730205
+0.800586510 0.361746510 0.399404692
+0.801564027 0.361463233 0.399079179
+0.802541544 0.361180350 0.398753666
+0.803519062 0.360897862 0.398428152
+0.804496579 0.360615767 0.398102639
+0.805474096 0.360339063 0.397777126
+0.806451613 0.360068060 0.397451613
+0.807429130 0.359797445 0.397126100
+0.808406647 0.359527218 0.396800587
+0.809384164 0.359257379 0.396475073
+0.810361681 0.358987926 0.396149560
+0.811339198 0.358718858 0.395824047
+0.812316716 0.358450176 0.395498534
+0.813294233 0.358181877 0.395173021
+0.814271750 0.357913962 0.394847507
+0.815249267 0.357649114 0.394521994
+0.816226784 0.357392487 0.394196481
+0.817204301 0.357136239 0.393870968
+0.818181818 0.356880367 0.393545455
+0.819159335 0.356624870 0.393219941
+0.820136852 0.356369749 0.392894428
+0.821114370 0.356115002 0.392568915
+0.822091887 0.355860628 0.392243402
+0.823069404 0.355606627 0.391917889
+0.824046921 0.355352998 0.391592375
+0.825024438 0.355100007 0.391266862
+0.826001955 0.354857853 0.390941349
+0.826979472 0.354616064 0.390615836
+0.827956989 0.354374639 0.390290323
+0.828934506 0.354133576 0.389964809
+0.829912023 0.353892876 0.389639296
+0.830889541 0.353652537 0.389313783
+0.831867058 0.353412559 0.388988270
+0.832844575 0.353172940 0.388662757
+0.833822092 0.352933680 0.388337243
+0.834799609 0.352694779 0.388011730
+0.835777126 0.352464927 0.387686217
+0.836754643 0.352237669 0.387360704
+0.837732160 0.352010761 0.387035191
+0.838709677 0.351784201 0.386709677
+0.839687195 0.351557989 0.386384164
+0.840664712 0.351332125 0.386058651
+0.841642229 0.351106607 0.385733138
+0.842619746 0.350881434 0.385407625
+0.843597263 0.350656607 0.385082111
+0.844574780 0.350432123 0.384756598
+0.845552297 0.350214269 0.384431085
+0.846529814 0.350001593 0.384105572
+0.847507331 0.349789250 0.383780059
+0.848484848 0.349577241 0.383454545
+0.849462366 0.349365564 0.383129032
+0.850439883 0.349154220 0.382803519
+0.851417400 0.348943206 0.382478006
+0.852394917 0.348732523 0.382152493
+0.853372434 0.348522169 0.381826979
+0.854349951 0.348312145 0.381501466
+0.855327468 0.348106237 0.381175953
+0.856304985 0.347908171 0.380850440
+0.857282502 0.347710423 0.380524927
+0.858260020 0.347512992 0.380199413
+0.859237537 0.347315877 0.379873900
+0.860215054 0.347119078 0.379548387
+0.861192571 0.346922593 0.379222874
+0.862170088 0.346726422 0.378897361
+0.863147605 0.346530564 0.378571848
+0.864125122 0.346335018 0.378246334
+0.865102639 0.346140990 0.377920821
+0.866080156 0.345957546 0.377595308
+0.867057674 0.345774402 0.377269795
+0.868035191 0.345591557 0.376944282
+0.869012708 0.345409010 0.376618768
+0.869990225 0.345226762 0.376293255
+0.870967742 0.345044810 0.375967742
+0.871945259 0.344863155 0.375642229
+0.872922776 0.344681795 0.375316716
+0.873900293 0.344500730 0.374991202
+0.874877810 0.344319959 0.374665689
+0.875855327 0.344149671 0.374340176
+0.876832845 0.343981121 0.374014663
+0.877810362 0.343812851 0.373689150
+0.878787879 0.343644861 0.373363636
+0.879765396 0.343477150 0.373038123
+0.880742913 0.343309718 0.372712610
+0.881720430 0.343142563 0.372387097
+0.882697947 0.342975685 0.372061584
+0.883675464 0.342809084 0.371736070
+0.884652981 0.342642758 0.371410557
+0.885630499 0.342484320 0.371085044
+0.886608016 0.342330335 0.370759531
+0.887585533 0.342176611 0.370434018
+0.888563050 0.342023148 0.370108504
+0.889540567 0.341869943 0.369782991
+0.890518084 0.341716998 0.369457478
+0.891495601 0.341564311 0.369131965
+0.892473118 0.341411881 0.368806452
+0.893450635 0.341259709 0.368480938
+0.894428152 0.341107792 0.368155425
+0.895405670 0.340961091 0.367829912
+0.896383187 0.340821627 0.367504399
+0.897360704 0.340682403 0.367178886
+0.898338221 0.340543418 0.366853372
+0.899315738 0.340404672 0.366527859
+0.900293255 0.340266165 0.366202346
+0.901270772 0.340127896 0.365876833
+0.902248289 0.339989864 0.365551320
+0.903225806 0.339852068 0.365225806
+0.904203324 0.339714508 0.364900293
+0.905180841 0.339579421 0.364574780
+0.906158358 0.339454415 0.364249267
+0.907135875 0.339329627 0.363923754
+0.908113392 0.339205058 0.363598240
+0.909090909 0.339080706 0.363272727
+0.910068426 0.338956572 0.362947214
+0.911045943 0.338832654 0.362621701
+0.912023460 0.338708952 0.362296188
+0.913000978 0.338585466 0.361970674
+0.913978495 0.338462194 0.361645161
+0.914956012 0.338339137 0.361319648
+0.915933529 0.338227961 0.360994135
+0.916911046 0.338117532 0.360668622
+0.917888563 0.338007299 0.360343109
+0.918866080 0.337897261 0.360017595
+0.919843597 0.337787419 0.359692082
+0.920821114 0.337677771 0.359366569
+0.921798631 0.337568317 0.359041056
+0.922776149 0.337459057 0.358715543
+0.923753666 0.337349989 0.358390029
+0.924731183 0.337241115 0.358064516
+0.925708700 0.337141380 0.357739003
+0.926686217 0.337045215 0.357413490
+0.927663734 0.336949224 0.357087977
+0.928641251 0.336853406 0.356762463
+0.929618768 0.336757760 0.356436950
+0.930596285 0.336662286 0.356111437
+0.931573803 0.336566984 0.355785924
+0.932551320 0.336471852 0.355460411
+0.933528837 0.336376891 0.355134897
+0.934506354 0.336282100 0.354809384
+0.935483871 0.336193646 0.354483871
+0.936461388 0.336111639 0.354158358
+0.937438905 0.336029782 0.353832845
+0.938416422 0.335948074 0.353507331
+0.939393939 0.335866515 0.353181818
+0.940371457 0.335785105 0.352856305
+0.941348974 0.335703844 0.352530792
+0.942326491 0.335622730 0.352205279
+0.943304008 0.335541763 0.351879765
+0.944281525 0.335460944 0.351554252
+0.945259042 0.335383602 0.351228739
+0.946236559 0.335315631 0.350903226
+0.947214076 0.335247787 0.350577713
+0.948191593 0.335180068 0.350252199
+0.949169110 0.335112475 0.349926686
+0.950146628 0.335045006 0.349601173
+0.951124145 0.334977661 0.349275660
+0.952101662 0.334910441 0.348950147
+0.953079179 0.334843345 0.348624633
+0.954056696 0.334776372 0.348299120
+0.955034213 0.334709966 0.347973607
+0.956011730 0.334655899 0.347648094
+0.956989247 0.334601934 0.347322581
+0.957966764 0.334548070 0.346997067
+0.958944282 0.334494307 0.346671554
+0.959921799 0.334440645 0.346346041
+0.960899316 0.334387083 0.346020528
+0.961876833 0.334333620 0.345695015
+0.962854350 0.334280258 0.345369501
+0.963831867 0.334226995 0.345043988
+0.964809384 0.334173831 0.344718475
+0.965786901 0.334131034 0.344392962
+0.966764418 0.334090804 0.344067449
+0.967741935 0.334050649 0.343741935
+0.968719453 0.334010571 0.343416422
+0.969696970 0.333970568 0.343090909
+0.970674487 0.333930642 0.342765396
+0.971652004 0.333890791 0.342439883
+0.972629521 0.333851014 0.342114370
+0.973607038 0.333811314 0.341788856
+0.974584555 0.333771687 0.341463343
+0.975562072 0.333739521 0.341137830
+0.976539589 0.333712869 0.340812317
+0.977517107 0.333686268 0.340486804
+0.978494624 0.333659718 0.340161290
+0.979472141 0.333633219 0.339835777
+0.980449658 0.333606771 0.339510264
+0.981427175 0.333580374 0.339184751
+0.982404692 0.333554026 0.338859238
+0.983382209 0.333527729 0.338533724
+0.984359726 0.333501482 0.338208211
+0.985337243 0.333479745 0.337882698
+0.986314761 0.333466506 0.337557185
+0.987292278 0.333453293 0.337231672
+0.988269795 0.333440106 0.336906158
+0.989247312 0.333426944 0.336580645
+0.990224829 0.333413807 0.336255132
+0.991202346 0.333400697 0.335929619
+0.992179863 0.333387611 0.335604106
+0.993157380 0.333374550 0.335278592
+0.994134897 0.333361515 0.334953079
+0.995112414 0.333350000 0.334627566
+0.996089932 0.333350000 0.334302053
+0.997067449 0.333350000 0.333976540
+0.998044966 0.333350000 0.333651026
+0.999022483 0.333350000 0.333325513
+1.000000000 0.333350000 0.333000000
diff --git a/examples/hybrid/ObstacleAvoidance.fll b/examples/hybrid/ObstacleAvoidance.fll
new file mode 100644
index 0000000..970221b
--- /dev/null
+++ b/examples/hybrid/ObstacleAvoidance.fll
@@ -0,0 +1,43 @@
+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
+OutputVariable: tsSteer
+ enabled: true
+ range: 0.000 1.000
+ lock-range: false
+ aggregation: Maximum
+ defuzzifier: WeightedAverage Automatic
+ default: nan
+ lock-previous: false
+ term: left Constant 0.333
+ term: right Constant 0.666
+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
+RuleBlock: takagiSugeno
+ enabled: true
+ conjunction: none
+ disjunction: none
+ implication: none
+ activation: General
+ rule: if obstacle is left then tsSteer is right
+ rule: if obstacle is right then tsSteer is left \ No newline at end of file
diff --git a/examples/hybrid/ObstacleAvoidance.java b/examples/hybrid/ObstacleAvoidance.java
new file mode 100644
index 0000000..8196670
--- /dev/null
+++ b/examples/hybrid/ObstacleAvoidance.java
@@ -0,0 +1,86 @@
+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);
+
+OutputVariable tsSteer = new OutputVariable();
+tsSteer.setName("tsSteer");
+tsSteer.setDescription("");
+tsSteer.setEnabled(true);
+tsSteer.setRange(0.000, 1.000);
+tsSteer.setLockValueInRange(false);
+tsSteer.setAggregation(new Maximum());
+tsSteer.setDefuzzifier(new WeightedAverage("Automatic"));
+tsSteer.setDefaultValue(Double.NaN);
+tsSteer.setLockPreviousValue(false);
+tsSteer.addTerm(new Constant("left", 0.333));
+tsSteer.addTerm(new Constant("right", 0.666));
+engine.addOutputVariable(tsSteer);
+
+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);
+
+RuleBlock takagiSugeno = new RuleBlock();
+takagiSugeno.setName("takagiSugeno");
+takagiSugeno.setDescription("");
+takagiSugeno.setEnabled(true);
+takagiSugeno.setConjunction(null);
+takagiSugeno.setDisjunction(null);
+takagiSugeno.setImplication(null);
+takagiSugeno.setActivation(new General());
+takagiSugeno.addRule(Rule.parse("if obstacle is left then tsSteer is right", engine));
+takagiSugeno.addRule(Rule.parse("if obstacle is right then tsSteer is left", engine));
+engine.addRuleBlock(takagiSugeno);
+
+
+}
+}
diff --git a/examples/hybrid/ObstacleAvoidance.pdf b/examples/hybrid/ObstacleAvoidance.pdf
new file mode 100644
index 0000000..ad74e68
--- /dev/null
+++ b/examples/hybrid/ObstacleAvoidance.pdf
Binary files differ
diff --git a/examples/hybrid/tipper.R b/examples/hybrid/tipper.R
new file mode 100644
index 0000000..ba11351
--- /dev/null
+++ b/examples/hybrid/tipper.R
@@ -0,0 +1,109 @@
+#Code automatically generated with fuzzylite 6.0.
+
+library(ggplot2);
+
+engine.name = "tipper"
+engine.description = "(service and food) -> (tip)"
+engine.fll = "Engine: tipper
+description: (service and food) -> (tip)
+InputVariable: service
+ description: quality of service
+ enabled: true
+ range: 0.000 10.000
+ lock-range: true
+ term: poor Trapezoid 0.000 0.000 2.500 5.000
+ term: good Triangle 2.500 5.000 7.500
+ term: excellent Trapezoid 5.000 7.500 10.000 10.000
+InputVariable: food
+ description: quality of food
+ enabled: true
+ range: 0.000 10.000
+ lock-range: true
+ term: rancid Trapezoid 0.000 0.000 2.500 7.500
+ term: delicious Trapezoid 2.500 7.500 10.000 10.000
+OutputVariable: mTip
+ description: tip based on Mamdani inference
+ enabled: true
+ range: 0.000 30.000
+ lock-range: false
+ aggregation: Maximum
+ defuzzifier: Centroid 100
+ default: nan
+ lock-previous: false
+ term: cheap Triangle 0.000 5.000 10.000
+ term: average Triangle 10.000 15.000 20.000
+ term: generous Triangle 20.000 25.000 30.000
+OutputVariable: tsTip
+ description: tip based on Takagi-Sugeno inference
+ enabled: true
+ range: 0.000 30.000
+ lock-range: false
+ aggregation: none
+ defuzzifier: WeightedAverage TakagiSugeno
+ default: nan
+ lock-previous: false
+ term: cheap Constant 5.000
+ term: average Constant 15.000
+ term: generous Constant 25.000
+RuleBlock: mamdani
+ description: Mamdani inference
+ enabled: true
+ conjunction: AlgebraicProduct
+ disjunction: AlgebraicSum
+ implication: Minimum
+ activation: General
+ rule: if service is poor or food is rancid then mTip is cheap
+ rule: if service is good then mTip is average
+ rule: if service is excellent or food is delicious then mTip is generous with 0.5
+ rule: if service is excellent and food is delicious then mTip is generous with 1.0
+RuleBlock: takagiSugeno
+ description: Takagi-Sugeno inference
+ enabled: true
+ conjunction: AlgebraicProduct
+ disjunction: AlgebraicSum
+ implication: none
+ activation: General
+ rule: if service is poor or food is rancid then tsTip is cheap
+ rule: if service is good then tsTip is average
+ rule: if service is excellent or food is delicious then tsTip is generous with 0.5
+ rule: if service is excellent and food is delicious then tsTip is generous with 1.0"
+
+engine.fldFile = "tipper.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(service, food)) +
+ geom_tile(aes(fill=mTip)) +
+ scale_fill_gradient(low="yellow", high="red") +
+ stat_contour(aes(x=service, y=food, z=mTip), color="black") +
+ ggtitle("(service, food) = mTip")
+
+engine.plot.i2i1_o1 = ggplot(engine.df, aes(food, service)) +
+ geom_tile(aes(fill=mTip)) +
+ scale_fill_gradient(low="yellow", high="red") +
+ stat_contour(aes(x=food, y=service, z=mTip), color="black") +
+ ggtitle("(food, service) = mTip")
+
+engine.plot.i1i2_o2 = ggplot(engine.df, aes(service, food)) +
+ geom_tile(aes(fill=tsTip)) +
+ scale_fill_gradient(low="yellow", high="red") +
+ stat_contour(aes(x=service, y=food, z=tsTip), color="black") +
+ ggtitle("(service, food) = tsTip")
+
+engine.plot.i2i1_o2 = ggplot(engine.df, aes(food, service)) +
+ geom_tile(aes(fill=tsTip)) +
+ scale_fill_gradient(low="yellow", high="red") +
+ stat_contour(aes(x=food, y=service, z=tsTip), color="black") +
+ ggtitle("(food, service) = tsTip")
+
+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/hybrid/tipper.cpp b/examples/hybrid/tipper.cpp
new file mode 100644
index 0000000..57bcc78
--- /dev/null
+++ b/examples/hybrid/tipper.cpp
@@ -0,0 +1,92 @@
+#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("tipper");
+engine->setDescription("(service and food) -> (tip)");
+
+InputVariable* service = new InputVariable;
+service->setName("service");
+service->setDescription("quality of service");
+service->setEnabled(true);
+service->setRange(0.000, 10.000);
+service->setLockValueInRange(true);
+service->addTerm(new Trapezoid("poor", 0.000, 0.000, 2.500, 5.000));
+service->addTerm(new Triangle("good", 2.500, 5.000, 7.500));
+service->addTerm(new Trapezoid("excellent", 5.000, 7.500, 10.000, 10.000));
+engine->addInputVariable(service);
+
+InputVariable* food = new InputVariable;
+food->setName("food");
+food->setDescription("quality of food");
+food->setEnabled(true);
+food->setRange(0.000, 10.000);
+food->setLockValueInRange(true);
+food->addTerm(new Trapezoid("rancid", 0.000, 0.000, 2.500, 7.500));
+food->addTerm(new Trapezoid("delicious", 2.500, 7.500, 10.000, 10.000));
+engine->addInputVariable(food);
+
+OutputVariable* mTip = new OutputVariable;
+mTip->setName("mTip");
+mTip->setDescription("tip based on Mamdani inference");
+mTip->setEnabled(true);
+mTip->setRange(0.000, 30.000);
+mTip->setLockValueInRange(false);
+mTip->setAggregation(new Maximum);
+mTip->setDefuzzifier(new Centroid(100));
+mTip->setDefaultValue(fl::nan);
+mTip->setLockPreviousValue(false);
+mTip->addTerm(new Triangle("cheap", 0.000, 5.000, 10.000));
+mTip->addTerm(new Triangle("average", 10.000, 15.000, 20.000));
+mTip->addTerm(new Triangle("generous", 20.000, 25.000, 30.000));
+engine->addOutputVariable(mTip);
+
+OutputVariable* tsTip = new OutputVariable;
+tsTip->setName("tsTip");
+tsTip->setDescription("tip based on Takagi-Sugeno inference");
+tsTip->setEnabled(true);
+tsTip->setRange(0.000, 30.000);
+tsTip->setLockValueInRange(false);
+tsTip->setAggregation(fl::null);
+tsTip->setDefuzzifier(new WeightedAverage("TakagiSugeno"));
+tsTip->setDefaultValue(fl::nan);
+tsTip->setLockPreviousValue(false);
+tsTip->addTerm(new Constant("cheap", 5.000));
+tsTip->addTerm(new Constant("average", 15.000));
+tsTip->addTerm(new Constant("generous", 25.000));
+engine->addOutputVariable(tsTip);
+
+RuleBlock* mamdani = new RuleBlock;
+mamdani->setName("mamdani");
+mamdani->setDescription("Mamdani inference");
+mamdani->setEnabled(true);
+mamdani->setConjunction(new AlgebraicProduct);
+mamdani->setDisjunction(new AlgebraicSum);
+mamdani->setImplication(new Minimum);
+mamdani->setActivation(new General);
+mamdani->addRule(Rule::parse("if service is poor or food is rancid then mTip is cheap", engine));
+mamdani->addRule(Rule::parse("if service is good then mTip is average", engine));
+mamdani->addRule(Rule::parse("if service is excellent or food is delicious then mTip is generous with 0.5", engine));
+mamdani->addRule(Rule::parse("if service is excellent and food is delicious then mTip is generous with 1.0", engine));
+engine->addRuleBlock(mamdani);
+
+RuleBlock* takagiSugeno = new RuleBlock;
+takagiSugeno->setName("takagiSugeno");
+takagiSugeno->setDescription("Takagi-Sugeno inference");
+takagiSugeno->setEnabled(true);
+takagiSugeno->setConjunction(new AlgebraicProduct);
+takagiSugeno->setDisjunction(new AlgebraicSum);
+takagiSugeno->setImplication(fl::null);
+takagiSugeno->setActivation(new General);
+takagiSugeno->addRule(Rule::parse("if service is poor or food is rancid then tsTip is cheap", engine));
+takagiSugeno->addRule(Rule::parse("if service is good then tsTip is average", engine));
+takagiSugeno->addRule(Rule::parse("if service is excellent or food is delicious then tsTip is generous with 0.5", engine));
+takagiSugeno->addRule(Rule::parse("if service is excellent and food is delicious then tsTip is generous with 1.0", engine));
+engine->addRuleBlock(takagiSugeno);
+
+
+}
diff --git a/examples/hybrid/tipper.fcl b/examples/hybrid/tipper.fcl
new file mode 100644
index 0000000..299dbb8
--- /dev/null
+++ b/examples/hybrid/tipper.fcl
@@ -0,0 +1,66 @@
+//Code automatically generated with fuzzylite 6.0.
+
+FUNCTION_BLOCK tipper
+
+VAR_INPUT
+ service: REAL;
+ food: REAL;
+END_VAR
+
+VAR_OUTPUT
+ mTip: REAL;
+ tsTip: REAL;
+END_VAR
+
+FUZZIFY service
+ RANGE := (0.000 .. 10.000);
+ TERM poor := Trapezoid 0.000 0.000 2.500 5.000;
+ TERM good := Triangle 2.500 5.000 7.500;
+ TERM excellent := Trapezoid 5.000 7.500 10.000 10.000;
+END_FUZZIFY
+
+FUZZIFY food
+ RANGE := (0.000 .. 10.000);
+ TERM rancid := Trapezoid 0.000 0.000 2.500 7.500;
+ TERM delicious := Trapezoid 2.500 7.500 10.000 10.000;
+END_FUZZIFY
+
+DEFUZZIFY mTip
+ RANGE := (0.000 .. 30.000);
+ TERM cheap := Triangle 0.000 5.000 10.000;
+ TERM average := Triangle 10.000 15.000 20.000;
+ TERM generous := Triangle 20.000 25.000 30.000;
+ METHOD : COG;
+ ACCU : MAX;
+ DEFAULT := nan;
+END_DEFUZZIFY
+
+DEFUZZIFY tsTip
+ RANGE := (0.000 .. 30.000);
+ TERM cheap := 5.000;
+ TERM average := 15.000;
+ TERM generous := 25.000;
+ METHOD : COGS;
+ DEFAULT := nan;
+END_DEFUZZIFY
+
+RULEBLOCK mamdani
+ AND : PROD;
+ OR : ASUM;
+ ACT : MIN;
+ RULE 1 : if service is poor or food is rancid then mTip is cheap
+ RULE 2 : if service is good then mTip is average
+ RULE 3 : if service is excellent or food is delicious then mTip is generous with 0.5
+ RULE 4 : if service is excellent and food is delicious then mTip is generous with 1.0
+END_RULEBLOCK
+
+RULEBLOCK takagiSugeno
+ AND : PROD;
+ OR : ASUM;
+ RULE 1 : if service is poor or food is rancid then tsTip is cheap
+ RULE 2 : if service is good then tsTip is average
+ RULE 3 : if service is excellent or food is delicious then tsTip is generous with 0.5
+ RULE 4 : if service is excellent and food is delicious then tsTip is generous with 1.0
+END_RULEBLOCK
+
+END_FUNCTION_BLOCK
diff --git a/examples/hybrid/tipper.fis b/examples/hybrid/tipper.fis
new file mode 100644
index 0000000..abd850a
--- /dev/null
+++ b/examples/hybrid/tipper.fis
@@ -0,0 +1,57 @@
+#Code automatically generated with fuzzylite 6.0.
+
+[System]
+Name='tipper'
+Type='hybrid'
+Version=6.0
+NumInputs=2
+NumOutputs=2
+NumRules=8
+AndMethod='prod'
+OrMethod='probor'
+ImpMethod='min'
+AggMethod='max'
+DefuzzMethod='centroid'
+
+[Input1]
+Name='service'
+Range=[0.000 10.000]
+NumMFs=3
+MF1='poor':'trapmf',[0.000 0.000 2.500 5.000]
+MF2='good':'trimf',[2.500 5.000 7.500]
+MF3='excellent':'trapmf',[5.000 7.500 10.000 10.000]
+
+[Input2]
+Name='food'
+Range=[0.000 10.000]
+NumMFs=2
+MF1='rancid':'trapmf',[0.000 0.000 2.500 7.500]
+MF2='delicious':'trapmf',[2.500 7.500 10.000 10.000]
+
+[Output1]
+Name='mTip'
+Range=[0.000 30.000]
+NumMFs=3
+MF1='cheap':'trimf',[0.000 5.000 10.000]
+MF2='average':'trimf',[10.000 15.000 20.000]
+MF3='generous':'trimf',[20.000 25.000 30.000]
+
+[Output2]
+Name='tsTip'
+Range=[0.000 30.000]
+NumMFs=3
+MF1='cheap':'constant',[5.000]
+MF2='average':'constant',[15.000]
+MF3='generous':'constant',[25.000]
+
+[Rules]
+# RuleBlock mamdani
+1.000 1.000 , 1.000 0.000 (1.000) : 2
+2.000 0.000 , 2.000 0.000 (1.000) : 1
+3.000 2.000 , 3.000 0.000 (0.500) : 2
+3.000 2.000 , 3.000 0.000 (1.000) : 1
+# RuleBlock takagiSugeno
+1.000 1.000 , 0.000 1.000 (1.000) : 2
+2.000 0.000 , 0.000 2.000 (1.000) : 1
+3.000 2.000 , 0.000 3.000 (0.500) : 2
+3.000 2.000 , 0.000 3.000 (1.000) : 1
diff --git a/examples/hybrid/tipper.fld b/examples/hybrid/tipper.fld
new file mode 100644
index 0000000..7a8e29d
--- /dev/null
+++ b/examples/hybrid/tipper.fld
@@ -0,0 +1,1025 @@
+service food mTip tsTip
+0.000000000 0.000000000 4.998950210 5.000000000
+0.000000000 0.322580645 4.998950210 5.000000000
+0.000000000 0.645161290 4.998950210 5.000000000
+0.000000000 0.967741935 4.998950210 5.000000000
+0.000000000 1.290322581 4.998950210 5.000000000
+0.000000000 1.612903226 4.998950210 5.000000000
+0.000000000 1.935483871 4.998950210 5.000000000
+0.000000000 2.258064516 4.998950210 5.000000000
+0.000000000 2.580645161 5.314026132 5.160000000
+0.000000000 2.903225806 6.467756859 5.775193798
+0.000000000 3.225806452 7.452789474 6.353383459
+0.000000000 3.548387097 8.316896407 6.897810219
+0.000000000 3.870967742 9.067963620 7.411347518
+0.000000000 4.193548387 9.734585733 7.896551724
+0.000000000 4.516129032 10.322182298 8.355704698
+0.000000000 4.838709677 10.846060307 8.790849673
+0.000000000 5.161290323 11.316227524 9.203821656
+0.000000000 5.483870968 11.733949841 9.596273292
+0.000000000 5.806451613 12.115369655 9.969696970
+0.000000000 6.129032258 12.452152483 10.325443787
+0.000000000 6.451612903 12.762450565 10.664739884
+0.000000000 6.774193548 13.037607639 10.988700565
+0.000000000 7.096774194 13.291172539 11.298342541
+0.000000000 7.419354839 13.516499633 11.594594595
+0.000000000 7.741935484 13.570706205 11.666666667
+0.000000000 8.064516129 13.570706205 11.666666667
+0.000000000 8.387096774 13.570706205 11.666666667
+0.000000000 8.709677419 13.570706205 11.666666667
+0.000000000 9.032258065 13.570706205 11.666666667
+0.000000000 9.354838710 13.570706205 11.666666667
+0.000000000 9.677419355 13.570706205 11.666666667
+0.000000000 10.000000000 13.570706205 11.666666667
+0.322580645 0.000000000 4.998950210 5.000000000
+0.322580645 0.322580645 4.998950210 5.000000000
+0.322580645 0.645161290 4.998950210 5.000000000
+0.322580645 0.967741935 4.998950210 5.000000000
+0.322580645 1.290322581 4.998950210 5.000000000
+0.322580645 1.612903226 4.998950210 5.000000000
+0.322580645 1.935483871 4.998950210 5.000000000
+0.322580645 2.258064516 4.998950210 5.000000000
+0.322580645 2.580645161 5.314026132 5.160000000
+0.322580645 2.903225806 6.467756859 5.775193798
+0.322580645 3.225806452 7.452789474 6.353383459
+0.322580645 3.548387097 8.316896407 6.897810219
+0.322580645 3.870967742 9.067963620 7.411347518
+0.322580645 4.193548387 9.734585733 7.896551724
+0.322580645 4.516129032 10.322182298 8.355704698
+0.322580645 4.838709677 10.846060307 8.790849673
+0.322580645 5.161290323 11.316227524 9.203821656
+0.322580645 5.483870968 11.733949841 9.596273292
+0.322580645 5.806451613 12.115369655 9.969696970
+0.322580645 6.129032258 12.452152483 10.325443787
+0.322580645 6.451612903 12.762450565 10.664739884
+0.322580645 6.774193548 13.037607639 10.988700565
+0.322580645 7.096774194 13.291172539 11.298342541
+0.322580645 7.419354839 13.516499633 11.594594595
+0.322580645 7.741935484 13.570706205 11.666666667
+0.322580645 8.064516129 13.570706205 11.666666667
+0.322580645 8.387096774 13.570706205 11.666666667
+0.322580645 8.709677419 13.570706205 11.666666667
+0.322580645 9.032258065 13.570706205 11.666666667
+0.322580645 9.354838710 13.570706205 11.666666667
+0.322580645 9.677419355 13.570706205 11.666666667
+0.322580645 10.000000000 13.570706205 11.666666667
+0.645161290 0.000000000 4.998950210 5.000000000
+0.645161290 0.322580645 4.998950210 5.000000000
+0.645161290 0.645161290 4.998950210 5.000000000
+0.645161290 0.967741935 4.998950210 5.000000000
+0.645161290 1.290322581 4.998950210 5.000000000
+0.645161290 1.612903226 4.998950210 5.000000000
+0.645161290 1.935483871 4.998950210 5.000000000
+0.645161290 2.258064516 4.998950210 5.000000000
+0.645161290 2.580645161 5.314026132 5.160000000
+0.645161290 2.903225806 6.467756859 5.775193798
+0.645161290 3.225806452 7.452789474 6.353383459
+0.645161290 3.548387097 8.316896407 6.897810219
+0.645161290 3.870967742 9.067963620 7.411347518
+0.645161290 4.193548387 9.734585733 7.896551724
+0.645161290 4.516129032 10.322182298 8.355704698
+0.645161290 4.838709677 10.846060307 8.790849673
+0.645161290 5.161290323 11.316227524 9.203821656
+0.645161290 5.483870968 11.733949841 9.596273292
+0.645161290 5.806451613 12.115369655 9.969696970
+0.645161290 6.129032258 12.452152483 10.325443787
+0.645161290 6.451612903 12.762450565 10.664739884
+0.645161290 6.774193548 13.037607639 10.988700565
+0.645161290 7.096774194 13.291172539 11.298342541
+0.645161290 7.419354839 13.516499633 11.594594595
+0.645161290 7.741935484 13.570706205 11.666666667
+0.645161290 8.064516129 13.570706205 11.666666667
+0.645161290 8.387096774 13.570706205 11.666666667
+0.645161290 8.709677419 13.570706205 11.666666667
+0.645161290 9.032258065 13.570706205 11.666666667
+0.645161290 9.354838710 13.570706205 11.666666667
+0.645161290 9.677419355 13.570706205 11.666666667
+0.645161290 10.000000000 13.570706205 11.666666667
+0.967741935 0.000000000 4.998950210 5.000000000
+0.967741935 0.322580645 4.998950210 5.000000000
+0.967741935 0.645161290 4.998950210 5.000000000
+0.967741935 0.967741935 4.998950210 5.000000000
+0.967741935 1.290322581 4.998950210 5.000000000
+0.967741935 1.612903226 4.998950210 5.000000000
+0.967741935 1.935483871 4.998950210 5.000000000
+0.967741935 2.258064516 4.998950210 5.000000000
+0.967741935 2.580645161 5.314026132 5.160000000
+0.967741935 2.903225806 6.467756859 5.775193798
+0.967741935 3.225806452 7.452789474 6.353383459
+0.967741935 3.548387097 8.316896407 6.897810219
+0.967741935 3.870967742 9.067963620 7.411347518
+0.967741935 4.193548387 9.734585733 7.896551724
+0.967741935 4.516129032 10.322182298 8.355704698
+0.967741935 4.838709677 10.846060307 8.790849673
+0.967741935 5.161290323 11.316227524 9.203821656
+0.967741935 5.483870968 11.733949841 9.596273292
+0.967741935 5.806451613 12.115369655 9.969696970
+0.967741935 6.129032258 12.452152483 10.325443787
+0.967741935 6.451612903 12.762450565 10.664739884
+0.967741935 6.774193548 13.037607639 10.988700565
+0.967741935 7.096774194 13.291172539 11.298342541
+0.967741935 7.419354839 13.516499633 11.594594595
+0.967741935 7.741935484 13.570706205 11.666666667
+0.967741935 8.064516129 13.570706205 11.666666667
+0.967741935 8.387096774 13.570706205 11.666666667
+0.967741935 8.709677419 13.570706205 11.666666667
+0.967741935 9.032258065 13.570706205 11.666666667
+0.967741935 9.354838710 13.570706205 11.666666667
+0.967741935 9.677419355 13.570706205 11.666666667
+0.967741935 10.000000000 13.570706205 11.666666667
+1.290322581 0.000000000 4.998950210 5.000000000
+1.290322581 0.322580645 4.998950210 5.000000000
+1.290322581 0.645161290 4.998950210 5.000000000
+1.290322581 0.967741935 4.998950210 5.000000000
+1.290322581 1.290322581 4.998950210 5.000000000
+1.290322581 1.612903226 4.998950210 5.000000000
+1.290322581 1.935483871 4.998950210 5.000000000
+1.290322581 2.258064516 4.998950210 5.000000000
+1.290322581 2.580645161 5.314026132 5.160000000
+1.290322581 2.903225806 6.467756859 5.775193798
+1.290322581 3.225806452 7.452789474 6.353383459
+1.290322581 3.548387097 8.316896407 6.897810219
+1.290322581 3.870967742 9.067963620 7.411347518
+1.290322581 4.193548387 9.734585733 7.896551724
+1.290322581 4.516129032 10.322182298 8.355704698
+1.290322581 4.838709677 10.846060307 8.790849673
+1.290322581 5.161290323 11.316227524 9.203821656
+1.290322581 5.483870968 11.733949841 9.596273292
+1.290322581 5.806451613 12.115369655 9.969696970
+1.290322581 6.129032258 12.452152483 10.325443787
+1.290322581 6.451612903 12.762450565 10.664739884
+1.290322581 6.774193548 13.037607639 10.988700565
+1.290322581 7.096774194 13.291172539 11.298342541
+1.290322581 7.419354839 13.516499633 11.594594595
+1.290322581 7.741935484 13.570706205 11.666666667
+1.290322581 8.064516129 13.570706205 11.666666667
+1.290322581 8.387096774 13.570706205 11.666666667
+1.290322581 8.709677419 13.570706205 11.666666667
+1.290322581 9.032258065 13.570706205 11.666666667
+1.290322581 9.354838710 13.570706205 11.666666667
+1.290322581 9.677419355 13.570706205 11.666666667
+1.290322581 10.000000000 13.570706205 11.666666667
+1.612903226 0.000000000 4.998950210 5.000000000
+1.612903226 0.322580645 4.998950210 5.000000000
+1.612903226 0.645161290 4.998950210 5.000000000
+1.612903226 0.967741935 4.998950210 5.000000000
+1.612903226 1.290322581 4.998950210 5.000000000
+1.612903226 1.612903226 4.998950210 5.000000000
+1.612903226 1.935483871 4.998950210 5.000000000
+1.612903226 2.258064516 4.998950210 5.000000000
+1.612903226 2.580645161 5.314026132 5.160000000
+1.612903226 2.903225806 6.467756859 5.775193798
+1.612903226 3.225806452 7.452789474 6.353383459
+1.612903226 3.548387097 8.316896407 6.897810219
+1.612903226 3.870967742 9.067963620 7.411347518
+1.612903226 4.193548387 9.734585733 7.896551724
+1.612903226 4.516129032 10.322182298 8.355704698
+1.612903226 4.838709677 10.846060307 8.790849673
+1.612903226 5.161290323 11.316227524 9.203821656
+1.612903226 5.483870968 11.733949841 9.596273292
+1.612903226 5.806451613 12.115369655 9.969696970
+1.612903226 6.129032258 12.452152483 10.325443787
+1.612903226 6.451612903 12.762450565 10.664739884
+1.612903226 6.774193548 13.037607639 10.988700565
+1.612903226 7.096774194 13.291172539 11.298342541
+1.612903226 7.419354839 13.516499633 11.594594595
+1.612903226 7.741935484 13.570706205 11.666666667
+1.612903226 8.064516129 13.570706205 11.666666667
+1.612903226 8.387096774 13.570706205 11.666666667
+1.612903226 8.709677419 13.570706205 11.666666667
+1.612903226 9.032258065 13.570706205 11.666666667
+1.612903226 9.354838710 13.570706205 11.666666667
+1.612903226 9.677419355 13.570706205 11.666666667
+1.612903226 10.000000000 13.570706205 11.666666667
+1.935483871 0.000000000 4.998950210 5.000000000
+1.935483871 0.322580645 4.998950210 5.000000000
+1.935483871 0.645161290 4.998950210 5.000000000
+1.935483871 0.967741935 4.998950210 5.000000000
+1.935483871 1.290322581 4.998950210 5.000000000
+1.935483871 1.612903226 4.998950210 5.000000000
+1.935483871 1.935483871 4.998950210 5.000000000
+1.935483871 2.258064516 4.998950210 5.000000000
+1.935483871 2.580645161 5.314026132 5.160000000
+1.935483871 2.903225806 6.467756859 5.775193798
+1.935483871 3.225806452 7.452789474 6.353383459
+1.935483871 3.548387097 8.316896407 6.897810219
+1.935483871 3.870967742 9.067963620 7.411347518
+1.935483871 4.193548387 9.734585733 7.896551724
+1.935483871 4.516129032 10.322182298 8.355704698
+1.935483871 4.838709677 10.846060307 8.790849673
+1.935483871 5.161290323 11.316227524 9.203821656
+1.935483871 5.483870968 11.733949841 9.596273292
+1.935483871 5.806451613 12.115369655 9.969696970
+1.935483871 6.129032258 12.452152483 10.325443787
+1.935483871 6.451612903 12.762450565 10.664739884
+1.935483871 6.774193548 13.037607639 10.988700565
+1.935483871 7.096774194 13.291172539 11.298342541
+1.935483871 7.419354839 13.516499633 11.594594595
+1.935483871 7.741935484 13.570706205 11.666666667
+1.935483871 8.064516129 13.570706205 11.666666667
+1.935483871 8.387096774 13.570706205 11.666666667
+1.935483871 8.709677419 13.570706205 11.666666667
+1.935483871 9.032258065 13.570706205 11.666666667
+1.935483871 9.354838710 13.570706205 11.666666667
+1.935483871 9.677419355 13.570706205 11.666666667
+1.935483871 10.000000000 13.570706205 11.666666667
+2.258064516 0.000000000 4.998950210 5.000000000
+2.258064516 0.322580645 4.998950210 5.000000000
+2.258064516 0.645161290 4.998950210 5.000000000
+2.258064516 0.967741935 4.998950210 5.000000000
+2.258064516 1.290322581 4.998950210 5.000000000
+2.258064516 1.612903226 4.998950210 5.000000000
+2.258064516 1.935483871 4.998950210 5.000000000
+2.258064516 2.258064516 4.998950210 5.000000000
+2.258064516 2.580645161 5.314026132 5.160000000
+2.258064516 2.903225806 6.467756859 5.775193798
+2.258064516 3.225806452 7.452789474 6.353383459
+2.258064516 3.548387097 8.316896407 6.897810219
+2.258064516 3.870967742 9.067963620 7.411347518
+2.258064516 4.193548387 9.734585733 7.896551724
+2.258064516 4.516129032 10.322182298 8.355704698
+2.258064516 4.838709677 10.846060307 8.790849673
+2.258064516 5.161290323 11.316227524 9.203821656
+2.258064516 5.483870968 11.733949841 9.596273292
+2.258064516 5.806451613 12.115369655 9.969696970
+2.258064516 6.129032258 12.452152483 10.325443787
+2.258064516 6.451612903 12.762450565 10.664739884
+2.258064516 6.774193548 13.037607639 10.988700565
+2.258064516 7.096774194 13.291172539 11.298342541
+2.258064516 7.419354839 13.516499633 11.594594595
+2.258064516 7.741935484 13.570706205 11.666666667
+2.258064516 8.064516129 13.570706205 11.666666667
+2.258064516 8.387096774 13.570706205 11.666666667
+2.258064516 8.709677419 13.570706205 11.666666667
+2.258064516 9.032258065 13.570706205 11.666666667
+2.258064516 9.354838710 13.570706205 11.666666667
+2.258064516 9.677419355 13.570706205 11.666666667
+2.258064516 10.000000000 13.570706205 11.666666667
+2.580645161 0.000000000 5.592761972 5.312500000
+2.580645161 0.322580645 5.592761972 5.312500000
+2.580645161 0.645161290 5.592761972 5.312500000
+2.580645161 0.967741935 5.592761972 5.312500000
+2.580645161 1.290322581 5.592761972 5.312500000
+2.580645161 1.612903226 5.592761972 5.312500000
+2.580645161 1.935483871 5.592761972 5.312500000
+2.580645161 2.258064516 5.592761972 5.312500000
+2.580645161 2.580645161 5.880621907 5.465349012
+2.580645161 2.903225806 6.939232958 6.055190858
+2.580645161 3.225806452 7.848835301 6.612674391
+2.580645161 3.548387097 8.651174558 7.140391254
+2.580645161 3.870967742 9.351975577 7.640663528
+2.580645161 4.193548387 9.976796931 8.115577889
+2.580645161 4.516129032 10.530004073 8.567014703
+2.580645161 4.838709677 11.024934815 8.996672905
+2.580645161 5.161290323 11.470583404 9.406091371
+2.580645161 5.483870968 11.867640871 9.796667328
+2.580645161 5.806451613 12.231162308 10.169672290
+2.580645161 6.129032258 12.552900008 10.526265883
+2.580645161 6.451612903 12.849986938 10.867507886
+2.580645161 6.774193548 13.113962484 11.194368756
+2.580645161 7.096774194 13.357668633 11.507738837
+2.580645161 7.419354839 13.574618159 11.808436465
+2.580645161 7.741935484 13.626860714 11.881720430
+2.580645161 8.064516129 13.626860714 11.881720430
+2.580645161 8.387096774 13.626860714 11.881720430
+2.580645161 8.709677419 13.626860714 11.881720430
+2.580645161 9.032258065 13.626860714 11.881720430
+2.580645161 9.354838710 13.626860714 11.881720430
+2.580645161 9.677419355 13.626860714 11.881720430
+2.580645161 10.000000000 13.626860714 11.881720430
+2.903225806 0.000000000 7.283786709 6.388888889
+2.903225806 0.322580645 7.283786709 6.388888889
+2.903225806 0.645161290 7.283786709 6.388888889
+2.903225806 0.967741935 7.283786709 6.388888889
+2.903225806 1.290322581 7.283786709 6.388888889
+2.903225806 1.612903226 7.283786709 6.388888889
+2.903225806 1.935483871 7.283786709 6.388888889
+2.903225806 2.258064516 7.283786709 6.388888889
+2.903225806 2.580645161 7.499955755 6.520624303
+2.903225806 2.903225806 8.305212731 7.035456336
+2.903225806 3.225806452 9.011457616 7.531699979
+2.903225806 3.548387097 9.645097856 8.010344100
+2.903225806 3.870967742 10.207136722 8.472308650
+2.903225806 4.193548387 10.715739625 8.918450561
+2.903225806 4.516129032 11.172892280 9.349569052
+2.903225806 4.838709677 11.587921940 9.766410408
+2.903225806 5.161290323 11.967183067 10.169672290
+2.903225806 5.483870968 12.308758298 10.560007632
+2.903225806 5.806451613 12.624644763 10.938028169
+2.903225806 6.129032258 12.908650399 11.304307635
+2.903225806 6.451612903 13.174140812 11.659384671
+2.903225806 6.774193548 13.414725347 12.003765465
+2.903225806 7.096774194 13.639701953 12.337926161
+2.903225806 7.419354839 13.842390029 12.662315057
+2.903225806 7.741935484 13.891460681 12.741935484
+2.903225806 8.064516129 13.891460681 12.741935484
+2.903225806 8.387096774 13.891460681 12.741935484
+2.903225806 8.709677419 13.891460681 12.741935484
+2.903225806 9.032258065 13.891460681 12.741935484
+2.903225806 9.354838710 13.891460681 12.741935484
+2.903225806 9.677419355 13.891460681 12.741935484
+2.903225806 10.000000000 13.891460681 12.741935484
+3.225806452 0.000000000 8.314651325 7.250000000
+3.225806452 0.322580645 8.314651325 7.250000000
+3.225806452 0.645161290 8.314651325 7.250000000
+3.225806452 0.967741935 8.314651325 7.250000000
+3.225806452 1.290322581 8.314651325 7.250000000
+3.225806452 1.612903226 8.314651325 7.250000000
+3.225806452 1.935483871 8.314651325 7.250000000
+3.225806452 2.258064516 8.314651325 7.250000000
+3.225806452 2.580645161 8.491360774 7.368791474
+3.225806452 2.903225806 9.156409155 7.837810945
+3.225806452 3.225806452 9.746803244 8.297222769
+3.225806452 3.548387097 10.284138020 8.747319166
+3.225806452 3.870967742 10.769427894 9.188380622
+3.225806452 4.193548387 11.214534071 9.620676476
+3.225806452 4.516129032 11.619323393 10.044465468
+3.225806452 4.838709677 11.993033266 10.459996253
+3.225806452 5.161290323 12.340224927 10.867507886
+3.225806452 5.483870968 12.657043434 11.267230289
+3.225806452 5.806451613 12.956823683 11.659384671
+3.225806452 6.129032258 13.232890780 12.044183950
+3.225806452 6.451612903 13.493168128 12.421833125
+3.225806452 6.774193548 13.734211054 12.792529651
+3.225806452 7.096774194 13.966630648 13.156463778
+3.225806452 7.419354839 14.180445683 13.513818877
+3.225806452 7.741935484 14.232664470 13.602150538
+3.225806452 8.064516129 14.232664470 13.602150538
+3.225806452 8.387096774 14.232664470 13.602150538
+3.225806452 8.709677419 14.232664470 13.602150538
+3.225806452 9.032258065 14.232664470 13.602150538
+3.225806452 9.354838710 14.232664470 13.602150538
+3.225806452 9.677419355 14.232664470 13.602150538
+3.225806452 10.000000000 14.232664470 13.602150538
+3.548387097 0.000000000 8.985030201 7.954545455
+3.548387097 0.322580645 8.985030201 7.954545455
+3.548387097 0.645161290 8.985030201 7.954545455
+3.548387097 0.967741935 8.985030201 7.954545455
+3.548387097 1.290322581 8.985030201 7.954545455
+3.548387097 1.612903226 8.985030201 7.954545455
+3.548387097 1.935483871 8.985030201 7.954545455
+3.548387097 2.258064516 8.985030201 7.954545455
+3.548387097 2.580645161 9.137812976 8.065372642
+3.548387097 2.903225806 9.717703976 8.506659369
+3.548387097 3.225806452 10.238351404 8.944737320
+3.548387097 3.548387097 10.720683414 9.379641369
+3.548387097 3.870967742 11.160003933 9.811405883
+3.548387097 4.193548387 11.571126024 10.240064737
+3.548387097 4.516129032 11.950914620 10.665651317
+3.548387097 4.838709677 12.307875007 11.088198536
+3.548387097 5.161290323 12.645356184 11.507738837
+3.548387097 5.483870968 12.960313946 11.924304201
+3.548387097 5.806451613 13.266478726 12.337926161
+3.548387097 6.129032258 13.551156560 12.748635804
+3.548387097 6.451612903 13.831439195 13.156463778
+3.548387097 6.774193548 14.095225315 13.561440308
+3.548387097 7.096774194 14.356367336 13.963595192
+3.548387097 7.419354839 14.605377743 14.362957820
+3.548387097 7.741935484 14.667921566 14.462365591
+3.548387097 8.064516129 14.667921566 14.462365591
+3.548387097 8.387096774 14.667921566 14.462365591
+3.548387097 8.709677419 14.667921566 14.462365591
+3.548387097 9.032258065 14.667921566 14.462365591
+3.548387097 9.354838710 14.667921566 14.462365591
+3.548387097 9.677419355 14.667921566 14.462365591
+3.548387097 10.000000000 14.667921566 14.462365591
+3.870967742 0.000000000 9.432393054 8.541666667
+3.870967742 0.322580645 9.432393054 8.541666667
+3.870967742 0.645161290 9.432393054 8.541666667
+3.870967742 0.967741935 9.432393054 8.541666667
+3.870967742 1.290322581 9.432393054 8.541666667
+3.870967742 1.612903226 9.432393054 8.541666667
+3.870967742 1.935483871 9.432393054 8.541666667
+3.870967742 2.258064516 9.432393054 8.541666667
+3.870967742 2.580645161 9.569971811 8.647671878
+3.870967742 2.903225806 10.095984031 9.072764022
+3.870967742 3.225806452 10.575695895 9.499578059
+3.870967742 3.548387097 11.024096907 9.928124472
+3.870967742 3.870967742 11.442347059 10.358413828
+3.870967742 4.193548387 11.836700132 10.790456784
+3.870967742 4.516129032 12.211639878 11.224264080
+3.870967742 4.838709677 12.568786873 11.659846547
+3.870967742 5.161290323 12.913995839 12.097215103
+3.870967742 5.483870968 13.247084242 12.536380757
+3.870967742 5.806451613 13.573370226 12.977354606
+3.870967742 6.129032258 13.891165979 13.420147843
+3.870967742 6.451612903 14.206686830 13.864771748
+3.870967742 6.774193548 14.518152082 14.311237701
+3.870967742 7.096774194 14.833264590 14.759557170
+3.870967742 7.419354839 15.145455566 15.209741723
+3.870967742 7.741935484 15.224455159 15.322580645
+3.870967742 8.064516129 15.224455159 15.322580645
+3.870967742 8.387096774 15.224455159 15.322580645
+3.870967742 8.709677419 15.224455159 15.322580645
+3.870967742 9.032258065 15.224455159 15.322580645
+3.870967742 9.354838710 15.224455159 15.322580645
+3.870967742 9.677419355 15.224455159 15.322580645
+3.870967742 10.000000000 15.224455159 15.322580645
+4.193548387 0.000000000 9.724829800 9.038461538
+4.193548387 0.322580645 9.724829800 9.038461538
+4.193548387 0.645161290 9.724829800 9.038461538
+4.193548387 0.967741935 9.724829800 9.038461538
+4.193548387 1.290322581 9.724829800 9.038461538
+4.193548387 1.612903226 9.724829800 9.038461538
+4.193548387 1.935483871 9.724829800 9.038461538
+4.193548387 2.258064516 9.724829800 9.038461538
+4.193548387 2.580645161 9.852943138 9.141680907
+4.193548387 2.903225806 10.345918352 9.558110433
+4.193548387 3.225806452 10.802543542 9.980311860
+4.193548387 3.548387097 11.235827387 10.408406027
+4.193548387 3.870967742 11.644759742 10.842517170
+4.193548387 4.193548387 12.040733478 11.282773042
+4.193548387 4.516129032 12.424030547 11.729305038
+4.193548387 4.838709677 12.796980884 12.182248328
+4.193548387 5.161290323 13.166426475 12.641741988
+4.193548387 5.483870968 13.531922324 13.107929151
+4.193548387 5.806451613 13.901663971 13.580957145
+4.193548387 6.129032258 14.268117073 14.060977658
+4.193548387 6.451612903 14.647562125 14.548146895
+4.193548387 6.774193548 15.033372347 15.042625746
+4.193548387 7.096774194 15.433721197 15.544579969
+4.193548387 7.419354839 15.846288602 16.054180370
+4.193548387 7.741935484 15.954652850 16.182795699
+4.193548387 8.064516129 15.954652850 16.182795699
+4.193548387 8.387096774 15.954652850 16.182795699
+4.193548387 8.709677419 15.954652850 16.182795699
+4.193548387 9.032258065 15.954652850 16.182795699
+4.193548387 9.354838710 15.954652850 16.182795699
+4.193548387 9.677419355 15.954652850 16.182795699
+4.193548387 10.000000000 15.954652850 16.182795699
+4.516129032 0.000000000 9.902963105 9.464285714
+4.516129032 0.322580645 9.902963105 9.464285714
+4.516129032 0.645161290 9.902963105 9.464285714
+4.516129032 0.967741935 9.902963105 9.464285714
+4.516129032 1.290322581 9.902963105 9.464285714
+4.516129032 1.612903226 9.902963105 9.464285714
+4.516129032 1.935483871 9.902963105 9.464285714
+4.516129032 2.258064516 9.902963105 9.464285714
+4.516129032 2.580645161 10.025672736 9.566064982
+4.516129032 2.903225806 10.500507438 9.978829026
+4.516129032 3.225806452 10.946239871 10.400856341
+4.516129032 3.548387097 11.376703200 10.832462297
+4.516129032 3.870967742 11.792259146 11.273976741
+4.516129032 4.193548387 12.201356693 11.725744843
+4.516129032 4.516129032 12.604952096 12.188127995
+4.516129032 4.838709677 13.008602620 12.661504771
+4.516129032 5.161290323 13.417792712 13.146271965
+4.516129032 5.483870968 13.834555987 13.642845698
+4.516129032 5.806451613 14.267444692 14.151662612
+4.516129032 6.129032258 14.713512788 14.673181146
+4.516129032 6.451612903 15.186143246 15.207882920
+4.516129032 6.774193548 15.682677037 15.756274213
+4.516129032 7.096774194 16.216113014 16.318887562
+4.516129032 7.419354839 16.788339244 16.896283492
+4.516129032 7.741935484 16.942283864 17.043010753
+4.516129032 8.064516129 16.942283864 17.043010753
+4.516129032 8.387096774 16.942283864 17.043010753
+4.516129032 8.709677419 16.942283864 17.043010753
+4.516129032 9.032258065 16.942283864 17.043010753
+4.516129032 9.354838710 16.942283864 17.043010753
+4.516129032 9.677419355 16.942283864 17.043010753
+4.516129032 10.000000000 16.942283864 17.043010753
+4.838709677 0.000000000 9.987593227 9.833333333
+4.838709677 0.322580645 9.987593227 9.833333333
+4.838709677 0.645161290 9.987593227 9.833333333
+4.838709677 0.967741935 9.987593227 9.833333333
+4.838709677 1.290322581 9.987593227 9.833333333
+4.838709677 1.612903226 9.987593227 9.833333333
+4.838709677 1.935483871 9.987593227 9.833333333
+4.838709677 2.258064516 9.987593227 9.833333333
+4.838709677 2.580645161 10.107937367 9.934574396
+4.838709677 2.903225806 10.576746882 10.347022587
+4.838709677 3.225806452 11.023190342 10.771849382
+4.838709677 3.548387097 11.461860178 11.209620539
+4.838709677 3.870967742 11.892974885 11.660936829
+4.838709677 4.193548387 12.326836015 12.126436782
+4.838709677 4.516129032 12.765557275 12.606799704
+4.838709677 4.838709677 13.215984335 13.102748986
+4.838709677 5.161290323 13.685165434 13.615055734
+4.838709677 5.483870968 14.175297225 14.144542773
+4.838709677 5.806451613 14.699676483 14.692089057
+4.838709677 6.129032258 15.258066385 15.258634538
+4.838709677 6.451612903 15.868732072 15.845185548
+4.838709677 6.774193548 16.535753191 16.452820769
+4.838709677 7.096774194 17.280236196 17.082697848
+4.838709677 7.419354839 18.115344324 17.736060763
+4.838709677 7.741935484 18.343399565 17.903225806
+4.838709677 8.064516129 18.343399565 17.903225806
+4.838709677 8.387096774 18.343399565 17.903225806
+4.838709677 8.709677419 18.343399565 17.903225806
+4.838709677 9.032258065 18.343399565 17.903225806
+4.838709677 9.354838710 18.343399565 17.903225806
+4.838709677 9.677419355 18.343399565 17.903225806
+4.838709677 10.000000000 18.343399565 17.903225806
+5.161290323 0.000000000 10.453438845 10.081967213
+5.161290323 0.322580645 10.453438845 10.081967213
+5.161290323 0.645161290 10.453438845 10.081967213
+5.161290323 0.967741935 10.453438845 10.081967213
+5.161290323 1.290322581 10.453438845 10.081967213
+5.161290323 1.612903226 10.453438845 10.081967213
+5.161290323 1.935483871 10.453438845 10.081967213
+5.161290323 2.258064516 10.453438845 10.081967213
+5.161290323 2.580645161 10.555334150 10.189117452
+5.161290323 2.903225806 10.957766893 10.626095161
+5.161290323 3.225806452 11.358194134 11.076954676
+5.161290323 3.548387097 11.754612081 11.542368165
+5.161290323 3.870967742 12.159885021 12.023051902
+5.161290323 4.193548387 12.572343139 12.519769950
+5.161290323 4.516129032 13.004157242 13.033338207
+5.161290323 4.838709677 13.454843261 13.564628886
+5.161290323 5.161290323 13.937409133 14.114575450
+5.161290323 5.483870968 14.453623313 14.684178093
+5.161290323 5.806451613 15.017597606 15.274509804
+5.161290323 6.129032258 15.634903956 15.886723119
+5.161290323 6.451612903 16.324245881 16.522057627
+5.161290323 6.774193548 17.100135640 17.181848349
+5.161290323 7.096774194 17.987899976 17.867535104
+5.161290323 7.419354839 19.013798273 18.580672994
+5.161290323 7.741935484 19.297725710 18.763440860
+5.161290323 8.064516129 19.297725710 18.763440860
+5.161290323 8.387096774 19.297725710 18.763440860
+5.161290323 8.709677419 19.297725710 18.763440860
+5.161290323 9.032258065 19.297725710 18.763440860
+5.161290323 9.354838710 19.297725710 18.763440860
+5.161290323 9.677419355 19.297725710 18.763440860
+5.161290323 10.000000000 19.297725710 18.763440860
+5.483870968 0.000000000 11.200371425 10.254237288
+5.483870968 0.322580645 11.200371425 10.254237288
+5.483870968 0.645161290 11.200371425 10.254237288
+5.483870968 0.967741935 11.200371425 10.254237288
+5.483870968 1.290322581 11.200371425 10.254237288
+5.483870968 1.612903226 11.200371425 10.254237288
+5.483870968 1.935483871 11.200371425 10.254237288
+5.483870968 2.258064516 11.200371425 10.254237288
+5.483870968 2.580645161 11.275744351 10.373748457
+5.483870968 2.903225806 11.579276776 10.860102906
+5.483870968 3.225806452 11.893660170 11.360174870
+5.483870968 3.548387097 12.214119876 11.874552997
+5.483870968 3.870967742 12.553283322 12.403860107
+5.483870968 4.193548387 12.907426182 12.948755706
+5.483870968 4.516129032 13.285781482 13.509938724
+5.483870968 4.838709677 13.693069775 14.088150508
+5.483870968 5.161290323 14.133110626 14.684178093
+5.483870968 5.483870968 14.617921843 15.298857769
+5.483870968 5.806451613 15.149780175 15.933079002
+5.483870968 6.129032258 15.746811487 16.587788726
+5.483870968 6.451612903 16.415017186 17.263996060
+5.483870968 6.774193548 17.180595436 17.962777500
+5.483870968 7.096774194 18.063069240 18.685282635
+5.483870968 7.419354839 19.094026165 19.432740459
+5.483870968 7.741935484 19.380891828 19.623655914
+5.483870968 8.064516129 19.380891828 19.623655914
+5.483870968 8.387096774 19.380891828 19.623655914
+5.483870968 8.709677419 19.380891828 19.623655914
+5.483870968 9.032258065 19.380891828 19.623655914
+5.483870968 9.354838710 19.380891828 19.623655914
+5.483870968 9.677419355 19.380891828 19.623655914
+5.483870968 10.000000000 19.380891828 19.623655914
+5.806451613 0.000000000 11.792304026 10.438596491
+5.806451613 0.322580645 11.792304026 10.438596491
+5.806451613 0.645161290 11.792304026 10.438596491
+5.806451613 0.967741935 11.792304026 10.438596491
+5.806451613 1.290322581 11.792304026 10.438596491
+5.806451613 1.612903226 11.792304026 10.438596491
+5.806451613 1.935483871 11.792304026 10.438596491
+5.806451613 2.258064516 11.792304026 10.438596491
+5.806451613 2.580645161 11.848083932 10.571165035
+5.806451613 2.903225806 12.077812184 11.109435588
+5.806451613 3.225806452 12.327537589 11.660851868
+5.806451613 3.548387097 12.590635013 12.225901398
+5.806451613 3.870967742 12.875627326 12.805096111
+5.806451613 4.193548387 13.187716001 13.398973895
+5.806451613 4.516129032 13.525122531 14.008100260
+5.806451613 4.838709677 13.897938757 14.633070135
+5.806451613 5.161290323 14.310798618 15.274509804
+5.806451613 5.483870968 14.768759505 15.933079002
+5.806451613 5.806451613 15.285527581 16.609473175
+5.806451613 6.129032258 15.867812510 17.304425935
+5.806451613 6.451612903 16.531661050 18.018711707
+5.806451613 6.774193548 17.302903875 18.753148615
+5.806451613 7.096774194 18.198839735 19.508601601
+5.806451613 7.419354839 19.260035649 20.285985830
+5.806451613 7.741935484 19.557269007 20.483870968
+5.806451613 8.064516129 19.557269007 20.483870968
+5.806451613 8.387096774 19.557269007 20.483870968
+5.806451613 8.709677419 19.557269007 20.483870968
+5.806451613 9.032258065 19.557269007 20.483870968
+5.806451613 9.354838710 19.557269007 20.483870968
+5.806451613 9.677419355 19.557269007 20.483870968
+5.806451613 10.000000000 19.557269007 20.483870968
+6.129032258 0.000000000 12.272218993 10.636363636
+6.129032258 0.322580645 12.272218993 10.636363636
+6.129032258 0.645161290 12.272218993 10.636363636
+6.129032258 0.967741935 12.272218993 10.636363636
+6.129032258 1.290322581 12.272218993 10.636363636
+6.129032258 1.612903226 12.272218993 10.636363636
+6.129032258 1.935483871 12.272218993 10.636363636
+6.129032258 2.258064516 12.272218993 10.636363636
+6.129032258 2.580645161 12.312912957 10.782742908
+6.129032258 2.903225806 12.485719838 11.375649592
+6.129032258 3.225806452 12.683802558 11.980650967
+6.129032258 3.548387097 12.903346192 12.598120927
+6.129032258 3.870967742 13.148207675 13.228448936
+6.129032258 4.193548387 13.424397092 13.872040848
+6.129032258 4.516129032 13.734709260 14.529319781
+6.129032258 4.838709677 14.081175133 15.200727043
+6.129032258 5.161290323 14.472910716 15.886723119
+6.129032258 5.483870968 14.920581746 16.587788726
+6.129032258 5.806451613 15.427041299 17.304425935
+6.129032258 6.129032258 16.008438809 18.037159372
+6.129032258 6.451612903 16.684191565 18.786537498
+6.129032258 6.774193548 17.475450862 19.553133975
+6.129032258 7.096774194 18.410291448 20.337549137
+6.129032258 7.419354839 19.533529202 21.140411551
+6.129032258 7.741935484 19.850782228 21.344086022
+6.129032258 8.064516129 19.850782228 21.344086022
+6.129032258 8.387096774 19.850782228 21.344086022
+6.129032258 8.709677419 19.850782228 21.344086022
+6.129032258 9.032258065 19.850782228 21.344086022
+6.129032258 9.354838710 19.850782228 21.344086022
+6.129032258 9.677419355 19.850782228 21.344086022
+6.129032258 10.000000000 19.850782228 21.344086022
+6.451612903 0.000000000 12.667715960 10.849056604
+6.451612903 0.322580645 12.667715960 10.849056604
+6.451612903 0.645161290 12.667715960 10.849056604
+6.451612903 0.967741935 12.667715960 10.849056604
+6.451612903 1.290322581 12.667715960 10.849056604
+6.451612903 1.612903226 12.667715960 10.849056604
+6.451612903 1.935483871 12.667715960 10.849056604
+6.451612903 2.258064516 12.667715960 10.849056604
+6.451612903 2.580645161 12.695732249 11.010062510
+6.451612903 2.903225806 12.824135659 11.660519441
+6.451612903 3.225806452 12.981327533 12.321456235
+6.451612903 3.548387097 13.167148134 12.993128221
+6.451612903 3.870967742 13.381921080 13.675799087
+6.451612903 4.193548387 13.630079770 14.369741229
+6.451612903 4.516129032 13.917888750 15.075236113
+6.451612903 4.838709677 14.251097627 15.792574657
+6.451612903 5.161290323 14.632147614 16.522057627
+6.451612903 5.483870968 15.072735735 17.263996060
+6.451612903 5.806451613 15.583881738 18.018711707
+6.451612903 6.129032258 16.182136955 18.786537498
+6.451612903 6.451612903 16.899235777 19.567818029
+6.451612903 6.774193548 17.840675551 20.362910080
+6.451612903 7.096774194 18.923022827 21.172183159
+6.451612903 7.419354839 20.191498874 21.996020073
+6.451612903 7.741935484 20.543702253 22.204301075
+6.451612903 8.064516129 20.543702253 22.204301075
+6.451612903 8.387096774 20.543702253 22.204301075
+6.451612903 8.709677419 20.543702253 22.204301075
+6.451612903 9.032258065 20.543702253 22.204301075
+6.451612903 9.354838710 20.543702253 22.204301075
+6.451612903 9.677419355 20.543702253 22.204301075
+6.451612903 10.000000000 20.543702253 22.204301075
+6.774193548 0.000000000 12.998209351 11.078431373
+6.774193548 0.322580645 12.998209351 11.078431373
+6.774193548 0.645161290 12.998209351 11.078431373
+6.774193548 0.967741935 12.998209351 11.078431373
+6.774193548 1.290322581 12.998209351 11.078431373
+6.774193548 1.612903226 12.998209351 11.078431373
+6.774193548 1.935483871 12.998209351 11.078431373
+6.774193548 2.258064516 12.998209351 11.078431373
+6.774193548 2.580645161 13.016700861 11.254948535
+6.774193548 2.903225806 13.109051400 11.966077401
+6.774193548 3.225806452 13.233524203 12.685407657
+6.774193548 3.548387097 13.391742155 13.413082004
+6.774193548 3.870967742 13.584206097 14.149246475
+6.774193548 4.193548387 13.814318448 14.894050530
+6.774193548 4.516129032 14.087835159 15.647647155
+6.774193548 4.838709677 14.410179185 16.410192974
+6.774193548 5.161290323 14.791181858 17.181848349
+6.774193548 5.483870968 15.241218368 17.962777500
+6.774193548 5.806451613 15.875517713 18.753148615
+6.774193548 6.129032258 16.681146859 19.553133975
+6.774193548 6.451612903 17.569488681 20.362910080
+6.774193548 6.774193548 18.574163704 21.182657773
+6.774193548 7.096774194 19.734151545 22.012562382
+6.774193548 7.419354839 21.103510509 22.852813853
+6.774193548 7.741935484 21.487304165 23.064516129
+6.774193548 8.064516129 21.487304165 23.064516129
+6.774193548 8.387096774 21.487304165 23.064516129
+6.774193548 8.709677419 21.487304165 23.064516129
+6.774193548 9.032258065 21.487304165 23.064516129
+6.774193548 9.354838710 21.487304165 23.064516129
+6.774193548 9.677419355 21.487304165 23.064516129
+6.774193548 10.000000000 21.487304165 23.064516129
+7.096774194 0.000000000 13.277885841 11.326530612
+7.096774194 0.322580645 13.277885841 11.326530612
+7.096774194 0.645161290 13.277885841 11.326530612
+7.096774194 0.967741935 13.277885841 11.326530612
+7.096774194 1.290322581 13.277885841 11.326530612
+7.096774194 1.612903226 13.277885841 11.326530612
+7.096774194 1.935483871 13.277885841 11.326530612
+7.096774194 2.258064516 13.277885841 11.326530612
+7.096774194 2.580645161 13.288352640 11.519519025
+7.096774194 2.903225806 13.350771800 12.294662039
+7.096774194 3.225806452 13.448963305 13.074946112
+7.096774194 3.548387097 13.584671491 13.860422559
+7.096774194 3.870967742 13.760664445 14.651143382
+7.096774194 4.193548387 13.980902626 15.447161280
+7.096774194 4.516129032 14.249972519 16.248529659
+7.096774194 4.838709677 14.574475539 17.055302647
+7.096774194 5.161290323 14.966122630 17.867535104
+7.096774194 5.483870968 15.630163357 18.685282635
+7.096774194 5.806451613 16.437215216 19.508601601
+7.096774194 6.129032258 17.309323446 20.337549137
+7.096774194 6.451612903 18.275865243 21.172183159
+7.096774194 6.774193548 19.378378532 22.012562382
+7.096774194 7.096774194 20.668439101 22.858746331
+7.096774194 7.419354839 22.225144822 23.710795356
+7.096774194 7.741935484 22.668948283 23.924731183
+7.096774194 8.064516129 22.668948283 23.924731183
+7.096774194 8.387096774 22.668948283 23.924731183
+7.096774194 8.709677419 22.668948283 23.924731183
+7.096774194 9.032258065 22.668948283 23.924731183
+7.096774194 9.354838710 22.668948283 23.924731183
+7.096774194 9.677419355 22.668948283 23.924731183
+7.096774194 10.000000000 22.668948283 23.924731183
+7.419354839 0.000000000 13.515825784 11.595744681
+7.419354839 0.322580645 13.515825784 11.595744681
+7.419354839 0.645161290 13.515825784 11.595744681
+7.419354839 0.967741935 13.515825784 11.595744681
+7.419354839 1.290322581 13.515825784 11.595744681
+7.419354839 1.612903226 13.515825784 11.595744681
+7.419354839 1.935483871 13.515825784 11.595744681
+7.419354839 2.258064516 13.515825784 11.595744681
+7.419354839 2.580645161 13.519282293 11.806246782
+7.419354839 2.903225806 13.556279203 12.648978190
+7.419354839 3.225806452 13.633565239 13.492868190
+7.419354839 3.548387097 13.753168201 14.337919175
+7.419354839 3.870967742 13.918417774 15.184133540
+7.419354839 4.193548387 14.134193279 16.031513690
+7.419354839 4.516129032 14.407312339 16.880062037
+7.419354839 4.838709677 14.747121823 17.729780997
+7.419354839 5.161290323 15.312289393 18.580672994
+7.419354839 5.483870968 16.162307388 19.432740459
+7.419354839 5.806451613 17.055699946 20.285985830
+7.419354839 6.129032258 18.025108663 21.140411551
+7.419354839 6.451612903 19.112532086 21.996020073
+7.419354839 6.774193548 20.379272817 22.852813853
+7.419354839 7.096774194 21.908521849 23.710795356
+7.419354839 7.419354839 23.837396065 24.569967054
+7.419354839 7.741935484 24.406429743 24.784946237
+7.419354839 8.064516129 24.406429743 24.784946237
+7.419354839 8.387096774 24.406429743 24.784946237
+7.419354839 8.709677419 24.406429743 24.784946237
+7.419354839 9.032258065 24.406429743 24.784946237
+7.419354839 9.354838710 24.406429743 24.784946237
+7.419354839 9.677419355 24.406429743 24.784946237
+7.419354839 10.000000000 24.406429743 24.784946237
+7.741935484 0.000000000 13.570706205 11.666666667
+7.741935484 0.322580645 13.570706205 11.666666667
+7.741935484 0.645161290 13.570706205 11.666666667
+7.741935484 0.967741935 13.570706205 11.666666667
+7.741935484 1.290322581 13.570706205 11.666666667
+7.741935484 1.612903226 13.570706205 11.666666667
+7.741935484 1.935483871 13.570706205 11.666666667
+7.741935484 2.258064516 13.570706205 11.666666667
+7.741935484 2.580645161 13.572517919 11.881720430
+7.741935484 2.903225806 13.603707815 12.741935484
+7.741935484 3.225806452 13.676532623 13.602150538
+7.741935484 3.548387097 13.793124575 14.462365591
+7.741935484 3.870967742 13.957010447 15.322580645
+7.741935484 4.193548387 14.173387937 16.182795699
+7.741935484 4.516129032 14.449561083 17.043010753
+7.741935484 4.838709677 14.795606896 17.903225806
+7.741935484 5.161290323 15.430252399 18.763440860
+7.741935484 5.483870968 16.305345082 19.623655914
+7.741935484 5.806451613 17.225621817 20.483870968
+7.741935484 6.129032258 18.227035950 21.344086022
+7.741935484 6.451612903 19.356366279 22.204301075
+7.741935484 6.774193548 20.682807170 23.064516129
+7.741935484 7.096774194 22.303013754 23.924731183
+7.741935484 7.419354839 24.380408194 24.784946237
+7.741935484 7.741935484 25.001049790 25.000000000
+7.741935484 8.064516129 25.001049790 25.000000000
+7.741935484 8.387096774 25.001049790 25.000000000
+7.741935484 8.709677419 25.001049790 25.000000000
+7.741935484 9.032258065 25.001049790 25.000000000
+7.741935484 9.354838710 25.001049790 25.000000000
+7.741935484 9.677419355 25.001049790 25.000000000
+7.741935484 10.000000000 25.001049790 25.000000000
+8.064516129 0.000000000 13.570706205 11.666666667
+8.064516129 0.322580645 13.570706205 11.666666667
+8.064516129 0.645161290 13.570706205 11.666666667
+8.064516129 0.967741935 13.570706205 11.666666667
+8.064516129 1.290322581 13.570706205 11.666666667
+8.064516129 1.612903226 13.570706205 11.666666667
+8.064516129 1.935483871 13.570706205 11.666666667
+8.064516129 2.258064516 13.570706205 11.666666667
+8.064516129 2.580645161 13.572517919 11.881720430
+8.064516129 2.903225806 13.603707815 12.741935484
+8.064516129 3.225806452 13.676532623 13.602150538
+8.064516129 3.548387097 13.793124575 14.462365591
+8.064516129 3.870967742 13.957010447 15.322580645
+8.064516129 4.193548387 14.173387937 16.182795699
+8.064516129 4.516129032 14.449561083 17.043010753
+8.064516129 4.838709677 14.795606896 17.903225806
+8.064516129 5.161290323 15.430252399 18.763440860
+8.064516129 5.483870968 16.305345082 19.623655914
+8.064516129 5.806451613 17.225621817 20.483870968
+8.064516129 6.129032258 18.227035950 21.344086022
+8.064516129 6.451612903 19.356366279 22.204301075
+8.064516129 6.774193548 20.682807170 23.064516129
+8.064516129 7.096774194 22.303013754 23.924731183
+8.064516129 7.419354839 24.380408194 24.784946237
+8.064516129 7.741935484 25.001049790 25.000000000
+8.064516129 8.064516129 25.001049790 25.000000000
+8.064516129 8.387096774 25.001049790 25.000000000
+8.064516129 8.709677419 25.001049790 25.000000000
+8.064516129 9.032258065 25.001049790 25.000000000
+8.064516129 9.354838710 25.001049790 25.000000000
+8.064516129 9.677419355 25.001049790 25.000000000
+8.064516129 10.000000000 25.001049790 25.000000000
+8.387096774 0.000000000 13.570706205 11.666666667
+8.387096774 0.322580645 13.570706205 11.666666667
+8.387096774 0.645161290 13.570706205 11.666666667
+8.387096774 0.967741935 13.570706205 11.666666667
+8.387096774 1.290322581 13.570706205 11.666666667
+8.387096774 1.612903226 13.570706205 11.666666667
+8.387096774 1.935483871 13.570706205 11.666666667
+8.387096774 2.258064516 13.570706205 11.666666667
+8.387096774 2.580645161 13.572517919 11.881720430
+8.387096774 2.903225806 13.603707815 12.741935484
+8.387096774 3.225806452 13.676532623 13.602150538
+8.387096774 3.548387097 13.793124575 14.462365591
+8.387096774 3.870967742 13.957010447 15.322580645
+8.387096774 4.193548387 14.173387937 16.182795699
+8.387096774 4.516129032 14.449561083 17.043010753
+8.387096774 4.838709677 14.795606896 17.903225806
+8.387096774 5.161290323 15.430252399 18.763440860
+8.387096774 5.483870968 16.305345082 19.623655914
+8.387096774 5.806451613 17.225621817 20.483870968
+8.387096774 6.129032258 18.227035950 21.344086022
+8.387096774 6.451612903 19.356366279 22.204301075
+8.387096774 6.774193548 20.682807170 23.064516129
+8.387096774 7.096774194 22.303013754 23.924731183
+8.387096774 7.419354839 24.380408194 24.784946237
+8.387096774 7.741935484 25.001049790 25.000000000
+8.387096774 8.064516129 25.001049790 25.000000000
+8.387096774 8.387096774 25.001049790 25.000000000
+8.387096774 8.709677419 25.001049790 25.000000000
+8.387096774 9.032258065 25.001049790 25.000000000
+8.387096774 9.354838710 25.001049790 25.000000000
+8.387096774 9.677419355 25.001049790 25.000000000
+8.387096774 10.000000000 25.001049790 25.000000000
+8.709677419 0.000000000 13.570706205 11.666666667
+8.709677419 0.322580645 13.570706205 11.666666667
+8.709677419 0.645161290 13.570706205 11.666666667
+8.709677419 0.967741935 13.570706205 11.666666667
+8.709677419 1.290322581 13.570706205 11.666666667
+8.709677419 1.612903226 13.570706205 11.666666667
+8.709677419 1.935483871 13.570706205 11.666666667
+8.709677419 2.258064516 13.570706205 11.666666667
+8.709677419 2.580645161 13.572517919 11.881720430
+8.709677419 2.903225806 13.603707815 12.741935484
+8.709677419 3.225806452 13.676532623 13.602150538
+8.709677419 3.548387097 13.793124575 14.462365591
+8.709677419 3.870967742 13.957010447 15.322580645
+8.709677419 4.193548387 14.173387937 16.182795699
+8.709677419 4.516129032 14.449561083 17.043010753
+8.709677419 4.838709677 14.795606896 17.903225806
+8.709677419 5.161290323 15.430252399 18.763440860
+8.709677419 5.483870968 16.305345082 19.623655914
+8.709677419 5.806451613 17.225621817 20.483870968
+8.709677419 6.129032258 18.227035950 21.344086022
+8.709677419 6.451612903 19.356366279 22.204301075
+8.709677419 6.774193548 20.682807170 23.064516129
+8.709677419 7.096774194 22.303013754 23.924731183
+8.709677419 7.419354839 24.380408194 24.784946237
+8.709677419 7.741935484 25.001049790 25.000000000
+8.709677419 8.064516129 25.001049790 25.000000000
+8.709677419 8.387096774 25.001049790 25.000000000
+8.709677419 8.709677419 25.001049790 25.000000000
+8.709677419 9.032258065 25.001049790 25.000000000
+8.709677419 9.354838710 25.001049790 25.000000000
+8.709677419 9.677419355 25.001049790 25.000000000
+8.709677419 10.000000000 25.001049790 25.000000000
+9.032258065 0.000000000 13.570706205 11.666666667
+9.032258065 0.322580645 13.570706205 11.666666667
+9.032258065 0.645161290 13.570706205 11.666666667
+9.032258065 0.967741935 13.570706205 11.666666667
+9.032258065 1.290322581 13.570706205 11.666666667
+9.032258065 1.612903226 13.570706205 11.666666667
+9.032258065 1.935483871 13.570706205 11.666666667
+9.032258065 2.258064516 13.570706205 11.666666667
+9.032258065 2.580645161 13.572517919 11.881720430
+9.032258065 2.903225806 13.603707815 12.741935484
+9.032258065 3.225806452 13.676532623 13.602150538
+9.032258065 3.548387097 13.793124575 14.462365591
+9.032258065 3.870967742 13.957010447 15.322580645
+9.032258065 4.193548387 14.173387937 16.182795699
+9.032258065 4.516129032 14.449561083 17.043010753
+9.032258065 4.838709677 14.795606896 17.903225806
+9.032258065 5.161290323 15.430252399 18.763440860
+9.032258065 5.483870968 16.305345082 19.623655914
+9.032258065 5.806451613 17.225621817 20.483870968
+9.032258065 6.129032258 18.227035950 21.344086022
+9.032258065 6.451612903 19.356366279 22.204301075
+9.032258065 6.774193548 20.682807170 23.064516129
+9.032258065 7.096774194 22.303013754 23.924731183
+9.032258065 7.419354839 24.380408194 24.784946237
+9.032258065 7.741935484 25.001049790 25.000000000
+9.032258065 8.064516129 25.001049790 25.000000000
+9.032258065 8.387096774 25.001049790 25.000000000
+9.032258065 8.709677419 25.001049790 25.000000000
+9.032258065 9.032258065 25.001049790 25.000000000
+9.032258065 9.354838710 25.001049790 25.000000000
+9.032258065 9.677419355 25.001049790 25.000000000
+9.032258065 10.000000000 25.001049790 25.000000000
+9.354838710 0.000000000 13.570706205 11.666666667
+9.354838710 0.322580645 13.570706205 11.666666667
+9.354838710 0.645161290 13.570706205 11.666666667
+9.354838710 0.967741935 13.570706205 11.666666667
+9.354838710 1.290322581 13.570706205 11.666666667
+9.354838710 1.612903226 13.570706205 11.666666667
+9.354838710 1.935483871 13.570706205 11.666666667
+9.354838710 2.258064516 13.570706205 11.666666667
+9.354838710 2.580645161 13.572517919 11.881720430
+9.354838710 2.903225806 13.603707815 12.741935484
+9.354838710 3.225806452 13.676532623 13.602150538
+9.354838710 3.548387097 13.793124575 14.462365591
+9.354838710 3.870967742 13.957010447 15.322580645
+9.354838710 4.193548387 14.173387937 16.182795699
+9.354838710 4.516129032 14.449561083 17.043010753
+9.354838710 4.838709677 14.795606896 17.903225806
+9.354838710 5.161290323 15.430252399 18.763440860
+9.354838710 5.483870968 16.305345082 19.623655914
+9.354838710 5.806451613 17.225621817 20.483870968
+9.354838710 6.129032258 18.227035950 21.344086022
+9.354838710 6.451612903 19.356366279 22.204301075
+9.354838710 6.774193548 20.682807170 23.064516129
+9.354838710 7.096774194 22.303013754 23.924731183
+9.354838710 7.419354839 24.380408194 24.784946237
+9.354838710 7.741935484 25.001049790 25.000000000
+9.354838710 8.064516129 25.001049790 25.000000000
+9.354838710 8.387096774 25.001049790 25.000000000
+9.354838710 8.709677419 25.001049790 25.000000000
+9.354838710 9.032258065 25.001049790 25.000000000
+9.354838710 9.354838710 25.001049790 25.000000000
+9.354838710 9.677419355 25.001049790 25.000000000
+9.354838710 10.000000000 25.001049790 25.000000000
+9.677419355 0.000000000 13.570706205 11.666666667
+9.677419355 0.322580645 13.570706205 11.666666667
+9.677419355 0.645161290 13.570706205 11.666666667
+9.677419355 0.967741935 13.570706205 11.666666667
+9.677419355 1.290322581 13.570706205 11.666666667
+9.677419355 1.612903226 13.570706205 11.666666667
+9.677419355 1.935483871 13.570706205 11.666666667
+9.677419355 2.258064516 13.570706205 11.666666667
+9.677419355 2.580645161 13.572517919 11.881720430
+9.677419355 2.903225806 13.603707815 12.741935484
+9.677419355 3.225806452 13.676532623 13.602150538
+9.677419355 3.548387097 13.793124575 14.462365591
+9.677419355 3.870967742 13.957010447 15.322580645
+9.677419355 4.193548387 14.173387937 16.182795699
+9.677419355 4.516129032 14.449561083 17.043010753
+9.677419355 4.838709677 14.795606896 17.903225806
+9.677419355 5.161290323 15.430252399 18.763440860
+9.677419355 5.483870968 16.305345082 19.623655914
+9.677419355 5.806451613 17.225621817 20.483870968
+9.677419355 6.129032258 18.227035950 21.344086022
+9.677419355 6.451612903 19.356366279 22.204301075
+9.677419355 6.774193548 20.682807170 23.064516129
+9.677419355 7.096774194 22.303013754 23.924731183
+9.677419355 7.419354839 24.380408194 24.784946237
+9.677419355 7.741935484 25.001049790 25.000000000
+9.677419355 8.064516129 25.001049790 25.000000000
+9.677419355 8.387096774 25.001049790 25.000000000
+9.677419355 8.709677419 25.001049790 25.000000000
+9.677419355 9.032258065 25.001049790 25.000000000
+9.677419355 9.354838710 25.001049790 25.000000000
+9.677419355 9.677419355 25.001049790 25.000000000
+9.677419355 10.000000000 25.001049790 25.000000000
+10.000000000 0.000000000 13.570706205 11.666666667
+10.000000000 0.322580645 13.570706205 11.666666667
+10.000000000 0.645161290 13.570706205 11.666666667
+10.000000000 0.967741935 13.570706205 11.666666667
+10.000000000 1.290322581 13.570706205 11.666666667
+10.000000000 1.612903226 13.570706205 11.666666667
+10.000000000 1.935483871 13.570706205 11.666666667
+10.000000000 2.258064516 13.570706205 11.666666667
+10.000000000 2.580645161 13.572517919 11.881720430
+10.000000000 2.903225806 13.603707815 12.741935484
+10.000000000 3.225806452 13.676532623 13.602150538
+10.000000000 3.548387097 13.793124575 14.462365591
+10.000000000 3.870967742 13.957010447 15.322580645
+10.000000000 4.193548387 14.173387937 16.182795699
+10.000000000 4.516129032 14.449561083 17.043010753
+10.000000000 4.838709677 14.795606896 17.903225806
+10.000000000 5.161290323 15.430252399 18.763440860
+10.000000000 5.483870968 16.305345082 19.623655914
+10.000000000 5.806451613 17.225621817 20.483870968
+10.000000000 6.129032258 18.227035950 21.344086022
+10.000000000 6.451612903 19.356366279 22.204301075
+10.000000000 6.774193548 20.682807170 23.064516129
+10.000000000 7.096774194 22.303013754 23.924731183
+10.000000000 7.419354839 24.380408194 24.784946237
+10.000000000 7.741935484 25.001049790 25.000000000
+10.000000000 8.064516129 25.001049790 25.000000000
+10.000000000 8.387096774 25.001049790 25.000000000
+10.000000000 8.709677419 25.001049790 25.000000000
+10.000000000 9.032258065 25.001049790 25.000000000
+10.000000000 9.354838710 25.001049790 25.000000000
+10.000000000 9.677419355 25.001049790 25.000000000
+10.000000000 10.000000000 25.001049790 25.000000000
diff --git a/examples/hybrid/tipper.fll b/examples/hybrid/tipper.fll
new file mode 100644
index 0000000..cb8803f
--- /dev/null
+++ b/examples/hybrid/tipper.fll
@@ -0,0 +1,63 @@
+Engine: tipper
+description: (service and food) -> (tip)
+InputVariable: service
+ description: quality of service
+ enabled: true
+ range: 0.000 10.000
+ lock-range: true
+ term: poor Trapezoid 0.000 0.000 2.500 5.000
+ term: good Triangle 2.500 5.000 7.500
+ term: excellent Trapezoid 5.000 7.500 10.000 10.000
+InputVariable: food
+ description: quality of food
+ enabled: true
+ range: 0.000 10.000
+ lock-range: true
+ term: rancid Trapezoid 0.000 0.000 2.500 7.500
+ term: delicious Trapezoid 2.500 7.500 10.000 10.000
+OutputVariable: mTip
+ description: tip based on Mamdani inference
+ enabled: true
+ range: 0.000 30.000
+ lock-range: false
+ aggregation: Maximum
+ defuzzifier: Centroid 100
+ default: nan
+ lock-previous: false
+ term: cheap Triangle 0.000 5.000 10.000
+ term: average Triangle 10.000 15.000 20.000
+ term: generous Triangle 20.000 25.000 30.000
+OutputVariable: tsTip
+ description: tip based on Takagi-Sugeno inference
+ enabled: true
+ range: 0.000 30.000
+ lock-range: false
+ aggregation: none
+ defuzzifier: WeightedAverage TakagiSugeno
+ default: nan
+ lock-previous: false
+ term: cheap Constant 5.000
+ term: average Constant 15.000
+ term: generous Constant 25.000
+RuleBlock: mamdani
+ description: Mamdani inference
+ enabled: true
+ conjunction: AlgebraicProduct
+ disjunction: AlgebraicSum
+ implication: Minimum
+ activation: General
+ rule: if service is poor or food is rancid then mTip is cheap
+ rule: if service is good then mTip is average
+ rule: if service is excellent or food is delicious then mTip is generous with 0.5
+ rule: if service is excellent and food is delicious then mTip is generous with 1.0
+RuleBlock: takagiSugeno
+ description: Takagi-Sugeno inference
+ enabled: true
+ conjunction: AlgebraicProduct
+ disjunction: AlgebraicSum
+ implication: none
+ activation: General
+ rule: if service is poor or food is rancid then tsTip is cheap
+ rule: if service is good then tsTip is average
+ rule: if service is excellent or food is delicious then tsTip is generous with 0.5
+ rule: if service is excellent and food is delicious then tsTip is generous with 1.0 \ No newline at end of file
diff --git a/examples/hybrid/tipper.java b/examples/hybrid/tipper.java
new file mode 100644
index 0000000..e0578ca
--- /dev/null
+++ b/examples/hybrid/tipper.java
@@ -0,0 +1,103 @@
+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 tipper{
+public static void main(String[] args){
+//Code automatically generated with fuzzylite 6.0.
+
+Engine engine = new Engine();
+engine.setName("tipper");
+engine.setDescription("(service and food) -> (tip)");
+
+InputVariable service = new InputVariable();
+service.setName("service");
+service.setDescription("quality of service");
+service.setEnabled(true);
+service.setRange(0.000, 10.000);
+service.setLockValueInRange(true);
+service.addTerm(new Trapezoid("poor", 0.000, 0.000, 2.500, 5.000));
+service.addTerm(new Triangle("good", 2.500, 5.000, 7.500));
+service.addTerm(new Trapezoid("excellent", 5.000, 7.500, 10.000, 10.000));
+engine.addInputVariable(service);
+
+InputVariable food = new InputVariable();
+food.setName("food");
+food.setDescription("quality of food");
+food.setEnabled(true);
+food.setRange(0.000, 10.000);
+food.setLockValueInRange(true);
+food.addTerm(new Trapezoid("rancid", 0.000, 0.000, 2.500, 7.500));
+food.addTerm(new Trapezoid("delicious", 2.500, 7.500, 10.000, 10.000));
+engine.addInputVariable(food);
+
+OutputVariable mTip = new OutputVariable();
+mTip.setName("mTip");
+mTip.setDescription("tip based on Mamdani inference");
+mTip.setEnabled(true);
+mTip.setRange(0.000, 30.000);
+mTip.setLockValueInRange(false);
+mTip.setAggregation(new Maximum());
+mTip.setDefuzzifier(new Centroid(100));
+mTip.setDefaultValue(Double.NaN);
+mTip.setLockPreviousValue(false);
+mTip.addTerm(new Triangle("cheap", 0.000, 5.000, 10.000));
+mTip.addTerm(new Triangle("average", 10.000, 15.000, 20.000));
+mTip.addTerm(new Triangle("generous", 20.000, 25.000, 30.000));
+engine.addOutputVariable(mTip);
+
+OutputVariable tsTip = new OutputVariable();
+tsTip.setName("tsTip");
+tsTip.setDescription("tip based on Takagi-Sugeno inference");
+tsTip.setEnabled(true);
+tsTip.setRange(0.000, 30.000);
+tsTip.setLockValueInRange(false);
+tsTip.setAggregation(null);
+tsTip.setDefuzzifier(new WeightedAverage("TakagiSugeno"));
+tsTip.setDefaultValue(Double.NaN);
+tsTip.setLockPreviousValue(false);
+tsTip.addTerm(new Constant("cheap", 5.000));
+tsTip.addTerm(new Constant("average", 15.000));
+tsTip.addTerm(new Constant("generous", 25.000));
+engine.addOutputVariable(tsTip);
+
+RuleBlock mamdani = new RuleBlock();
+mamdani.setName("mamdani");
+mamdani.setDescription("Mamdani inference");
+mamdani.setEnabled(true);
+mamdani.setConjunction(new AlgebraicProduct());
+mamdani.setDisjunction(new AlgebraicSum());
+mamdani.setImplication(new Minimum());
+mamdani.setActivation(new General());
+mamdani.addRule(Rule.parse("if service is poor or food is rancid then mTip is cheap", engine));
+mamdani.addRule(Rule.parse("if service is good then mTip is average", engine));
+mamdani.addRule(Rule.parse("if service is excellent or food is delicious then mTip is generous with 0.5", engine));
+mamdani.addRule(Rule.parse("if service is excellent and food is delicious then mTip is generous with 1.0", engine));
+engine.addRuleBlock(mamdani);
+
+RuleBlock takagiSugeno = new RuleBlock();
+takagiSugeno.setName("takagiSugeno");
+takagiSugeno.setDescription("Takagi-Sugeno inference");
+takagiSugeno.setEnabled(true);
+takagiSugeno.setConjunction(new AlgebraicProduct());
+takagiSugeno.setDisjunction(new AlgebraicSum());
+takagiSugeno.setImplication(null);
+takagiSugeno.setActivation(new General());
+takagiSugeno.addRule(Rule.parse("if service is poor or food is rancid then tsTip is cheap", engine));
+takagiSugeno.addRule(Rule.parse("if service is good then tsTip is average", engine));
+takagiSugeno.addRule(Rule.parse("if service is excellent or food is delicious then tsTip is generous with 0.5", engine));
+takagiSugeno.addRule(Rule.parse("if service is excellent and food is delicious then tsTip is generous with 1.0", engine));
+engine.addRuleBlock(takagiSugeno);
+
+
+}
+}
diff --git a/examples/hybrid/tipper.pdf b/examples/hybrid/tipper.pdf
new file mode 100644
index 0000000..482e9cc
--- /dev/null
+++ b/examples/hybrid/tipper.pdf
Binary files differ