• Nenhum resultado encontrado

Algoritmo genético para determinação indireta de parâmetros físicos para o método dos elementos discretos

N/A
N/A
Protected

Academic year: 2021

Share "Algoritmo genético para determinação indireta de parâmetros físicos para o método dos elementos discretos"

Copied!
49
0
0

Texto

(1)

Universidade Regional do Noroeste do

Estado do Rio Grande do Sul – UNIJUÍ

Departamento de Ciências Exatas e Engenharias

Curso de Ciência da Computação

MAURÍCIO DOS SANTOS DESSUY

ALGORITMO GENÉTICO PARA

DETERMINAÇÃO INDIRETA DE

PARÂMETROS FÍSICOS PARA O MÉTODO

DOS ELEMENTOS DISCRETOS

Ijuí, RS, Brasil

2019

(2)

MAURÍCIO DOS SANTOS DESSUY

ALGORITMO GENÉTICO PARA DETERMINAÇÃO

INDIRETA DE PARÂMETROS FÍSICOS PARA O

MÉTODO DOS ELEMENTOS DISCRETOS

Trabalho de Conclusão de Curso do curso de graduação em Ciência da Computação apre-sentado ao Departamento de Ciências Exatas e Engenharias da Universidade Regional do Noroeste do Estado do Rio Grande do Sul como requisito parcial para a obtenção do tí-tulo de Bacharel em Ciência da Computação.

Orientador: Dr. Manuel Osório Binelo

Ijuí, RS, Brasil

2019

(3)

MAURÍCIO DOS SANTOS DESSUY

ALGORITMO GENÉTICO PARA DETERMINAÇÃO

INDIRETA DE PARÂMETROS FÍSICOS PARA O

MÉTODO DOS ELEMENTOS DISCRETOS

Trabalho de Conclusão de Curso do curso de graduação em Ciência da Computação apre-sentado ao Departamento de Ciências Exatas e Engenharias da Universidade Regional do Noroeste do Estado do Rio Grande do Sul como requisito parcial para a obtenção do tí-tulo de Bacharel em Ciência da Computação.

Trabalho aprovado. Ijuí, RS, Brasil, 11 de dezembro de 2019:

Dr. Manuel Osório Binelo

Orientador

Edson Luiz Padoin

Ijuí, RS, Brasil

2019

(4)
(5)

“A evolução do Homem passa, necessariamente, pela busca do conhecimento.“ (Sun Tzu)

(6)

Agradecimentos

À minha família. Meu pai José Marcelo Dessuy, minha mãe Marcia dos Santos Dessuy e meu irmão Murilo dos Santos Dessuy pelo apoio e encorajamento em minha trajetória no curso de ciência da computação.

Ao meu orientador doutor professor Manuel Osório Binelo pelos ensinamentos que tanto me ajudaram em minha trajetória acadêmica como nesta pesquisa.

Aos meus amigos e colegas de trabalho pelo apoio que me deram nesta fase de desenvolvimento da pesquisa.

(7)

Resumo

Visto que atualmente o escoamento de grãos de soja possui uma natureza discreta a probabilidade de ocorrência de incêndios em secadores é bastante alta, o que acarreta em inúmeras perdas, tanto materiais como humanas, para que este problema possa ser resolvido é necessário que seja experimentado e estudado este fluxo de escoamento dos grãos. Ao adentrar no ramo de experimentação com os grãos de soja é possível notar que o alto custo e a necessidade de equipamento de alta qualidade é um empecilho para a boa pesquisa envolvendo os grãos, por conta disto é possível desenvolver simulações computacionais para replicar os problemas reais em um ambiente digital. Porém, em muitos casos não é possível obter parâmetros concisos por meio da literatura, o que acarreta em disparidades entre as simulações computacionais e os experimentos físicos. Então é possível aplicar heurísticas para encontrar os parâmetros que resultam em uma solução adequada. Então a presente pesquisa visa obter alguns destes parâmetros por meio da aplicação de algoritmos genéticos, que são técnicas que simulam o processo evolutivo das espécies, onde é gerado uma população de indivíduos que se reproduzem e se modificam a fim de obter uma solução adequada. Por meio do uso do algoritmo genético foi possível de encontrar os valores de 0, 13840438404384 para o coeficiente de poison e 0, 247649476494764 para o coeficiente de dispersão de forças.

(8)

Abstract

Since the current flow of soybeans is of a discrete nature the probability of fire in dryers is very high, which leads to numerous losses, both material and human, in order to solve this problem it is necessary to experiment and study this grain flow. By entering the field of experimentation with soybeans it is possible to notice that the high cost and the need for high quality equipment is a hindrance to good research involving the grains, because of this it is possible to develop computer simulations to replicate the real problems in a digital environment. However, in many cases it is not possible to obtain concise parameters from the literature, which results in disparities between computer simulations and physical experiments. Then it is possible to apply heuristics to find the parameters that result in a suitable solution. So the present research aims to obtain some of these parameters by applying genetic algorithms, which are techniques that simulate the evolutionary process of species, where a population of individuals that reproduce and modify themselves is generated in order to obtain an adequate solution. Through the use of the genetic algorithm it was possible to find the values of 0, 13840438404384 for the poison coefficient and 0, 247649476494764 for the force dispersion coefficient.

(9)

Lista de Figuras

Figura 1 – Processos do Método dos Elementos Discretos.

Fonte: (HUAMAN, 2008). . . 16

Figura 2 – Etapas do algoritmo genético. Fonte: (SORANO et al., 2009) . . . 20

Figura 3 – Representação dos indivíduos de uma população . . . 21

Figura 4 – Seleção de indivíduos pelo método da roleta. . . 23

Figura 5 – Cruzamento de ponto único. . . 23

Figura 6 – Processo de mutação de indivíduos . . . 24

Figura 7 – Aparato Físico . . . 27

Figura 8 – Simulação computacional . . . 28

Figura 9 – Grão de soja da simulação computacional. . . 29

Figura 10 – Simulação em um angulo 3D. . . 30

Figura 11 – Gráfico da evolução dos indivíduos pelas gerações. . . 39

Figura 12 – Relação do erro perante o modelo dos melhores indivíduos de cada geração. . . 39

Figura 13 – Resultados da execução da simulação com os parâmetros obtidos pelo algoritmo genético. . . 41

Figura 14 – Resultados da execução da simulação com os parâmetros obtidos pela literatura. . . 42

(10)

Lista de tabelas

(11)

Lista de abreviaturas e siglas

AG Algoritmo Genético

MED Método dos Elementos Discretos YADE Yet Another Dynamic Engine

(12)

Sumário

Lista de Figuras . . . . 8

Lista de tabelas . . . . 9

1 INTRODUÇÃO . . . 12

2 REFERENCIAL TEÓRICO . . . 15

2.1 Método dos Elementos Discretos . . . 15

2.2 Yet Another Dynamic Engine (Yade) . . . 17

2.3 Linguagem Python . . . 18

2.4 Algoritmos Genéticos (AG) . . . 19

2.4.1 Fase de Inicialização da População do Algoritmo Genético . . . . 20

2.4.2 Fase de Testes de Aptidão do Algoritmo Genético . . . 21

2.4.3 Fase de Seleção de Indivíduos do Algoritmo Genético . . . 22

2.4.4 Fase de Cruzamento de Indivíduos do Algoritmo Genético . . . . 22

2.4.5 Fase de Mutação de Indivíduos do Algoritmo Genético . . . 24

2.5 Trabalhos Relacionados . . . 24

2.5.1 Trabalhos sobre algoritmos genéticos . . . 24

2.5.2 Trabalhos sobre simulações de soja e o MED . . . 25

3 MATERIAIS E MÉTODOS . . . 26

3.1 Experimento Físico . . . 26

3.2 Simulação Computacional . . . 28

3.3 Algoritmo Genético . . . 31

4 RESULTADOS . . . 37

4.1 Resultados do Experimento Físico . . . 37

4.2 Resultados do Algoritmo Genético . . . 38

4.3 Resultados da Simulação Computacional . . . 40

5 CONCLUSÃO . . . 43

5.1 Conclusões da Pesquisa . . . 43

5.2 Trabalhos Futuros . . . 44

(13)

12

1 Introdução

Atualmente vivemos em um mundo cercado pela tecnologia, onde ela faz parte diretamente de nossas vidas pois temos tecnologias presentes em nossas casas, universidades, locais de trabalho e escolas. Porém esta tecnologia, mesmo que altamente poderosa, não consegue solucionar alguns problemas de nosso mundo moderno. Em decorrência destes problemas possuírem uma alta complexidade é necessário que seja unido o pensamento lógico e o poder de processamento da tecnologia. Com isto torna-se possível achar soluções para problemas complexos de forma inteligente e em tempo hábil, pois em muitos casos a solução pode ser encontrada por algoritmos simples, como o de força bruta por exemplo, porém estes levam muito tempo para encontrar uma solução adequada.

