⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gpprogrambase.java

📁 JGAP是一种遗传算法和遗传规划的组成部分提供了一个Java框架。它提供了基本的遗传机制
💻 JAVA
字号:
/*
 * This file is part of JGAP.
 *
 * JGAP offers a dual license model containing the LGPL as well as the MPL.
 *
 * For licensing information please see the file license.txt included with JGAP
 * or have a look at the top of class org.jgap.Chromosome which representatively
 * includes the JGAP license policy applicable for any file delivered with JGAP.
 */
package org.jgap.gp;

import org.jgap.*;
import org.jgap.gp.impl.*;

/**
 * Base class for GPProgram's. See org.jgap.gp.impl.GPProgram for an
 * implementation.
 *
 * @author Klaus Meffert
 * @since 3.0
 */
public abstract class GPProgramBase
    implements IGPProgram {
  /** String containing the CVS revision. Read out via reflection!*/
  private final static String CVS_REVISION = "$Revision: 1.14 $";

  private double m_fitnessValue = FitnessFunction.NO_FITNESS_VALUE;

  private GPConfiguration m_conf;

  /**
   * Return type per chromosome.
   */
  private Class[] m_types;

  /**
   * Argument types for ADF's
   */
  private Class[][] m_argTypes;

  /**
   * Available GP-functions.
   */
  private CommandGene[][] m_nodeSets;

  /**
   * Minimum depth per each chromosome
   */
  private int[] m_minDepths;

  /**
   * Maximum depth per each chromosome
   */
  private int[] m_maxDepths;

  /**
   * Maximum number of nodes allowed per chromosome (when exceeded program
   * aborts)
   */
  private int m_maxNodes;

  /**
   * Free to use data object.
   */
  private Object m_applicationData;

  /**
   * Default constructor, only for dynamic instantiation.
   *
   * @throws Exception
   *
   * @author Klaus Meffert
   * @since 3.3.4
   */
  public GPProgramBase()
      throws Exception {
  }

  public GPProgramBase(GPConfiguration a_conf)
      throws InvalidConfigurationException {
    if (a_conf == null) {
      throw new InvalidConfigurationException("Configuration must not be null!");
    }
    m_conf = a_conf;
  }

  public GPProgramBase(IGPProgram a_prog)
      throws InvalidConfigurationException {
    this(a_prog.getGPConfiguration());
    m_types = a_prog.getTypes();
    m_argTypes = a_prog.getArgTypes();
    m_nodeSets = a_prog.getNodeSets();
    m_maxDepths = a_prog.getMaxDepths();
    m_minDepths = a_prog.getMinDepths();
    m_maxNodes = a_prog.getMaxNodes();
  }

  public GPConfiguration getGPConfiguration() {
    return m_conf;
  }

  /**
   * Compares this entity against the specified object.
   *
   * @param a_other the object to compare against
   * @return true: if the objects are the same, false otherwise
   *
   * @author Klaus Meffert
   * @since 3.0
   */
  public boolean equals(Object a_other) {
    try {
      return compareTo(a_other) == 0;
    } catch (ClassCastException cex) {
      return false;
    }
  }

  /**
   * @return fitness value of this program determined via the registered
   * fitness function
   *
   * @author Klaus Meffert
   * @since 3.0
   */
  public double calcFitnessValue() {
    GPFitnessFunction normalFitnessFunction = getGPConfiguration().
        getGPFitnessFunction();
    if (normalFitnessFunction != null) {
      // Grab the "normal" fitness function and ask it to calculate our
      // fitness value.
      // --------------------------------------------------------------
      m_fitnessValue = normalFitnessFunction.getFitnessValue(this);
    }
    if (Double.isInfinite(m_fitnessValue)) {
      return GPFitnessFunction.NO_FITNESS_VALUE;
    }
    else {
      return m_fitnessValue;
    }
  }

  /**
   * @return fitness value of this program, cached access
   *
   * @author Klaus Meffert
   * @since 3.0
   */
  public double getFitnessValue() {
    if (m_fitnessValue >= 0.000d) {
      return m_fitnessValue;
    }
    else {
      return calcFitnessValue();
    }
  }

  /**
   * @return computed fitness value of this program, may be unitialized
   *
   * @author Klaus Meffert
   * @since 3.2
   */
  public double getFitnessValueDirectly() {
    return m_fitnessValue;
  }

  public void setFitnessValue(double a_fitness) {
    m_fitnessValue = a_fitness;
  }

  public void setTypes(Class[] a_types) {
    m_types = a_types;
  }

  public Class[] getTypes() {
    return m_types;
  }

  public Class getType(int a_index) {
    return m_types[a_index];
  }

  public void setArgTypes(Class[][] a_argTypes) {
    m_argTypes = a_argTypes;
  }

  public Class[][] getArgTypes() {
    return m_argTypes;
  }

  public Class[] getArgType(int a_index) {
    return m_argTypes[a_index];
  }

  public void setNodeSets(CommandGene[][] a_nodeSets) {
    m_nodeSets = a_nodeSets;
  }

  public CommandGene[][] getNodeSets() {
    return m_nodeSets;
  }

  public CommandGene[] getNodeSet(int a_index) {
    return m_nodeSets[a_index];
  }

  public void setMaxDepths(int[] a_maxDepths) {
    m_maxDepths = a_maxDepths;
  }

  public int[] getMaxDepths() {
    return m_maxDepths;
  }

  public void setMinDepths(int[] a_minDepths) {
    m_minDepths = a_minDepths;
  }

  public int[] getMinDepths() {
    return m_minDepths;
  }

  public void setMaxNodes(int a_maxNodes) {
    m_maxNodes = a_maxNodes;
  }

  public int getMaxNodes() {
    return m_maxNodes;
  }

  /**
   * Sets the application data object.
   *
   * @param a_data the object to set
   *
   * @author Klaus Meffert
   * @since 3.01
   */
  public void setApplicationData(Object a_data) {
    m_applicationData = a_data;
  }

  /**
   * @return the application data object set
   *
   * @author Klaus Meffert
   * @since 3.01
   */
  public Object getApplicationData() {
    return m_applicationData;
  }

  /**
   * @return deep clone of this instance
   *
   * @author Klaus Meffert
   * @since 3.2
   */
  public abstract Object clone();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -