diff options
Diffstat (limited to 'examples/takagi-sugeno/approximation.java')
-rw-r--r-- | examples/takagi-sugeno/approximation.java | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/examples/takagi-sugeno/approximation.java b/examples/takagi-sugeno/approximation.java new file mode 100644 index 0000000..c3d98e1 --- /dev/null +++ b/examples/takagi-sugeno/approximation.java @@ -0,0 +1,97 @@ +import com.fuzzylite.*; +import com.fuzzylite.defuzzifier.*; +import com.fuzzylite.factory.*; +import com.fuzzylite.hedge.*; +import com.fuzzylite.imex.*; +import com.fuzzylite.norm.*; +import com.fuzzylite.norm.s.*; +import com.fuzzylite.norm.t.*; +import com.fuzzylite.rule.*; +import com.fuzzylite.term.*; +import com.fuzzylite.variable.*; + +public class approximation{ +public static void main(String[] args){ +Engine engine = new Engine(); +engine.setName("approximation of sin(x)/x"); + +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); + +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 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 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); + +RuleBlock ruleBlock = new RuleBlock(); +ruleBlock.setEnabled(true); +ruleBlock.setName(""); +ruleBlock.setConjunction(null); +ruleBlock.setDisjunction(null); +ruleBlock.setActivation(null); +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)); +ruleBlock.addRule(Rule.parse("if inputX is NEAR_4 then outputFx is f4", engine)); +ruleBlock.addRule(Rule.parse("if inputX is NEAR_5 then outputFx is f5", engine)); +ruleBlock.addRule(Rule.parse("if inputX is NEAR_6 then outputFx is f6", engine)); +ruleBlock.addRule(Rule.parse("if inputX is NEAR_7 then outputFx is f7", engine)); +ruleBlock.addRule(Rule.parse("if inputX is NEAR_8 then outputFx is f8", engine)); +ruleBlock.addRule(Rule.parse("if inputX is NEAR_9 then outputFx is f9", engine)); +ruleBlock.addRule(Rule.parse("if inputX is any then trueFx is fx and diffFx is diff", engine)); +engine.addRuleBlock(ruleBlock); + + +} +} |