Dentro do grande conjunto de problemas que não podem ser solucionados apenas com uma grande capacidade computacional e um algoritmo de força bruta, está a inferência de propriedades de elementos, sendo eles dos mais diversos tipos. Como por exemplo grãos alimentícios, rochas minerais, compostos gasosos, entre outros.

Ao analisar os grãos de soja é possível verificar que seus espécimes podem variar conforme o tipo da semente, o nível de umidade do grão, o tamanho, o peso, entre outros aspectos. Dado que estes casos apresentam uma grande variedade, obter suas medidas e características torna-se um processo muito custoso e complexo, pois é necessário que seja utilizado equipamentos de laboratório de alta qualidade, assim como é demandado muito tempo para se obter os resultados.

Por conta disto, realizar uma busca cega destas propriedades por meio da realização de experimentos físicos não é uma opção viável, pois a solução pode levar anos para ser descoberta. Então ao deparar-se com um problema deste é necessário que seja aplicado uma técnica inteligente para que seja possível obter uma resposta para o problema.

E umas destas formas é a aplicação de algoritmos genéticos para obter-se uma resposta adequada, pois neste tipo de solução o usuário define onde ele quer chegar sem informar o caminho, pois o mesmo não é conhecido por ele. Este tipo de técnica se adéqua muito bem para problemas de simulação pois a simulação pode ser feita fisicamente e então a partir dos resultados definir o modelo. Para que então o algoritmo genético possa testar e evoluir um conjunto de parâmetros até a resposta ser encontrada.

Esta busca pelas propriedades dos grãos de soja será útil futuramente visto que o processo de secagem dos grãos apresenta uma natureza discreta, o que leva a ocorrer diversos tipos de problemas nos silos de secagem, como por exemplo a ocorrência de incêndios, que são causados por grãos que receberam rajadas de ar quente por muito tempo em seu processo de secagem, causando assim inúmeras perdas humanas e materiais

(14)

Capítulo 1. Introdução 13

para nossa sociedade (SILVA, 2005).

Para que este problema possa ser resolvido primeiramente é necessário obter o conhecimento a respeito do principal elemento que está presente neste processo, que é o grão de soja, assim ao obter este conhecimento é possível criar simulações computacionais buscando otimizar os processos envolvidos.

Este trabalho tem como objetivo obter as propriedades físicas de grãos de soja de forma indireta por meio de um algoritmo genético. Estas propriedades poderão ser então utilizadas em simulações computacionais aplicada na área de Engenharia de Biossistemas, como simulações de secagem, armazenamento, movimentação e processamento de grãos. Neste processo de simulação computacional do experimento será aplicado uma técnica que permite simular um experimento de forma semelhante a como ele seria se executado no mundo real, pois neste método é aplicado as forças da natureza, como a força de gravidade por exemplo, a todos os elementos que estão contidos na simulação.

Este método é denominado como o Método dos Elementos Discretos, ele é ampla-mente utilizado em áreas de engenharias, sendo utilizado para simular comportamentos físicos de elementos em estruturas, onde estes elementos podem ser grãos, rochas, compo-nentes da construção civil, entre diversos outros tipo de elementos. Como por exemplo em (PUE; CORNELIS, 2019), (XIE et al., 2019) e (SOUSANI et al., 2019).

Visto que para solucionar o problema será necessário realizar testes em diversos valores para as propriedades da soja, será aplicado um algoritmo genético que terá a função de gerar um conjunto inicial de parâmetros, então executar as simulações com estes parâmetros para verificar quais são mais aptos a encontrarem a solução. Com isto selecionar os indivíduos mais aptos e realizar com estes o processo de cruzamento, a fim de misturar genes entre indivíduos para que se possa ser encontrado a solução esperada.

Após o término das execuções do algoritmo genético, os parâmetros obtidos serão validados para verificar se os resultados foram satisfatórios, assim como será verificado em quais pontos o algoritmo genético pode evoluir para que ele possa encontrar as soluções de forma mais otimizada, reduzindo assim o tempo de busca por soluções para o problema. Para que também seja possível aplicá-lo na solução de outros problemas relacionados na descoberta de propriedades dos grãos de soja, a fim de que possa ser obtido um ótimo modelo de grão para as simulações com soja, que possam ser aplicados a simulações mais complexas que envolvem a secagem, armazenamento e o escoamento do grãos. Pois em muitos casos a representação computacional de experimentos físicos com a soja é dificultada por conta de ser utilizado valores aproximados para as propriedades da soja.

Então este trabalho estará divido em cinco capítulos, sendo o primeiro este capítulo de introdução do problema a ser resolvido. Seguindo com o Capítulo 2 que terá como premissa principal definir os conceitos e conhecimentos que são necessários para solucionar

(15)

Capítulo 1. Introdução 14

o problema em questão. Seguindo com o Capítulo 3 que abordará como a pesquisa foi desenvolvida, assim como quais foram as funcionalidades e códigos implementados para que o problema pudesse ser resolvido. Então o trabalho apresentará o Capítulo 4 para apresentar os resultados obtidos durante a execução das aplicações desenvolvidas para a pesquisa. E por fim o Capítulo 5 para apresentar as conclusões e contribuições que foram obtidas a partir deste trabalho de pesquisa.

(16)

15

2 Referencial teórico

A fim de que a solução para o problema proposto possa ser obtida é necessário o estudo de algumas áreas do conhecimento, pois ela são de suma importância para o bom desenvolvimento da pesquisa, então neste capítulo será explanado os conceitos e temas que envolveram o problema da pesquisa.

Inicialmente na seção 2.1 será explanado sobre o método dos elementos discretos, técnica fundamental para a experimentação de eventos físicos pois ela permite a interação entre partículas e estruturas. Seguindo então para a seção 2.2 onde será definido a ferramenta que faz a implementação do método dos elementos discretos, provendo assim um ambiente computacional para a execução de experimentos.

Após estas contextualizações será pontuado na seção 2.3 sobre o funcionamento da linguagem de programação Python, linguagem esta que foi utilizada para o desenvolvimento da simulação computacional e para o desenvolvimento do algoritmo genético.

Por fim na seção 2.4 será explicado a respeito da técnica de solução de problemas utilizando algoritmos genéticos, técnica ao qual implementa um contexto onde uma população de indivíduos, ao passar das gerações, convergem para uma solução.

2.1

Método dos Elementos Discretos

O Método dos Elementos Discretos (MED) trata-se de um modelo matemático para representar a interação entre partículas, geralmente sendo representadas por esferas, onde para cada partícula presente são aplicadas as forças e interações presentes no modelo. Neste método é simulado a movimentação mecânica nas partículas presentes no sistema (ITURRIOZ, 1995).

Para realizar este movimento é aplicado a segunda lei de Newton e a lei de força-deslocamento, o cálculo do movimento é feito a partir de iterações do modelo onde para cada passo de tempo é feito um conjunto de processos para simular a movimentação dos corpos, como pode ser visto na Figura 1 (MORILLO; BANDEIRA, 2019).

Neste ciclo é possível notar que inicialmente no MED são definidos as condições iniciais dos corpos da simulação, para que então sejam determinados os contatos entre as partículas e as estruturas do sistema. Com isto é seguido com o cálculo das forças de contato do sistema para calcular o efeito das colisões entre as partículas (MORILLO; BANDEIRA, 2019) (KHATCHATOURIAN; BINELO; LIMA, 2014).

(17)

Capítulo 2. Referencial teórico 16

Figura 1 – Processos do Método dos Elementos Discretos. Fonte: (HUAMAN, 2008).

as forças do conjunto de partículas, como por exemplo a força da gravidade. Com todas as forças calculadas é aplicado os resultados nas partículas para que estas possam rotacionar e movimentar-se no sistema. Após este processo ter sido completado ele é repetido novamente até que a simulação tenha sido finalizada (KHATCHATOURIAN; BINELO; LIMA, 2014) (LORENZONI, 2018).

Para que seja possível aplicar estes cálculos de movimentações e forças os elementos possuem propriedades que definem características a serem aplicadas ao cálculo, como por exemplo, módulo de elasticidade, módulo de cisalhamento, coeficiente de deformação, coeficiente de amortecimento, ângulo de atrito, entre outras propriedades (MENTGES, 2019).

Para que a simulação possa diferenciar objetos maleáveis de objetos rígidos o MED apresenta o módulo de Young, ao qual é uma medida baseada na Lei de Hooke que define o grau de deformação que o objeto pode sofrer de acordo com a força que é aplicada a ele (COSSOLINO; PEREIRA, 2013).

Com o intuito de simular torções nas partículas da simulação o MED implementa uma propriedade chamada de módulo de cisalhamento, ao qual sua função é promover um deslocamento lateral conforme é aplicado uma força na direção do elemento (COSSOLINO; PEREIRA, 2013).

