ChangeLog 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. Version 5.0
  2. * Modified Function::Unary and Binary to take scalar instead of double
  3. * Fixed building using -DFL_USE_FLOAT=ON
  4. * Added deductive type of Engine with Engine::type()
  5. * Fixed minor memory leak at RuleBlock (conjunction, disjunction, activation)
  6. * Fixed minor memory leak at Accumulated (accumulation, thresholded terms)
  7. * Fixed minor memory leak at OutputVariable (defuzzifier)
  8. * Fixed minor memory leak at Function::Node
  9. * Fixed minor memory leak at FactoryManager
  10. * Improved handling of Exceptions
  11. * Modified FclExporter and FisExporter to provide backward compatibility with FCL and FIS formats
  12. * Updated the FIS and FCL examples for backward compatibility
  13. * Included the original example files
  14. * Updated FLD examples produced from the engines of the original examples
  15. * Fixed some original examples of takagi-sugeno to use AlgebraicProduct activation
  16. * FldExporter no longer restarts the engine
  17. * Fixed rethrowing of exceptions to provide proper information about errors!
  18. * Catching std::exceptions where possible to avoid unexpected exceptions
  19. * FldExporter exports from a custom input dataset
  20. * Console includes option to read custom input dataset from file
  21. * Console provides more information about its usage
  22. * Renamed methods FldExporter::toWriter() to FldExporter::write()
  23. * Removed variable and methods for property FldExporter::maximum
  24. * Accuracy improvements importing fis files with large number of decimals
  25. * Updated FLD examples to reflect accuracy
  26. * Changed operation for multiple hedges to operate from last to first
  27. * Fixed OutputVariable to store last valid output value regardless of locks
  28. * Renamed Op::isNan to Op::isNaN
  29. * New OutputVariable::(get|set)OutputValue to store value from defuzzification
  30. * Changed OutputVariable::defuzzify to store its output value
  31. * Changed return type of scalar OutputVariable::defuzzify to void OutputVariable::defuzzify
  32. * Renamed OutputVariable::(get|set)LastValidOutput to OutputVariable::(get|set)LastValidOutputValue
  33. * Removed OutputVariable::defuzzifyNoLocks
  34. * Removed const from Term* Accumulated::(get|set)Accumulation
  35. * Added InputVariable::fuzzyInputValue and OutputVariable::fuzzyOutputValue
  36. * Removed defaults in Engine::configure
  37. * Added Engine::configure without conjuntion and disjuntion
  38. * Added parameter string to Engine::type
  39. * Changed Engine::isReady
  40. * Correct handling of integral defuzzification with min|max=NaN|Inf
  41. * Added method Rule::isLoaded to determine whether a rule is to be activated
  42. * Added method Rule::unload to allow existence of invalid rules
  43. * Added methods Engine::set((Input|Output)Variables), Engine::setRuleBlocks
  44. * Added method RuleBlock::setRules
  45. * Changed visibility of Rule::setText to public
  46. * Added method Rule::load(const Engine*)
  47. * Renamed term Thresholded to Activated
  48. * Renamed Thresholded::(set|get)Threshold to Activated::(set|get)Degree
  49. * Removed variable Rule::FL_ASSIGNS="=" and method Rule::assignsKeyword()
  50. * Modified original takagi-sugeno examples to reflect proper activation and accumulation
  51. * Moved Engine::_hedges (and methods) to Rule::_hedges
  52. * Renamed Antecedent::(get|set)Root to Antecedent::(get|set)Expression
  53. * Added (Antecedent|Consequent)::(get|set)Text
  54. * Added (Antecedent|Consequent)::load|unload
  55. * Renamed typedef Factory::Creator to Factory::Constructor
  56. * Added an M-file to compare output values of fuzzylite engines with Matlab
  57. * Removed const from Norms in RuleBlock::(get|set)(Activation|Conjunction|Disjunction)
  58. * Deleted method Op::repeat
  59. * Added built-in functions gt,lt,ge,le,eq and operator !
  60. * Renamed Term::copy to Term::clone in every Term
  61. * Added copy constructors and assignment operators to (Input|Output)Variable
  62. * Added copy constructors and assignment operators to Accumulated
  63. * Merged Function::Operator and Function::BuiltInFunction into Function::Element
  64. * Created FunctionFactory for Function::Elements
  65. * IMPORTANT: Changed starting precedence of Function::Element::Operators to 10 (refer to FunctionFactory)
  66. * Setters of FactoryManager no longer delete previous factories
  67. * Renamed Factory<T>::(register|deregister)Class to Factory<T>::(register|deregister)Constructor
  68. * Renamed Factory<T> to ConstructionFactory<T>
  69. * Created CloningFactory<T>
  70. * Moved functions and operators of term Function to a FunctionFactory
  71. * Added clone methods to Defuzzifiers, Hedges, Norms, and Terms
  72. * Changed Exception::btCallStack(const int) to Exception::btCallStack(void)
  73. * Using std::auto_ptr to (T|S)Norms in RuleBlock, SNorm in Accumulated, and Defuzzifier in OutputVariable
  74. * Added methods Engine::set((Input|Output)Variable) and Engine::setRuleBlock()
  75. * Added method RuleBlock::reloadRules()
  76. * Changed Linear pointers to input variables for a pointer to Engine
  77. * Added support to compare infinity values with fl::Op::isEq and therefore other comparison operators
  78. * Parameters of all terms are set to fl::nan by default
  79. * Added methods Engine::(input|output)Variables() and ::ruleBlocks() to return mutable references
  80. * Added method Variable::terms() to return mutable reference
  81. * Added method RuleBlock::rules() to return mutable reference
  82. * Added methods Ramp::direction() and Sigmoid::direction() to represent direction of slope
  83. * Added method fl::Op::isFinite(x) to check x is not (nan or inf)
  84. * Changed fl::Op::isEq(a,b) to return true if a = b = NaN
  85. * Added method Accumulated::terms() to return mutable reference
  86. * Changed visibility of Linear::coefficients to protected
  87. * Added methods Linear::coefficients(), Linear::setCoefficients()
  88. * Removed public variables Discrete::x,y
  89. * Added in Discrete a typedef to std::pair<scalar, scalar> Pair, and changed signatures of methods and types of their parameters
  90. * Changed representation of Discrete::(x,y) from std::vector<scalar> to std::vector<Pair>
  91. * Added methods Discrete::setXY(), Discrete::xy(), ::xy(int) to set and get new representation
  92. * Added methods Discrete::toPairs(std::vector<scalar>) and Discrete::toVector(std::vector<Pair>)
  93. * Added method Discrete::formatXY() to get pairs (x,y) nicely formatted
  94. * Linear term no longer throws exception when inputVariables != |coefficients|
  95. * Changed visibility of Function::root to protected and renamed it to Function::_root
  96. * Added method Function::root() to return pointer to Function::_root
  97. * Added option to prefix the namespace in CppExporter, by default it does not prefix
  98. * Added method OutputVariable::clear() to restart the output variable
  99. * Renamed variable OutputVariable::_lastValidOutputValue to ::_previousOutputValue
  100. * Renamed method OutputVariable::(get|set)LastValidOutputValue to ::(get|set)PreviousOutputValue
  101. * Renamed variable OutputVariable::_lockOutputRange to ::_lockOutputValueInRange
  102. * Renamed method OutputVariable::setLockOutputRange() to ::setLockOutputValueInRange
  103. * Renamed method OutputVariable::isLockingOutputRange() to ::isLockedOutputValueInRange
  104. * Renamed variable OutputVariable::_lockValidOutput to ::_lockPreviousOutputValue
  105. * Renamed method OutputVariable::setLockValidOutput() to ::setLockPreviousOutputValue
  106. * Renamed method OutputVariable::isLockingValidOutput() to ::isLockedPreviousOutputValue
  107. * Renamed FLL property 'lock-valid' to 'lock-previous'
  108. * Renamed FIS property 'LockValid' to 'LockPrevious'
  109. * Renamed FCL property 'LOCK: VALID' to 'LOCK: PREVIOUS'
  110. * Added method Engine::variables() to retrieve both Input and OutputVariables
  111. * Added method Term::updateReference(Term*, Engine*) to ensure Linear and Function terms to update references of engines
  112. * Added method Engine::updateReferences() to update references to the engine in its terms.
  113. * Added in Discrete a typedef to std::pair<scalar, scalar> Pair, and changed signatures of methods and types of their parameters
  114. * Added terms: Concave, Cosine and Spike
  115. * Renamed methods Triangle::(set|get)(A|B|C) to (set|get)(Vertex(A|B|C))
  116. * Renamed methods Trapezoid::(set|get)(A|B|C|D) to (set|get)(Vertex(A|B|C|D))
  117. * Removed method fuzzylite::configuration()
  118. * Renamed MACRO FL_DEBUG to FL_DBG
  119. * Renamed MACRO (FL_BEGIN_DEBUG_BLOCK and FL_END_DEBUG_BLOCK) to (FL_DEBUG_BEGIN and FL_DEBUG_END)
  120. * Renamed methods in (Fis|Fcl)Importers::extract? to ::parse?
  121. * Made defaultResolution a static property of IntegralDefuzzifiers
  122. * Added method Engine::type(name, reason) to show type and reason why type
  123. * Added method Engine::clone()
  124. * Added support for Tsukamoto with Concave terms
  125. * Changed Accumulated to take Activated* terms instead of const Terms*
  126. * Deleted class Tsukamoto
  127. * Created class WeightedDefuzzifier from which Weighted(Average|Sum) derive with options: Automatic|TakagiSugeno|Tsukamoto
  128. * Added methods WeightedDefuzzifier::tsukamoto() and ::inferType()
  129. * Added benchmarks for fuzzylite in Linux
  130. * Created the FuzzyLite Interactive Console
  131. * Added basic rule chaining such that Output Variables can be utilized as antecedents
  132. * Added two examples for rule chaining: mamdani/Laundry.fll and mamdani/SimpleDimmerInverse.fll
  133. * Added Term::(get|set)Height and changed all terms accordingly
  134. * Renamed method Op::makeValidId to Op::validName, which now returns "unnamed" for empty strings.
  135. * Converted examples/original/*.fis to examples/original/*.fll
  136. * Removed Exception Specification from methods in Discrete, Linear and Function terms
  137. * Changed name of debug libraries to fuzzylited.dll and fuzzylite-staticd.lib
  138. * Removed method Operation::toScalar(std::string, bool, scalar)
  139. * Added method Operation::toScalar(std::string) [throws Exception], and ::toScalar(std::string, scalar alternative) throw()
  140. * Added method ImEx::(from|to)File to import and export engines using files
  141. * WeightedAverage and WeightedSum without Activation operators have default behaviour, i.e., AlgebraicProduct
  142. * FactoryManager utilizes smart pointers.
  143. * Rule utilizes smart pointers for Antecedent and Consequent
  144. * Exceptions are thrown when Conjunction, Disjunction, Activation and Accumulation operators are NULL when they are required
  145. * Exception is thrown when Defuzzifier is required and not set.
  146. * Added support for C++11 utilizing smart pointers, identifiers (override, noexcept), and delete identifiers to DISABLE_COPY(Class)
  147. * Macros for identifiers are FL_IOVERRIDE, FL_IFINAL, FL_IDEFAULT, FL_IDELETE, and FL_INOEXCEPT (fl/fuzzylite.h)
  148. * Added macro FL_unique_ptr to refer to std::auto_ptr (C++98) or std::unique_ptr (C++11), and its respective FL_move_ptr(x) to move a smart pointer.
  149. * Added constant fl::null to refer to 0L (C++98) or nullptr (C++11)
  150. * Added macros FL_DEFAULT_COPY(Class), FL_DEFAULT_MOVE(Class), and FL_DEFAULT_COPY_AND_MOVE(Class) for default copy and move constructors and operators
  151. * Added build.sh to build fuzzylite
  152. * Changed default to fuzzylite::_macheps = 1e-6;
  153. * Renamed macro FL_EXPORTS to FL_API
  154. * Added macro FL_SHARED_LIBRARY and FL_STATIC_LIBRARY to be defined when building shared and static libraries
  155. Version 4.0
  156. * FuzzyRule merged with Rule, and FuzzyRule deleted.
  157. * FuzzyAntecedent merged with Antecedent, and FuzzyAntecedent deleted
  158. * FuzzyConsequent merged with Consequent, and FuzzyConsequent deleted
  159. * FuzzyExpression renamed Expression
  160. * Renamed Rule::get/setUnparsedRule to get/setText
  161. * Renamed RuleBlock::get/set(Tnorm|Snorm) to get/set(Conjunction|Disjunction)
  162. * Renamed RuleBlock::fireRules to activate
  163. * Renamed Rule::fireStrength to activationDegree, fire to activate
  164. * Renamed Consequent::fire to modify
  165. * Created IntegralDefuzzifier to extract divisions from Defuzzifier
  166. * Renamed divisions from IntegralDefuzzifier to resolution, FL_DIVISIONS to FL_RESOLUTION
  167. * Deleted MaximumDefuzzifier
  168. * Centroid, Bisector, and Largest/Smallest/Mean Defuzzifiers inherit from IntegralDefuzzifier
  169. * Changed names of arithmetic operations in fl::Operation
  170. * Renamed Function::get/set(Infix) to get/set(Formula)
  171. * Renamed InputVariable::get/set(Input) to get/set(InputValue)
  172. * Renamed Antecedent::firingStrength to activationDegree
  173. * Renamed Antecedent::toString/(Prefix,Infix,Postfix) to to/(Prefix,Infix,Postfix)
  174. * Renamed Rule::FL_ASSIGN to Rule::FL_EQUALS
  175. * New method restart in Engine
  176. * New methods Engine::setInputValue(name, value), scalar Engine::getOutputValue(name)
  177. * Renamed Op::str(vector/varargs) to Op::join(vector/varargs)
  178. * Refactored associtativity, unary and binary properties in Element within Function
  179. * Removed unnecessary Hedges creation upon importing engines, now is automatic via Factories
  180. * Created the JavaExporter
  181. * Renamed methods within Fis/Fcl/CppExporter to toString(*);
  182. * Extracted TNorms and SNorms from TNorm.h/cpp and SNorm.h/cpp
  183. * Created proper Factories with registration of classes and constructors
  184. * Renamed method Factory::create to Factory::createInstance
  185. * Added static constructor method to every Defuzzifier, Hedge, TNorm, and SNorm
  186. * Removed FL_PRECISION, FL_DECIMALS as Macros, and created static variables in fuzzylite.h
  187. * Renamed FL_PRECISION to macheps, i.e., machine epsilon to differentiate real numbers
  188. * Removed FL_DEBUG and created a static variable in fuzzylite.h
  189. * Removed FL_NO_LOG as it is now controlled with fuzzylite::logging(), previously named logEnabled()
  190. * Libraries and Console application are both built in folder bin/ (previously libraries were at lib/)
  191. * Removed Engine::toStringFis/Fcl/Cpp to encourage use of Fcl/Fis/CppExporters instead
  192. * Renamed Op::logical_and to Op::logicalAnd, Op::logical_or to Op::logicalOr
  193. * Added support to Fis/FclImporters to treat comments (%,#,//,/*) in fis and fcl files
  194. * Created the Console application instead of previous demo
  195. * Added Variable::range() to return (maximum - minimum)
  196. * Removed Variable::isEmpty, use Variable::terms().empty()
  197. * Removed RuleBlock::isEmpty, use RuleBlock::rules().empty()
  198. * Created method Op::makeValidId to ensure names are valid
  199. * Engine, Variable and Term::toString return FllExport::toString
  200. * Created Term::parameters to return list of parameter values as string separated by spaces
  201. * Created Term::configure to configure from Term::parameters
  202. * FclImEx import and export terms using Term::parameters
  203. * Created the FuzzyLite Language in FllImporter and FllExporter
  204. * Created the FuzzyLite Dataset FldExporter
  205. * Added property Enable to Engine, Variable and RuleBlock
  206. * Extended FCL and FIS to consider Enabled properties
  207. * Changed Engine::defuzzify() to consider enabled variables
  208. * Changed Engine::process() to consider enabled rule blocks
  209. * Changed OutputVariable::output() to OutputVariable::fuzzyOutput()
  210. * Renamed Rectangle::minimum/maximum to Rectangle::start/end
  211. * Renamed fuzzylite::shortVersion to fuzzylite::version
  212. * Improved accuracy of Triangle and Trapezoid