Universidade Federal do Pará

###Campus Universitário de Tucuruí

###Programa de Pós-Graduação em Computação Aplicada - PPCA

Sistema de Diagnóstico Inteligente - SDI

Comunicação Drive

#Montar o drive:
from google.colab import drive
drive.mount('/content/drive')
Mounted at /content/drive

Carregamento da Amostra

H2 = float(input('Hidrogênio: '))
CH4 = float(input('Metano:     '))
C2H4 = float(input('Etileno:   '))
C2H6 = float(input('Etano:     '))
C2H2 = float(input('Acetileno: '))
Hidrogênio: 36
Metano:     12
Etileno:   10
Etano:     10
Acetileno: 1

Carregamento de Algoritmos: ANN, KNN e DUVAL

import pickle
import numpy as np
import pandas as pd
knn_DGA = '/content/drive/MyDrive/Mestrado/Mestrado_Otacílio_Raphael/Codigo2022/knn_DGA.sav'
rnn_DGA = '/content/drive/MyDrive/Mestrado/Mestrado_Otacílio_Raphael/Codigo2022/meuRnn.pkl'
def duval (x_test):

  PiCH4 =(100*CH4) / (CH4+C2H4+C2H2)
  PiC2H4 =(100*C2H4) / (CH4+C2H4+C2H2)
  PiC2H2 =(100*C2H2) / (CH4+C2H4+C2H2)

# Zona de falhas de Duval
  if PiCH4 >= 98:
    R = "DUVAL: Descarga Parcial Tipo Corona"

  elif PiC2H4 < 23 and PiC2H2 >= 13:
    R = "DUVAL: Descarga de Baixa Energia - D1"

  elif PiC2H4 >= 23 and PiC2H2 >= 29:
    R = "DUVAL: Descarga de Alta Energia - D2"

  elif 23 <= PiC2H4 < 40 and 13 <= PiC2H2 < 29:
    R = "DUVAL: Descarga de Alta Energia - D2"

  elif PiC2H4 < 50 and 4 <= PiC2H2 < 13:
    R = "DUVAL: Falha Térmica/Elétrica"

  elif 40 <= PiC2H4 < 50 and 13 <= PiC2H2 < 29:
    R = "DUVAL: Falha Térmica/Elétrica"

  elif PiC2H4 >= 50 and 15 <= PiC2H2 < 29:
    R = "DUVAL: Falha Térmica/Elétrica"

  elif PiCH4 < 98 and PiC2H4 < 20 and PiC2H2 < 4:
    R = "DUVAL: Térmico < 300°C"

  elif 20 <= PiC2H4 < 50 and PiC2H2 < 4:
    R = "DUVAL: Térmico 300°C < T < 700 °C"

  elif PiC2H4 >= 50 and PiC2H2 < 15:
    R = "DUVAL: Térmico > 700 °C"

  else:
    R = "DUVAL: Inconclusivo"

  return R
KNN_DGA = pickle.load(knn_DGA, 'rb')
RNN_DGA = pickle.load(rnn_DGA, 'rb')
H2_Media_ln = 2.71161374
CH4_Media_ln = 3.30010706
C2H4_Media_ln = 2.09968543
C2H6_Media_ln = 1.96715411
C2H2_Media_ln = -2.86100623
H2_Desvio_ln = 2.44189199
CH4_Desvio_ln = 1.70911597
C2H4_Desvio_ln = 3.03121717
C2H6_Desvio_ln = 3.0799964
C2H2_Desvio_ln = 3.04023271
Media = [H2_Media_ln, CH4_Media_ln, C2H4_Media_ln, C2H6_Media_ln, C2H2_Media_ln]
Desvio = [H2_Desvio_ln, CH4_Desvio_ln, C2H4_Desvio_ln, C2H6_Desvio_ln, C2H2_Desvio_ln]
x_test = [H2, CH4, C2H4, C2H6, C2H2]
xl = np.log(x_test)
x_Normalizado = np.array((xl[:5]-Media[:5])/Desvio[:5]).reshape(1,-1)
x_Normalizado
array([[0.15538309, 0.16582367, 0.54037177, 0.10890629, 0.94104843]])

Predição dos algoritmos

yk = KNN_DGA.predict(x_Normalizado)
if yk == 0:
  print('Amostra normal')
elif yk == 1:
   print('Defeito térmico')
elif yk == 2:
  print('Defeito elétrico')
yr0 = RNN_DGA.predict(x_Normalizado)
yr0 = (yr0 >= 0.5)
print("\n")
yr0
yr = pd.DataFrame(yr0, columns=['X1', 'X2', 'X3'])
yr
X1 = yr["X1"].values
X2 = yr["X2"].values
X3 = yr["X3"].values
if X1 == True and X2 == False and X3 == False:
  print('Amostra normal')
elif X1 == False and X2 == True and X3 == False:
  print('Defeito térmico')
elif X1 == False and X2 == False and X3 == True:
   print('Defeito elétrico')
yd = duval(x_test)
yd
'DUVAL: Térmico > 700 °C'

Diagnóstico - SDI

Análise de Normalidade

#CONDIÇÃO 1: KNN=ANN PARA FALHAS

if yk == 0 and X1 == True:  # KNN=ANN PARA NORMAIS
  print('KNN e Rede Neural - Amostra normal')

if yk != 0 and X1 != True: # KNN=ANN PARA FALHAS
  print('KNN e Reunral - Prossiga a análise')

if yk == 0 and X2 == True or X3 == True: # KNN=NORMAL E ANN=FALHA
  print('Realise análise da evolução dos gases - TENDÊNCIA A FALHAS - Rede Neural')

if yk != 0 and X1 == True: # KNN=FALHA E ANN=NORMAL
  print('Realise análise da evolução dos gases - TENDÊNCIA A FALHAS - K-Vizinhos')

Tipo de Falha

  for yr in (RNN_DGA.predict(x_Normalizado)):
    if X1 == False and X2 == False and X3 == True:
      print('REDE NEURAL: Defeito elétrico')
      #print("\n")
  if yk == 1:
    print('K-VIZINHOS: Defeito térmico')
  for yd in duval(x_test).replace("", ""):
    print(yd, end="")

Testes SDI

# Diagrama de Blocos - Sistema de Diagnóstico Inteligente - SDI

for yk in (KNN_DGA.predict(x_Normalizado)):
  if yk == 0:
    print('Amostra normal')
    print("\n")
    break
for yr in (RNN_DGA.predict(x_Normalizado)):
  if X1 == True and X2 == False and X3 == False:
    print('REDE NEURAL: Realizar nova coleta de óleo - Discordância entre KNN e ANN')
    print("\n")
    break
  for yr in (RNN_DGA.predict(x_Normalizado)):
    if X1 == False and X2 == True and X3 == False:
      print('REDE NEURAL: Defeito térmico')
      #print("\n")
  for yr in (RNN_DGA.predict(x_Normalizado)):
    if X1 == False and X2 == False and X3 == True:
      print('REDE NEURAL: Defeito elétrico')
      #print("\n")
  if yk == 1:
    print('K-VIZINHOS: Defeito térmico')
  for yd in duval(x_test).replace("", ""):
    print(yd, end="")

Interface Gráfica

from IPython.core.display import display, Markdown, clear_output
import matplotlib.pyplot as plt
import ipywidgets as widgets
from logging import PlaceHolder
equation = widgets.Text(value = 'sin(x)+cos(x)', PlaceHolder = "Digite algo:", description = 'Equação:')
Text_diagnostico = widgets.Text(value = "")
range_ = widgets.FloatRangeSlider(value = [-5, 5], min = -100, step = 0.1, description = 'Escala:', orientation = 'horizontal', redaout = True, redaout_format = 'd')
points1 = widgets.IntText(value = 0, description = '  Hidrogênio:')
points2 = widgets.IntText(value = 0, description = 'Metano:')
points3 = widgets.IntText(value = 0, description = 'Etileno:')
points4 = widgets.IntText(value = 0, description = 'Etano:')
points5 = widgets.IntText(value = 0, description = 'Acetileno:')
from codeop import compile_command
button = widgets.Button(description = 'Diagnóstico', compile_command=defdiag)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-71-901141993795> in <cell line: 2>()
      1 from codeop import compile_command
----> 2 button = widgets.Button(description = 'Diagnóstico', compile_command=defdiag)

NameError: name 'defdiag' is not defined
out = widgets.Output()
grapher = widgets.VBox([points1, points2, points3, points4, points5, button, out, Text_diagnostico])
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-73-b54efe859ba1> in <cell line: 1>()
----> 1 grapher = widgets.VBox([points1, points2, points3, points4, points5, button, out, Text_diagnostico])

NameError: name 'button' is not defined
info = Markdown("""# Sistema de Diagnóstico Inteligente - SDI
 - Digite a amostra gascromatográfica.
 - Aperte diagnóstico.""")
display(info, grapher)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-75-ecc5b9db6586> in <cell line: 1>()
----> 1 display(info, grapher)

NameError: name 'grapher' is not defined