// 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/fuzzy/integrals/FuzzyIntegral.java
// public interface FuzzyIntegral extends Serializable {
//     
//     /**
//      * Given a decision set, get the aggregated value of the values of 
//      * decision nodes (based on @FuzzyValue and @FuzzyMeasure methods).
//      * 
//      * @param set
//      * @return 
//      */
//     double evaluate(DecisionSet set);
// }


import fdt.core.DecisionSet;
import fdt.fuzzy.integrals.FuzzyIntegral;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

package fdt.infer;


/**
 *
 * Fuzzy Integral-based voting strategy. 
 * We get the prediction from the set of the rules in a FDT in this voting 
 * strategy by aggregating these decisions using a fuzzy integral method.
 * 
 * @author Mohammed Jabreel
 */
public class IntegralBasedVotingStrategy extends DefaultVotingStrategy {

    private static final long serialVersionUID = -8771986175920175509L;

    /**
     *
     */
// 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/fuzzy/integrals/FuzzyIntegral.java
// public interface FuzzyIntegral extends Serializable {
//     
//     /**
//      * Given a decision set, get the aggregated value of the values of 
//      * decision nodes (based on @FuzzyValue and @FuzzyMeasure methods).
//      * 
//      * @param set
//      * @return 
//      */
//     double evaluate(DecisionSet set);
// }


// Path: src/fdt/infer/IntegralBasedVotingStrategy.java
import fdt.core.DecisionSet;
import fdt.fuzzy.integrals.FuzzyIntegral;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;


package fdt.infer;


/**
 *
 * Fuzzy Integral-based voting strategy. 
 * We get the prediction from the set of the rules in a FDT in this voting 
 * strategy by aggregating these decisions using a fuzzy integral method.
 * 
 * @author Mohammed Jabreel
 */
public class IntegralBasedVotingStrategy extends DefaultVotingStrategy {

    private static final long serialVersionUID = -8771986175920175509L;

    /**
     *
     */
    protected FuzzyIntegral fuzzyIntegral;