/** * Seleciona a melhor solução global encontrada (presente em população). * * @param populacao a população onde deve ser realizada a busca * @return Solução de menor custo em população */ protected Solucao getMelhorSolucao(ArrayList<Solucao> populacao) { Solucao melhorSolucao = null; double menorCusto = Double.POSITIVE_INFINITY; double valorSol, numPontosCobertos; for (Solucao solucao : populacao) { valorSol = solucao.getValor(); numPontosCobertos = solucao.getNumPontosCobertos(); // Garante que cobre todos os pontos e que o custo é o menor if (valorSol < menorCusto && numPontosCobertos == sw.getNumPontos()) { menorCusto = valorSol; melhorSolucao = solucao; } } return melhorSolucao; }
/** * Devolve uma solução que não cobre todos os pontos mas é uma das melhores entre as incompletas * * @param populacao A população onde será realizada a busca * @return Uma solução que não cobre todos os pontos */ protected Solucao getSolucaoIncompleta(ArrayList<Solucao> populacao) { Solucao melhorSolucao = null; double menorCusto = Double.POSITIVE_INFINITY; int pontosCobertos = Integer.MIN_VALUE; double valorSol, numPontosCobertos; for (Solucao solucao : populacao) { valorSol = solucao.getValor(); numPontosCobertos = solucao.getNumPontosCobertos(); // Pega a solução de menor custo que cobre mais pontos if (valorSol < menorCusto && numPontosCobertos > pontosCobertos) { menorCusto = valorSol; numPontosCobertos = pontosCobertos; melhorSolucao = solucao; } } return melhorSolucao; }