Git Product home page Git Product logo

glassnet_genetic_algorithms's Introduction

Algoritmos Genéticos: Otimização de vidros à prova de bala

Equipe: Diogo P. de L. Carvalho, José D. A. Sales e Mayllon E. P. S. Silva

Introdução

Este repositório contém o projeto final do curso de Algoritmos Genéticos, que visa otimizar a formulação de vidros óxidos à prova de bala. Utilizando dados de uma base de dados contendo diversos compostos de formação de vidros, nosso objetivo é melhorar significativamente as propriedades de resistência balística do vidro enquanto mantemos os menores custos possíveis de produção. Este projeto combina a ciência dos materiais com técnicas de otimização baseada em algoritmos genéticos para encontrar soluções inovadoras e economicamente viáveis a partir de um modelo preditivo de rede neural de propriedades de vidros. Os dados dos compostos e a rede neural que foram trabalhados estão disponíveis no GlassPy [1]. Esse módulo por sua vez, não oferece as informações necessárias para trabalharmos com os preços dos compostos, para solucionar esse problema, utilizamos os preços do Sigma Aldrich [2], uma empresa referência no fornecimento de produtos para pesquisa científica.

Contexto

Vidros à prova de bala são materiais críticos em uma variedade de aplicações que vão desde a proteção de veículos até a segurança de instalações. A eficácia desses vidros depende de sua capacidade de absorver e dissipar a energia de impactos de alta velocidade, impedindo a penetração de projéteis. A resistência balística do vidro é fortemente influenciada pela sua composição química. Diferentes compostos e aditivos podem conferir ao vidro propriedades como maior dureza, resistência ao impacto e tenacidade. Contudo, a introdução desses compostos pode aumentar substancialmente os custos de produção, tornando imperativo encontrar um equilíbrio entre desempenho e custo. O desenvolvimento de vidros à prova de bala envolve um complexo processo de experimentação e ajuste fino das formulações químicas. Tradicionalmente, esse processo pode ser caro e demorado. Aqui, entra a aplicação de algoritmos genéticos os quais oferecem uma abordagem eficiente para explorar um vasto espaço de combinações de compostos e identificar aquelas que maximizam a resistência balística a um custo reduzido.

Objetivo

O objetivo deste projeto é determinar vidros óxidos de custo acessíveis que apresentem alta resistência balística, em específico, objetivamos, utilizando algoritmos genéticos, maximizar o módulo de Young e a microdureza do material, enquanto buscamos as melhores alternativas para minimizar o custo das matérias-primas na produção desses vidros, isso mantendo um quantidade razoável de diferentes compostos utilizados na composição de vidro. Nesse sentido, verifica-se a principal hipótese do projeto H1: o uso de algoritmos genéricos baseados no modelo preditivo do GlassNet permite encontrar vidros óxidos com alta resistência balística e com custo de produção relativamente baixo.

Sobre o Dataset e o Modelo Preditivo

A base de dados utilizada nesse trabalho é o SciGlass[3], um banco de dados abrangente de propriedades de vidros, projetado para auxiliar na pesquisa e desenvolvimento de novos tipos de vidros. O database SciGlass 7.7 possui dados de mais de 300 mil composições, incluindo óxidos, halogenetos e calcogenetos. Para acessarmos essa grande base de dados, em que utilizamos o módulo GlassPy [1] como intermediador. GlassPy é um módulo em python também voltado a pesquisas relacionadas a materiais vítreos. O GlassPy oferece um método conveniente para carregar dados do SciGlass em um dataframe do tipo Pandas. O GlassPy também abarca o GlassNet [4], que é um modelo preditivo para várias propriedades de vidros.

O GlassNet é uma rede neural multitask profunda treinada com mais de 218 mil exemplos de diferentes composições vítreas do SciGlass. O modelo tem a capacidade de prever 85 diferentes propriedades, sejam elas óticas, elétricas, dielétricas, mecânicas e térmicas em diferentes tipos de composições. O modelo foi treinado com os dados do SciGlass e está disponível no módulo GlassPy como código aberto a comunidade científica.

Ordem de Leitura dos Jupyter Notebooks

Considerando que o objetivo principal e os dados (parte fundamental do projeto) são apresentados no arquivo de análise exploratória, enquanto conceitos mais aprofundados em Algoritmos genéticos são explanados no arquivo de mesmo nome. Com isso, ao leitor do projeto, recomenda-se seguir a seguinte ordem de leitura de arquivos.

  • analise_exploratoria.ipynb
  • algoritmo_genetico.ipynb

Organização do Repositório

  • Pasta "analise_exploratoria"

    • analise_exploratoria.ipynb: Arquivo jupyter contendo a busca dos dados do SciGlass pelo Módulo GlassPy, análise estatística e histogramas das propriedades escolhidas;
    • prices.csv: Tabela contendo os preços coletados para cada composto óxidos trabalhados no algoritmo genético.

  • Pasta "algoritmo_genetico

    • algoritmo_genetico.ipynb: Arquivo jupyter contendo o algoritmo genético usado para a otimização dos dados;
    • funcoes.py: Script python contendo as funções precisas para execução do algoritmo genético. Funções essas que envolvem a criação dos candidatos, população, gene, função objetivo, funções relacionadas as etapas de cruzamento e mutação.

Estratégias para o trabalho

  • Preparação dos Dados
  • Utilizando o GlassPy como intermediador, os dados do SciGlass foram importados e transformados em um DataFrame do tipo Pandas, essa conversão foi precisa para uma visualização mais agradável dos dados. Análises estatísticas foram feitas com os diferentes tipos de colunas presentes no dataset, sendo elas:

    • Elements (Elementos);
    • Compoundns (Compostos);
    • Property (Propriedades;)
    • Metadata (Metadados).

    Dentre as colunas acima, a de interesse em nosso trabalho é apenas a coluna de Compostos e Propriedades. Dentre o total de propriedades oferecidas pelo GlassPy foram escolhidas duas para serem melhoradas no algoritmo genético, essas duas propriedades foram escolhidas com base na sua importância e contribuição para a formação de um vidro a prova de balas eficiente. Em conjunto e com orientação do professor orientador foram escolhidas as seguintes propriedades.

    • Young's Modulus (Módulo de Young)
    • O módulo de Young, também conhecido como módulo de elasticidade, é uma medida da rigidez de um material. Ele quantifica a relação entre a tensão (força por unidade de área) e a deformação (deformação relativa) em um material elástico quando este é submetido a uma carga de tração ou compressão (Capacidade do material resistir a deformação elástica).

    • Microhardness (Microdureza)
    • A microdureza é uma medida da dureza de um material em uma escala microscópica. É determinada aplicando uma pequena carga controlada a um indentador muito pequeno e medindo a impressão deixada no material.

    Em nosso projeto, objetivamos maximizar essas duas propriedades, porém, com a restrição da minimização do preço do composto, restringimos nossa busca a apenas os compostos óxidos e obtivemos um total de 196 composições. Para a busca de preços de cada composto contemplado no GlassPy, fizemos a coleta de preços em dólar (USD) por grama de cada composto de acordo com os valores do Sigma Aldrich. Os valores obtidos foram guardados em um dicionário com o intuito de serem usados posteriormente na execução do algoritmo genético. Importante ressaltar que em nossa busca nem todos os preços foram encontrados. Os valores faltantes então, foram posteriormente removidos do dicionário.

  • Algoritmo Genético
  • Utilizando como base o algoritmo genético desenvolvido em sala de aula [7], alteramos o mesmo para que se adequasse ao nosso objetivo. Nossas alterações consistiram principalmente no arquivo de funções, onde foi implementado uma nova função para a etapa de cruzamento juntando os dois tipos de cruzamento vistos: ponto simples e ponto duplo. Alterações nas funções de mutação simples e mutação sucessiva também foram feitas. O fluxo de seleção, cruzamento, mutação e atualização do hall da fama (comum aos algoritmos genéticos) foi implementado nessa etapa do projeto. Para obter-se o resultado do preço do melhor individuo observado utilizou-se sua porcentagem no composto como um todo multiplicado por seu valor em dólares por grama. Foi criado uma função objetivo para calcular a pontuação do candidato a partir de uma equação nova. Dentre as principais alterações feitas com base no script de funções disponibilizado pelo professor, podem-se destacar a função de ativação, a etapa de cruzamento e a etapa de mutação.

    • Função objetivo
    • A função objetivo determina a pontuação do candidato a partir de uma equação inventada pelos colaboradores do projeto, em que o denominador envolve a raiz quadrado de um termo grande, havendo a soma do quadrado do complementar do módulo de young e do da microdureza do candidato normalizado pelo máximo absoluto somado ao quadrado preço normalizado pelo máximo absoluto. Nisso, o numerador representa a raiz cúbica de 1 somado do número de compostos não utilizados dos possíveis na composição, em que tal termo está ao produto de raiz de 3, que permite a normalização de tal função, havendo resultados que variam de 0 a 1 em circunstâncias normais. Veja a fórmula de forma mais clara:

$$ Fitness = \frac{\sqrt{(\frac{ModuloYoung}{ModuloYoung_{max}} - 1)^2 + (\frac{Microdureza}{Microdureza_{max}} - 1)^2 + (\frac{Preco}{Preco_{max}})^2}}{\sqrt{3} \cdot \sqrt[3]{NumeroCompostosNaoUtilizados + 1}} $$

    • Função de ativação:
    • A função cria um dicionário de composição a partir da lista de candidatos e usa um modelo preditivo para estimar as propriedades do vidro. A pontuação é calculada normalizando e combinando os desvios das propriedades e do custo em relação aos valores de referência, esses valores de referência são: No caso das propriedades com o objetivo de maximização (“Microdureza” e Módulo de Young), o valor máximo encontrado no conjunto de dados e no caso de minimização (Preço do composto) o valor mínimo encontrado, com penalização adicional para composições que utilizam poucos compostos ou apresentam valores de “microdureza” e módulo de Young fora de certos limites arbitrariamente estabelecidos. A menor pontuação indica uma melhor composição segundo os critérios estabelecidos. Logo, o fim último da evolução é a minimização da função objetivo.

    • Etapa de Cruzamento
    • Na etapa de cruzamento, utilizamos uma junção dos dois tipos de cruzamento que vimos ao longo do semestre, o cruzamento de ponto simples e cruzamento de ponto duplo, onde cada um ocorrerá apenas se uma condição for atendida com base numa chance aleatória definida.

    • Etapa de mutação

Bibliotecas e Módulos

Nessa etapa, informamos as bibliotecas e módulos utilizados no desenvolvimento do projeto e seu uso nesse projeto. Essas ferramentas vão desde a etapa da análise estatística e visualização dos dados até a otimização de funções no código fonte.

  • Pandas: Biblioteca utilizada para visualização dos dados brutos obtidos do SciGlass e Análise estatística dos mesmos;
  • GlassPy: Módulo que serviu como intermediador entre o projeto e a base de dados alvo (SciGlass), além de ofercer acesso ao modelo preditivo do GlassNet;
    • GlassNet: Modelo preditivo (Rede Neural Multitask) utilzada para prever as propriedades do material com base na composição informada;
    • SciGlass: Base de dados contendo mais de 300 mil composições de materiais vítreos.
  • Matplotlib: Biblioteca utilizada para o plot dos gráficos presentes no projeto (histogramas);
  • Numpy: Biblioetca especializada em trabalhar com arrays multidimensionais e matrizes;
  • Seaborn: Biblioteca de visualização de dados construida com base no Matplotlib. Utilizada para estilização dos gráficos do projeto;

Conclusão

A partir dos algoritmos genéticos elaborados nesse projeto, verificou-se no jupyter notebook "algoritmo_genetico.ipynb" que se encontrou ao menos uma suposta composição de vidro com um preço baixo e boas propriedades de resistência balística, considerando o módulo de Young e microdureza.

Perspectivas Futuras

  • Deseja-se em um futuro próximo, realizar um estudo mais aprofundado sobre a composição de vidros à prova de bala e implementar o algoritmo para considerar mais propriedades importantes que influenciem nessa composição alvo.
  • Implementar na função objetivo a restrição dessa composição formar necessariamente vidro, mais um modelo preditivo.
  • Extrapolar o projeto para a melhoria não apenas de vidros à prova de bala, mas também para a melhoria de vidros utilizados em aeronaves, com o objetivo de minimização do peso e preço do composto; como também o uso do algoritmo para outros tipos de vidro.

References:

[1] GlassPy documentation — GlassPy latest documentation. Disponível em: https://GlassPy.readthedocs.io/en/latest/. Acesso em: 22 maio. 2024.

[2] Sigma-Aldrich: Analytical, Biology, Chemistry & Materials Science products and services. Disponível em: https://www.sigmaaldrich.com.

[3] SciGlass. Disponível em: https://www.akoscheminformatics.de/sciglass/sciglass.htm. Acesso em: 25 maio. 2024.

[4] CASSAR, D. R. GlassNet: A multitask deep neural network for predicting many glass properties. Ceramics international, v. 49, n. 22, p. 36013–36024, 1 nov. 2023.

[5] WIKIPEDIA CONTRIBUTORS. Young’s modulus. Disponível em: https://en.wikipedia.org/wiki/Young%27s_modulus.

[6] CASSAR, D. R. drcassar/GlassPy. Disponível em: https://github.com/drcassar/GlassPy. Acesso em: 25 maio. 2024.

[7] Cassar, Daniel(2024). ATP-303 GA 2.1 - Algoritmo genético. Retirado dos arquivos de Redes Neurais e Algoritimos Genéticos da Ilum - Escola de Ciência.

[8] Cassar, Daniel(2024). ATP-303 GA 3.1 - Caixas não-binárias. Retirado dos arquivos de Redes Neurais e Algoritimos Genéticos da Ilum - Escola de Ciência.

glassnet_genetic_algorithms's People

Contributors

josedavid23038 avatar diogoplcarvalho avatar emmanoelpequeno avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.