/NN_and_MOFs_Ilum

Esse é um repositório destinado à disciplina de Algoritmos Genéticos e Redes Neurais, da Ilum Escola de Ciência - CNPEM. O projeto consiste na construção de um modelo de redes neurais para a predição do VOID FRACTION de MOFs.

Primary LanguageJupyter NotebookGNU General Public License v3.0GPL-3.0

Redes Neurais e MOFs

Diciplina - Redes Neurais e Algoritmos Genéticos

Objetivo do Trabalho

Por meio de várias características físico-químicas prever uma MOF (Metal-Organic Framework) com o tamanho de poro desejado, usando computação em Python por redes neurais é utilizar técnicas de aprendizado de máquina, especificamente redes neurais, para criar um modelo preditivo capaz de estimar o tamanho de uma MOF com base em suas características físico-químicas.

As MOFs são materiais altamente porosos com estruturas cristalinas formadas por ligações entre íons metálicos ou clusters metálicos e ligantes orgânicos. Seu tamanho, como a área de superfície específica, a porosidade e a distribuição de tamanho de poro, é uma característica crucial que afeta suas propriedades e aplicações.

Exemplo Estrutural de MOFs

A abordagem proposta neste projeto é a utilização de redes neurais, que são modelos computacionais inspirados no funcionamento do cérebro humano. Redes neurais são capazes de aprender padrões complexos a partir de conjuntos de dados e podem ser treinadas para realizar previsões e estimativas com base nessas informações.

Por meio da computação em Python, será implementado um modelo de redes neurais que receberá características físico-químicas das MOFs como entrada e fornecerá uma predição do VOID FRACTION como saída. Essas características podem incluir propriedades estruturais, características dos ligantes e íons metálicos, entre outros parâmetros relevantes.

O objetivo final é construir um modelo de redes neurais preciso e confiável, capaz de prever o VOID FRACTION de MOFs com base em características físico-químicas específicas. Isso pode contribuir para a seleção e o design racional de MOFs com propriedades desejadas, acelerando o processo de desenvolvimento de novos materiais porosos com aplicações em áreas como armazenamento de gases, separação seletiva de substâncias e catálise.

Interpretação do Código Mestre(MOFs.ipynb)

Importações
  • import torch: Importa o módulo torch, que é um framework de aprendizado de máquina de código aberto.
  • import torch.nn as nn: Importa o submódulo nn do PyTorch, que fornece ferramentas para construir redes neurais.
  • import torch.optim as optim: Importa o submódulo optim do PyTorch, que contém otimizadores para treinamento de modelos.
  • import matplotlib.pyplot as plt: Importa o módulo pyplot do Matplotlib, que é uma biblioteca de visualização de dados em Python.
  • import seaborn as sns: Importa o módulo seaborn, que é uma biblioteca de visualização de dados baseada no Matplotlib.
  • from sklearn.model_selection import train_test_split: Importa a função train_test_split do submódulo model_selection do scikit-learn, que permite dividir conjuntos de dados em treino e teste.
  • from sklearn.preprocessing import MinMaxScaler: Importa a classe MinMaxScaler do submódulo preprocessing do scikit-learn, que realiza a normalização dos dados.
  • from sklearn.metrics import mean_squared_error: Importa a função mean_squared_error do submódulo metrics do scikit-learn, que calcula o erro quadrático médio entre as previsões e os valores verdadeiros.
  • import numpy as np: Importa o módulo numpy, que é uma biblioteca para manipulação de arrays multidimensionais e cálculos matemáticos.
  • import pandas as pd: Importa o módulo pandas, que é uma biblioteca para manipulação e análise de dados em Python.
  • import random: Importa o módulo random, que fornece funções para geração de números aleatórios.
  • from funcoes import selecao_torneio_min as funcao_selecao: Importa a função selecao_torneio_min do módulo funcoes e a renomeia como funcao_selecao.
  • from funcoes import cruzamento_ponto_simples as funcao_cruzamento: Importa a função cruzamento_ponto_simples do módulo funcoes e a renomeia como funcao_cruzamento.
Tratamento de Dados
  • df = extrair_cif(df, minimo = 5): Executa a função extrair_cif, que realiza o tratamento dos dados contidos no DataFrame df, mantendo apenas as amostras com um número mínimo de registros igual a 5.
  • df.keys(): Retorna as chaves (nomes das colunas) do DataFrame df.
Divisão de Treino-Teste
  • TAMANHO_TESTE = 0.1: Define o tamanho da amostra de teste como 10% do conjunto de dados total.
  • SEMENTE_ALEATORIA = 61455: Define a semente aleatória para garantir a reprodutibilidade dos resultados.
  • FEATURES = list(df.iloc[:,2:].keys()): Cria uma lista com os nomes das colunas (características) a serem usadas como entrada para o modelo.
  • TARGET = ['void fraction']: Define a variável alvo (porosidade do mof) a ser prevista pelo modelo.
  • indices = df.index: Obtém os índices das amostras do DataFrame df.
  • indices_treino, indices_teste = train_test_split(indices, test_size=TAMANHO_TESTE, random_state=SEMENTE_ALEATORIA): Divide os índices das amostras em conjuntos de treino e teste, com base no tamanho do conjunto de teste e na semente aleatória.
  • df_treino = df.loc[indices_treino]: Seleciona as amostras de treino do DataFrame df com base nos índices de treino.
  • df_teste = df.loc[indices_teste]: Seleciona as amostras de teste do DataFrame df com base nos índices de teste.
  • X_treino = df_treino.reindex(FEATURES, axis=1): Cria uma matriz de treino X_treino contendo apenas as colunas de características selecionadas.
  • y_treino = df_treino.reindex(TARGET, axis=1): Cria um vetor de treino y_treino contendo a variável alvo (porosidade do mof).
  • X_teste = df_teste.reindex(FEATURES, axis=1): Cria uma matriz de teste X_teste contendo apenas as colunas de características selecionadas.
  • y_teste = df_teste.reindex(TARGET, axis=1): Cria um vetor de teste y_teste contendo a variável alvo (porosidade do mof).
  • normalizador_x = MinMaxScaler(): Inicializa um objeto MinMaxScaler para normalização das características de entrada.
  • normalizador_y = MinMaxScaler(): Inicializa um objeto MinMaxScaler para normalização da variável alvo.
  • normalizador_x.fit(X_treino): Ajusta o normalizador_x aos dados de treino X_treino.
  • normalizador_y.fit(y_treino): Ajusta o normalizador_y aos dados de treino y_treino.
  • X_treino = normalizador_x.transform(X_treino): Aplica a normalização aos dados de treino X_treino.
  • y_treino = normalizador_y.transform(y_treino): Aplica a normalização aos dados de treino y_treino.
  • X_teste = normalizador_x.transform(X_teste): Aplica a normalização aos dados de teste X_teste.
  • y_teste = normalizador_y.transform(y_teste): Aplica a normalização aos dados de teste y_teste.
  • X_treino = torch.tensor(X_treino, dtype=torch.float32): Converte a matriz de treino X_treino em um tensor do PyTorch com tipo de dado float32.
  • y_treino = torch.tensor(y_treino, dtype=torch.float32): Converte o vetor de treino y_treino em um tensor do PyTorch com tipo de dado float32.
  • X_teste = torch.tensor(X_teste, dtype=torch.float32): Converte a matriz de teste X_teste em um tensor do PyTorch com tipo de dado float32.
  • y_teste = torch.tensor(y_teste, dtype=torch.float32): Converte o vetor de teste y_teste em um tensor do PyTorch com tipo de dado float32.

Interpretação do Código Auxiliar(Funções.py)

O objetivo principal do código Auxiliar é extrair informações relevantes dos dados e realizar operações como a geração de novas colunas e manipulação dos dados.

Importações O código utiliza diversas bibliotecas, como os, requests, pymatgen, numpy, pandas, random e matminer. Essas bibliotecas fornecem funcionalidades para manipulação de arquivos, requisições HTTP, manipulação de estruturas químicas, manipulação de dados numéricos, geração de números aleatórios e extração de características dos materiais.
Funções
  • A função funcao_extrair_features_cif é responsável por gerar novas colunas no dataframe, contendo propriedades extraídas dos dados CIF (Crystallographic Information File) de cada material, como átomos e posições. A função adsorptions_MOF extrai informações sobre adsorção de gases em cada MOF.
  • A função funcao_extrair_features_isotherms gera novas colunas no dataframe, contendo propriedades extraídas dos dados de isotherm de cada material, como a adsorção de gases em pressões variadas.
  • A função count_freq_chemical conta a frequência de cada elemento químico em cada coluna do dataframe e remove colunas com valores iguais a zero ou com frequência abaixo de um valor mínimo especificado.
  • A função extrair_cif extrai características estruturais-químicas dos arquivos CIF das MOFs e gera um novo dataframe contendo essas propriedades. Essas características são obtidas através da análise dos elementos químicos presentes nas MOFs e de propriedades estruturais dos CIF.
  • As funções gene_mof, individuo_mof e populacao_mof são responsáveis por gerar genes, indivíduos e uma população para o problema das MOFs. Os genes representam propriedades específicas das MOFs, como número de espaço do grupo, sistema cristalino e número de operações de simetria. Os indivíduos são combinações de genes e a população é uma lista de indivíduos.
  • As funções cruzamento_ponto_simples e mutacao_mof são operadores de cruzamento e mutação, respectivamente, utilizados em algoritmos genéticos para modificar os indivíduos da população.
  • A função selecao_torneio_min realiza a seleção de indivíduos da população usando o método do torneio, onde um número específico de indivíduos é selecionado com base em seu valor de fitness.

    Em resumo, o código é uma implementação em Python que lida com dados de MOFs, realiza extração de características, geração de novas colunas, manipulação de dados e aplicação de algoritmos genéticos para resolver problemas relacionados a esses materiais.

  • Bibliotecas Utilizadas

    • Os: Interação com o sistema operacional, incluindo manipulação de arquivos e pastas.
    • Requests: Biblioteca para fazer requisições HTTP e obter dados de uma URL específica.
    • Pymatgen: Manipulação de estruturas e materiais, como leitura de arquivos CIF, cálculos de propriedades e manipulação de estruturas cristalinas.
    • Matminer: Biblioteca para extração de características de materiais a partir de dados experimentais e teóricos.
    • PyTorch: Framework de aprendizado de máquina de código aberto.
    • seaborn: Biblioteca de visualização de dados baseada no Matplotlib.
    • scikit-learn: Biblioteca para aprendizado de máquina e análise de dados.
    • NumPy: Biblioteca para manipulação de arrays multidimensionais e cálculos matemáticos.
    • Pandas: Biblioteca para manipulação e análise de dados em Python.
    • random: Módulo Python para geração de números aleatórios.

    Essas bibliotecas foram escolhidas para fornecer funcionalidades essenciais ao projeto, como construção de redes neurais, visualização de dados, pré-processamento de dados, métricas de avaliação e manipulação de arrays.

    Colaboradores✨


    Caio Eduardo

    Programmer

    Danielle dos Santos

    Programmer

    Gabriel Xavier

    Programmer

    Gustavo Beneti

    Programmer

    Tabela de Funções

    Mentores✨


    Daniel R. Cassar

    Professor