public Populacao criarPopInicial() { Populacao pop = new Populacao(); TreeMap<Double, Objeto> objetosOrdenadorPorAptidao = new TreeMap<>(); for (int i = 0; i < co.size(); i++) { objetosOrdenadorPorAptidao.put(co.getObj(i).aptidao(), co.getObj(i)); } Individuo indGuloso = new Individuo(0, capacidadeContainer); System.out.println(objetosOrdenadorPorAptidao); for (Map.Entry<Double, Objeto> entrySet : objetosOrdenadorPorAptidao.entrySet()) { Objeto value = entrySet.getValue(); indGuloso.addObj(value); } pop.addIndividuo(indGuloso); for (int i = 1; i < tamanhoPop; i++) { Individuo novo = new Individuo(i, capacidadeContainer); for (int j = 0; j < 1000; j++) { novo.addObj(co.getObj(geraRandomInt(0, co.size() - 1))); } for (int k = 0; k < 1000; k++) { novo.tentarSwapPositivo(co.getObj(geraRandomInt(0, co.size() - 1))); } pop.addIndividuo(novo); } return pop; }
public void run() { int geracao = 0; Individuo filho; Populacao pop = criarPopInicial(); Individuo elitismo = null; int indiceMaior = 0; for (int i = 0; i < tamanhoPop; i++) { if (pop.getPop().get(i).valor() > pop.getPop().get(indiceMaior).valor()) { indiceMaior = i; elitismo = pop.getPop().get(indiceMaior); } } while (elitismo.valor() < 2643690) { Populacao novaPop = new Populacao(); novaPop.addIndividuo(elitismo); while (tamanhoPop > novaPop.size()) { int indexMae = pop.selecaoRoletaRussa(); int indexPai = pop.selecaoRoletaRussa(); if (indexMae != indexPai) { filho = pop.cruzamento(indexMae, indexPai); novaPop.addIndividuo(filho); if (geraRandomInt(0, 100) < taxaMutacao) { pop.mutacao(geraRandomInt(0, pop.size() - 1), co); } } } indiceMaior = 0; for (int i = 0; i < tamanhoPop; i++) { if (novaPop.getPop().get(i).valor() > novaPop.getPop().get(indiceMaior).valor()) { indiceMaior = i; elitismo = novaPop.getPop().get(indiceMaior); } } System.out.println(elitismo.valor()); geracao++; System.out.println( "Geracao : " + geracao + "\tBest valor : " + novaPop.getPop().get(indiceMaior).valor() + "\tpeso: " + novaPop.getPop().get(indiceMaior).peso()); pop = novaPop; } }