import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
public class Equalizador {
public static void main(String[] args) {
List<Integer> espacoEstados = new ArrayList<Integer>(16);
int []cromossomo = new int [36];
ArrayList<Individuo> individuos =new ArrayList <Individuo>(10);
Individuo indi = new Individuo();
Individuo ind = null;
int fitness = 0;
for(int i = 0; i<=15; i++) {
espacoEstados.add(i);
}
int[] resultados = new int[9];
Random roleta = new Random();
for (int j= 1; j<10; j++){
int cont = 0;
for(int i = 0 ; i < 9; i++) {
resultados[i] = roleta.nextInt(espacoEstados.size());
}
indi.EncontraGenotipo(cromossomo, resultados);
fitness = indi.CalculaFitness(cromossomo);
Individuo i = new Individuo (j, resultados, cromossomo, fitness);
individuos.add(i);
}
}
}
Comparar valores de um array
4 Respostas
Boa noite!
O post da LecaDF não lhe ajudou? Qual seria a dúvida ainda?
Estou postando um novo tópico, pois não estou conseguindo editar o que antes tinha postado. No tópico criado anteriormente me falaram que eu poderia utilizar o comparable. Será que não existe outra maneira de eu fazer isso. Estou precisando comparar valores de uma array para ordená-lo. Tenho um array de individuos que possuem como atributos um int codigo, dois vetores: resultado e cromossomo e um int fitness. Bom, preciso colocar esses vetores em ordem pelo valor do fitness.import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Random; public class Equalizador { public static void main(String[] args) { List<Integer> espacoEstados = new ArrayList<Integer>(16); int []cromossomo = new int [36]; ArrayList<Individuo> individuos =new ArrayList <Individuo>(10); Individuo indi = new Individuo(); Individuo ind = null; int fitness = 0; for(int i = 0; i<=15; i++) { espacoEstados.add(i); } int[] resultados = new int[9]; Random roleta = new Random(); for (int j= 1; j<10; j++){ int cont = 0; for(int i = 0 ; i < 9; i++) { resultados[i] = roleta.nextInt(espacoEstados.size()); } indi.EncontraGenotipo(cromossomo, resultados); fitness = indi.CalculaFitness(cromossomo); Individuo i = new Individuo (j, resultados, cromossomo, fitness); individuos.add(i); } } }
Juliana,
Você quer ordenar a lista de indivíduos ou os vetores: resultado e cromossomo de cada indivíduo?
Se você quiser ordenar a lista de indivíduos utilizando o atributo fitness, basta que a classe Individuo implemente a interface Comparable e o método compareTo esteja da seguinte forma:
public int compareTo(Individuo anotherInteger) {
int thisVal = this.fitness;
int anotherVal = anotherInteger.fitness;
return (thisVal < anotherVal ? -1 : (thisVal == anotherVal ? 0 : 1));
}
A assinatura da classe Individuo fica assim:
public class Individuo implements Comparable<Individuo>
A tua classe Equalizador fica assim:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class Equalizador {
public static void main(String[] args) {
List<Integer> espacoEstados = new ArrayList<Integer>(16);
int[] cromossomo = new int[36];
ArrayList<Individuo> individuos = new ArrayList<Individuo>(10);
Individuo indi = new Individuo();
int fitness = 0;
for (int i = 0; i <= 15; i++) {
espacoEstados.add(i);
}
int[] resultados = new int[9];
Random roleta = new Random();
for (int j = 1; j < 10; j++) {
for (int i = 0; i < 9; i++) {
resultados[i] = roleta.nextInt(espacoEstados.size());
}
indi.EncontraGenotipo(cromossomo, resultados);
fitness = indi.CalculaFitness(cromossomo);
individuos.add(new Individuo(j, resultados, cromossomo, fitness));
}
Collections.sort(individuos);
}
}
Sendo que o único código que adicionei foi: Collections.sort(individuos); para ordenar a lista pelo fitness do indivíduo.
A implementação do algoritmo genético é mesmo relevante para seu trabalho? Ou só a implementação do fitness e do indivíduo?
Porque, se quiser, tenho um framework completo para GAs, com diversos tipos de algoritmo de seleção, escala e mutação já implementados, tanto para Java, quanto para C++.
Chama-se SofiaIA. Até escrevi alguns artigos sobre ele: