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 }