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.functions;
017    
018    import java.awt.BorderLayout;
019    import java.awt.Frame;
020    
021    import javax.swing.JFrame;
022    import javax.swing.WindowConstants;
023    
024    import de.kumpe.hadooptimizer.EaOptimizerConfiguration;
025    import de.kumpe.hadooptimizer.Evaluator;
026    import de.kumpe.hadooptimizer.examples.OptimizerExample;
027    import de.kumpe.hadooptimizer.impl.GaussianMutator;
028    
029    public class MinimumInGraph extends OptimizerExample<double[]> {
030    
031            @Override
032            protected EaOptimizerConfiguration<double[]> createEaOptimizerConfiguration() {
033                    final EaOptimizerConfiguration<double[]> configuration = new EaOptimizerConfiguration<double[]>();
034                    initConfiguration(configuration, new double[] { 100, 100 });
035    
036                    final Evaluator<double[]> evaluator = new Evaluator<double[]>() {
037                            private static final long serialVersionUID = 1L;
038    
039                            @Override
040                            public double evaluate(final double[] individual) {
041                                    final double x = individual[0];
042                                    // return Math.cos(x * 4) * 0.7 + Math.cos(x * 2 - 0.01)+
043                                    // Math.abs(x / 10);
044                                    return Math.cos(x * 2) + Math.abs(x / 1000) - 0.01;
045                            }
046                    };
047                    addReporter(new HistoryPanelReporter(evaluator));
048                    configuration.setMutator(new GaussianMutator());
049                    configuration.setEvaluator(evaluator);
050    
051                    final JFrame jFrame = new JFrame("Optimizer");
052                    jFrame.setSize(640, 480);
053                    jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
054                    jFrame.setVisible(true);
055                    jFrame.setExtendedState(Frame.MAXIMIZED_BOTH);
056                    jFrame.add(new HistoryPanelReporter(evaluator), BorderLayout.CENTER);
057    
058                    return configuration;
059            }
060    
061            @Override
062            protected String getVersionInfo() {
063                    return "$Id: MinimumInGraph.java 3890 2011-04-20 14:58:14Z baumbart $";
064            }
065    }