예제 #1
0
  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;
  }
예제 #2
0
  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;
    }
  }