package ids.experiment.dataset;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.CmdLineParser;
import org.kohsuke.args4j.Option;
import ids.clustering.model.Distance;
import ids.clustering.model.Domain;
import ids.framework.OptimalConstraints;
import ids.utils.CommonUtils;
public class FindOptimalConstraints {
@Option(name="-inum", usage="Input file name of the numerical data")
private String numDataFile = "ndata.data";
@Option(name="-icat", usage="Input file name of the Categorical data")
private String catDataFile = "cdata.data";
@Option(name="-k", usage="Number of clusters")
private int k = 2;
@Option(name="-opath", usage="Output path")
private String outPath = "";
@Option(name="-start_c", usage="Starting number of constraints")
private int start_c = 5;
@Option(name="-end_c", usage="Ending number of constraints")
private int end_c = 10;
/**
* Finds the optimal number of constraints
* @param args
*/
public static void main(String[] args) throws IOException {
new FindOptimalConstraints().doMain(args);
}
public void doMain(String args[]) throws IOException {
CmdLineParser parser = new CmdLineParser(this);
parser.setUsageWidth(80);
try {
parser.parseArgument(args);
} catch (CmdLineException e) {
// if there's a problem in the command line,
// you'll get this exception. this will report
// an error message.
System.err.println(e.getMessage());
System.err.println("java SampleMain [options...] arguments...");
// print the list of available options
parser.printUsage(System.err);
System.err.println();
return;
}
// output
System.out.println("Input file name for domain 1: " + numDataFile);
System.out.println("Input file name for domain 2: " + catDataFile);
System.out.println("Number of cluster: " + k);
System.out.println("Output path: " + outPath);
System.out.println("Starting number of constraints: " + start_c + ", ending number of constraints: " + end_c);
System.out.print("Would you like to continue <yes|no>: ");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String answer = "";
try {
answer = reader.readLine();
} catch (IOException e) {
System.out.println("Cannot read your answer: " + e.getMessage());
System.exit(1);
}
// start
if (answer.equalsIgnoreCase("yes")||answer.equalsIgnoreCase("y")) {
start();
} else {
System.out.println("Exit: Have a nice day :)");
System.exit(0);
}
}
private void start() {
// utilities
CommonUtils utils = new CommonUtils(false);
// Domain 1
Domain d1 = new Domain();
d1.data = utils.readDataFile(numDataFile);
d1.k = k;
d1.name = "Numerical part of the data set";
d1.number_of_iterations = 1;
d1.distance = Distance.SQEUCLIDEAN;
// Domain 2
Domain d2 = new Domain();
d2.data = utils.readDataFile(catDataFile);
d2.k = k;
d2.name = "Categorical part of the data set";
d2.number_of_iterations = 1;
d2.distance = Distance.MATCH;
OptimalConstraints opt = new OptimalConstraints(d1, d2, null, start_c, end_c, outPath);
opt.find();
}
}