1 #include <fl/Headers.h>
2 
main(int argc,char ** argv)3 int main(int argc, char** argv){
4 //Code automatically generated with fuzzylite 6.0.
5 
6 using namespace fl;
7 
8 Engine* engine = new Engine;
9 engine->setName("investment_portfolio");
10 engine->setDescription("");
11 
12 InputVariable* Age = new InputVariable;
13 Age->setName("Age");
14 Age->setDescription("");
15 Age->setEnabled(true);
16 Age->setRange(20.000, 100.000);
17 Age->setLockValueInRange(false);
18 Age->addTerm(new ZShape("Young", 30.000, 90.000));
19 Age->addTerm(new SShape("Old", 30.000, 90.000));
20 engine->addInputVariable(Age);
21 
22 InputVariable* RiskTolerance = new InputVariable;
23 RiskTolerance->setName("RiskTolerance");
24 RiskTolerance->setDescription("");
25 RiskTolerance->setEnabled(true);
26 RiskTolerance->setRange(0.000, 10.000);
27 RiskTolerance->setLockValueInRange(false);
28 RiskTolerance->addTerm(new ZShape("Low", 2.000, 8.000));
29 RiskTolerance->addTerm(new SShape("High", 2.000, 8.000));
30 engine->addInputVariable(RiskTolerance);
31 
32 OutputVariable* PercentageInStocks = new OutputVariable;
33 PercentageInStocks->setName("PercentageInStocks");
34 PercentageInStocks->setDescription("");
35 PercentageInStocks->setEnabled(true);
36 PercentageInStocks->setRange(0.000, 100.000);
37 PercentageInStocks->setLockValueInRange(false);
38 PercentageInStocks->setAggregation(new EinsteinSum);
39 PercentageInStocks->setDefuzzifier(new Centroid(200));
40 PercentageInStocks->setDefaultValue(fl::nan);
41 PercentageInStocks->setLockPreviousValue(false);
42 PercentageInStocks->addTerm(new Gaussian("AboutFifteen", 15.000, 10.000));
43 PercentageInStocks->addTerm(new Gaussian("AboutFifty", 50.000, 10.000));
44 PercentageInStocks->addTerm(new Gaussian("AboutEightyFive", 85.000, 10.000));
45 engine->addOutputVariable(PercentageInStocks);
46 
47 RuleBlock* ruleBlock = new RuleBlock;
48 ruleBlock->setName("");
49 ruleBlock->setDescription("");
50 ruleBlock->setEnabled(true);
51 ruleBlock->setConjunction(new EinsteinProduct);
52 ruleBlock->setDisjunction(new EinsteinSum);
53 ruleBlock->setImplication(new EinsteinProduct);
54 ruleBlock->setActivation(new General);
55 ruleBlock->addRule(Rule::parse("if Age is Young or RiskTolerance is High then PercentageInStocks is AboutEightyFive", engine));
56 ruleBlock->addRule(Rule::parse("if Age is Old or RiskTolerance is Low then PercentageInStocks is AboutFifteen", engine));
57 ruleBlock->addRule(Rule::parse("if Age is not extremely Old and RiskTolerance is not extremely Low then PercentageInStocks is AboutFifty with 0.500", engine));
58 ruleBlock->addRule(Rule::parse("if Age is not extremely Young and RiskTolerance is not extremely High then PercentageInStocks is AboutFifty with 0.500", engine));
59 engine->addRuleBlock(ruleBlock);
60 
61 
62 }
63