Dado que o módulo de Young possui a característica de definir o grau de deformação longitudinal de um objeto, o módulo de Poison a partir da razão entre as forças longitudinais e as forças transversais obtém-se um valor sem dimensões que define o coeficiente de deformação transversal do objeto. Como pode ser visto na fórmula 2.1 (MENTGES, 2019)

(18)

Capítulo 2. Referencial teórico 17

(LORENZONI, 2018).

v = x y

(2.1) Para que o estado de repouso possa ser melhor simulado o MED possui a propriedade de amortecimento de forças, que permite definir um valor que atuará na dissipação das forças que estão presentes nos elementos da simulação . Por fim o ângulo de atrito define uma propriedade de repouso dos elementos, nesta propriedade é definido um angulo mínimo para que o objeto ao estar em uma superfície contendo esta inclinação inicie seu movimento (LORENZONI, 2018) (MENTGES, 2019).

2.2

Yet Another Dynamic Engine (Yade)

A experimentação de experimentos físicos tende a ser um processo complicado em diversos casos pois é necessário que seja construído um aparato para que o experimento possa ser executado, devido a este problema dos custos e esforços necessários para estabe-lecer um ambiente de testes de experimentos físicos, existe uma ferramenta que permite o desenvolvimento de simulações computacionais.

Esta ferramenta se chama Yet Another Dynamic Engine (Yade), sua principal função é prover uma ambiente para a criação de estruturas e partículas para que nelas sejam aplicadas o método dos elementos discretos na simulação, a fim de se simular eventos físicos computacionalmente (KOZICKI; DONZE, 2009) (LIMA, 2014).

Este software foi desenvolvido por Frédéric Donze no ano de 2004 com o intuito de prover uma plataforma para a execução computacional do Método dos Elementos Discretos, então Frédéric utilizou-se da linguagem de programação C++ para implementar esta ferramenta (KOZICKI; DONZE, 2009) (SMILAUER et al., 2015).

A linguagem C++ trata-se de uma linguagem de programação que faz uso do paradigma da orientação a objetos, ao qual é possível modelar o sistema seguindo a premissa de utilizar-se de objetos que possuem funções que podem ser executadas (PARKER, 2018).

Este paradigma apresenta uma série de vantagens se comparado a outros paradigmas, pois com ele é possível organizar os dados em estruturas robustas, adaptáveis e reusáveis. Evitando assim a reescrita de código, pois ao invés de refazer o código apenas é necessário reutilizá-lo (PARKER, 2018).

Dado que o Yade foi desenvolvido na linguagem C++ e o mesmo é um software livre pois possuí a licença GLP (General Public Licence), é permitido para qualquer pessoa a utilização, a modificação e a redistribuição do mesmo (MENTGES, 2019) (SMILAUER et al., 2015).

(19)

Capítulo 2. Referencial teórico 18

Neste ponto de liberdade de modificação o fato do Yade ter sido desenvolvido em C++ tornou-se muito útil para diversos desenvolvedores pois a implementação de novas funcionalidades torna-se mais fácil em linguagem orientadas a objetos (PARKER, 2018) (LIMA, 2014).

Visto que nem todas as soluções de simulação são obtidas pelo uso do MED, o

Yade também faz a implementação de outros tipos de metodologias, como por exemplo

o Método dos Elementos Finitos, o SPH (Smoothed Particle Hydrodynamics) e o LGM (Lattice Geometric Model). Permitindo assim ao usuário uma gama maior de possibilidades

de uso (LIMA, 2014) (SMILAUER et al., 2015).

2.3

Linguagem Python

O Python trata-se de uma linguagem de programação de alto nível e interpretada, diferente de linguagens mais tradicionais que necessitam ser compiladas para que seu código possa ser executado, os códigos em python são interpretados diretamente em tempo de execução (ROSSUM; DRAKE, 2011).

Em seu lançamento a linguagem python inovou na maneira de programar, pois sua sintaxe é altamente intuitiva pois ela possui muita semelhança com textos em inglês, visto que não é necessário declarar tipos de variáveis, pontos e virgulas ao final das linhas, chaves para fechar blocos, dentre outras diversas vantagens (ROSSUM; DRAKE, 2011).

Considera-se que o python é uma linguagem multi-paradigmas pois ela oferece suporte a programação orientada a objetos, programação funcional e a programação imperativa. O que torna a linguagem muito atrativa para novos desenvolvedores pois com ela é possível desenvolver soluções de diversas maneiras (ROSSUM; DRAKE, 2011).

Dentre os motivos pelos quais o Python foi amplamente utilizado estão:

• Qualidade da linguagem: Muitos dos usuários utilizam o Python devido a sua sintaxe clara e concisa o que torna-os legíveis, fáceis de se manter e reusáveis (LUTZ, 2013).

• Produtividade no Desenvolvimento: Em decorrência da sintaxe simples que

Python possui, o desenvolvimento de aplicações torna-se muito mais rápido e fácil,

pois em comparação com linguagens tipadas, como C, C++ e Java, é necessário que geralmente seja escrito cerca de quinze vezes mais código para atingir o mesmo objetivo (LUTZ, 2013).

• Portabilidade de Software: Visto que a gama de sistemas operacionais no mercado é muito grande, o Python faz a implementação de um interpretador de

(20)

Capítulo 2. Referencial teórico 19

código para que os scripts Python consigam ser executados em ambos os ambientes (LUTZ, 2013).

• Bibliotecas suportadas: Para auxiliar na produtividade de desenvolvimento de sistemas o Python possui uma ampla quantidade de bibliotecas para auxiliar os desenvolvedores em problemas corriqueiros (LUTZ, 2013).

• Integração de Componentes: O Python possui uma certa facilidade na integração da aplicação pois é possível utilizar até mesmo códigos de outras linguagens, como por exemplo C e C++ (LUTZ, 2013).

• Satisfação: Dado que a programação com Python é super intuitiva e simples muitos desenvolvedores consideram uma satisfação ao trabalhar com esta linguagem (LUTZ, 2013).

Comumente o Python é considerado uma linguagem de script devido a geralmente ser aplicada para a criação de regras de script, onde é solucionado um problema simples seguindo uma linha definida de passos. Porém o python está muito além disto pois com ele é possível desenvolver desde aplicações desktop até servidores web (LUTZ, 2013).

Para que o Python pudesse facilitar o desenvolvimento de aplicações multi-plataforma ele foi criado sob a premissa de que seus códigos seriam executado sob um interpretador, neste interpretador é feito um processo de compilação do byte code do Python para um código nativo, semelhante ao código compilado da linguagem C (LUTZ, 2013).

2.4

Algoritmos Genéticos (AG)

Baseando-se no modelo de evolução genética de Darwin, o cientista John Henry Holland propôs uma forma para solucionar problemas complexos na área da ciência da computação. Esta forma de solução se baseia em imitar o processo evolutivo de seres vivos, desta forma esta solução chama-se algoritmos genéticos (DEVILLERS, 1996).

O algoritmo genético trata-se de um modelo de algoritmo que tem como objetivo convergir para uma solução de um determinado problema, sendo ela uma solução ótima ou não, para que isto seja possível é definido alguns elementos obrigatórios para um AG. Estes elementos são a população de indivíduos, o cruzamento de indivíduos, a mutação dos indivíduos e o calculo da taxa de aptidão (fitness) de cada indivíduo. Como pode ser visto na Figura 2 (MAULIK; BANDYOPADHYAY, 2000).

Este tipo de solução de problemas funciona quando o resultado é conhecido, porém as variáveis que levam ao resultado não, por isso o algoritmo genético conta com uma população de indivíduos para representar possíveis soluções para o problema (MAULIK; BANDYOPADHYAY, 2000).

(21)

Capítulo 2. Referencial teórico 20

Figura 2 – Etapas do algoritmo genético. Fonte: (SORANO et al., 2009)

2.4.1

Fase de Inicialização da População do Algoritmo Genético

Ao iniciar o AG é necessário que ele gere uma população inicial para iniciar o processo, com isto é criado a primeira geração do algoritmo genético. A geração neste processo é definida como uma etapa no processo de busca da solução para o problema (VLAŠIĆ; ÐURASEVIĆ; JAKOBOVIĆ, 2019).

Para gerar a primeira população é necessário que seja definido um tamanho de população e uma forma de se gerar esta população, a forma mais comum é a geração de população aleatório que consiste em basicamente gerar indivíduos com genes aleatórios

(22)

Capítulo 2. Referencial teórico 21

(REEVES, 1995).

Os indivíduos da população consistem em sequências de valores que formam um gene, sendo que este gene pode ser uma sequência de valores booleanos, valores inteiros, valores textuais ou até mesmo valores de ponto flutuante. Originalmente os indivíduos do algoritmo genético eram definidos por sequências de bits (REEVES, 1995).

