Engine.h 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. /*
  2. Author: Juan Rada-Vilela, Ph.D.
  3. Copyright (C) 2010-2014 FuzzyLite Limited
  4. All rights reserved
  5. This file is part of fuzzylite.
  6. fuzzylite is free software: you can redistribute it and/or modify it under
  7. the terms of the GNU Lesser General Public License as published by the Free
  8. Software Foundation, either version 3 of the License, or (at your option)
  9. any later version.
  10. fuzzylite is distributed in the hope that it will be useful, but WITHOUT
  11. ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  12. FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
  13. for more details.
  14. You should have received a copy of the GNU Lesser General Public License
  15. along with fuzzylite. If not, see <http://www.gnu.org/licenses/>.
  16. fuzzylite™ is a trademark of FuzzyLite Limited.
  17. */
  18. #ifndef FL_ENGINE_H
  19. #define FL_ENGINE_H
  20. #include "fl/fuzzylite.h"
  21. #include "fl/defuzzifier/IntegralDefuzzifier.h"
  22. #include <string>
  23. #include <vector>
  24. namespace fl {
  25. class InputVariable;
  26. class OutputVariable;
  27. class Variable;
  28. class RuleBlock;
  29. class Hedge;
  30. class TNorm;
  31. class SNorm;
  32. class Defuzzifier;
  33. class FL_API Engine {
  34. private:
  35. void copyFrom(const Engine& source);
  36. protected:
  37. std::string _name;
  38. std::vector<InputVariable*> _inputVariables;
  39. std::vector<OutputVariable*> _outputVariables;
  40. std::vector<RuleBlock*> _ruleblocks;
  41. void updateReferences() const;
  42. public:
  43. Engine(const std::string& name = "");
  44. Engine(const Engine& other);
  45. Engine& operator=(const Engine& other);
  46. virtual ~Engine();
  47. FL_DEFAULT_MOVE(Engine)
  48. virtual void configure(const std::string& conjunctionT,
  49. const std::string& disjunctionS,
  50. const std::string& activationT,
  51. const std::string& accumulationS,
  52. const std::string& defuzzifier,
  53. int resolution = IntegralDefuzzifier::defaultResolution());
  54. virtual void configure(TNorm* conjunction, SNorm* disjunction,
  55. TNorm* activation, SNorm* accumulation,
  56. Defuzzifier* defuzzifier);
  57. virtual bool isReady(std::string* status = fl::null) const;
  58. virtual void process();
  59. virtual void restart();
  60. virtual void setName(const std::string& name);
  61. virtual std::string getName() const;
  62. virtual void setInputValue(const std::string& name, scalar value);
  63. virtual scalar getOutputValue(const std::string& name);
  64. virtual std::string toString() const;
  65. enum Type {
  66. Mamdani, Larsen, TakagiSugeno,
  67. Tsukamoto, InverseTsukamoto, Hybrid, Unknown
  68. };
  69. virtual Type type(std::string* name = fl::null, std::string* reason = fl::null) const;
  70. virtual Engine* clone() const;
  71. virtual std::vector<Variable*> variables() const;
  72. /**
  73. * Operations for iterable datatype _inputVariables
  74. */
  75. virtual void addInputVariable(InputVariable* inputVariable);
  76. virtual InputVariable* setInputVariable(InputVariable* inputVariable, int index);
  77. virtual void insertInputVariable(InputVariable* inputVariable, int index);
  78. virtual InputVariable* getInputVariable(int index) const;
  79. virtual InputVariable* getInputVariable(const std::string& name) const;
  80. virtual InputVariable* removeInputVariable(int index);
  81. virtual InputVariable* removeInputVariable(const std::string& name);
  82. virtual bool hasInputVariable(const std::string& name) const;
  83. virtual int numberOfInputVariables() const;
  84. virtual const std::vector<InputVariable*>& inputVariables() const;
  85. virtual void setInputVariables(const std::vector<InputVariable*>& inputVariables);
  86. virtual std::vector<InputVariable*>& inputVariables();
  87. /**
  88. * Operations for iterable datatype _outputVariables
  89. */
  90. virtual void addOutputVariable(OutputVariable* outputVariable);
  91. virtual OutputVariable* setOutputVariable(OutputVariable* outputVariable, int index);
  92. virtual void insertOutputVariable(OutputVariable* outputVariable, int index);
  93. virtual OutputVariable* getOutputVariable(int index) const;
  94. virtual OutputVariable* getOutputVariable(const std::string& name) const;
  95. virtual bool hasOutputVariable(const std::string& name) const;
  96. virtual OutputVariable* removeOutputVariable(int index);
  97. virtual OutputVariable* removeOutputVariable(const std::string& name);
  98. virtual int numberOfOutputVariables() const;
  99. virtual const std::vector<OutputVariable*>& outputVariables() const;
  100. virtual void setOutputVariables(const std::vector<OutputVariable*>& outputVariables);
  101. virtual std::vector<OutputVariable*>& outputVariables();
  102. /**
  103. * Operations for iterable datatype _ruleblocks
  104. */
  105. virtual void addRuleBlock(RuleBlock* ruleblock);
  106. virtual RuleBlock* setRuleBlock(RuleBlock* ruleBlock, int index);
  107. virtual void insertRuleBlock(RuleBlock* ruleblock, int index);
  108. virtual RuleBlock* getRuleBlock(int index) const;
  109. virtual RuleBlock* getRuleBlock(const std::string& name) const;
  110. virtual bool hasRuleBlock(const std::string& name) const;
  111. virtual RuleBlock* removeRuleBlock(int index);
  112. virtual RuleBlock* removeRuleBlock(const std::string& name);
  113. virtual int numberOfRuleBlocks() const;
  114. virtual const std::vector<RuleBlock*>& ruleBlocks() const;
  115. virtual void setRuleBlocks(const std::vector<RuleBlock*>& ruleBlocks);
  116. virtual std::vector<RuleBlock*>& ruleBlocks();
  117. };
  118. }
  119. #endif /* FL_ENGINE_H */