/***********************************************************************
This file is part of KEEL-software, the Data Mining tool for regression,
classification, clustering, pattern mining and so on.
Copyright (C) 2004-2010
F. Herrera (herrera@decsai.ugr.es)
L. S�nchez (luciano@uniovi.es)
J. Alcal�-Fdez (jalcala@decsai.ugr.es)
S. Garc�a (sglopez@ujaen.es)
A. Fern�ndez (alberto.fernandez@ujaen.es)
J. Luengo (julianlm@decsai.ugr.es)
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 3 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, see http://www.gnu.org/licenses/
**********************************************************************/
/**
* <p>Title: Main Class of the Program</p>
*
* <p>Description: It reads the configuration file (data-set files and parameters) and launch the GP-COACH algorithm</p>
*
* <p>Company: KEEL</p>
*
* @author Written by Alberto Fern�ndez (University of Granada)
* @author Modified by Victoria Lopez (University of Granada) 11/01/2011
* @version 1.0
*/
package keel.Algorithms.ImbalancedClassification.ImbalancedAlgorithms.GP_COACH_H;
import org.core.Files;
import java.io.File;
/**
* <p>Title: Main Class of the Program</p>
*
* <p>Description: It reads the configuration file (data-set files and parameters) and launch the GP-COACH-H algorithm</p>
*
* <p>Company: KEEL</p>
*
* @author Written by Alberto Fern�ndez (University of Granada)
* @author Modified by Victoria Lopez (University of Granada) 11/01/2011
* @version 1.0
*/
public class Main {
private parseParameters parametersAll;
/** Default Constructor */
public Main() {
}
/**
* It launches first the SMOTE algorithm, and then, the GP-COACH-H algorithm
* @param confFile String it is the filename of the configuration file.
*/
private void execute(String confFile) {
SMOTE smote;
parseParameters parametersGPCOACHH;
String fileSMOTE = "";
String fileGPCOACHH = "";
String fileConfName = "";
String smt_tr;
String smt_tst;
parametersAll = new parseParameters();
parametersAll.parseConfigurationFile(confFile);
smt_tr = parametersAll.getTrainingInputFile().substring(0, parametersAll.getTrainingInputFile().length()-4) + "-SMOTE.dat";
smt_tst = parametersAll.getTestInputFile().substring(0, parametersAll.getTrainingInputFile().length()-4) + "-SMOTE.dat";
fileConfName = parametersAll.getTrainingInputFile().substring(parametersAll.getTrainingInputFile().lastIndexOf("/")+1, parametersAll.getTrainingInputFile().lastIndexOf("tra"));
fileSMOTE += "algorithm = SMOTE\ninputData = \"" + parametersAll.getTrainingInputFile() + "\" \"" + parametersAll.getTestInputFile() + "\"\n";
fileSMOTE += "outputData = \"" + smt_tr + "\" \"" + smt_tst + "\"\n\n";
fileSMOTE += "seed = " + Long.parseLong(parametersAll.getParameter(0)) + "\n";
fileSMOTE += "Number of Neighbors = " + Integer.parseInt(parametersAll.getParameter(1)) + "\n";
fileSMOTE += "Type of SMOTE = " + parametersAll.getParameter(2) + "\n";
fileSMOTE += "Balancing = " + parametersAll.getParameter(3) + "\n";
fileSMOTE += "Quantity of generated examples = " + Integer.parseInt(parametersAll.getParameter(4)) + "\n";
fileSMOTE += "Distance Function = " + parametersAll.getParameter(5) + "\n";
fileSMOTE += "Type of Interpolation = " + parametersAll.getParameter(6) + "\n";
fileSMOTE += "Alpha = " + Double.parseDouble(parametersAll.getParameter(7)) + "\n";
fileSMOTE += "Mu = " + Double.parseDouble(parametersAll.getParameter(8)) + "\n";
Files.writeFile(fileConfName + "_SMOTE_cfg.txt", fileSMOTE);
smote = new SMOTE (fileConfName + "_SMOTE_cfg.txt");
smote.run();
fileGPCOACHH += "algorithm = Hierarchical genetic programming fuzzy rule based classification system with rule selection and tuning (GP-COACH-H)\n";
fileGPCOACHH += "inputData = \"" + smt_tr + "\" \"" + parametersAll.getValidationInputFile() + "\" \"" + smt_tst + "\"\n";
fileGPCOACHH += "outputData = \"" + parametersAll.getTrainingOutputFile() + "\" \"" + parametersAll.getTestOutputFile() + "\" \"" + parametersAll.getOutputFile(0) + "\" \"" + parametersAll.getOutputFile(1) + "\"\n\n";
fileGPCOACHH += "seed = " + Long.parseLong(parametersAll.getParameter(0)) + "\n";
fileGPCOACHH += "Number of Labels = " + Integer.parseInt(parametersAll.getParameter(9)) + "\n";
fileGPCOACHH += "T-norm/T-conorm for the Computation of the Compatibility Degree = " + parametersAll.getParameter(10) + "\n";
fileGPCOACHH += "Rule Weight = " + parametersAll.getParameter(11) + "\n";
fileGPCOACHH += "Fuzzy Reasoning Method = " + parametersAll.getParameter(12) + "\n";
fileGPCOACHH += "Number of Generations = " + Integer.parseInt(parametersAll.getParameter(13)) + "\n";
fileGPCOACHH += "Initial Number of Fuzzy Rules (0 for 5*n_var) = " + Integer.parseInt(parametersAll.getParameter(14)) + "\n";
fileGPCOACHH += "Alpha Raw Fitness = " + Double.parseDouble(parametersAll.getParameter(15)) + "\n";
fileGPCOACHH += "Crossover probability = " + Double.parseDouble(parametersAll.getParameter(16)) + "\n";
fileGPCOACHH += "Mutation probability = " + Double.parseDouble(parametersAll.getParameter(17)) + "\n";
fileGPCOACHH += "Insertion probability = " + Double.parseDouble(parametersAll.getParameter(18)) + "\n";
fileGPCOACHH += "Dropping Condition probability = " + Double.parseDouble(parametersAll.getParameter(19)) + "\n";
fileGPCOACHH += "Tournament Selection Size = " + Integer.parseInt(parametersAll.getParameter(20)) + "\n";
fileGPCOACHH += "Global Fitness Weight 1 = " + Double.parseDouble(parametersAll.getParameter(21)) + "\n";
fileGPCOACHH += "Global Fitness Weight 2 = " + Double.parseDouble(parametersAll.getParameter(22)) + "\n";
fileGPCOACHH += "Global Fitness Weight 3 = " + Double.parseDouble(parametersAll.getParameter(23)) + "\n";
fileGPCOACHH += "Global Fitness Weight 4 = " + Double.parseDouble(parametersAll.getParameter(24)) + "\n";
fileGPCOACHH += "Alpha Hierarchical Procedure = " + Double.parseDouble(parametersAll.getParameter(25)) + "\n";
fileGPCOACHH += "CHC Number of Evaluations = " + Integer.parseInt(parametersAll.getParameter(26)) + "\n";
fileGPCOACHH += "CHC Population Size = " + Integer.parseInt(parametersAll.getParameter(27)) + "\n";
fileGPCOACHH += "CHC Number of Bits per Gen = " + Integer.parseInt(parametersAll.getParameter(28)) + "\n";
Files.writeFile(fileConfName + "_GPCOACHH_cfg.txt", fileGPCOACHH);
parametersGPCOACHH = new parseParameters();
parametersGPCOACHH.parseConfigurationFile(fileConfName + "_GPCOACHH_cfg.txt");
GP_COACH_H method = new GP_COACH_H(parametersGPCOACHH);
method.execute();
// Delete auxiliary files
try{
(new File(fileConfName + "_SMOTE_cfg.txt")).delete();
(new File(fileConfName + "_GPCOACHH_cfg.txt")).delete();
(new File(smt_tr)).delete();
(new File(smt_tst)).delete();
}catch(Exception e){
e.printStackTrace();
}
}
/**
* Main Program
* @param args It contains the name of the configuration file<br/>
* Format:<br/>
* <em>algorithm = <algorithm name></em><br/>
* <em>inputData = "<training file>" "<validation file>" "<test file>"</em> ...<br/>
* <em>outputData = "<training file>" "<test file>"</em> ...<br/>
* <br/>
* <em>seed = value</em> (if used)<br/>
* <em><Parameter1> = <value1></em><br/>
* <em><Parameter2> = <value2></em> ... <br/>
*/
public static void main(String args[]) {
long t_ini = System.currentTimeMillis();
Main program = new Main();
System.out.println("Executing Algorithm.");
program.execute(args[0]);
long t_fin = System.currentTimeMillis();
long t_exec = t_fin - t_ini;
long hours = t_exec / 3600000;
long rest = t_exec % 3600000;
long minutes = rest / 60000;
rest %= 60000;
long seconds = rest / 1000;
rest %= 1000;
System.out.println("Execution Time: " + hours + ":" + minutes + ":" +
seconds + "." + rest);
}
}