001    package org.jaga.selection;
002    
003    import org.jaga.definitions.Fitness;
004    
005    /**
006     * TODO: Complete these comments.
007     *
008     * <p><u>Project:</u> JAGA - Java API for Genetic Algorithms.</p>
009     *
010     * <p><u>Company:</u> University College London and JAGA.Org
011     *    (<a href="http://www.jaga.org" target="_blank">http://www.jaga.org</a>).
012     * </p>
013     *
014     * <p><u>Copyright:</u> (c) 2004 by G. Paperin.<br/>
015     *    This program is free software; you can redistribute it and/or modify
016     *    it under the terms of the GNU General Public License as published by
017     *    the Free Software Foundation, ONLY if you include a note of the original
018     *    author(s) in any redistributed/modified copy.<br/>
019     *    This program is distributed in the hope that it will be useful,
020     *    but WITHOUT ANY WARRANTY; without even the implied warranty of
021     *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
022     *    GNU General Public License for more details.<br/>
023     *    You should have received a copy of the GNU General Public License
024     *    along with this program; if not, write to the Free Software
025     *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
026     *    or see http://www.gnu.org/licenses/gpl.html</p>
027     *
028     * @author Greg Paperin (greg@jaga.org)
029     *
030     * @version JAGA public release 1.0 beta
031     */
032    
033    public class AbsoluteFitness implements Fitness {
034    
035            private double value = +0.0;
036    
037            private AbsoluteFitness() {}
038    
039            public AbsoluteFitness(double fitnessValue) {
040                    resetValue(fitnessValue);
041            }
042    
043            public void resetValue(double fitnessValue) {
044                    if (Double.isNaN(fitnessValue))
045                            throw new IllegalArgumentException("Agrument is not a number");
046                    else if (fitnessValue == Double.NEGATIVE_INFINITY)
047                            this.value = -Double.MAX_VALUE;
048                    else if (fitnessValue == Double.POSITIVE_INFINITY)
049                            this.value = Double.MAX_VALUE;
050                    else
051                            this.value = fitnessValue;
052            }
053    
054            public double getValue() {
055                    return this.value;
056            }
057    
058            public boolean isBetter(Fitness fitness) {
059                    if (null == fitness)
060                            return true;
061                    AbsoluteFitness absFit = (AbsoluteFitness) fitness;
062                    return this.getValue() > absFit.getValue();
063            }
064    
065            public boolean isWorse(Fitness fitness) {
066                    if (null == fitness)
067                            return false;
068                    AbsoluteFitness absFit = (AbsoluteFitness) fitness;
069                    return this.getValue() < absFit.getValue();
070            }
071    
072            public String toString() {
073                    return Double.toString(value);
074            }
075    
076    }