Example #1
0
  private void construirSolucao() {
    int numCelulas = estrategia.getNumCelulas();
    int numTransicoes = estrategia.getNumTransicoes();
    double alfa = estrategia.getAlpha();

    for (Formiga formiga : formigas) {
      iniciarFormiga(formiga);
      List<Integer> nosVizinhos = formiga.getNosVizinhos();
      int numNos = nosVizinhos.size();
      int indice = 0;
      int j = 0;

      for (int z = 1; z < numTransicoes; z++) {
        double probTransTotal = .0;

        for (j = 0; j < numNos; j++) {
          indice = nosVizinhos.get(j).intValue();
          if (formiga.comtemNoVisitado(indice) == false) {
            if (taxaFeromonio[indice] >= 0) {
              probTransTotal += Math.pow(taxaFeromonio[indice], alfa);
            }
          }
        }

        for (j = 0; j < numNos; j++) {
          indice = nosVizinhos.get(j).intValue();
          if (formiga.comtemNoVisitado(indice) == false) {
            if (taxaFeromonio[indice] >= 0) {
              probTransicaoNo[indice] = Math.pow(taxaFeromonio[indice], alfa) / probTransTotal;
            } else {
              probTransicaoNo[indice] = .0;
            }
          } else {
            probTransicaoNo[indice] = .0;
          }
        }

        // Roleta
        double roleta = Math.random();
        double maior = .0;
        double menor = .0;

        for (j = 0; j < numNos; j++) {
          indice = nosVizinhos.get(j).intValue();

          if (formiga.comtemNoVisitado(indice) == false) {
            maior += probTransicaoNo[indice];

            if (roleta >= menor && roleta <= maior) {
              formiga.adicionarNoVisitado(indice);
              probTransicaoNo[indice] = .0;
              break;
            } else {
              menor = maior;
            }
          }
        }
      }
    }
  }