Esempio n. 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;
            }
          }
        }
      }
    }
  }
Esempio n. 2
0
  private void iniciarTaxaFeromonio() {
    int numCelulas = estrategia.getNumCelulas();
    this.taxaFeromonio = new double[numCelulas];
    this.probTransicaoNo = new double[numCelulas];

    double taxaInicial = estrategia.getC();
    for (int i = 0; i < numCelulas; i++) {
      this.taxaFeromonio[i] = taxaInicial;
    }
  }
Esempio n. 3
0
  private void inicializa() {
    this.estrategia = new Estrategia();
    int numFormigas = estrategia.getNumAnts();
    this.formigas = new Formiga[numFormigas];

    int numCelulas = estrategia.getNumCelulas();
    for (int i = 0; i < numFormigas; i++) {
      formigas[i] = new Formiga();
      formigas[i].configurarVizinhos(numCelulas);
    }
    iniciarTaxaFeromonio();
  }
Esempio n. 4
0
  private void evaporarFeromonio() {
    int tam = taxaFeromonio.length;
    double persistenciaTrilha = 1 - estrategia.getRho();

    for (int i = 0; i < tam; i++) {
      taxaFeromonio[i] *= persistenciaTrilha;
    }
  }
Esempio n. 5
0
 public void executar() {
   int numIteracoes = estrategia.getNumIter();
   for (int i = 0; i < numIteracoes; i++) {
     construirSolucao();
     avaliarSolucoes();
     checarSolucoes();
     evaporarFeromonio();
     atualizarFeromonio();
     resetarFormigas();
     System.out.println(
         "Melhor Avaliação: " + melhorAvaliacao + " Pior Avaliação: " + piorAvaliacao);
     System.out.println("Melhor Solução: " + melhorSolucao + " Pior Solução: " + piorSolucao);
   }
 }
Esempio n. 6
0
  private void atualizarFeromonio() {
    int tam = taxaFeromonio.length;
    double q = estrategia.getQ();
    double qtdFeromDepositar, avaliacao;

    for (int i = 0; i < tam; i++) {
      qtdFeromDepositar = .0;

      for (Formiga formiga : formigas) {
        if (formiga.comtemNoVisitado(i) == true) {
          avaliacao = formiga.getAvaliacao();
          qtdFeromDepositar += q / (avaliacao == 0 ? 1 : avaliacao);
        }
      }
      taxaFeromonio[i] += qtdFeromDepositar;
    }
  }
Esempio n. 7
0
 private void iniciarFormiga(Formiga formiga) {
   int numCelulas = estrategia.getNumCelulas();
   int celulaAleatoria = obterNumeroAleatorio(numCelulas - 1);
   Integer celula = new Integer(celulaAleatoria);
   formiga.adicionarNoVisitado(celula);
 }