Logo
Distributed Genetic Programming Framework
print print

File org.dgpf.search.api.SearchParameters.java

Here you can find all the information about the file org.dgpf.search.api.SearchParameters.java. You may explore it here or download it onto your local disk.
/*
 * Copyright (c) 2006 Thomas Weise
 *
 * E-Mail           : tweise@gmx.de
 * Creation Date    : 2006-03-30 13:57:49
 * Original Filename: org.dgpf.search.api.SearchParameters.java
 * Version          : 2.0.1
 * Last modification: 2006-05-28
 *                by: Thomas Weise
 *
 * License          : GNU LESSER GENERAL PUBLIC LICENSE
 *                    Version 2.1, February 1999
 *                    You should have received a copy of this license along
 *                    with this library; if not, write to the Free Software
 *                    Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 *                    MA 02111-1307, USA or download the license under
 *                    http://www.gnu.org/copyleft/lesser.html.
 *
 * Warranty         : This software is provided "as is" without any
 *                    warranty; without even the implied warranty of
 *                    merchantability or fitness for a particular purpose.
 *                    See the Gnu Lesser General Public License for more
 *                    details.
 */


package org.dgpf.search.api;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

import org.sfc.math.stochastic.Randomizer;
import org.sfc.meta.MetaInformation;
import org.sfc.meta.Property;
import org.sfc.utils.ICloneable;
import org.sfc.utils.Typesafe;

/**
 * <p>
 * The search parameters contain the dynamic control data of the search.
 * They might get modified often and reflect their changes to the search
 * engine.</p><p>
 * Search parameters might adapt dynamically to the state of the search.
 * Therefore, any given sheme can be applied, adaption could be done
 * algorithmic or manually.
 * </p>
 *
 * @param <Genotype>    The sort of genotype used to represent individuals.
 *                      This must be a serializable type.
 *
 * @author Thomas Weise
 */

