// Path: src/fdt/core/DecisionNode.java
// public class DecisionNode extends Node {
// 
//     private static final long serialVersionUID = 5241099508522414606L;
// 
//     private double support;
// 
//     /**
//      *
//      */
//     public DecisionNode() {
//     }
// 
//     /**
//      *
//      * @param text
//      * @param support
//      */
//     public DecisionNode(String text, double support) {
//         super(text);
//         this.support = support;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     public double getSupport() {
//         return support;
//     }
// 
//     /**
//      *
//      * @param support
//      */
//     public void setSupport(double support) {
//         this.support = support;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     @Override
//     public boolean isLeaf() {
//         return true;
//     }
// 
// }
// 
// Path: src/fdt/core/DecisionSet.java
// public class DecisionSet implements Serializable {
// 
//     private static final long serialVersionUID = -2414492555910250695L;
// 
//     private String name;
//     private final List<DecisionNode> decisionNodes = new ArrayList<>();
//     private IntermediateNode estimator;
//     
//     private final List<Object> bag = new ArrayList<>();
//     
//     /**
//      *
//      */
//     public DecisionSet() {
//     }
// 
//     /**
//      *
//      * @param name
//      */
//     public DecisionSet(String name) {
//         this.name = name;
//     }
// 
//     /**
//      *
//      * @param name
//      * @param estimator
//      */
//     public DecisionSet(String name, IntermediateNode estimator) {
//         this.name = name;
//         this.estimator = estimator;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     public IntermediateNode getEstimator() {
//         return estimator;
//     }
// 
//     /**
//      *
//      * @param estimator
//      */
//     public void setEstimator(IntermediateNode estimator) {
//         this.estimator = estimator;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     public String getName() {
//         return name;
//     }
// 
//     /**
//      *
//      * @param name
//      */
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     @Override
//     public String toString() {
//         return name;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     public List<DecisionNode> getDecisionNodes() {
//         return decisionNodes;
//     }
//     
//     /**
//      *
//      * @param val
//      */
//     public void addToBag(Object val) {
//         bag.add(val);
//     }
// 
//     /**
//      *
//      * @return
//      */
//     public List<Object> getBag() {
//         return bag;
//     }
//     
//     /**
//      *
//      * @param obj
//      * @return
//      */
//     @Override
//     public boolean equals(Object obj) {
//         if (obj == this) {
//             return true;
//         }
// 
//         return super.equals(obj); //To change body of generated methods, choose Tools | Templates.
//     }
// 
// }
// 
// Path: src/fdt/core/Edge.java
// public class Edge extends EdgeBase {
// 
//     private static final long serialVersionUID = 7620880090977147378L;
// 
//     /**
//      *
//      */
//     protected double value;
// 
//     /**
//      *
//      */
//     protected double accValue;
//     
//     /**
//      *
//      */
//     public Edge() {
//     }
// 
//     /**
//      *
//      * @param text
//      */
//     public Edge(String text) {
//         this.text = text;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     public double getValue() {
//         return value;
//     }
// 
//     /**
//      *
//      * @param value
//      */
//     public void setValue(double value) {
//         this.value = value;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     public double getAccValue() {
//         return accValue;
//     }
// 
//     /**
//      *
//      * @param accValue
//      */
//     public void setAccValue(double accValue) {
//         this.accValue = accValue;
//     }
//     
//     /**
//      *
//      * @return
//      */
//     @Override
//     public String toString() {
//         return String.format("--[%s(%.3f)]-->", text, value);
//     }
//     
//     
// }


import fdt.core.DecisionNode;
import fdt.core.DecisionSet;
import fdt.core.Edge;

package fdt.fuzzy.integrals;


/**
 *
 * To compute the fuzzy value from the decision nodes. 
 * @author Mohammed Jabreel
 */
public class DefaultFuzzyValue implements FuzzyValue {

    private static final long serialVersionUID = -5520176508323712873L;

    /**
     * The default fuzzy value is obtained by multiplying the classification 
     * support by the fuzzy membership value.
     * 
     * @param item
     * @return the fuzzy value.
     */
    @Override
    public double evaluate(DecisionNode item) {
        return item.getSupport() * ((Edge) item.getEdge()).getAccValue();
    }

