/***********************************************************************
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/
**********************************************************************/
package keel.Algorithms.Genetic_Rule_Learning.Advanced_Ant_Miner;
import java.util.StringTokenizer;
import org.core.Fichero;
public class Main {
private int numHormigas;
private int maximoDatosSinCubrir;
private int minimoCasosRegla;
private int maxIteracionesSinConverger;
private float alfa;
private float beta;
private float maxFeromona;
private float minFeromona;
private long semilla;
private int discretizado;
private String fTrain;
private String fTrainC;
private String fTest;
private String fOutTrain;
private String fOutTest;
private String fOutResult;
private String fStop;
private ACO algoritmo;
public Main() {
}
private void extraeArgumentos(String ficheroParametros) {
StringTokenizer linea, datos;
String fichero = Fichero.leeFichero(ficheroParametros); //guardo todo el fichero como un String para procesarlo:
String una_linea;
linea = new StringTokenizer(fichero, "\n\r");
linea.nextToken(); //Paso del nombre del algoritmo
una_linea = linea.nextToken(); //Leo una linea
datos = new StringTokenizer(una_linea, " = \" ");
datos.nextToken(); //inputData
fTrain = datos.nextToken(); //fichero de entrenamiento
fTrainC = datos.nextToken(); //fichero de entrenamiento sin preprocesamiento
fTest = datos.nextToken(); //fichero de test
fStop = fTrainC;
una_linea = linea.nextToken(); //Leo una linea
datos = new StringTokenizer(una_linea, " = \" ");
datos.nextToken(); //outputData
fOutTrain = datos.nextToken();
fOutTest = datos.nextToken();
fOutResult = datos.nextToken();
una_linea = linea.nextToken(); //Leo una linea
datos = new StringTokenizer(una_linea, " = \" ");
datos.nextToken(); //seed
semilla = Long.parseLong(datos.nextToken());
una_linea = linea.nextToken(); //Leo una linea
datos = new StringTokenizer(una_linea, " = \" ");
datos.nextToken(); //nunHormigas
numHormigas = Integer.parseInt(datos.nextToken());
una_linea = linea.nextToken(); //Leo una linea
datos = new StringTokenizer(una_linea, " = \" ");
datos.nextToken(); //maximoDatosSinCubrir
maximoDatosSinCubrir = Integer.parseInt(datos.nextToken());
una_linea = linea.nextToken(); //Leo una linea
datos = new StringTokenizer(una_linea, " = \" ");
datos.nextToken(); //minimoCasosRegla
minimoCasosRegla = Integer.parseInt(datos.nextToken());
una_linea = linea.nextToken(); //Leo una linea
datos = new StringTokenizer(una_linea, " = \" ");
datos.nextToken(); //maxIteracionesSinConverger
maxIteracionesSinConverger = Integer.parseInt(datos.nextToken());
una_linea = linea.nextToken(); //Leo una linea
datos = new StringTokenizer(una_linea, " = \" ");
datos.nextToken(); //Maximo de feromona
maxFeromona = Float.parseFloat(datos.nextToken());
una_linea = linea.nextToken(); //Leo una linea
datos = new StringTokenizer(una_linea, " = \" ");
datos.nextToken(); //Minimo de feromona
minFeromona = Float.parseFloat(datos.nextToken());
una_linea = linea.nextToken(); //Leo una linea
datos = new StringTokenizer(una_linea, " = \" ");
datos.nextToken(); //alfa
alfa = Float.parseFloat(datos.nextToken());
una_linea = linea.nextToken(); //Leo una linea
datos = new StringTokenizer(una_linea, " = \" ");
datos.nextToken(); //beta
beta = Float.parseFloat(datos.nextToken());
}
private void muestraParametros() {
System.out.println("Argumentos leidos desde el fichero de parametros ");
System.out.println();
System.out.println("Numero de hormigas: " + numHormigas);
System.out.println("Maximo de datos sin cubrir: " + maximoDatosSinCubrir);
System.out.println("Minimo de casos sin cubrir por una regla: " +
minimoCasosRegla);
System.out.println("Maximo de iteraciones sin converger: " +
maxIteracionesSinConverger);
System.out.println("Maximo de feromona permitido: " + maxFeromona);
System.out.println("Minimo de feromona permitido: " + minFeromona);
System.out.println("Alfa: " + alfa);
System.out.println("Beta: " + beta);
System.out.println("Semilla: " + semilla);
System.out.println();
System.out.println("Fichero de entrenamiento: " + fTrain);
System.out.println("Fichero de entrenamiento entero: " + fTrainC);
System.out.println("Fichero de test: " + fTest);
System.out.println("Fichero de Parada Temprana" + fStop);
System.out.println("Fichero de salida de entrenamiento: " + fOutTrain);
System.out.println("Fichero de Salida de test: " + fOutTest);
}
private void execute() {
algoritmo = new ACO(fTrain, fTrainC, fTest, fStop, fOutTrain,
fOutTest, fOutResult, numHormigas, maximoDatosSinCubrir,
minimoCasosRegla, maxIteracionesSinConverger,
minFeromona, maxFeromona, alfa, beta, semilla);
if (algoritmo.OK()) {
algoritmo.run();
algoritmo.sacaResultadosAFicheros();
algoritmo.muestraResultados();
}
else {
System.err.println("Aborting execution!");
}
}
public static void main(String[] args) {
Main ppal = new Main();
ppal.extraeArgumentos(args[0]);
//ppal.muestraParametros();
ppal.execute();
}
}