Exemple #1
0
  private void checarSolucoes() {
    double avaliacao;

    piorAvaliacao = melhorAvaliacao = formigas[0].getAvaliacao();
    for (Formiga formiga : formigas) {
      avaliacao = formiga.getAvaliacao();
      if (melhorAvaliacao > avaliacao) {
        melhorAvaliacao = avaliacao;
        melhorSolucao = formiga.exibirCaminho();
      }
      if (piorAvaliacao < avaliacao) {
        piorAvaliacao = avaliacao;
        piorSolucao = formiga.exibirCaminho();
      }
    }
  }
Exemple #2
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;
    }
  }
Exemple #3
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;
            }
          }
        }
      }
    }
  }
Exemple #4
0
  // Integrar avaliação com estrategia do testador
  private void avaliarSolucoes() {
    double total = .0;

    for (Formiga formiga : formigas) {
      Iterator<Integer> it = formiga.getNosVisitados().iterator();
      int no;
      int soma = 0;

      while (it.hasNext()) {
        no = it.next().intValue();
        soma += no;
      }
      formiga.setAvaliacao(soma);
      total += soma;
    }
    this.media = total / formigas.length;
    for (Formiga formiga : formigas) {
      formiga.setAvaliacao(Math.abs(formiga.getAvaliacao() - media));
    }
  }
Exemple #5
0
 private void iniciarFormiga(Formiga formiga) {
   int numCelulas = estrategia.getNumCelulas();
   int celulaAleatoria = obterNumeroAleatorio(numCelulas - 1);
   Integer celula = new Integer(celulaAleatoria);
   formiga.adicionarNoVisitado(celula);
 }
Exemple #6
0
 private void resetarFormigas() {
   for (Formiga formiga : formigas) {
     formiga.setAvaliacao(.0);
     formiga.resetarSolucao();
   }
 }