Ejemplo n.º 1
0
  /**
   * Builder. Copies a chromosome of specified size
   *
   * @param size Size of the chromosome
   * @param a Chromosome to copy
   */
  public Cromosoma(int size, Cromosoma a) {

    int i;

    cuerpo = new boolean[size];
    for (i = 0; i < cuerpo.length; i++) cuerpo[i] = a.getGen(i);
    calidad = a.getCalidad();
    cruzado = false;
    valido = true;
  } // end-method
Ejemplo n.º 2
0
  /**
   * Test if two chromosome differ in only one gene
   *
   * @param a Chromosome to compare
   * @return Position of the difference, if only one is found. Otherwise, -1
   */
  public int differenceAtOne(Cromosoma a) {

    int i;
    int cont = 0, pos = -1;

    for (i = 0; i < cuerpo.length && cont < 2; i++)
      if (cuerpo[i] != a.getGen(i)) {
        pos = i;
        cont++;
      }

    if (cont >= 2) return -1;
    else return pos;
  } // end-method
Ejemplo n.º 3
0
  /**
   * Reinitializes the chromosome by using CHC diverge procedure
   *
   * @param r R factor of diverge
   * @param mejor Best chromosome found so far
   * @param prob Probability of setting a gen to 1
   */
  public void divergeCHC(double r, Cromosoma mejor, double prob) {

    int i;

    for (i = 0; i < cuerpo.length; i++) {
      if (Randomize.Rand() < r) {
        if (Randomize.Rand() < prob) {
          cuerpo[i] = true;
        } else {
          cuerpo[i] = false;
        }
      } else {
        cuerpo[i] = mejor.getGen(i);
      }
    }
    cruzado = true;
  } // end-method
Ejemplo n.º 4
0
  /** Function which selects the elements of the population */
  public void Select() {

    int i, j;

    for (i = 0; i < Popsize; i++)
      for (j = i + 1; j < POPSIZE; j++)
        if (Better(Poblacion[j].perf(), Poblacion[i].perf())) INTERCAMBIAR(i, j);

    if (Poblacion[0].perf() < BEST_CROM.perf()) {
      for (j = 0; j < Genes; j++) BEST_CROM.set_gene(j, Poblacion[0].gene(j));
      for (j = 0; j < GenesA; j++) BEST_CROM.set_geneA(j, Poblacion[0].geneA(j));
      for (j = 0; j < n_reglas_total; j++) BEST_CROM.set_geneR(j, Poblacion[0].geneR(j));
      BEST_CROM.set_perf(Poblacion[0].perf());
      BEST_CROM.set_entrado(1);
    }
  }
Ejemplo n.º 5
0
  /** Function which restart the population */
  public void ReStart() {

    int i, j, i_mejor;

    if (Ajuste == 1) {
      if (BEST_CROM.entrado() == 1) {
        /* BUSCAR EL MEJOR ELEMENTO */
        for (i = i_mejor = 0; i < Popsize; i++)
          if (Better(Poblacion[i].perf(), Poblacion[i_mejor].perf())) i_mejor = i;

        for (j = 0; j < Genes; j++) Poblacion[0].set_gene(j, BEST_CROM.gene(j));
        for (j = 0; j < GenesA; j++) Poblacion[0].set_geneA(j, BEST_CROM.geneA(j));
        for (j = 0; j < n_reglas_total; j++) Poblacion[0].set_geneR(j, (char) 1);
        Poblacion[0].set_perf(BEST_CROM.perf());

        i = 1;
      } else {
        i = 0;
      }

      /* REINICIALIZAR TODOS MENOS EL PRIMERO */

      for (; i < Popsize; i++) {
        for (j = 0; j < Genes; j++) {
          Poblacion[i].set_gene(j, BEST_CROM.gene(j) + ((Randomize.Rand() - 0.5) / 4.0));
          if (Poblacion[i].gene(j) > Gene[j].max()) Poblacion[i].set_gene(j, Gene[j].max());
          if (Poblacion[i].gene(j) < Gene[j].min()) Poblacion[i].set_gene(j, Gene[j].min());
        }
        for (j = 0; j < GenesA; j++) {
          Poblacion[i].set_geneA(j, BEST_CROM.geneA(j) + ((Randomize.Rand() - 0.5) / 4.0));
          if (Poblacion[i].geneA(j) > Gene[j].max()) Poblacion[i].set_geneA(j, Gene[j].max());
          if (Poblacion[i].geneA(j) < Gene[j].min()) Poblacion[i].set_geneA(j, Gene[j].min());
        }
        for (j = 0; j < n_reglas_total; j++) Poblacion[i].set_geneR(j, (char) 1);
      }
      THRESHOLD = (double) ((Genes + GenesA) * BITS_GEN / 4.0);
      reduccionIni = THRESHOLD * 0.001;
    } else {
      if (BEST_CROM.entrado() == 1) {
        /* BUSCAR EL MEJOR ELEMENTO */
        for (i = i_mejor = 0; i < Popsize; i++)
          if (Better(Poblacion[i].perf(), Poblacion[i_mejor].perf())) i_mejor = i;
        /* COLOCAR EL MEJOR EN LA PRIMERA POSICION */
        for (j = 0; j < Genes; j++) Poblacion[0].set_gene(j, BEST_CROM.gene(j));
        for (j = 0; j < GenesA; j++) Poblacion[0].set_geneA(j, BEST_CROM.geneA(j));
        for (j = 0; j < n_reglas_total; j++) Poblacion[0].set_geneR(j, (char) 1);
        Poblacion[0].set_perf(BEST_CROM.perf());

        i = 1;
      } else i = 0;

      /* REINICIALIZAR TODOS MENOS EL PRIMERO */
      for (; i < Popsize; i++) {
        for (j = 0; j < Genes; j++) Poblacion[i].set_gene(j, BEST_CROM.gene(j));
        for (j = 0; j < GenesA; j++)
          Poblacion[i].set_geneA(
              j, Gene[j].min() + (Gene[j].max() - Gene[j].min()) * Randomize.Rand());
        for (j = 0; j < n_reglas_total; j++) Poblacion[i].set_geneR(j, '1');
      }
      THRESHOLD = (double) (GenesA / 4.5);
      reduccionIni = THRESHOLD * 0.001;
    }

    Reiniciado = 1;
  }
