001    /*
002     * Copyright 2011 Christian Kumpe http://kumpe.de/christian/java
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     *     http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package de.kumpe.hadooptimizer.examples.tutorial;
017    
018    import de.kumpe.hadooptimizer.Evaluator;
019    
020    public class PolynomialEvaluator implements Evaluator<Double> {
021            private static final long serialVersionUID = 1L;
022    
023            private double[] roots;
024    
025            public PolynomialEvaluator(final double... roots) {
026                    if (0 != roots.length % 2) {
027                            throw new IllegalArgumentException(
028                                            "PolynomialEvaluator needs an even number of roots.");
029                    }
030    
031                    this.roots = roots;
032            }
033    
034            @Override
035            public double evaluate(final Double individual) {
036                    double result = 1;
037                    for (final double root : roots) {
038                            result *= individual - root;
039                    }
040                    return result;
041            }
042    }