项目作者: cschen1205

项目描述 :
Package provides java implementation of fuzzy logic controller
高级语言: Java
项目地址: git://github.com/cschen1205/java-fuzzy-logic.git
创建时间: 2017-06-03T03:41:36Z
项目社区:https://github.com/cschen1205/java-fuzzy-logic

开源协议:MIT License

下载


java-fuzzy-logic

Package provides java implementation of fuzzy logic controller

Build Status Coverage Status

Install

Add the following dependency into your POM file:

  1. <dependency>
  2. <groupId>com.github.cschen1205</groupId>
  3. <artifactId>java-fuzzy-logic</artifactId>
  4. <version>1.0.1</version>
  5. </dependency>

Usage

Below is an example to create and run a fuzzy-logic-controller in java

  1. RuleInferenceEngine rie=new RuleInferenceEngine();
  2. FuzzySet output=new FuzzySet("Output", -100, 100, 1);
  3. output.addMembership("Cooling", new FuzzyReverseGrade(-50, 0));
  4. output.addMembership("Zero", new FuzzyTriangle(-50, 0, 50));
  5. output.addMembership("Heating", new FuzzyGrade(0, 50));
  6. rie.addFuzzySet(output.getName(), output);
  7. FuzzySet tempError=new FuzzySet("Temperature Error", -4, 4, 0.05);
  8. tempError.addMembership("Negative", new FuzzyReverseGrade(-2, 0));
  9. tempError.addMembership("Zero", new FuzzyTriangle(-2, 0, 2));
  10. tempError.addMembership("Positive", new FuzzyGrade(0, 2));
  11. rie.addFuzzySet(tempError.getName(), tempError);
  12. FuzzySet tempErrorDot=new FuzzySet("Temperature Error", -10, 10, 0.1);
  13. tempErrorDot.addMembership("Negative", new FuzzyReverseGrade(-5, 0));
  14. tempErrorDot.addMembership("Zero", new FuzzyTriangle(-5, 0, 5));
  15. tempErrorDot.addMembership("Positive", new FuzzyGrade(0, 5));
  16. rie.addFuzzySet(tempErrorDot.getName(), tempErrorDot);
  17. /*
  18. 1. If (e < 0) AND (er < 0) then Cool 0.5 & 0.0 = 0.0
  19. 2. If (e = 0) AND (er < 0) then Heat 0.5 & 0.0 = 0.0
  20. 3. If (e > 0) AND (er < 0) then Heat 0.0 & 0.0 = 0.0
  21. 4. If (e < 0) AND (er = 0) then Cool 0.5 & 0.5 = 0.5
  22. 5. If (e = 0) AND (er = 0) then No_Chng 0.5 & 0.5 = 0.5
  23. 6. If (e > 0) AND (er = 0) then Heat 0.0 & 0.5 = 0.0
  24. 7. If (e < 0) AND (er > 0) then Cool 0.5 & 0.5 = 0.5
  25. 8. If (e = 0) AND (er > 0) then Cool 0.5 & 0.5 = 0.5
  26. 9. If (e > 0) AND (er > 0) then Heat 0.0 & 0.5 = 0.0
  27. */
  28. Rule rule=new Rule("Rule 1");
  29. rule.addAntecedent(new Clause(tempError, "Is", "Negative"));
  30. rule.addAntecedent(new Clause(tempErrorDot, "Is", "Negative"));
  31. rule.setConsequent(new Clause(output, "Is", "Cooling"));
  32. rie.addRule(rule);
  33. rule=new Rule("Rule 2");
  34. rule.addAntecedent(new Clause(tempError, "Is", "Zero"));
  35. rule.addAntecedent(new Clause(tempErrorDot, "Is", "Negative"));
  36. rule.setConsequent(new Clause(output, "Is", "Heating"));
  37. rie.addRule(rule);
  38. rule=new Rule("Rule 3");
  39. rule.addAntecedent(new Clause(tempError, "Is", "Positive"));
  40. rule.addAntecedent(new Clause(tempErrorDot, "Is", "Negative"));
  41. rule.setConsequent(new Clause(output, "Is", "Heating"));
  42. rie.addRule(rule);
  43. rule=new Rule("Rule 4");
  44. rule.addAntecedent(new Clause(tempError, "Is", "Negative"));
  45. rule.addAntecedent(new Clause(tempErrorDot, "Is", "Zero"));
  46. rule.setConsequent(new Clause(output, "Is", "Cooling"));
  47. rie.addRule(rule);
  48. rule=new Rule("Rule 5");
  49. rule.addAntecedent(new Clause(tempError, "Is", "Zero"));
  50. rule.addAntecedent(new Clause(tempErrorDot, "Is", "Zero"));
  51. rule.setConsequent(new Clause(output, "Is", "Zero"));
  52. rie.addRule(rule);
  53. rule=new Rule("Rule 6");
  54. rule.addAntecedent(new Clause(tempError, "Is", "Positive"));
  55. rule.addAntecedent(new Clause(tempErrorDot, "Is", "Zero"));
  56. rule.setConsequent(new Clause(output, "Is", "Heating"));
  57. rie.addRule(rule);
  58. rule=new Rule("Rule 7");
  59. rule.addAntecedent(new Clause(tempError, "Is", "Negative"));
  60. rule.addAntecedent(new Clause(tempErrorDot, "Is", "Positive"));
  61. rule.setConsequent(new Clause(output, "Is", "Cooling"));
  62. rie.addRule(rule);
  63. rule=new Rule("Rule 8");
  64. rule.addAntecedent(new Clause(tempError, "Is", "Zero"));
  65. rule.addAntecedent(new Clause(tempErrorDot, "Is", "Positive"));
  66. rule.setConsequent(new Clause(output, "Is", "Cooling"));
  67. rie.addRule(rule);
  68. rule=new Rule("Rule 9");
  69. rule.addAntecedent(new Clause(tempError, "Is", "Positive"));
  70. rule.addAntecedent(new Clause(tempErrorDot, "Is", "Positive"));
  71. rule.setConsequent(new Clause(output, "Is", "Heating"));
  72. rie.addRule(rule);
  73. tempError.setX(-1.0);
  74. logger.info("For Temperature Error: {}", tempError.getX());
  75. logger.info("Negative: "+tempError.GetMembership("Negative").degree(-1.0));
  76. logger.info("Zero: "+tempError.GetMembership("Zero").degree(-1.0));
  77. logger.info("Positive: "+tempError.GetMembership("Positive").degree(-1.0));
  78. tempErrorDot.setX(2.5);
  79. logger.info("For Temperature Error Dot: {}", tempErrorDot.getX());
  80. logger.info("Negative: "+tempErrorDot.GetMembership("Negative").degree(2.5));
  81. logger.info("Zero: "+tempErrorDot.GetMembership("Zero").degree(2.5));
  82. logger.info("Positive: "+tempErrorDot.GetMembership("Positive").degree(2.5));
  83. rie.Infer(output);
  84. logger.info("output: {} = {}", output.getName(), output.getX());