Ejemplo n.º 6
0
  /**
   * It initialize the population
   *
   * @param tam1 It contains the size of the table of training
   * @param v1 It contains the training input values
   * @param s1 It contains the training output values
   * @param tam2 It contains the size of the table of test
   * @param v2 It contains the test input values
   * @param s2 It contains the test output values
   * @param n_variables It contains the number of variables
   * @param reglas It contains the number of rules
   * @param var It contains the number of state variables
   * @param sal It contains the exit value
   * @param v It contains the values of data base
   * @param semilla It contains the value of the seed
   */
  public void Initialize(
      int tam1,
      double[][] v1,
      double[] s1,
      int tam2,
      double[][] v2,
      double[] s2,
      int n_variables,
      int reglas,
      int var,
      double sal,
      double[] v,
      long semilla) {

    /* INICIALIZAR VARIABLES */

    int i, j;
    Genes = 0;
    contador = contador2 = 0;
    Reiniciado = 0;
    Randomize.setSeed(semilla);
    E = new Ecm(tam1, v1, s1, tam2, v2, s2, n_variables, reglas, var, sal, v);
    Poblacion = new Cromosoma[2 * Popsize];
    Trials = 0;

    for (i = 0; i < n_variables; i++) {
      Genes += E.base().getN_etiquetas(i);
    }
    Ajuste = 1;
    Gene = new Gen[Genes];
    GenesA = Genes - E.base().getN_etiquetas(E.base().getN_var_estado());
    THRESHOLD = (double) ((Genes + GenesA) * BITS_GEN / 4.0);
    reduccionIni = THRESHOLD * 0.001;
    n_reglas_total = reglas;
    Gen aux = new Gen();
    aux.set_min(0.0);
    aux.set_max(1.0);

    for (i = 0; i < Genes; i++) {
      Gene[i] = aux;
    }
    for (i = 0; i < 2 * Popsize; i++) {
      Poblacion[i] = new Cromosoma(Genes, GenesA, n_reglas_total);
    }
    sample = new int[Popsize];
    BEST_CROM = new Cromosoma(Genes, Genes, n_reglas_total);

    for (j = 0; j < Genes; j++) {
      BEST_CROM.set_gene(j, Gene[j].min() + (Gene[j].max() - Gene[j].min()) / 2.);
      Poblacion[0].set_gene(j, BEST_CROM.gene(j));
    }
    for (j = 0; j < GenesA; j++) {
      BEST_CROM.set_geneA(j, Gene[j].min() + (Gene[j].max() - Gene[j].min()) / 2.);
      Poblacion[0].set_geneA(j, BEST_CROM.gene(j));
    }
    for (j = 0; j < n_reglas_total; j++) {
      BEST_CROM.set_geneR(j, (char) 1);
      Poblacion[0].set_geneR(j, (char) 1);
    }
    for (i = 1; i < Popsize; i++) {
      for (j = 0; j < Genes; j++)
        Poblacion[i].set_gene(
            j, Gene[j].min() + (Gene[j].max() - Gene[j].min()) * Randomize.Rand());
      for (j = 0; j < GenesA; j++)
        Poblacion[i].set_geneA(
            j, Gene[j].min() + (Gene[j].max() - Gene[j].min()) * Randomize.Rand());
      for (j = 0; j < n_reglas_total; j++) Poblacion[i].set_geneR(j, (char) 1);
    }
    F = new Funciones();
  }