Skip to content

Franreno/GeneticImages

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Genetic Images

C++ OpenGL Python

O projeto tem como objetivo desenvolver um algoritmo genético capaz de reproduzir uma imagem que lhe foi dada.

A imagem utilizada é do formato .pgm no padrão P5. Este formato é um arquivo binário que descreve uma imagem em escalas de cinza, com cada byte variando de 0 a 255.

Este projeto foi desenvolvido na disciplina SCC0713 e possui apenas fins educacionais.

Link da apresentação: clique aqui.

Motivação

Geração de imagens procedurais através de algoritmos evolutivos. Um bom artigo que introduz a ideia é o apresentado no link.

Implemetação

O algoritmo foi desenvolvido utilizando a linguagem C++, juntamente com a biblioteca OpenGL.

No algoritmo evolutivo, foram implementados métodos que avaliavam diferentes combinações de seleção e rearranjo da população, o que permitiu uma comparação entre os métodos para o problema proposto. Tais implementações envolviam:

  • Elitismo:
    • juntamente com mutação variável e genocídio.
    • juntamente com mutação variável e predação randômica.
    • juntamente com mutação variável e predação sintética.
    • juntamente com mutação variável e uma combinação qualquer entre os 3 métodos de rearranjo propostos.
  • Torneio:
    • juntamente com mutação variável e genocídio.
    • juntamente com mutação variável e predação randômica.
    • juntamente com mutação variável e predação sintética.
    • juntamente com mutação variável e uma combinação qualquer entre os 3 métodos de rearranjo propostos.

Resultados Obtidos

Com a execução do algoritmo, imagens similares a este:

Imagem Original Imagem Construída

Comparação entre os algoritmos utilitizando Elitismo

Para cada estratégia diferente de Elitismo, tem-se que:

  • elitismo0: Elitismo + mutação variável + genocídio.
  • elitismo1: Elitismo + mutação variável + predação randômica.
  • elitismo2: Elitismo + mutação variável + predação randômica + genocídio.
  • elitismo3: Elitismo + mutação variável + predação sintética.
  • elitismo4: Elitismo + mutação variável + predação sintética + genocídio.
  • elitismo5: Elitismo + mutação variável + predação randômica + predação sintética.
  • elitismo6: Elitismo + mutação variável + predação randômica + predação sintética + genocídio.

As comparações entre os melhores de todos foram construídas em um gráfico de gerações por fitness:

Os gráficos contendo a comparação entre o melhor de todos e a média populacional para cada estratégia podem ser observados na pasta Gráficos.

Comparação entre os algoritmos utilitizando Torneio

Para cada estratégia diferente de Torneio, tem-se que:

  • torneio0: Torneio + mutação variável + genocídio.
  • torneio1: Torneio + mutação variável + predação randômica.
  • torneio2: Torneio + mutação variável + predação randômica + genocídio.
  • torneio3: Torneio + mutação variável + predação sintética.
  • torneio4: Torneio + mutação variável + predação sintética + genocídio.
  • torneio5: Torneio + mutação variável + predação randômica + predação sintética.
  • torneio6: Torneio + mutação variável + predação randômica + predação sintética + genocídio.

As comparações entre os melhores de todos foram construídas em um gráfico de gerações por fitness:

Os gráficos contendo a comparação entre o melhor de todos e a média populacional para cada estratégia podem ser observados na pasta Gráficos.

Comparação entre todas as estratégias utilizadas.

Pode-se comparar as estratégias utilizadas por meio de um gráfico comparativo entre o melhor de todos para cada estratégia. O gráfico de gerações por fitness é:

Rodando em uma imagem de tamanho 100x100

O algoritmo rodou por 1 hora e meia, utilizando a estratégia do torneio3, em uma imagem de 100x100 pixels atingindo um fitness satisfatório de 8985.7/10000.

Imagem Original Imagem Construída

Gráfico da imagem 100x100

Instalação

Requisitos

Para reproduzir o programa é necessário ter instalado:

  • Make
  • C11++
  • Glut/OpenGL

Execução

Para executar, basta executar os comandos abaixo na pasta do projeto:

  make all
  make run

Autores

About

Reproduce .pgm images with a Genetic Algorithm

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published