home Forums # Technical Support JAVA API Reply To: JAVA API

#1512
Unknown
Member

hi

how I can get the value of the output fuzzy set and the value of the rules that were activated?

regards

package ejemfuzzy1;

import com.fuzzylite.Engine;
import com.fuzzylite.defuzzifier.Centroid;
import com.fuzzylite.norm.s.Maximum;
import com.fuzzylite.norm.t.Minimum;
import com.fuzzylite.rule.Rule;
import com.fuzzylite.rule.RuleBlock;
import com.fuzzylite.term.Trapezoid;
import com.fuzzylite.term.Triangle;
import com.fuzzylite.variable.InputVariable;
import com.fuzzylite.variable.OutputVariable;

/**
 *
 * @author Fernandinho
 */
public class EjemFuzzy1 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        
        Engine engine = new Engine();
        engine.setName("ejemplo");
        
        InputVariable project_funding = new InputVariable();
        project_funding.setEnabled(true);
        project_funding.setName("ProjectFunding");
        project_funding.setRange(0.000, 100.000);
        project_funding.addTerm(new Trapezoid("INADEQUATE", 0.000, 0.000, 20.000, 50.000));
        project_funding.addTerm(new Triangle("MARGINAL", 31.250, 50.000, 68.750));
        project_funding.addTerm(new Trapezoid("ADEQUATE", 50.000, 80.000, 100.000, 100.000));
        engine.addInputVariable(project_funding);
        
        InputVariable project_staffing = new InputVariable();
        project_staffing.setEnabled(true);
        project_staffing.setName("ProjectStaffing");
        project_staffing.setRange(0.000, 100.000);
        project_staffing.addTerm(new Trapezoid("SMALL", 0.000, 0.000, 30.000, 63.333));
        project_staffing.addTerm(new Trapezoid("LARGE", 40.000, 68.57, 100.000, 100.000));
        engine.addInputVariable(project_staffing);
        
        OutputVariable risk = new OutputVariable();
        risk.setEnabled(true);
        risk.setName("Risk");
        risk.setRange(0.000, 100.000);
        risk.fuzzyOutput().setAccumulation(new Maximum());
        risk.setDefuzzifier(new Centroid());
        risk.setDefaultValue(Double.NaN);
        risk.setLockValidOutput(false);
        risk.setLockOutputRange(false);
        risk.addTerm(new Trapezoid("LOW", 0.000, 0.000, 20.000, 40.000 ));
        risk.addTerm(new Triangle("NORMAL", 20.000, 50.000, 80.000));
        risk.addTerm(new Trapezoid("HIGH", 60.000, 80.000, 100.000, 100.000));
        engine.addOutputVariable(risk);
        
        RuleBlock ruleBlock = new RuleBlock();
        ruleBlock.setEnabled(true);
        ruleBlock.setName("");
        ruleBlock.setConjunction(new Minimum());
        ruleBlock.setDisjunction(new Maximum());
        ruleBlock.setActivation(new Minimum());
        ruleBlock.addRule(Rule.parse("if ProjectFunding is ADEQUATE or ProjectStaffing is SMALL then Risk is LOW",engine));
        ruleBlock.addRule(Rule.parse("if ProjectFunding is MARGINAL and ProjectStaffing is LARGE then Risk is NORMAL", engine));
        ruleBlock.addRule(Rule.parse("if ProjectFunding is INADEQUATE then Risk is HIGH",engine));
        engine.addRuleBlock(ruleBlock);
        
        StringBuilder status = new StringBuilder();
        if (!engine.isReady(status)) 
            throw new RuntimeException("No fue posible generar el archivo. "
            + "Los siguientes errores fueron encontrados:\n"
            + status.toString());

        engine.setInputValue("ProjectFunding", 35.000);
        engine.setInputValue("ProjectStaffing", 60.000);
        engine.process();

        System.out.println(engine.getOutputValue("Risk"));
                
    }
    
}