/*********************************************************************** 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.Subgroup_Discovery.aprioriSD; import java.util.*; /** * <p>T�tulo: Conjunto de reglas</p> * <p>Descripci�n: Estructura para almacenar un conjunto completo de reglas</p> * <p>Creado: 23-feb-2006 </p> * @author Alberto Fern�ndez Hilario * @version 1.0 */ public class ConjReglas { private LinkedList reglas; private String nombreClase; private String[] valorNombreClases; /** * Constructor */ public ConjReglas() { super(); reglas = new LinkedList(); } /** * A�ade una regla a la lista * @param regl Regla a a�adir */ public void addRegla(Regla regl) { reglas.add(regl); } /** * Elimina una regla de la lista * @param i indice de la regla a eliminar */ public void deleteRegla(int i) { reglas.remove(i); } /** * Devuelve una regla de la lista * @param i indice de la regla * @return la regla i-esima */ public Regla getRegla(int i) { return (Regla) reglas.get(i); } /** * Devuelve la regla como una nueva copia * @param i regla i-esima * @return una regla de la lista como una nueva copia */ public Regla getNuevaRegla(int i) { Regla c = (Regla) reglas.get(i); Regla c2 = c.copiaRegla(); return c2; } /** * Devuelve el numero de reglas con las que estamos trabajando * @return El tama�o del conjunto de reglas */ public int size() { return (reglas.size()); } /** * Devuelve el conjunto completo de reglas * @return el conjunto completo de reglas */ public LinkedList getConjReglas() { return reglas; } /** * Realiza una copia del conjunto completo de reglas * @return el conjunto completo de reglas como una nueva copia */ public ConjReglas copiaConjReglas() { int i; ConjReglas c = new ConjReglas(); for (i = 0; i < reglas.size(); i++) { Regla comp = (Regla) reglas.get(i); c.addRegla(comp.copiaRegla()); } return c; } /** * Muestra por pantalla el conjunto de reglas */ public void print() { for (int i = 0; i < reglas.size(); i++) { Regla c = (Regla) reglas.get(i); System.out.print("\nRule " + (i + 1) + ": IF "); c.print(); System.out.print(" THEN " + nombreClase + " -> " + c.getClase() + " "); System.out.print("-- Support: " + c.getSupport()); c.printDistribucion(); } } /** * Imprime en una cadena el conjunto de reglas * @return una cadena de texto (string) que almacena el conjunto de reglas */ public String printString() { int i; String cad = ""; for (i = 0; i < reglas.size(); i++) { Regla c = (Regla) reglas.get(i); cad += "\nRule " + (i + 1) + ": IF "; cad += c.printString(); cad += " THEN " + nombreClase + " -> " + valorNombreClases[c.getClase()] + " "; cad += c.printSupport(); cad += c.printDistribucionString(); } return cad; } /** * Devuelve la �ltima regla (normalmente aquella con mejor peso) * @return la �ltima regla de a lista */ public Regla getUltimaRegla() { return (Regla) reglas.getLast(); } /** * Realiza un ajuste de valores para todas las reglas del conjunto * @param cambio int[] Un vector con los nuevos valores (cambio[0] -> nuevo valor para el valor 0...) */ public void ajusta(int[] cambio) { for (int i = 0; i < reglas.size(); i++) { ((Regla) reglas.get(i)).ajusta(cambio); } } /** * Realizamos una copia local del nombre de la variable clase * @param nombreClase String nombre de la clase */ public void adjuntaNombreClase(String nombreClase) { this.nombreClase = nombreClase; } /** * Realizamos una copia local del nombre de las valores de la clase * @param clases String[] un Array que guarda el nombre de valor de la clase */ public void adjuntaNombreClases(String[] clases) { valorNombreClases = new String[clases.length]; for (int i = 0; i < clases.length; i++) { valorNombreClases[i] = clases[i]; } } }