📄 randomizefilter.java
字号:
/**
*
* AgentAcademy - an open source Data Mining framework for
* training intelligent agents
*
* Copyright (C) 2001-2003 AA Consortium.
*
* This library is open source software; you can redistribute it
* and/or modify it under the terms of the GNU Lesser General
* Public License as published by the Free Software Foundation;
* either version 2.0 of the License, or (at your option) any later
* version.
*
* This library 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 Lesser General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*
*/
package org.agentacademy.modules.dataminer.filters;
/**
* <p>Title: The Data Miner prototype</p>
* <p>Description: A prototype for the DataMiner (DM), the Agent Academy (AA) module responsible for performing data mining on the contents of the Agent Use Repository (AUR). The extracted knowledge is to be sent back to the AUR in the form of a PMML document.</p>
* <p>Copyright: Copyright (c) 2002</p>
* <p>Company: CERTH</p>
* @author asymeon
* @version 0.3
*/
import java.util.Enumeration;
import java.util.Random;
import java.util.Vector;
import org.agentacademy.modules.dataminer.core.Instances;
import org.agentacademy.modules.dataminer.core.Option;
import org.agentacademy.modules.dataminer.core.OptionHandler;
import org.agentacademy.modules.dataminer.core.Utils;
import org.apache.log4j.Logger;
/**
* This filter randomly shuffles the order of instances passed through it.
* The random number generator is reset with the seed value whenever
* setInputFormat() is called. <p>
*
* Valid filter-specific options are:<p>
*
* -S num <br>
* Specify the random number seed (default 42).<p>
*
*/
public class RandomizeFilter extends Filter implements OptionHandler {
public static Logger log = Logger.getLogger(RandomizeFilter.class);
/** The random number seed */
protected int m_Seed = 42;
/** The current random number generator */
protected Random m_Random;
/**
* Returns an enumeration describing the available options.
*
* @return an enumeration of all the available options.
*/
public Enumeration listOptions() {
Vector newVector = new Vector(1);
newVector.addElement(new Option(
"\tSpecify the random number seed (default 42)",
"S", 1, "-S <num>"));
return newVector.elements();
}
/**
* Parses a list of options for this object. Valid options are:<p>
*
* -S num <br>
* Specify the random number seed (default 42).<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 seedString = Utils.getOption('S', options);
if (seedString.length() != 0) {
setRandomSeed(Integer.parseInt(seedString));
} else {
setRandomSeed(42);
}
if (getInputFormat() != null) {
setInputFormat(getInputFormat());
}
}
/**
* Gets the current settings of the filter.
*
* @return an array of strings suitable for passing to setOptions
*/
public String [] getOptions() {
String [] options = new String [2];
int current = 0;
options[current++] = "-S"; options[current++] = "" + getRandomSeed();
while (current < options.length) {
options[current++] = "";
}
return options;
}
/**
* Get the random number generator seed value.
*
* @return random number generator seed value.
*/
public int getRandomSeed() {
return m_Seed;
}
/**
* Set the random number generator seed value.
*
* @param newRandomSeed value to use as the random number generator seed.
*/
public void setRandomSeed(int newRandomSeed) {
m_Seed = newRandomSeed;
}
/**
* Sets the format of the input instances.
*
* @param instanceInfo an Instances object containing the input instance
* structure (any instances contained in the object are ignored - only the
* structure is required).
* @return true if the outputFormat may be collected immediately
*/
public boolean setInputFormat(Instances instanceInfo) throws Exception {
super.setInputFormat(instanceInfo);
setOutputFormat(instanceInfo);
m_Random = new Random(m_Seed);
return true;
}
/**
* Signify that this batch of input to the filter is finished. If
* the filter requires all instances prior to filtering, output()
* may now be called to retrieve the filtered instances. Any
* subsequent instances filtered should be filtered based on setting
* obtained from the first batch (unless the setInputFormat has been
* re-assigned or new options have been set). This
* implementation randomizes all the instances received in the batch.
*
* @return true if there are instances pending output
* @exception IllegalStateException if no input format has been set.
*/
public boolean batchFinished() {
if (getInputFormat() == null) {
throw new IllegalStateException("No input instance format defined");
}
getInputFormat().randomize(m_Random);
for (int i = 0; i < getInputFormat().numInstances(); i++) {
push(getInputFormat().instance(i));
}
flushInput();
m_NewBatch = true;
return (numPendingOutput() != 0);
}
/**
* Main method for testing this class.
*
* @param argv should contain arguments to the filter: use -h for help
*/
public static void main(String [] argv) {
try {
if (Utils.getFlag('b', argv)) {
Filter.batchFilterFile(new RandomizeFilter(), argv);
} else {
Filter.filterFile(new RandomizeFilter(), argv);
}
} catch (Exception ex) {
log.error(ex.getMessage());
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -