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; } } } } } }