content: /*
   *    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 2 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, write to the Free Software
   *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
   */
  
  /*
   *    RandomizableParallelMultipleClassifiersCombiner.java
   *    Copyright (C) 2009 University of Waikato, Hamilton, New Zealand
   *
   */
  
  package weka.classifiers;
  
  import java.util.Enumeration;
  import java.util.Vector;
  
  import weka.core.Option;
  import weka.core.Randomizable;
  import weka.core.Utils;
  
  /**
   * Abstract utility class for handling settings common to
   * meta classifiers that build an ensemble in parallel using multiple
   * classifiers based on a given random number seed.
   *
   * @author Mark Hall (mhall{[at]}pentaho{[dot]}com)
   * @version $Revision: 6782 $
   */
  public abstract class RandomizableParallelMultipleClassifiersCombiner extends
      ParallelMultipleClassifiersCombiner implements Randomizable {
  
    /** For serialization */
    private static final long serialVersionUID = 8274061943448676943L;
  
    /** The random number seed. */
    protected int m_Seed = 1;
  
    /**
     * Returns an enumeration describing the available options.
     *
     * @return an enumeration of all the available options.
     */
    public Enumeration listOptions() {
  
      Vector newVector = new Vector(2);
  
      newVector.addElement(new Option(
                "\tRandom number seed.\n"
                + "\t(default 1)",
                "S", 1, "-S <num>"));
  
      Enumeration enu = super.listOptions();
      while (enu.hasMoreElements()) {
        newVector.addElement(enu.nextElement());
      }
      return newVector.elements();
    }
  
    /**
     * Parses a given list of options. Valid options are:<p>
     *
     * -B classifierstring <br>
     * Classifierstring should contain the full class name of a scheme
     * included for selection followed by options to the classifier
     * (required, option should be used once for each classifier).<p>
     *
     * -S num <br>
     * Set the random number seed (default 1). <p>
     *
     * @param options the list of options as an array of strings
     * @exception Exception if an option is not supported
     */
    public void setOptions(String[] options) throws Exception {
  
      String seed = Utils.getOption('S', options);
      if (seed.length() != 0) {
        setSeed(Integer.parseInt(seed));
      } else {
        setSeed(1);
      }
  
      super.setOptions(options);
    }
  
    /**
     * Gets the current settings of the classifier.
     *
     * @return an array of strings suitable for passing to setOptions
     */
    public String [] getOptions() {
  
      String [] superOptions = super.getOptions();
      String [] options = new String [superOptions.length + 2];
  
      int current = 0;
      options[current++] = "-S";
      options[current++] = "" + getSeed();
  
      System.arraycopy(superOptions, 0, options, current,
                       superOptions.length);
  
      return options;
    }
  
    /**
     * Returns the tip text for this property
     * @return tip text for this property suitable for
     * displaying in the explorer/experimenter gui
     */
    public String seedTipText() {
      return "The random number seed to be used.";
    }
  
    /**
     * Set the seed for random number generation.
     *
     * @param seed the seed
     */
    public void setSeed(int seed) {
  
      m_Seed = seed;
    }
  
    /**
     * Gets the seed for the random number generations
     *
     * @return the seed for the random number generation
     */
    public int getSeed() {
  
      return m_Seed;
    }
  }
  