diff options
Diffstat (limited to 'examples/takagi-sugeno/approximation.java')
-rw-r--r-- | examples/takagi-sugeno/approximation.java | 127 |
1 files changed, 69 insertions, 58 deletions
diff --git a/examples/takagi-sugeno/approximation.java b/examples/takagi-sugeno/approximation.java index c3d98e1..c2f9d00 100644 --- a/examples/takagi-sugeno/approximation.java +++ b/examples/takagi-sugeno/approximation.java @@ -1,4 +1,5 @@ import com.fuzzylite.*; +import com.fuzzylite.activation.* import com.fuzzylite.defuzzifier.*; import com.fuzzylite.factory.*; import com.fuzzylite.hedge.*; @@ -12,74 +13,84 @@ import com.fuzzylite.variable.*; public class approximation{ public static void main(String[] args){ +//Code automatically generated with fuzzylite 6.0. + Engine engine = new Engine(); -engine.setName("approximation of sin(x)/x"); +engine.setName("approximation"); +engine.setDescription(""); -InputVariable inputVariable = new InputVariable(); -inputVariable.setEnabled(true); -inputVariable.setName("inputX"); -inputVariable.setRange(0.000, 10.000); -inputVariable.addTerm(new Triangle("NEAR_1", 0.000, 1.000, 2.000)); -inputVariable.addTerm(new Triangle("NEAR_2", 1.000, 2.000, 3.000)); -inputVariable.addTerm(new Triangle("NEAR_3", 2.000, 3.000, 4.000)); -inputVariable.addTerm(new Triangle("NEAR_4", 3.000, 4.000, 5.000)); -inputVariable.addTerm(new Triangle("NEAR_5", 4.000, 5.000, 6.000)); -inputVariable.addTerm(new Triangle("NEAR_6", 5.000, 6.000, 7.000)); -inputVariable.addTerm(new Triangle("NEAR_7", 6.000, 7.000, 8.000)); -inputVariable.addTerm(new Triangle("NEAR_8", 7.000, 8.000, 9.000)); -inputVariable.addTerm(new Triangle("NEAR_9", 8.000, 9.000, 10.000)); -engine.addInputVariable(inputVariable); +InputVariable inputX = new InputVariable(); +inputX.setName("inputX"); +inputX.setDescription(""); +inputX.setEnabled(true); +inputX.setRange(0.000, 10.000); +inputX.setLockValueInRange(false); +inputX.addTerm(new Triangle("NEAR_1", 0.000, 1.000, 2.000)); +inputX.addTerm(new Triangle("NEAR_2", 1.000, 2.000, 3.000)); +inputX.addTerm(new Triangle("NEAR_3", 2.000, 3.000, 4.000)); +inputX.addTerm(new Triangle("NEAR_4", 3.000, 4.000, 5.000)); +inputX.addTerm(new Triangle("NEAR_5", 4.000, 5.000, 6.000)); +inputX.addTerm(new Triangle("NEAR_6", 5.000, 6.000, 7.000)); +inputX.addTerm(new Triangle("NEAR_7", 6.000, 7.000, 8.000)); +inputX.addTerm(new Triangle("NEAR_8", 7.000, 8.000, 9.000)); +inputX.addTerm(new Triangle("NEAR_9", 8.000, 9.000, 10.000)); +engine.addInputVariable(inputX); -OutputVariable outputVariable1 = new OutputVariable(); -outputVariable1.setEnabled(true); -outputVariable1.setName("outputFx"); -outputVariable1.setRange(-1.000, 1.000); -outputVariable1.fuzzyOutput().setAccumulation(null); -outputVariable1.setDefuzzifier(new WeightedAverage("TakagiSugeno")); -outputVariable1.setDefaultValue(Double.NaN); -outputVariable1.setLockPreviousOutputValue(true); -outputVariable1.setLockOutputValueInRange(false); -outputVariable1.addTerm(new Constant("f1", 0.840)); -outputVariable1.addTerm(new Constant("f2", 0.450)); -outputVariable1.addTerm(new Constant("f3", 0.040)); -outputVariable1.addTerm(new Constant("f4", -0.180)); -outputVariable1.addTerm(new Constant("f5", -0.190)); -outputVariable1.addTerm(new Constant("f6", -0.040)); -outputVariable1.addTerm(new Constant("f7", 0.090)); -outputVariable1.addTerm(new Constant("f8", 0.120)); -outputVariable1.addTerm(new Constant("f9", 0.040)); -engine.addOutputVariable(outputVariable1); +OutputVariable outputFx = new OutputVariable(); +outputFx.setName("outputFx"); +outputFx.setDescription(""); +outputFx.setEnabled(true); +outputFx.setRange(-1.000, 1.000); +outputFx.setLockValueInRange(false); +outputFx.setAggregation(null); +outputFx.setDefuzzifier(new WeightedAverage("TakagiSugeno")); +outputFx.setDefaultValue(Double.NaN); +outputFx.setLockPreviousValue(true); +outputFx.addTerm(new Constant("f1", 0.840)); +outputFx.addTerm(new Constant("f2", 0.450)); +outputFx.addTerm(new Constant("f3", 0.040)); +outputFx.addTerm(new Constant("f4", -0.180)); +outputFx.addTerm(new Constant("f5", -0.190)); +outputFx.addTerm(new Constant("f6", -0.040)); +outputFx.addTerm(new Constant("f7", 0.090)); +outputFx.addTerm(new Constant("f8", 0.120)); +outputFx.addTerm(new Constant("f9", 0.040)); +engine.addOutputVariable(outputFx); -OutputVariable outputVariable2 = new OutputVariable(); -outputVariable2.setEnabled(true); -outputVariable2.setName("trueFx"); -outputVariable2.setRange(-1.000, 1.000); -outputVariable2.fuzzyOutput().setAccumulation(null); -outputVariable2.setDefuzzifier(new WeightedAverage("Automatic")); -outputVariable2.setDefaultValue(Double.NaN); -outputVariable2.setLockPreviousOutputValue(true); -outputVariable2.setLockOutputValueInRange(false); -outputVariable2.addTerm(Function.create("fx", "sin(inputX)/inputX", engine)); -engine.addOutputVariable(outputVariable2); +OutputVariable trueFx = new OutputVariable(); +trueFx.setName("trueFx"); +trueFx.setDescription(""); +trueFx.setEnabled(true); +trueFx.setRange(-1.000, 1.000); +trueFx.setLockValueInRange(false); +trueFx.setAggregation(null); +trueFx.setDefuzzifier(new WeightedAverage("Automatic")); +trueFx.setDefaultValue(Double.NaN); +trueFx.setLockPreviousValue(true); +trueFx.addTerm(Function.create("fx", "sin(inputX)/inputX", engine)); +engine.addOutputVariable(trueFx); -OutputVariable outputVariable3 = new OutputVariable(); -outputVariable3.setEnabled(true); -outputVariable3.setName("diffFx"); -outputVariable3.setRange(-1.000, 1.000); -outputVariable3.fuzzyOutput().setAccumulation(null); -outputVariable3.setDefuzzifier(new WeightedAverage("Automatic")); -outputVariable3.setDefaultValue(Double.NaN); -outputVariable3.setLockPreviousOutputValue(false); -outputVariable3.setLockOutputValueInRange(false); -outputVariable3.addTerm(Function.create("diff", "fabs(outputFx-trueFx)", engine)); -engine.addOutputVariable(outputVariable3); +OutputVariable diffFx = new OutputVariable(); +diffFx.setName("diffFx"); +diffFx.setDescription(""); +diffFx.setEnabled(true); +diffFx.setRange(-1.000, 1.000); +diffFx.setLockValueInRange(false); +diffFx.setAggregation(null); +diffFx.setDefuzzifier(new WeightedAverage("Automatic")); +diffFx.setDefaultValue(Double.NaN); +diffFx.setLockPreviousValue(false); +diffFx.addTerm(Function.create("diff", "fabs(outputFx-trueFx)", engine)); +engine.addOutputVariable(diffFx); RuleBlock ruleBlock = new RuleBlock(); -ruleBlock.setEnabled(true); ruleBlock.setName(""); +ruleBlock.setDescription(""); +ruleBlock.setEnabled(true); ruleBlock.setConjunction(null); ruleBlock.setDisjunction(null); -ruleBlock.setActivation(null); +ruleBlock.setImplication(null); +ruleBlock.setActivation(new General()); ruleBlock.addRule(Rule.parse("if inputX is NEAR_1 then outputFx is f1", engine)); ruleBlock.addRule(Rule.parse("if inputX is NEAR_2 then outputFx is f2", engine)); ruleBlock.addRule(Rule.parse("if inputX is NEAR_3 then outputFx is f3", engine)); |