Esta sequência de valores é denominada cromossomo, pois similar a biologia humana um cromossomo é vetor que armazena as características de um indivíduo. Os valores presentes em um cromossomo são definidos como genes, os quais são unidades genéticas que são obtidas pela hereditariedade. E por fim um conjunto de indivíduos é definido como uma população, como pode ser visto na Figura 3 (VLAŠIĆ; ÐURASEVIĆ; JAKOBOVIĆ, 2019).

Figura 3 – Representação dos indivíduos de uma população

2.4.2

Fase de Testes de Aptidão do Algoritmo Genético

Logo após este processo de geração da população inicial são aplicados os testes de aptidão, que possuem o intuito de avaliar qual dos indivíduos é o mais apto a encontrar a solução, neste processo a função de aptidão deve retornar um valor numérico para que se possa comparar os indivíduos (KIM; CHO, 2001).

A função de calculo de aptidão não possui uma forma padrão pois ela depende de como os genes influenciam na obtenção do resultado, então com isto o desenvolvedor deve criar uma função que receba um cromossomo e aplique um calculo para verificar o quão bom é o determinado indivíduo (DEVILLERS, 1996).

Após esta fase de teste de aptidão dos indivíduos é realizado a verificação do estado de parada, cujo a função é verificar se algum dos elementos presentes na população atingiu

(23)

Capítulo 2. Referencial teórico 22

uma resposta satisfatória para que o algoritmo possa ser finalizado (WILES; ENKE, 2015).

2.4.3

Fase de Seleção de Indivíduos do Algoritmo Genético

Caso os elementos da população não tenham atingido a solução satisfatória é prosseguido com as etapas do algoritmo genético, que no caso é seguido para a fase de seleção de indivíduos, para este processo é necessário que seja escolhido alguns dos tipos de seleção de indivíduos (SIVARAJ; RAVICHANDRAN, 2011).

Um problema bastante comum na aplicação de algoritmos genéticos é a possível convergência para soluções ótimas locais, isto se dá muitas vezes por conta de que a solução ótima local possuir uma convergência mais fácil, porém ela nem sempre é o foco do pesquisador (RAZALI; GERAGHTY et al., 2011).

A fim de evitar esta convergência para soluções boas locais e buscar as soluções ótimas, existe alguns tipo de métodos para selecionar os indivíduos. Dentre elas estão:

• Seleção por roleta: Método que faz a seleção de indivíduos baseado em uma roleta, onde os indivíduos recebem uma porcentagem de serem escolhidos baseado em seus valores de aptidões. Como pode ser visto na Figura 4 (SIVARAJ; RAVICHANDRAN, 2011).

• Seleção por torneio: É uma forma de seleção de indivíduos onde é realizado torneios entre grupos de indivíduos, aos quais os vencedores são selecionados para gerarem os novos descendentes (SIVARAJ; RAVICHANDRAN, 2011).

• Seleção por rank: Trata-se de uma forma de seleção que escolhe os indivíduos baseados em suas classificações, ou seja, os elementos são ordenados de forma ascendente baseados em seus valores de aptidão, onde o o pior elemento possui uma taxa menor de ser escolhido, ao passo que o melhor possuí uma taxa maior (SIVARAJ; RAVICHANDRAN, 2011).

Após a seleção dos indivíduos é possível aplicar algumas técnicas para melhorar a convergência do algoritmo, a técnica mais comum é o elitismo, sua função é enviar os melhores indivíduos para a próxima geração, evitando assim que os melhores genes se percam (RAZALI; GERAGHTY et al., 2011).

2.4.4

Fase de Cruzamento de Indivíduos do Algoritmo Genético

Com os indivíduos já selecionados chega a etapa de cruzamento e reprodução, é nesta etapa onde os indivíduos que foram selecionados na etapa anterior se misturam para gerar filhos que irão para a próxima geração. Nesta fase de cruzamento existe diversas

(24)

Capítulo 2. Referencial teórico 23

Figura 4 – Seleção de indivíduos pelo método da roleta.

técnicas que podem ser utilizadas para melhor gerar os novos filhos (POON; CARTER, 1995).

As formas de cruzamento entre os indivíduos selecionados podem ser por ponto único de cruzamento, ponto aleatório de cruzamento, múltiplos pontos de cruzamento e o cruzamento por operação aritmética (POON; CARTER, 1995).

No cruzamento por ponto único é definido um ponto no cromossomo onde a partir de um lado é recebido os genes do pai enquanto do outro lado é recebido os genes da mãe. Como pode ser visto na Figura 5 (DEVILLERS, 1996).

Figura 5 – Cruzamento de ponto único.

Já para o cruzamento por ponto aleatório é sorteado a posição do cromossomo que servirá como divisor entre os genes do pai e os genes da mãe. Adicionando assim uma maior variedade no processo de geração de novos indivíduos (DEVILLERS, 1996).

(25)

Capítulo 2. Referencial teórico 24

2.4.5

Fase de Mutação de Indivíduos do Algoritmo Genético

Porém em muitos casos os indivíduos tentem a seguir um rumo que leva a resultados bons locais, para evitar esta situação logo após o cruzamento e geração da nova população é aplicado o processo de mutação dos indivíduos, esta técnica tem como intuito alterar de forma aleatório os genes do DNA dos indivíduos. Como pode ser visto na Figura 6 (JANIKOW; MICHALEWICZ, 1991).

Figura 6 – Processo de mutação de indivíduos

Para que esta alteração de genes não atrapalhe na conversão do algoritmo para uma solução a probabilidade de mutação geralmente é definida em uma faixa de 1% á 5%. Finalizado estes processos é iniciado a próxima geração do algoritmo, que esta repete os mesmos processos até que uma solução seja encontrada ou o algoritmo chegue em um determinado número de gerações (JANIKOW; MICHALEWICZ, 1991).

2.5

Trabalhos Relacionados

Nesta seção será apresentado trabalhos que estão relacionados ao tema da pesquisa desenvolvida, então ela estará divida em duas subseções, sendo a primeira para apresentar os trabalhos que utilizaram de algoritmos genéticos para solucionar problemas e a segunda para apresentar as pesquisas envolvendo as simulações com soja e o método dos elementos discretos.

2.5.1

Trabalhos sobre algoritmos genéticos

Em (VLAŠIĆ; ÐURASEVIĆ; JAKOBOVIĆ, 2019) os autores desejavam aprimorar o desempenho dos algoritmos genéticos, para isto eles desenvolveram técnicas de inicializa-ção de populações para os algoritmos genéticos, a fim de verificar quais das formas obtém um melhor desempenho na busca por soluções. Com isto os autores desenvolveram três métodos para inicializar a população, sendo estes métodos o DEX, DGP, SGP e CMB. Ao desenvolver e aplicar os três métodos os autores fizeram a comparação destes com o método padrão de geração de população, ou seja a geração de forma aleatória, e com isto foi possível constatar que o método que obteve um maior desempenho foi o CMB visto que ele implementa um pouco dos outros três métodos para inicializar a população. (VLAŠIĆ; ÐURASEVIĆ; JAKOBOVIĆ, 2019)

(26)

Capítulo 2. Referencial teórico 25

Visto que os algoritmos genéticos podem solucionar problemas em diversas áreas os autores em (PASSOS; BARRENECHEA, 2019) aplicaram o AG para avaliar o nível de produtividade de diferentes tipos de empresas, assim como os fatores de investimentos das empresas. Com seu trabalho os autores ao analisar os resultados produzidos pelo algoritmo genético concluíram que as empresas do tipo imitantes possuem taxas de investimento em inovação próximas a zero.

2.5.2

Trabalhos sobre simulações de soja e o MED

Em (HAUSTEIN; GLADKYY; SCHWARZE, 2017) os autores desenvolveram uma pesquisa focada na implementação de um modelo de deformação para as partículas, onde este modelo de deformação pode ser aplicado a quaisquer tipos de materiais, inclusive para a soja o que torna esta pesquisa extremamente interessante pois todas as partículas presentes na natureza sofrem com a deformidade. Com este novo modelo é possível incrementar as simulações envolvendo a soja pois em seu estado de armazenamento os grãos que ocupam as posições mais a baixo do monte estão a todo momento sofrendo a deformidade em decorrência do alto peso sob seus corpos.

Dado a vasta variedade de grãos de soja que existem no meio ambiente é comum que as simulações computacionais utilizem esferas para simularem o grão de soja, visto que o formato em elipse do grão é bastante similar a uma esfera, porém esta abordagem pode causar algumas diferenças entre a simulação e o experimento real. Por conta disto os autores de (XU et al., 2018) modelaram no Yade um grão de soja seguindo seu formato elipsoide, a fim de validar se o novo modelo se assemelhava ao formato real da soja os autores desenvolveram simulações e experimentos físicos para validar a semelhança entre os resultados. Então ao comparar-los os autores provaram que o modelo desenvolvido possui um alto grau de semelhança com a realidade.

Visto que em processos de secagem de grãos a força de arrasto pode causar um certo impacto no fluxo de secagem, os autores de (BINELO et al., 2019) desenvolveram uma pesquisa visando obter os valores de forças de arrasto para os grãos de soja, milho e aveia. Com isto os autores realizaram a modelagem dos diferentes tipos de grãos, para tornar as simulações mais semelhantes aos experimentos físicos, assim como executaram simulações envolvendo a queda dos grãos, para com isto poder calcular as forças de arrasto.

Seguindo nesta linha de secagem de grãos, os autores de (KHATCHATOURIAN; BINELO; LIMA, 2014) desenvolveram uma pesquisa a respeito do escoamento de soja utilizando-se secadores de fluxo misto, onde os autores desenvolveram experimentos físicos e simulações computacionais, a fim de verificar se as propriedades utilizadas para os grãos de soja se adequavam com a realidade, além de analisar o fluxo de descarga dos grãos em um equipamento de secagem.

(27)

26

3 Materiais e Métodos

Este capítulo será responsável por retratar os métodos e técnicas utilizados no desenvolvimento da pesquisa, ele está constituído em três seções que informarão em detalhes a forma de como os problemas oram resolvidos.

Inicialmente, na seção 3.1, será contemplado um explicação do experimento físico que foi desenvolvido para obter os dados reais do problema em questão, nele será explicado o motivo do formato do aparato criado, assim como o próprio experimento feito.

Na seção 3.2 será explanado a respeito da implementação da simulação compu-tacional que representa o experimento físico desenvolvido, nela será explicado como os motores da simulação foram feitos, assim como os gatilhos criados para que a simulação consiga trabalhar de forma conjunta com o algoritmo genético.

Por fim na seção 3.3 será definido como foi desenvolvido o algoritmo genético, nesta definição estará presente a criação dos códigos que foram implementados para fornecer as funcionalidades de geração da população inicial, realização dos torneios para obter os melhores indivíduos, cruzamento, execução das simulações utilizado os parâmetros dos indivíduos, cálculo da aptidão, cruzamento e mutação dos elementos do algoritmo.

3.1

Experimento Físico

A principal chave para o sucesso de um algoritmo genético é a definição de uma função de aptidão para qual o algoritmo deve convergir, então para obter esta função foi realizada uma série de experimentos físicos em um aparato, ao quais foram feitos por aluno do curso de doutorado em modelagem matemática.

Este aparato consiste em uma estrutura formada por tábuas de madeira e um tubo de acrílico, onde o é posicionado no aparato de acordo com a angulação desejada, como pode ser visto na Figura 7.

Este tubo de acrílico possui um comprimento de 43,7 centímetros e possui um raio de 1 centímetro, é neste tubo que é inserido o grão de soja para que este desça até colidir com a parede do aparato. Então a fim de medir a distância de recuo do grão de soja foi posicionado uma câmera para gravar o experimento, esta câmera foi posicionada de forma com que fosse possível gravar a distância percorrida pelo grão a partir da primeira batida na parede do aparato.

Após a montagem do aparato e da preparação do ambiente de testes foi iniciado a fase de experimentação e coleta de dados, neste processo foi executado o experimento

(28)

Capítulo 3. Materiais e Métodos 27

Figura 7 – Aparato Físico

de cem vezes para obter a média de recuos dos diferentes grãos de soja. O experimento consiste em posicionar um grão de soja na extremidade exposta do tubo de acrílico e então soltar o grão para que este possa descer e colidir com a parede do aparato até entrar no estado de repouso.

Após a execução e gravação dos cem experimentos foram extraídos os frames do vídeo para que se pudesse obter a distância de retorno do grão após a primeira colisão com a parede. Então com as imagens dos vídeos foi medido o deslocamento com auxilio de uma régua que estava posicionada na base do aparato, para que a partir das imagens do vídeos fosse possível obter este resultado.

Após este processo com os dados já coletados e estruturados foi possível obter a função modelo para que o algoritmo genético pudesse operar e encontrar os parâmetros desejados, visto que os grãos de soja apresentam uma certa variação as distâncias de recuo tiveram uma certa variação. Por conta desta variação foi aplicado um cálculo de média entre as distâncias obtidas, com o intuito de obter apenas um valor para servir de função de aptidão para o algoritmo genético, e esta média foi de 5,97 centímetros.

(29)

Capítulo 3. Materiais e Métodos 28

3.2

Simulação Computacional

Após o desenvolvimento dos experimentos físicos foi necessário desenvolver uma simulação computacional para que os diversos parâmetros possíveis pudessem ser aplicados para testar quais conjuntos melhor se adaptam ao resultado previsto.

Para realizar o desenvolvimento da simulação computacional foi desenvolvido um código em python que fazia a criação do grão de soja e das estruturas necessárias para recriar a o experimento físico. Devido algumas características da simulação computacional não foi necessário criar a simulação da forma exata ao experimento físico. Pois o framework

Yade permite criar estruturas fixas em um determinado espaço, então não foi necessário

criar a parede de sustentação do tubo de acrílico.

Foi possível replicar a simulação computacional com apenas um tudo de acrílico, uma parede de madeira e uma esfera para representar o grão de soja, com a estrutura da simulação montada, como pode ser visto nas imagens 8 e 9, foi possível complementar o código para que ele servisse de uma forma melhor para o algoritmo genético.

Figura 8 – Simulação computacional

O framework Yade permite ao usuário criar funcionalidades na simulação que são executadas de forma periódicas, com este mecanismo foi implementado uma função para monitorar o estado da simulação para que quando ela chegasse em um ponto desejado ela finalizasse sua execução.

(30)

Capítulo 3. Materiais e Métodos 29

Figura 9 – Grão de soja da simulação computacional.

poderia ocorrer em uma grande variação de possibilidades conforme os parâmetros que foram testados para a simulação. Então uma simples execução por um determinado tempo não funcionaria de forma satisfatória para a solução do problema.

Então a função implementada para validar o estado de finalização da simulação foi criada de forma que a cada dez iterações da simulação fosse verificado a direção da velocidade da partícula no eixo Z da simulação. Esta verificação da direção da velocidade no eixo Z funciona para descobrir quando a partícula mudou de trajetória, pois a simulação foi construída tendo como base o eixo X para definir as alturas, o eixo Y para definir as profundidades e o eixo Z para definir as larguras. Como pode ser visto na Figura 10 que mostra o aparato sobre uma visualização em três dimensões.

Para que fosse possível executar a função de verificação juntamente com os motores da simulação, foi criado um método chamado de ”sentido()” que faz a verificação do estado da velocidade da esfera. Este método foi inserido para ser chamado a cada dez passos de interação da simulação, como pode ser visto no código 3.1.

1 O . e n g i n e s = [ 2 F o r c e R e s e t t e r () , 3 I n s e r t i o n S o r t C o l l i d e r ([ B o 1 _ S p h e r e _ A a b b () , B o 1 _ F a c e t _ A a b b () ]) , 4 I n t e r a c t i o n L o o p ( 5 [ I g 2 _ S p h e r e _ S p h e r e _ S c G e o m () , I g 2 _ F a c e t _ S p h e r e _ S c G e o m () ] , 6 [ I p 2 _ C o h F r i c t M a t _ C o h F r i c t M a t _ C o h F r i c t P h y s () ] ,

(31)

Capítulo 3. Materiais e Métodos 30

Figura 10 – Simulação em um angulo 3D.

7 [ L a w 2 _ S c G e o m _ F r i c t P h y s _ C u n d a l l S t r a c k () ]

8 ) ,

9 N e w t o n I n t e g r a t o r ( d a m p i n g = damping , g r a v i t y =( -9.81 , 0 , 0) , l a b e l =" NI ") ,

10 P y R u n n e r ( c o m m a n d =’ s e n t i d o () ’, i t e r P e r i o d = 1 0 )

11 ]

Código 3.1 – Definição dos motores da simulação.

Na função ”sentido()” é verificado os corpos presentes na simulação para que ao encontrar a esfera seja verificado se a velocidade no eixo Z é maior do que zero e esta ainda não trocou de sentido é definido que ela trocou seu sentido de deslocamento, pois ao descer do tudo ela desloca-se do eixo Z em 43,7 centímetros (comprimento do tubo) para a origem do sistema que é o ponto zero, então sua velocidade linear possui um valor negativo.

No momento que esta velocidade torna-se positiva é o momento onde ocorre a colisão do grão com a parede do aparato, então a partir deste ponto é necessário verificar quando a esfera volta novamente a deslocar-se para o centro, ou seja sua velocidade no eixo Z volta a ser negativa.

E é neste ponto que a função sentido entra em sua cláusula else if pois na simulação já ocorreu a troca de sentido e a esfera já alcançou seu ponto máximo de retorno. Com é escrito na saída do processo a distância de retorno da esfera, para que o algoritmo genético consiga obter esta distância de retorno, e com isso é finalizado a simulação. como pode ser