public class SearchParameters<Genotype extends    Serializable>
                                       extends    SearchData2<Genotype>
                                       implements Serializable,
                                                  ICloneable
  {
/**
 * The serial version uid.
 */

  private static final long serialVersionUID = 1;
/**
 * The meta information for search parameters.
 */

  public  static  final MetaInformation   SEARCH_PARAMETERS_METAINFO ;
  
/**
 * The property for the adaptation strategy.
 */

  public  static  final Property<AdaptationStrategy>  ADAPTATION_STRATEGY ;
/**
 * The property for the halt parameters.
 */

  public  static  final Property<HaltParameters>      HALT_PARAMETERS ;
  
  static
    {
    ADAPTATION_STRATEGY =
      new Property<AdaptationStrategy>(SearchState.ADAPTATION_STRATEGY,
                                       AdaptationStrategy.class);
    ADAPTATION_STRATEGY.add_port(SearchParameters.class, true, true, null);
    
    HALT_PARAMETERS =
      new Property<HaltParameters>(SearchState.HALT_PARAMETERS,
                                   HaltParameters.class);
    HALT_PARAMETERS.add_port(SearchParameters.class, true, true, null);
    
    SEARCH_PARAMETERS_METAINFO = new MetaInformation();
    }

/**
 * The search halt parameters defining when this search should stop.
 * @see #get_halt_parameters()
 */

  private transient HaltParameters        m_halt_parameters ;
/**
 * The adaptation strategy.
 * @see #get_adaptation_strategy()
 */

  private transient AdaptationStrategy    m_adaptation  ;


/**
 * Create a new search parameter set.
 * @param p_data  The search data to assign to.
 */

  public SearchParameters (final SearchData p_data)
    {
    super(p_data);

    if(this.m_halt_parameters == null)
      {
      this.set_halt_parameters(SearchUtils.DEFAULT_HALT_PARAMETERS);
      }
    if(this.m_adaptation == null)
      {
      this.set_adaptation_strategy(SearchUtils.DEFAULT_ADAPTATION_STRATEGY);
      }
    }

/**
 * Create a new search parameter set.
 * @param p_functions   The fitness functions to be applied in this
 *                      evolution.
 */

   public SearchParameters(final FitnessFunction<Genotype,?>[]  p_functions)
     {
     this(p_functions.length);
     }

/**
 * Create a new search parameter set.
 * @param p_ff_count  The count of fitness functions evaluated by this
 *                    search.
 */

  public     SearchParameters (final int p_ff_count)
    {
    super(p_ff_count);

    this.set_halt_parameters(SearchUtils.DEFAULT_HALT_PARAMETERS);
    this.set_adaptation_strategy(SearchUtils.DEFAULT_ADAPTATION_STRATEGY);
    }

/**
 * Obtain the search halt parameters defining when this search should stop.
 * @return  The search halt parameters defining when this search should
 *          stop.
 */

  public  final HaltParameters  get_halt_parameters()
    {
    return this.m_halt_parameters;
    }

/**
 * Set the search halt parameters used by this search.
 * @param p_halt_parameters The search halt parameters used by this search.
 */

  public final void  set_halt_parameters
                            (final HaltParameters p_halt_parameters)
    {
    if(p_halt_parameters != null)
      {
      this.m_halt_parameters = p_halt_parameters;
      }
    }

/**
 * Obtain the adaptation strategy adjusting this search parameter set.
 * @return The adaptation strategy adjusting this search parameter set.
 */

  public  final AdaptationStrategy  get_adaptation_strategy ()
    {
    return this.m_adaptation;
    }

/**
 * Set the adaptation strategy adjusting this search parameter set.
 * @param p_strategy  The new adaptation strategy to adjust this search
 *                    parameter set.
 */

  public  void  set_adaptation_strategy
                            (final AdaptationStrategy p_strategy)
    {
    if(p_strategy != null)
      {
      if(p_strategy instanceof StatefulAdaptationStrategy)
        {
        ((StatefulAdaptationStrategy)p_strategy).m_parameters = this;
        }
      this.m_adaptation = p_strategy;
      }
    }

/**
 * This method will be called by the search engine whenever it feels like
 * it is time to adapt the current search parameters to the current search
 * state.
 * @param p_state The current state of the search.
 * @return  <code>true</code> if and only if the update level should be
 *          resetted, <code>false</code> if everything should continue
 *          normal.
 * @see SearchState#get_update_level()
 */

  protected boolean  adapt (final SearchState<Genotype> p_state)
    {
    if(this.m_adaptation.adapt(p_state)      ||
       this.m_halt_parameters.adapt(p_state) ||
       this.get_comparator().adapt(p_state) ) return true;
    return false;
    }


/**
 * Assign the internal data of this search data to the data of
 * another one.
 * @param p_data  The simulation data  to assign to.
 */

  @Override
  public void  assign  (final Object p_data)
    {
    SearchParameters<Genotype> l_p;

    if(p_data instanceof HaltParameters)
      {
      l_p = Typesafe.cast(p_data);

      this.set_halt_parameters(l_p.m_halt_parameters);
      this.set_adaptation_strategy(l_p.m_adaptation);
      }

    super.assign(p_data);
    }

/**
 * Creates and returns a copy of this object.  The precise meaning
 * of "copy" may depend on the class of the object.
 *
 * @return     A clone of this instance.
 *
 * @see java.lang.Cloneable
 */

  @Override
  public  Object  clone ()
    {
    SearchParameters<Genotype>  l_sp;

    l_sp                   = Typesafe.cast(super.clone());
    l_sp.m_halt_parameters = Typesafe.cast(l_sp.m_halt_parameters.clone());
    l_sp.m_adaptation      = Typesafe.cast(l_sp.m_adaptation.clone());
    if(l_sp.m_adaptation instanceof StatefulAdaptationStrategy)
      {
      ((StatefulAdaptationStrategy)(l_sp.m_adaptation)).m_parameters = l_sp;
      }
    return l_sp;
    }




/**
 * Stores the <code>SfcEvent</code> into the stream.
 * @param p_s The output stream.
 * @throws  IOException If something io-like went wrong.
 */

  private final void writeObject(final ObjectOutputStream p_s)
        throws IOException
    {
    p_s.defaultWriteObject();
    p_s.writeUnshared(this.m_halt_parameters);
    p_s.writeUnshared(this.m_adaptation);
    }



/**
 * Reconstitute the <code>SfcEvent</code> instance from a stream (that is,
 * deserialize it).
 * @param p_s The input stream.
 * @throws  IOException If something io-like went wrong.
 * @throws  ClassNotFoundException  If a needed class could not be found.
 */

  private final void readObject(final ObjectInputStream p_s)
        throws IOException, ClassNotFoundException
    {
    p_s.defaultReadObject();
    this.set_halt_parameters( (HaltParameters)(p_s.readUnshared()) );
    this.set_adaptation_strategy( (AdaptationStrategy)(p_s.readUnshared()));
    }


/**
 * Obtain a search data package that is suitable to be transmitted to a
 * remote destination where search contexts run and can be applied there.
 * This data record is normally slim and contains only the data useful to
 * a bare search context.
 * @return  A serializable search data packet.
 */

  public  Serializable create_context_parameters ()
    {
    return new SearchData2<Genotype>(this);
    }

/**
 * This method will be called whenever the search parameters perform a
 * reset, meaning that the search level is set back to 0.
 */

  protected void  reset ()
    {
    IndividualComparator l_t;

    if(this.m_adaptation != null) this.m_adaptation.reset();
    if(this.m_halt_parameters != null) this.m_halt_parameters.reset();

    l_t = this.get_comparator();
    if(l_t != null) l_t.reset();
    }
  
/**
 * After setting the non-fitness-influencing parameters of this search
 * parameter set to the allowed maximum, call this method to alter the
 * configuration randomly.
 * @param p_r The randomizer to be used.
 */

  public  void  configure_randomly  (final Randomizer p_r)
    {    
    this.set_cache_size(p_r.nextInt(this.get_cache_size()));            
    this.set_max_creation_trials(
                        p_r.nextInt(this.get_max_creation_trials())+1);    
    this.set_max_improvement_trials(
                        p_r.nextInt(this.get_max_improvement_trials())+1);    
    this.set_challenge_parent(p_r.nextBoolean());    
    this.set_return_first_improvement(p_r.nextBoolean());
    }
  }

File Information:

file name:SearchParameters.java
package:org.dgpf.search.api
qualified name:org.dgpf.search.api.SearchParameters.java
file type:Java Source File
download location:download http://dgpf.sourceforge.net/source/org/dgpf/search/api/SearchParameters.java
size:10.392 KB (10642 B)
uploaded: 2015-07-22 04:11:00 GMT+0000
last update: 2006-08-22 13:06:12 GMT+0000
last access: 2017-11-24 00:21:03 GMT+0000

statistics online since 2006-01-02.   RSS Feed
Contact us by sending an email to tweise@gmx.de to receive further information, to report errors, or to join our project.
All content on this site (http://dgpf.sourceforge.net/) is LGPL-licensed.
http://dgpf.sourceforge.net/scripts/source/source.php last modified at 2015-07-22 04:10:53 GMT+0000 served at 2017-11-24 00:21:03 GMT+0000.
Valid CSS Valid XHTML 1.1
Valid RSS SourceForge.net Logo