// 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.
//     }
// 
// }


import fdt.core.DecisionSet;
import java.util.Arrays;

package fdt.fuzzy.measures;


/**
 * To compute the fuzzy measure value using the Sugeno Lambda Measure method.
 * @author Mohammed Jabreel
 */
public class SugenoLambdaMeasure extends FuzzyMeasureBase {

    private static final long serialVersionUID = -3475896576086728079L;

    @Override
    protected double evaluate(double[] singletones, DecisionSet universeSet) {
        if (singletones.length == 1) {
            return singletones[0];
        }
        double lambda = universeSet.getEstimator().getLambda(universeSet.getName());

        if (lambda == 0) {
// 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/measures/SugenoLambdaMeasure.java
import fdt.core.DecisionSet;
import java.util.Arrays;


package fdt.fuzzy.measures;


/**
 * To compute the fuzzy measure value using the Sugeno Lambda Measure method.
 * @author Mohammed Jabreel
 */
public class SugenoLambdaMeasure extends FuzzyMeasureBase {

    private static final long serialVersionUID = -3475896576086728079L;

    @Override
    protected double evaluate(double[] singletones, DecisionSet universeSet) {
        if (singletones.length == 1) {
            return singletones[0];
        }
        double lambda = universeSet.getEstimator().getLambda(universeSet.getName());

        if (lambda == 0) {
            return Arrays.stream(singletones).sum();