(32)

Capítulo 3. Materiais e Métodos 31 visto no código 3.2. 1 def s e n t i d o () : 2 g l o b a l t r o c o u s e n t i d o 3 g l o b a l p o s i c a o 4 for b in O . b o d i e s : 5 if i s i n s t a n c e( b . shape , S p h e r e ) : 6 if b . s t a t e . vel [2] > 0 and t r o c o u s e n t i d o == F a l s e : 7 t r o c o u s e n t i d o = T r u e 8 e l i f b . s t a t e . vel [2] < 0 and t r o c o u s e n t i d o == T r u e : 9 p r i n t(( b . s t a t e . pos [2] + r a i o ) ) 10 O . p a u s e ()

Código 3.2 – Função de verificação do estado de finalização da simulação.

Por fim foi necessário adaptar o código da simulação para que este receba os parâ-metros que serão utilizados na simulação do algoritmo genético. Visto esta necessidade foi adicionado um código para que os parâmetros possam ser recebidos a partir dos argumentos da execução do código, como pode ser visto no código abaixo.

1 p o i s s o n = 0 . 3 5 2 d a m p i n g = 0.2 3 a n g u l o = f l o a t( 1 5 ) 4 if len( sys . a r g v ) == 4: 5 p o i s s o n = f l o a t( sys . a r g v [ 1 ] ) 6 d a m p i n g = f l o a t( sys . a r g v [ 2 ] ) 7 a n g u l o = f l o a t( sys . a r g v [ 3 ] ) 8 i n c l i n a c a o = f l o a t(( a n g u l o * pi ) / 1 8 0 . 0 )

Código 3.3 – Método que aplica os parâmetros nos coeficientes da simulação

3.3

Algoritmo Genético

Após o experimento físico e a simulação computacional estarem completos iniciou-se a fase de desenvolvimento do algoritmo genético, nesta fase foi feito um estudo sobre como implementar um AG, quais são os elementos que deve estar contidos no código, como deve ser avaliado a aptidão dos indivíduos e por fim como deve ser feito a mutação e reprodução dos elementos da população.

Após este estudo iniciou-se o desenvolvimento do algoritmo genético, com isto foi modelado uma estrutura para os indivíduos da população onde estes são representados por vetores de de posições com números inteiros, sendo então esta a representação do DNA do indivíduo.

(33)

Capítulo 3. Materiais e Métodos 32

Para implementar a seleção e a reprodução dos indivíduos, optou-se pela seleção por torneios, pois esta técnica apresenta uma melhor taxa de conversão para a solução e eleva as possibilidades do algoritmo encontrar soluções ótimas. Pois a seleção por torneio permite que um indivíduo que não possui uma aptidão tão alta, porém tem uma tendência a se desenvolver para convergir para uma solução ótima, possa entrar em um torneio e vencer por conta de cair contra oponentes que possuem uma baixa aptidão.

Dado que o DNA do indivíduo representará duas variáveis que serão utilizadas na execução das simulações, foi optado por implementar a técnica de ponto único de cruzamento, para que ao criar-se novos indivíduos eles sejam gerados pela mistura de um parâmetro do pai e outro da mãe. Como apresentado na seção 2.4.4

Devido o fato de que o DNA do indivíduo será definido por um vetor de dez posições, foi divido para que o coeficiente de dispersão seja representado pelos números das cinco primeiras posições e o poison seja definido pelas ultimas cinco posições do vetor.

Porém esta sequencia de números não é diretamente o valor que será utilizado pelas simulações, pois por exemplo o número inteiro 12345 não se encaixa nas faixas de valores esperados para as propriedades de dispersão e elasticidade, devido ao fato de elas trabalharem com valores em decimais.

Então foi necessário utilizar o conceito de fenótipo ao algoritmo genético, na biologia o fenótipo trata-se de uma apresentação do gene, ao qual é afetada pelo meio ambiente. Então foi pensado em uma função para transformar um gene em um fenótipo, como mostra na equação 3.1.

f enotipo = ( gene

99999) ∗ (max − min) + min (3.1) A partir deste detalhes definidos foi iniciado a fase de desenvolvimento do algoritmo genético, para realizar esta implementação foi escolhido a linguagem de programação

python por conta de sua facilidade e praticidade de programação.

Ao iniciar no desenvolvimento foi necessário implementar a criação da população inicial, para isto foi desenvolvido um método chamado ”gerar_individuo” e outro chamado ”criar_populacao_inicial”. No primeiro método é gerado um vetor de dez posições contendo números inteiros aleatórios, sendo este números na faixa de zero a nove. Como apresentado na seção 2.4.1.

Já para o método de criação da população foi adicionado uma laço de repetição que vai de zero até o tamanho desejado da população, que foi definido com mil indivíduos. Para armazenar esta população foi utilizado a estrutura de mapas do python onde para cada valor existe uma chave associada.

(34)

Capítulo 3. Materiais e Métodos 33

forma satisfatória foi necessário adicionar neste mapa o valor de aptidão do indivíduo, que no caso da população inicial este valor inicia em zero, para que o algoritmo de seleção consiga saber quais os níveis de aptidões dos indivíduos, como pode ser visto no código 3.4.

1 def g e r a r _ i n d i v i d u o (min, max) :

2 r e t u r n[ r a n d o m . r a n d i n t (min, max) for i in r a n g e( t a m a n h o _ i n d i v i d u o ) ]

3 4 def c r i a r _ p o p u l a c a o _ i n i c i a l () : 5 p o p u l a c a o = {} 6 for i in r a n g e( t a m a n h o _ p o p u l a c a o ) : 7 p o p u l a c a o [" I n d i v i d u o _ " + str( i ) ] = [ g e r a r _ i n d i v i d u o (0 , 9) , 0] 8 r e t u r n p o p u l a c a o

Código 3.4 – Método para realizar a inicialização da população do algoritmo genético. Com a população inicial criada é necessário que cada indivíduo execute a sua determinada simulação para que possa ser calculado a sua aptidão a partir do resultado de sua simulação. Baseando-se que cada indivíduo possui a tarefa de executar uma simulação totalmente independente de outros fatores externos foi desenvolvido um código para realizar a criação de processos que serão executados de forma paralela.

Para tornar isto possível foi utilizado a biblioteca do python chamada de subprocess, nesta biblioteca é possível criar pools de execução de processos, onde ao iniciar o pool é iniciado todos os processos de forma paralela. Assim como o pool faz o gerenciamento dos mesmos para que o algoritmo genético só consiga prosseguir assim que todos os processos tenham terminado.

Outro ponto do pool de execuções que auxiliou no desenvolvimento do algoritmo genético foi o fato dele armazenar em uma lista as saídas de cada processo, pois com isto foi possível realizar o processo de atualização dos valores de aptidão de cada indivíduo. Como pode ser visto no código 3.5.

1 def e x e c u t a _ s i m u l a c a o ( p r o c e s s o ) : 2 l i s t a _ p a r a m e t r o s = p r o c e s s o . s p l i t (" ") 3 i n d e x _ i n d i v i d u o = l i s t a _ p a r a m e t r o s [0] 4 p o i s s o n = l i s t a _ p a r a m e t r o s [1] 5 d a m p i n g = l i s t a _ p a r a m e t r o s [2] 6 s a i d a 1 5 = f l o a t( e x e c u t a r _ s i m u l a c a o _ y a d e ( poisson , damping , ’ 15 ’) ) 7 s a i d a _ f i n a l = str( s a i d a 1 5 ) 8 r e t u r n ( i n d e x _ i n d i v i d u o + " " + s a i d a _ f i n a l ) . s t r i p () 9

10 def e x e c u t a r _ s i m u l a c a o _ y a d e ( poisson , damping , a n g u l o ) :

11 s a i d a P r o c 1 5 = s u b p r o c e s s . P o p e n (

(35)

Capítulo 3. Materiais e Métodos 34

13 s t d o u t = s u b p r o c e s s . PIPE ,

14 s t d e r r = s u b p r o c e s s . S T D O U T )

15 stdout , s t d e r r = s a i d a P r o c 1 5 . c o m m u n i c a t e ()

16 r e t u r n s t d o u t . d e c o d e (" utf -8 ") . s p l i t (" \ n ") [4]

Código 3.5 – Métodos para executar a simulação utilizando os parâmetros obtidos pelos genes do indivíduo.

Visto que o algoritmo genético já realizava a inicialização da população e executava as simulações iniciou-se o desenvolvimento da parte de seleção de indivíduos por torneio. Dado esta necessidade foi definido algumas diretivas de funcionamento do algoritmo genético, sendo elas a quantidade de torneios, o números de participantes de um torneio e o número de vencedores de um torneio.

Conforme anteriormente havia sido definido que na população haveria mil indivíduos foi estabelecido que a quantidade de torneios seria de duzentos, o número de participantes seria de quatro indivíduos e o haveriam dois vencedores por torneio.

Tratando-se de um torneio é necessário que exista uma forma de comparar os participantes para que seja possível definir quais são os vencedores, com isto foi desenvolvido um método para calcular a aptidão do indivíduo, este cálculo trata-se de um cálculo de erro do resultado obtido com o resultado modelo.

Neste cálculo é desconsiderado valores negativos pois o que realmente importa para o algoritmo é a proximidade do resultado com o resultado esperado, como pode ser visualizado no código 3.6.

1 def c a l c u l a r _ e r r o ( r e s u l t a d o , m o d e l o ) :

2 r e t u r n abs(1 - ((1 / m o d e l o ) * r e s u l t a d o ) )

Código 3.6 – Método que calcula a aptidão de um indivíduo.

Para realizar os torneios na população foi desenvolvido um método chamado de ”realizar_os_torneios”, neste método foi adicionado um laço de repetição que realiza a quantidade de torneios definida anteriormente no código, que é de duzentos torneios, como pode ser visto no código 3.7.

Então é coletado uma amostra de quatro elementos da população para que estes participem do torneio, após os quatro elementos terem sidos escolhidos eles são ordenados em forma crescente e são selecionados os dois primeiros indivíduos dos participantes, pois são estes os dois melhores participantes do torneio. Como apresentado na seção 2.4.3.

1 def r e a l i z a r _ o s _ t o r n e i o s ( p o p u l a c a o ) :

2 s e l e c t e d = []

(36)

Capítulo 3. Materiais e Métodos 35 4 for i in p o p u l a c a o : 5 i d s P o p u l a t i o n . a p p e n d ( i ) 6 # R e a l i z a os t o r n e i o s 7 for t o r n e i o in r a n g e( q t d _ t o r n e i o s ) : 8 p a r t i c i p a n t e s = r a n d o m . s a m p l e ( i d s P o p u l a t i o n , q t d _ p a r t i c i p a n t e s ) 9 m e l h o r e s _ p a r t i c i p a n t e s = [] 10 for i in r a n g e(0 , len( p a r t i c i p a n t e s ) ) : 11 m e l h o r e s _ p a r t i c i p a n t e s . a p p e n d (( c a l c u l a r _ e r r o ( p o p u l a c a o [ p a r t i c i p a n t e s [ i ]][1] , m o d e l o ) , p a r t i c i p a n t e s [ i ]) ) 12 m e l h o r e s _ p a r t i c i p a n t e s = s o r t e d( m e l h o r e s _ p a r t i c i p a n t e s ) 13 for v e n c e d o r in r a n g e(0 , q t d _ v e n c e d o r e s ) : 14 s e l e c t e d . a p p e n d ( m e l h o r e s _ p a r t i c i p a n t e s [ v e n c e d o r ] [ 1 ] ) 15 i d s P o p u l a t i o n . r e m o v e ( m e l h o r e s _ p a r t i c i p a n t e s [ v e n c e d o r ] [ 1 ] ) 16 r e t u r n s e l e c t e d

Código 3.7 – Método que realiza os torneios.

Após todos os torneios terem sidos realizados o algoritmo genético deve avançar para a fase de cruzamento dos indivíduos, onde os quatrocentos indivíduos do grupo de vencedores do torneio iniciam a fase de reprodução e cruzamento de espécies. Como apresentado na seção 2.4.4.

Para esta fase havia sido definido que os novos indivíduos seriam gerados a partir de um cruzamento por ponto único, técnica em que é selecionado um único ponto separador do gene do pai e do gene da mãe. Visto que os DNAs são formados por vetores de dez elementos cujos cinco elementos representam uma variável da simulação o ponto de cruzamento foi definido como sendo o centro do DNA.

Para que um filho seja gerado a partir dos cinco primeiros genes do pai e dos cinco últimos genes da mãe, como pode ser analisado na implementação da função

”reali-zar_reproducao_individuos” presente no código 3.8.

1 def r e a l i z a r _ r e p r o d u c a o _ i n d i v i d u o s ( p o p u l a c a o , s e l e c i o n a d o s ) : 2 for i d _ i n d i v i d u o in p o p u l a c a o : 3 p a r e n t = r a n d o m . s a m p l e ( s e l e c i o n a d o s , 2) 4 d n a _ p a i = p o p u l a c a o [ p a r e n t [ 0 ] ] [ 0 ] 5 d n a _ m a e = p o p u l a c a o [ p a r e n t [ 1 ] ] [ 0 ] 6 d n a _ f i l h o = [] 7 d n a _ f i l h o [ : 5 ] = d n a _ p a i [ : 5 ] 8 d n a _ f i l h o [ 5 : ] = d n a _ m a e [ 5 : ] 9 p o p u l a c a o [ i d _ i n d i v i d u o ] = [ d n a _ f i l h o , 0] 10 r e t u r n p o p u l a c a o

Código 3.8 – Método responsável por realizar o cruzamento entre indivíduos. Com isto o algoritmo genético estava quase completo pois apenas faltava a fase de mutação dos indivíduos, para implementar esta parte foi criado um método chamado

(37)

Capítulo 3. Materiais e Métodos 36

de ”mutacao”, cuja sua função é percorrer o DNA dos elementos e realizar alterações em certos genes. Conforme apresentado na seção 2.4.5.

Porém estas alterações não podem ser feitas a todo momento pois isto faz com que o algoritmo genético não consiga convergir para uma resposta adequada, então foi definido que a taxa de mutação dos genes seja de cinco por cento.

Esta taxa de cinco por cento é aplicada gene a gene para que o algoritmo tenha a possibilidade de encontrar uma solução ou escapar de encontrar apenas máximos locais, como pode ser na implementação do código 3.9.

1 def m u t a c a o ( p o p u l a c a o ) : 2 for i in p o p u l a c a o : 3 for g e n e in r a n g e( t a m a n h o _ i n d i v i d u o ) : 4 if( r a n d o m . r a n d o m () <= p r o b a b i l i d a d e _ m u t a c a o ) : 5 n o v o _ g e n e = r a n d o m . r a n d i n t (0 , 9) 6 w h i l e( n o v o _ g e n e == p o p u l a c a o [ i ] [ 0 ] [ g e n e ]) : 7 n o v o _ g e n e = r a n d o m . r a n d i n t (0 , 9) 8 p o p u l a c a o [ i ] [ 0 ] [ g e n e ] = n o v o _ g e n e 9 r e t u r n p o p u l a c a o

Código 3.9 – Método utilizado para fazer as mutações nos genes dos indivíduos da população.

Com isto o desenvolvimento do algoritmo genético foi finaliza, porém dado um certo nível de aleatoriedade que ele possui foi desenvolvido um script shell para realizar a execução deste algoritmo dez vezes, a fim de ampliar a gama de resultados obtidos.

Este script shell trata-se de um laço de repetição simples que faz a execução do algoritmo genético dez vezes como pode ser visualizado no código 3.10.

1 for i in { 1 . . 1 0 }

2 do

3 p y t h o n 3 a l g _ g e n e t i c o . py " E x e c $ i "

4 d o n e

Código 3.10 – Script shell para executar o AG dez vezes.

Por fim após toda a lógica do algoritmo genético estar implementada, foi adicionado trechos de códigos para salvar em arquivos de textos os dados processados pela gerações do AG. Então a cada geração é criado um arquivo contendo os fenótipos dos indivíduos seguido por seus resultados, assim como é gerado apenas um arquivo, chamado de ”Melhores.txt”, que armazena o melhor indivíduo de cada geração.

(38)

37

4 Resultados

Neste capítulo serão apresentados os resultados que foram obtidos na pesquisa, por meio de gráficos e explicações para apresentar os resultados obtidos. Na primeira seção será apresentado os resultados que foram obtidos durante a fase de experimentação física, onde será explicado a respeito dos fatores que impactaram no resultados e a forma de extração do modelo utilizado pelo algoritmo genético.

Seguindo então para uma explanação sobre o comportamento do algoritmo genético, onde será pontuado os fatores que levaram o algoritmo genético a encontrar uma solução adequada, para isto será analisado o processo de convergência do algoritmo genético, assim como será comparado os melhores indivíduos de cada geração a fim de apresentar como foi a curva de erro na busca pela solução.

E por fim serão explanados os resultados que foram obtidos ao utilizar os parâme-tros encontrados pelo algoritmo genético na simulação computacional, assim como será comparado os resultados obtidos das simulações com os parâmetros presentes na literatura da soja e os parâmetros obtidos pelo algoritmo genético.

4.1

Resultados do Experimento Físico

Ao realizar os experimentos físicos com o aparato em 15◦ de angulação foi possível

notar que os os recuos dos grãos de soja obtiveram uma grande variação em relação as distâncias de retorno lateral no aparato. Isto se deu devido ao formato da soja, em virtude dela apresentar um formato de elipse seu movimento pelo tudo de acrílico teve certas turbulências devido aos saltos que o grão realizava. O que impactou diretamente na distância de retorno do mesmo pois ao atingir a parede do aparato o grão podia possuir diversas posições que afetariam na distribuição das forças de retorno da colisão do grão com a parede de madeira.

Somando-se estes dois fatores é possível explicar o motivo da variação no recuo do grão ser alta, sendo esta variação na faixa de 1,21 centímetros até 11,85 centímetros, visto que o algoritmo genético necessitava de um número fixo para servir de modelo para convergir em uma solução, foi necessário calcular a média das distâncias das cem execuções, resultando assim no valor de 5,97 centímetros.

(39)

Capítulo 4. Resultados 38

4.2

Resultados do Algoritmo Genético

Para inferir as propriedades necessárias para a simulação computacional era neces-sário que o algoritmo genético recebesse um modelo para que ele pudesse balizar o que era um indivíduo com uma aptidão alta e um indivíduo com aptidão baixa. Então ao terminar a extração do modelo a partir dos experimentos físicos inicio-se a fase de execução do algoritmo genético.

Neste processo foi possível obter os resultados esperados, assim como avaliar o desempenho do algoritmo genético, avaliando seu passo evolutivo perante o passar das gerações, além de uma analise detalhada dos melhores indivíduos de cada geração.

Visto que o algoritmo genético apresenta um fator de aleatoriedade, para obter um resultado mais próximo do real foi necessário executa-lo mais de uma vez, então foi optado por realizar-se dez execuções para que pudesse ser comparado os resultados entre a execuções a fim de obter-se o melhor resultado.

Ao encerrar-se as execuções dos algoritmos genéticos foi possível avaliar como estes trabalharam para obter os resultados desejados, visto que os algoritmos executavam fixamente cem gerações foi gerado um gráfico para visualizar como foi a convergência dos indivíduos.

Ao analisar os resultados do AG é possível verificar que inicialmente os indivíduos não possuíam nenhum tipo de agrupamento, devido ao fato de que a população inicial do algoritmo genético é gerada de forma totalmente aleatória.

Porém ao passar das gerações foi possível notar que os indivíduos foram convergindo para os valores de 0, 25 no coeficiente de Poison e 0, 15 no coeficiente de dispersão de forças, ao qual é o campo onde mais se aproxima dos resultados desejados, pois com estes valores a esfera obtém um recuo muito próximo ao modelo esperado.

Outro ponto interessante é que o fator de mutação auxilia muito na busca por resultados em outro ponto de máximo, pois mesmo na geração de número 100 é possível notar que existem elementos fora deste ponto de concentração.

Visto que a população do algoritmo genético possuía um tamanho de 1000 indivíduos, foi feito um estudo a respeito da evolução dos melhores indivíduos de cada geração. Como pode ser visto no gráfico da Figura 12.

Então foi analisado que inicialmente o algoritmo teve uma taxa de erro relativamente baixa. sendo de cerca de 1e−4%, visto que o grão teve um recuo de 5, 97000264321 centímetros, porém nas próximas gerações este percentual de erro teve um aumento significativo, subindo até cerca de 8e−4.

Isto é interessante notar pois ocorre devido ao modelo de seleção de indivíduos por torneio pois em muitos casos os melhores indivíduos não são sorteados para participarem

(40)

Capítulo 4. Resultados 39

Figura 11 – Gráfico da evolução dos indivíduos pelas gerações.

Figura 12 – Relação do erro perante o modelo dos melhores indivíduos de cada geração.

dos torneios o que leva a uma perda dos melhores indivíduos pelo processo de evolução. Este processo de variação no percentual de erro pode ser notado por todo o processo do algoritmo genético, visto que ele não faz a implementação de técnicas para manter os melhores indivíduos ao longo das gerações.

Então ao analisar o comportamento dos melhores indivíduos das gerações foi buscado pelo melhor indivíduo de todas as gerações, a fim de obter os parâmetros mais adequados a serem utilizados posteriormente nas simulações computacionais.

Este melhor indivíduo foi encontrado na geração de número cinquenta e cinco onde sua taxa de erro foi de apenas 4e−7, tornando-o assim uma ótima solução pois seu resultado

(41)

Capítulo 4. Resultados 40

apresenta uma alta semelhança com o modelo estabelecido para o algoritmo genético. Com este melhor indivíduo foi possível extrair de seus genes os parâmetros que foram utilizados para obter este bom resultado. Estes parâmetros podem ser vistos na tabela 1.

Tabela 1 – Coeficientes da soja obtidos pelo algoritmo genético.

Parâmetro Valor

Coeficiente de poison 0, 13840438404384 Coeficiente de dispersão de forças 0, 247649476494764

Fonte: Tabela produzida pelo autor

4.3

Resultados da Simulação Computacional

Ao obter os resultados produzidos pelo algoritmo genético, iniciou-se o estudo de como os parâmetros se comportaram na simulação, então ao executá-la separadamente com o coeficiente de poison com o valor de 0, 13840438404384 e o coeficiente de dispersão de forças no valor de 0, 247649476494764 foi possível avaliar destas propriedades agindo sobre o grão de soja.

Ao executar a simulação levou cerca de 1, 5 segundos para que a esfera entrasse no estado de repouso, assim como no primeiro segundo de simulação a mesma atingiu um dos pontos mais altos de retorno. Como pode ser visto na Figura 13.

Ao comparar os resultados obtidos com os parâmetros que são encontrados pela literatura é possível notar que existe uma boa diferença entre eles, pois para o coeficiente de poison é utilizado o valor de 0, 35 e o para o coeficiente de dispersão de forças é utilizado o valor 0, 2.

Então foi executado a simulação utilizando os parâmetros de literatura para comparar os impactos dos novos parâmetros em relação aos parâmetros presentes na literatura, então fazer esta execução foi possível notar que a distância de recuo foi de 10, 73 centímetros, diferente do esperado que é de 5, 97 centímetros.

Esta diferença ocorre principalmente pelo fato de que os parâmetros presentes na literatura apresentam uma maior taxa de deformidade na esfera, assim como possuem uma força de dissipação menor o que faz com que a partícula obtenha mais velocidade ao descer pelo tubo e ao colidir com a parede a dissipação de sua velocidade seja menor. Como pode ser visto na Figura 14.

Esta diferença de velocidade e dissipação é possível notar ao comparar as imagens 13 e 14, pois na simulação com os parâmetros da literatura é possível notar que logo aos 0, 8 segundos a esfera já está quase batendo na parede, diferente da simulação com os

(42)

Capítulo 4. Resultados 41

Figura 13 – Resultados da execução da simulação com os parâmetros obtidos pelo algoritmo genético.

parâmetros do algoritmo genético que aos 0, 8 segundo ela ainda possui uma boa distância para percorrer até colidir com a parede.

Assim como é possível notar a diferença entre a posição da esfera no momento de retorno, que é aos 1, 2 segundos, onde a esfera da simulação com os parâmetros da literatura está em um ponto bem mais distante da parede se comparado a outra simulação.

Assim como a simulação com os parâmetros obtidos pelo algoritmo genético possui uma duração de tempo de movimento menor, pois aos 1, 6 segundos ela já encontra-se em seu estado de repouso enquanto a esfera da simulação com os parâmetros da literatura ainda encontra-se em movimento.

(43)

Capítulo 4. Resultados 42

Figura 14 – Resultados da execução da simulação com os parâmetros obtidos pela litera-tura.

Referências

Documentos relacionados

Este trabalho se insere no projeto SMARt (Sistema Modular de Apoio à Decisão para a Otimização do Scheduling em Refinarias de Petróleo), que tem como objetivo

• Se não aparecer o “0” (zero) no contador de dose após pressionar continuamente o botão de aplicação, você pode ter utilizado uma agulha entupida ou danificada. •

a) O polícia disse um palavrão, após ter saído da casa de Adrian. Corrige as falsas.. A mãe também está com gripe. “Quase que não consegui ficar calado quando vi que não

É um evaporador de concentração de licor ou água de lavagem da casca cítrica para a produção de base pectina com recuperação do D’Limonene que permitem a recirculação

Não levar em consideração outras con- cepções de saúde na abordagem do tema câncer restringe a uma análise simplista, realçando aspectos fisiopatológicos e sem permitir uma

Os testes de desequilíbrio de resistência DC dentro de um par e de desequilíbrio de resistência DC entre pares se tornarão uma preocupação ainda maior à medida que mais

As pontas de contato retas e retificadas em paralelo ajustam o micrômetro mais rápida e precisamente do que as pontas de contato esféricas encontradas em micrômetros disponíveis

Foram utilizados os mesmos parâmetros para os dois algoritmos (população, taxa de mutação, crossover, memória harmônica e taxa de improviso). O intervalo de