Introdução ao Java Genetic Algorithms Package (JGAP)

Você se interessou sobre Algoritmos Genéticos? Se chegou até aqui e não sabe do que se trata, então, visite o nosso post sobre Introdução aos Algoritmos Genéticos.

Se você está interessado em utilizar os Algoritmos Genéticos (AGs) para resolver algum problema complexo, então, deve ter percebido que programar do zero é uma tarefa árdua. Para resolver o problema de tempo e complexidade na implementação, apresentamos o Java Genetic Algorithms Package (JGAP), uma ferramenta que ajudará na implementação rápida com Algoritmos Genéticos (MEFFERT, 2016).

O JGAP (pronuncia-se “jay-gap”) é um componente ou biblioteca que implementa os processos do Algoritmos Genéticos e também da Programação Genética. Ele fornece um mecanismo básico que pode ser facilmente implementado para revolver problemas complexos com princípios evolutivos. Ele fornece junto com o JGAP diversos exemplos implementados que facilita o entendimento e a implementação (MEFFERT, 2016).

O JGAP foi projetado para ser facilmente customizado, devido ao seu projeto modular que permite adicionar código próprio dos operadores de mutação e cruzamento e outros sub-componentes (MEFFERT, 2016).

O JGAP foi desenvolvido por Klaus Meffert. e está sobre a licença GNU Lesser Public License.

Preparação do JGAP

O JGAP está na sua versão 3.6.3 de 03/07/2015 e poderá ser feito seu download no link <Clique Aqui>.

O JGAP por ser desenvolvido na linguagem Java poderá ser utilizado nos sistemas operacionais Windows e Linux.

Após efetuar o download do jgap_3.6.3_full.zip poderemos realizar a instalação:

  1. Descompacte o arquivo .zip em qualquer diretório. Mantenha a nomenclatura do diretório “jgap_3.6.3_full” para uma melhor referência posterior.
  2. Não será necessário registrar qualquer parte do JGAP.
  3. Abra o diretório que efetuou a extração dos arquivos do JGAP e verá que existem arquivos .jar, .bat e diretórios de referências, entre outros. Na Figura 01, veremos um exemplo dos arquivos e diretórios disponíveis.

 

Tela de exemplo do diretório JGAP e seus arquivos

Figura 01 – Tela de exemplo do diretório JGAP e seus arquivos

Rodando um exemplo

Para verificar se está tudo corretamente instalado, basta executar os arquivos .bat, disponíveis na pasta descompactada no tópico anterior.

Clique duas vezes no start_example.bat e será aberto a janela de prompt do Windows, conforme podemos visualizar na Figura 02.

Tela do prompt do windows com um exemplo do JGAP executado

Figura 02 – Tela do prompt do Windows com o exemplo do JGAP executado.

Adicionando o JGAP no IDE

Para utilizar o JGAP no seu projeto, deverá adicionar o arquivo jgap.jar nas bibliotecas da sua IDE favorita. Dependendo do recurso utilizado deverá adicionar as bibliotecas disponíveis no diretório \lib.

Investigando um exemplo

Abaixo vemos um exemplo do código da classe HelloJGAP com o mínimo para utilização do JGAP.

import org.jgap.*;
import org.jgap.impl.*;

public class HelloJGAP {

	public static void main(String[] args) throws InvalidConfigurationException {
		// Inicia com a configuração padrão
		// -------------------------------------------------------------
		Configuration.reset();
		Configuration conf = new DefaultConfiguration();
		conf.setPreservFittestIndividual(true);

		// Define o método de seleção natural - antes dos operadores genéticos
		// --------------- 
		conf.addNaturalSelector(new WeightedRouletteSelector(conf), true);
		// Define o método de seleção natural - Após os operadores genéticos
		// --------------- 
		conf.addNaturalSelector(new WeightedRouletteSelector(conf), false);

		// Setar a função fitness
		// ---------------------------------------------------------
		FitnessFunction myFunc = new MaxFunction();
		conf.setFitnessFunction(myFunc);

		// Definir o cromossomo
		// --------------------------------------------------------------
		Gene[] sampleGenes = new Gene[5];
		for (int i = 0; i < 5; i++) {
			CompositeGene compositeGene = new CompositeGene(conf);
			BooleanGene D = new BooleanGene(conf);
			compositeGene.addGene(D);
			sampleGenes[i] = compositeGene;
		}
		IChromosome sampleChromosome = new Chromosome(conf, sampleGenes);
		conf.setSampleChromosome(sampleChromosome);

		// Tamanho da população
		// ------------------------------------------------------------
		conf.setPopulationSize(500);

		// operadores genéticos
		// --------------- 		
		conf.getGeneticOperators().clear();
		conf.addGeneticOperator(new CrossoverOperator(conf));
		conf.addGeneticOperator(new MutationOperator(conf));

		// Rodando as evoluções
		// --------------- 
		int progress = 0;
		int numEvolutions = 200;
		Genotype genotype = null;
		double maxFitness = Math.pow(2.0, (double) sampleGenes.length) - 1;
		int percentEvolution = numEvolutions / 100;

		for (int i = 0; i < numEvolutions; i++) { 
			genotype.evolve(); 

			// Imprimir progresso. 
			// --------------- 
			if (percentEvolution > 0 && i % percentEvolution == 0) {
				progress++;
				IChromosome fittest = genotype.getFittestChromosome();
				double fitness = fittest.getFitnessValue();
				System.out.println("Atual cromossomo tem o fitness "
						+ fitness);
				if (fitness >= maxFitness) {
					break;
				}
			}

			// Visualizando os resultados.
			// --------------
			IChromosome fittest = genotype.getFittestChromosome();
			System.out.println("Fittest Chromosome has fitness "
					+ fittest.getFitnessValue());

		}
	}
}

 

Tente implementar uma solução utilizando os Algoritmos Genéticos com o JGAP e terá excelentes resultados. Examine os outros exemplos disponíveis no diretório JGAP/example e se preferir conhecer mais detalhes técnicos utilize a documentação oficial no site do JGAP.

 

Referências

MEFFERT, Klaus et al.: JGAP – Java Genetic Algorithms and Genetic Programming Package. Disponível em: <http://jgap.sf.net>  Acesso em: 14 de maio de 2016.

 

Facebooktwittergoogle_plusredditpinterestlinkedinmail

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *