Boa tarde galera, estou implementando um algoritmo genético aqui, e estou em uma parte que tenho que separar as soluçoes melhores em paretos, nos primeiros paretos ficam as melhores solucoes, eu separo cada solucao em uma lista auxiliar q, depois de passado toda a iteração eu pego essa lista q com todas as soluçoes selecionadas e adiciono para a lista de listas, o que acontece é que somente a primeira lista de solucoes está sendo adicionada, as demais não. Eu até verifico antes de adicionar as soluçoes presentes em q, e mesmo assim quando vou imprimir os valores atraves da listas de listas eu nao consigo.
Segue o código:
public void nonDominatedSortingII(boolean showPhaseI)
{
boolean tag = true;
int k=0;
if(showPhaseI)
nonDominatedSortingI(true,true,true);
else
nonDominatedSortingI(false,false,false);
System.out.println("\n================================");
System.out.println("Non-Dominated Sorting Phase II:");
System.out.println("================================");
while(tag==true)
{
tag=false;
for(int i=0; i<N; i++)
{
// Verifica se nao existe nenhuma solucao que domina p(i)
if (p.get(i).getNp() == 0 || p.get(i).getNp()==-1)
{
tag=true;
if(p.get(i).getNp()==-1)
{
p.get(i).np=0;
continue;
}
if(k==0)
q.add(p.get(i));
p.get(i).setNp(-999); //inutilizando valores do front atual otimo para nao gerar loop infinito
// para cada solucao com np=0, buscar as solucoes dominadas
for (int j = 0; j < p.get(i).sp.size(); j++)
{
int qi = p.get(i).sp.get(j); // posicao da solucao j(i), dominada por p(i)
p.get(qi).np--; // reduz o np da solucao j(i) dominada em 1
if(p.get(qi).getNp()==0 && i>qi)
q2.add(p.get(qi));
if(p.get(qi).getNp()==0 && qi>i)
{
p.get(qi).np= -1;
q2.add(p.get(qi));
}
}
}
}
if(k==0)
{
showSolucoesQ(true, true, true);
paretos.add(q);
k++;
}
showSolucoesQ2(true, true, true);
if(q2.size()>0)
paretos.add(q2);
else
tag=false;
q2.clear();
}
}
Resumindo, no trecho:
if(q2.size()>0) paretos.add(q2); Por mais que q2 tenha as solucoes corretas, na hora que vou imprimir os valores eu só consigo do primeiro pareto(da primeira lista) e não dos demais
O código para imprimir a lista das listas é este:
public void showParetos(boolean showF, boolean showNp, boolean showSp)
{
System.out.println("\n\n Mostrando Paretos\n\n");
System.out.printf("Tamanho dos paretos: %d\n", paretos.size());
for(int i=0; i<paretos.size(); i++)
{
System.out.printf("Tamanho do %d Pareto = %d \n", i+1, paretos.get(i).size());
for(int j=0; j<paretos.get(i).size(); j++)
{
for(Double k: paretos.get(i).get(j).f)
System.out.printf("%.4f ",k);
System.out.println();
}
}
}
O que eu percebo é que o tamanho das listas(paretos) depois do primeiro é 0, significando que não existe nenhuma solucao…