    /**
     * To get the fuzzy value from the decision node given the decision set in which that node is a member of.
     * @param item
     * @param universeSet
     * @return 
     */
    @Override
// Path: src/fdt/core/DecisionNode.java
// public class DecisionNode extends Node {
// 
//     private static final long serialVersionUID = 5241099508522414606L;
// 
//     private double support;
// 
//     /**
//      *
//      */
//     public DecisionNode() {
//     }
// 
//     /**
//      *
//      * @param text
//      * @param support
//      */
//     public DecisionNode(String text, double support) {
//         super(text);
//         this.support = support;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     public double getSupport() {
//         return support;
//     }
// 
//     /**
//      *
//      * @param support
//      */
//     public void setSupport(double support) {
//         this.support = support;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     @Override
//     public boolean isLeaf() {
//         return true;
//     }
// 
// }
// 
// Path: src/fdt/core/DecisionSet.java
// public class DecisionSet implements Serializable {
// 
//     private static final long serialVersionUID = -2414492555910250695L;
// 
//     private String name;
//     private final List<DecisionNode> decisionNodes = new ArrayList<>();
//     private IntermediateNode estimator;
//     
//     private final List<Object> bag = new ArrayList<>();
//     
//     /**
//      *
//      */
//     public DecisionSet() {
//     }
// 
//     /**
//      *
//      * @param name
//      */
//     public DecisionSet(String name) {
//         this.name = name;
//     }
// 
//     /**
//      *
//      * @param name
//      * @param estimator
//      */
//     public DecisionSet(String name, IntermediateNode estimator) {
//         this.name = name;
//         this.estimator = estimator;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     public IntermediateNode getEstimator() {
//         return estimator;
//     }
// 
//     /**
//      *
//      * @param estimator
//      */
//     public void setEstimator(IntermediateNode estimator) {
//         this.estimator = estimator;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     public String getName() {
//         return name;
//     }
// 
//     /**
//      *
//      * @param name
//      */
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     @Override
//     public String toString() {
//         return name;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     public List<DecisionNode> getDecisionNodes() {
//         return decisionNodes;
//     }
//     
//     /**
//      *
//      * @param val
//      */
//     public void addToBag(Object val) {
//         bag.add(val);
//     }
// 
//     /**
//      *
//      * @return
//      */
//     public List<Object> getBag() {
//         return bag;
//     }
//     
//     /**
//      *
//      * @param obj
//      * @return
//      */
//     @Override
//     public boolean equals(Object obj) {
//         if (obj == this) {
//             return true;
//         }
// 
//         return super.equals(obj); //To change body of generated methods, choose Tools | Templates.
//     }
// 
// }
// 
// Path: src/fdt/core/Edge.java
// public class Edge extends EdgeBase {
// 
//     private static final long serialVersionUID = 7620880090977147378L;
// 
//     /**
//      *
//      */
//     protected double value;
// 
//     /**
//      *
//      */
//     protected double accValue;
//     
//     /**
//      *
//      */
//     public Edge() {
//     }
// 
//     /**
//      *
//      * @param text
//      */
//     public Edge(String text) {
//         this.text = text;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     public double getValue() {
//         return value;
//     }
// 
//     /**
//      *
//      * @param value
//      */
//     public void setValue(double value) {
//         this.value = value;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     public double getAccValue() {
//         return accValue;
//     }
// 
//     /**
//      *
//      * @param accValue
//      */
//     public void setAccValue(double accValue) {
//         this.accValue = accValue;
//     }
//     
//     /**
//      *
//      * @return
//      */
//     @Override
//     public String toString() {
//         return String.format("--[%s(%.3f)]-->", text, value);
//     }
//     
//     
// }


// Path: src/fdt/fuzzy/integrals/DefaultFuzzyValue.java
import fdt.core.DecisionNode;
import fdt.core.DecisionSet;
import fdt.core.Edge;


package fdt.fuzzy.integrals;


/**
 *
 * To compute the fuzzy value from the decision nodes. 
 * @author Mohammed Jabreel
 */
public class DefaultFuzzyValue implements FuzzyValue {

    private static final long serialVersionUID = -5520176508323712873L;

    /**
     * The default fuzzy value is obtained by multiplying the classification 
     * support by the fuzzy membership value.
     * 
     * @param item
     * @return the fuzzy value.
     */
    @Override
    public double evaluate(DecisionNode item) {
        return item.getSupport() * ((Edge) item.getEdge()).getAccValue();
    }

    /**
     * To get the fuzzy value from the decision node given the decision set in which that node is a member of.
     * @param item
     * @param universeSet
     * @return 
     */
    @Override
    public double evaluate(DecisionNode item, DecisionSet universeSet) {