Ejemplo n.º 1
0
  public void run() {
    int i, j;
    double ec, el, ec_tst, el_tst;

    /* We read the configutate file and we initialize the structures and variables */
    leer_conf();
    if (tabla.salir == false) {
      Gen = 0;

      /* Generation of the initial population */
      alg_gen.Initialize();

      /* Evaluation of the initial population */
      alg_gen.Evaluate();

      Gen++;

      /* Main of the genetic algorithm */
      do {
        /* Interchange of the new and old population */
        alg_gen.Intercambio();

        /* Selection by means of Baker */
        alg_gen.Select();

        /* Crossover */
        if (tipoc > 0) alg_gen.Max_Min_Crossover();
        else alg_gen.Cruce_Multipunto();

        /* Mutation */
        alg_gen.Mutacion();

        /* Elitist selection */
        alg_gen.Elitist();

        /* Evaluation of the current population */
        alg_gen.Evaluate();

        /* we increment the counter */
        Gen++;
      } while (Gen <= n_generaciones);

      /* we calcule the MSEs */
      fun_adap.Decodifica(alg_gen.solucion());
      fun_adap.Error_tra();
      ec = fun_adap.EC;
      el = fun_adap.EL;

      tabla_tst = new MiDataset(fich_datos_tst, false);
      fun_adap.Error_tst(tabla_tst);
      ec_tst = fun_adap.EC;
      el_tst = fun_adap.EL;

      fun_adap.Cubrimientos_Base();

      /* we write the RB */
      cadenaReglas = base_reglas.BRtoString();
      cadenaReglas +=
          "\nMSEtra: "
              + ec
              + "  MSEtst: "
              + ec_tst
              + "\nAverage covering degree: "
              + fun_adap.medcb
              + " Minimum covering degree: "
              + fun_adap.mincb;

      Fichero.escribeFichero(fichero_reglas, cadenaReglas);

      /* we write the obligatory output files*/
      String salida_tra = tabla.getCabecera();
      salida_tra += fun_adap.getSalidaObli(tabla);
      Fichero.escribeFichero(fich_tra_obli, salida_tra);

      String salida_tst = tabla_tst.getCabecera();
      salida_tst += fun_adap.getSalidaObli(tabla_tst);
      Fichero.escribeFichero(fich_tst_obli, salida_tst);

      /* we write the MSEs in specific files */
      Fichero.AnadirtoFichero(ruta_salida + "PcomunR.txt", "" + base_reglas.n_reglas + "\n");
      Fichero.AnadirtoFichero(ruta_salida + "PcomunTRA.txt", "" + ec + "\n");
      Fichero.AnadirtoFichero(ruta_salida + "PcomunTST.txt", "" + ec_tst + "\n");
    }
  }
Ejemplo n.º 2
0
  public void run() {
    int i, j, k, etiqueta, pos;
    double pert_act, grado_act, ec, el, ec_tst, el_tst;

    /* We read the configutate file and we initialize the structures and variables */
    leer_conf();

    if (tabla.salir == false) {
      /* we generate the semantics of the linguistic variables */
      base_datos.Semantica();

      /* we store the DB in the report file */
      informe = "\n\nInitial Data Base: \n\n";
      for (i = 0; i < tabla.n_variables; i++) {
        informe += "  Variable " + (i + 1) + ":\n";
        for (j = 0; j < base_datos.n_etiquetas[i]; j++) {
          informe +=
              "    Label "
                  + (j + 1)
                  + ": ("
                  + base_datos.BaseDatos[i][j].x0
                  + ","
                  + base_datos.BaseDatos[i][j].x1
                  + ","
                  + base_datos.BaseDatos[i][j].x3
                  + ")\n";
        }

        informe += "\n";
      }

      informe += "\n";
      Fichero.escribeFichero(fichero_inf, informe);

      /* Inicialization of the counter of uncovered examples */
      base_reglas.n_reglas = 0;

      /* Iterative Rule Learning */
      for (i = 0; i < tabla.long_tabla; i++) {
        /* Generation of the best rule for the current example */
        for (j = 0; j < tabla.n_variables; j++) {

          /* Determination of the best label for each variable */
          grado_pertenencia[j] = 0.0;
          etiqueta = 0;

          for (k = 0; k < base_datos.n_etiquetas[j]; k++) {
            pert_act = base_reglas.Fuzzifica(tabla.datos[i].ejemplo[j], base_datos.BaseDatos[j][k]);
            if (pert_act > grado_pertenencia[j]) {
              grado_pertenencia[j] = pert_act;
              etiqueta = k;
            }
          }

          Regla_act[j] = etiqueta;
        }

        /* we calculate the covered degree */
        grado_act = 1.0;
        for (j = 0; j < tabla.n_variables; j++) {
          grado_act *= grado_pertenencia[j];
        }

        /* we insert the new rule in the RB */
        pos = Pertenece(Regla_act, Conjunto_Reglas, base_reglas.n_reglas);

        /* if the rule didn't exist */
        if (pos == -1) {
          for (j = 0; j < tabla.n_variables; j++) {
            Conjunto_Reglas[base_reglas.n_reglas].Regla[j] = Regla_act[j];
          }
          Conjunto_Reglas[base_reglas.n_reglas].grado = grado_act;
          base_reglas.n_reglas++;
        }

        /* if a rule with equal antecedet exist in the RB and the covered degree of the current rule is better, the consequent is replaced */
        else if (Conjunto_Reglas[pos].grado < grado_act) {
          Conjunto_Reglas[pos].grado = grado_act;
          if (Conjunto_Reglas[pos].Regla[tabla.n_var_estado] != Regla_act[tabla.n_var_estado]) {
            Conjunto_Reglas[pos].Regla[tabla.n_var_estado] = Regla_act[tabla.n_var_estado];
          }
        }
      }

      /* we decode the generated rules */
      base_reglas.decodifica(Conjunto_Reglas);

      /* we calcule the MSEs */
      fun_adap.Error_tra();
      ec = fun_adap.EC;
      el = fun_adap.EL;

      fun_adap.Error_tst();
      ec_tst = fun_adap.EC;
      el_tst = fun_adap.EL;

      /* we write the RB */
      cadenaReglas = base_reglas.BRtoString(peso);
      cadenaReglas += "\nECMtra: " + ec + " ECMtst: " + ec_tst + "\n";

      Fichero.escribeFichero(fichero_reglas, cadenaReglas);

      /* we write the obligatory output files*/
      String salida_tra = tabla.getCabecera();
      salida_tra += fun_adap.getSalidaObli(tabla);
      Fichero.escribeFichero(fich_tra_obli, salida_tra);

      String salida_tst = tabla_tst.getCabecera();
      salida_tst += fun_adap.getSalidaObli(tabla_tst);
      Fichero.escribeFichero(fich_tst_obli, salida_tst);

      /* we write the MSEs in specific files */
      Fichero.AnadirtoFichero(ruta_salida + "WMcomunR.txt", "" + base_reglas.n_reglas + "\n");
      Fichero.AnadirtoFichero(ruta_salida + "WMcomunTRA.txt", "" + ec + "\n");
      Fichero.AnadirtoFichero(ruta_salida + "WMcomunTST.txt", "" + ec_tst + "\n");
    }
  }