/*********************************************************************** This file is part of KEEL-software, the Data Mining tool for regression, classification, clustering, pattern mining and so on. Copyright (C) 2004-2010 F. Herrera (herrera@decsai.ugr.es) L. S�nchez (luciano@uniovi.es) J. Alcal�-Fdez (jalcala@decsai.ugr.es) S. Garc�a (sglopez@ujaen.es) A. Fern�ndez (alberto.fernandez@ujaen.es) J. Luengo (julianlm@decsai.ugr.es) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/ **********************************************************************/ package keel.Algorithms.Neural_Networks.NNEP_Common; import javolution.xml.XmlElement; import javolution.xml.XmlFormat; import keel.Algorithms.Neural_Networks.NNEP_Common.neuralnet.INeuralNet; import net.sf.jclec.IFitness; import net.sf.jclec.IIndividual; import net.sf.jclec.base.AbstractIndividual; import net.sf.jclec.fitness.SimpleValueFitness; /** * <p> * @author Written by Pedro Antonio Gutierrez Penia (University of Cordoba) 16/7/2007 * @author Written by Aaron Ruiz Mora (University of Cordoba) 16/7/2007 * @version 0.1 * @since JDK1.5 * </p> */ public class NeuralNetIndividual extends AbstractIndividual<INeuralNet> { /** * <p> * Individuals with a INeuralNet as genotype * <p> */ ///////////////////////////////////////////////////////////////// // ------------------------------------- Marshal/unmarshal format ///////////////////////////////////////////////////////////////// /** * * Marshal individual fitness (inherited format). Then individual * genotype. * */ protected static final javolution.xml.XmlFormat<NeuralNetIndividual> XML = new XmlFormat<NeuralNetIndividual>(NeuralNetIndividual.class) { public void format(NeuralNetIndividual source, XmlElement xml) { // Call super format AbstractIndividual.XML.format(source, xml); // Marshal genotype xml.add(source.genotype, "genotype"); } public NeuralNetIndividual parse(XmlElement xml) { // Resulting object NeuralNetIndividual result = (NeuralNetIndividual) AbstractIndividual.XML.parse(xml); // Unmarshal genotype result.genotype = xml.<INeuralNet>get("genotype"); // Return result return result; } public String defaultName() { return "neural-net-individual"; } }; ///////////////////////////////////////////////////////////////// // --------------------------------------- Serialization constant ///////////////////////////////////////////////////////////////// /** Generated by Eclipse */ private static final long serialVersionUID = -2245049003640033592L; //////////////////////////////////////////////////////////////////// // ----------------------------------------------------- Constructor //////////////////////////////////////////////////////////////////// /** * <p> * Empty contructor * </p> */ public NeuralNetIndividual() { super(); } /** * <p> * Constructor that sets individual genotype * * @param genotype Individual genotype * </p> */ public NeuralNetIndividual(INeuralNet genotype) { super(genotype); } /** * <p> * Constructor that sets individual genotype and fitness * * @param genotype Individual genotype * @param fitness Individual fitness * </p> */ public NeuralNetIndividual(INeuralNet genotype, IFitness fitness) { super(genotype, fitness); } ///////////////////////////////////////////////////////////////// // ----------- Overwriting AbstractIndividual<INeuralNet> methods ///////////////////////////////////////////////////////////////// /** * <p> * Copies individuals * @return A copy of the individual * </p> */ public IIndividual copy() { // Create new individuals, then return it if (fitness != null) { return new NeuralNetIndividual(this.genotype.copy(), fitness.copy()); } else { return new NeuralNetIndividual(this.genotype.copy()); } } /** * <p> * Hamming distance * * @return double Hamming distance between genotypes * </p> */ public double distance(IIndividual other) { //TODO return 0.; } ///////////////////////////////////////////////////////////////// // ------------------------- Overwriting java.lang.Object methods ///////////////////////////////////////////////////////////////// /** * <p> * Compares individuals * @param other Individual * @exception IllegalArgumentException if other isn't an instance * of BinArrayIndividual * @return True if the individuals are equals * </p> */ public boolean equals(Object other) { try { NeuralNetIndividual o = (NeuralNetIndividual) other; if (!this.genotype.equals(o.genotype)) return false; return true; } catch(ClassCastException e) { throw new IllegalArgumentException ("\"NeuralNetIndividual\" expected"); } } ///////////////////////////////////////////////////////////////// // ----------------------------------- Overwriting Object methods ///////////////////////////////////////////////////////////////// /** * <p> * Converts a individual to string * @return String with the individuals data * </p> */ public String toString() { StringBuffer sb = new StringBuffer(); sb.append(renderNeuralNetIndividual()); return sb.toString(); } //////////////////////////////////////////////////////////////////// // ----------------------------------------------- Protected methods //////////////////////////////////////////////////////////////////// /** * <p> * Returns a string that represents the individual * This method can be used by class that extends NeuralNetIndividual * * @return String that represents individual * </p> */ protected String renderNeuralNetIndividual() { StringBuffer sb = new StringBuffer(); sb.append(genotype); if(fitness!=null) sb.append("Fitness: " + ((SimpleValueFitness)fitness).getValue()); else sb.append("Null Fitness"); return sb.toString(); } }