Prof.
Marcelo Suetake
Alterado em 2017 pelo Prof. Celso
❑ Em uma planta de usina sucro-alcooleira, a eficiência
do processo de fabricação do álcool pode ser
otimizado a partir do controle adequado da injeção
de dois tipos de reagentes (R1 ou R2) em um
determinado estágio do processo de fermentação.
❑ Assim, uma equipe de engenheiros, por meio de
pesquisas e ensaios em laboratório, concluíram que
os reagentes (R1 ou R2) poderiam ser adicionados ao
processo dependendo da concentração de algumas
substâncias (x1, x2 e x3) e de mais outras duas
grandezas físico-químicas (x4 e x5).
2
3
Colheita Moagem Aquecimento 105oC (melaço)
40% de sacarose
(garapa)
Variáveis Medidas:
Alto teor de
- Pressão nos tanques
sacarose
- Temperatura Fermentação Glicose + frutose
- ph
- Teor alcoólico
- Condutividade
- Concentração de C
- Concentração de O Etanol + gás
Catalisa
- Concentração de H carbônico
Reagentes:
- Cloreto Férrico (FeCl3) Alcool Anidro
- Cal hidratada (CaO) (100% etanol)
- Sulfato de Alumínio (Al2SO4) Destilação
Alcool hidratado
(96% etanol) 4
❑ Na sequência, a equipe pretende desenvolver um
sistema automático de acionamento das válvulas
constituintes dos dois tipos de reagentes, cujo
diagrama esquemático pode ser observado na
figura a seguir.
5
Válvulas
R1 Driver de y
R2 Acionamento
ADALINE
x1
DAQ
x2
x3
x4
Caldeira x5
Sensores
Ruídos
❑ Entretanto, notou-se que os sinais sofriam interferências
durante a sua transmissão, distorcendo-se assim as informações
retornadas pelos sensores. Para contornar este problema, a
equipe decidiu treinar uma rede ADALINE para classificar
estes sinais ruidosos e enviar a ação de controle ao driver de
acionamento das válvulas dos reagentes.
6
❑ Como existe cinco variáveis que estão sendo
monitoradas, o neurônio constituinte do ADALINE
terá então cinco entradas {x1, x2, x3 , x4 , x5}.
❑ Conseqüentemente, a saída {y} do ADALINE estará
então decidindo, levando-se em consideração as suas
cinco entradas, qual dos reagentes será adicionado ao
processo, ou sejam:
➢ Reagente R1 → “Classe C1” → { y = -1 }
➢ Reagente R2 → “Classe C2” → { y = 1 }
7
❑ A figura seguinte ilustra o ADALINE a ser
implementado.
x1 w1 −1
= w0
x2 w2
u
x3 w3 g(.) y
−
x4 w4 erro
+
Bloco
associador
x5 w5
d
8
❑ A base de dados de treinamento do ADALINE,
disponibilizada no arquivo {[Link]}, foi
levantada por meio de sucessivos ensaios
experimentais e contém o formato seguinte:
N x1 x2 x3 x4 x5 d
1 1.9007 1.0664 1.9147 0.089 0.9267 -1
2 2.3616 1.6669 4.8792 1.6663 0.343 -1
3 4.2315 2.0403 2.3101 2.4789 3.5831 -1
4 4.956 2.6197 4.6272 2.2171 3.0343 -1
5 2.8372 4.8439 4.1225 2.8788 4.4959 1
6 3.2317 1.8979 2.3829 2.7357 3.7906 1
7 0.0743 0.7835 2.3578 1.629 0.7725 1
8 0.2985 3.2902 4.4482 0.3289 0.6065 -1
(…) (…) (…) (…) (…) (…) (…)
9
x1 x2 x3 x4 x5 d
1.9007 1.0664 1.9147 0.0890 0.9267 −1
2.3616 1.6669 4.8792 1.6663 0.3430 −1
M =
4.2315 2.0403 2.3101 2.4789 3.5831 −1
(...) (...) (...) (...) (...) (...)
a) Carregar a matriz de treinamento M x1 w1 −1
usando a seguinte instrução: x2 w2
= w0
u
x3 w3 g(.) y
M = load(‘nome_do_arquivo.txt’); −
x4 w4 erro
+
Bloco
associador
x5 w5
d 10
b) Implementar as seguintes instruções a partir da matriz M
➢ Definir a Matriz T, referentes aos sinais de entrada do
ADALINE, que seja composta pelas cinco primeiras colunas de
M, inserindo-se ainda o elemento -1 (relativo ao termo θ) em
sua primeira coluna
➢ Definir o vetor d, referente aos sinais de saída do ADALINE,
que seja composto pela última coluna de M.
x1 x2 x3 x4 x5 d
1.9007 1.0664 1.9147 0.0890 0.9267 −1
2.3616 1.6669 4.8792 1.6663 0.3430 −1
M =
4.2315 2.0403 2.3101 2.4789 3.5831 −1
(...) (...) (...) (...) (...) (...)
T 11
c) Inicializar as seguintes variáveis, além de T e d:
➢ Taxa de Aprendizagem em 0.0025; {η0.0025}
➢ Contador de época em 0; {epoca 0}
➢ Parâmetro de Precisão 10-6 {ε10-6};
➢ Vetor de pesos (w) com valores aleatórios
uniformemente distribuídos entre 0 e 1, sendo
cada um de seus elementos representandpo os
seguintes parâmetros:
T
w = w1 w2 w3 w4 w5
12
d) Implementar a instrução que, dada uma linha k da matriz
T, obtenha o potencial de ativação do neurônio, ou seja:
xT(k,:) {onde x conterá a k-ésima linha da matriz T}
Teste a sua instrução para k = 2, verificando se o valor de
retorno está correto.
−1 1.9007 1.0664 1.9147 0.0890 0.9267
− 1 2.3616 1.6669 4.8792 1.6663 0.3430 k=2
T =
−1 2.3616 1.6669 4.8792 1.6663 0.3430
(...) (...) (...) (...) (...) (...)
u[Link] {realize eventuais transposições que sejam
necessárias}
13
FASE
TREINAMENTO DA
REDE
Função EQM (erro)
14
e) Implementar a função EQM que receba T, w e d como
argumentos de entrada, retornando então o valor do erro
quadrático médio, que é obtido pela seguinte expressão:
p
EQM = 1
p k =1
( d ( k ) − u ( k ) )2 x1 w1 −1
= w0
x2 w2
onde p é o número de amostras
de treinamento.
u
x3 w3 g(.) y
−
function z = EQM(T,w,d) x4 w4 +
erro
s 0; Bloco
associador
x w
p size(T,1); {quantidade de amostras} 5 5 d
Para k variando de 1 até p, fazer:
x T(k , :) ;
u [Link] ; {realize eventuais transposições que sejam necessárias}
s s + (d(k) – u)2; Teste se a função está ok (sem erros de
Fim_Para programação), utilizando-se os valores de T,
w e d que já foram especificados
z s/p; anteriormente. 15
ASE TREINAMENTO DA REDE
FASE TREINAMENTO
DA REDE
Algoritmo de
Treinamento
16
❑ Algoritmo de Treinamento (Regra Delta)
function [w, epoca, erro] = Treina_adaline(T, d)
precisão 10-6;
n 0,0025
epoca 0 x1 w1 −1
Incializar w aleatoriamente (OBS: SALVE ESSES VALORES) = w0
x2 w2
amostras size(T, 1)
u
y
eqm_ant 0; x3 w3 g(.)
−
erro
eqm_atual EQM(T,w,d); x4 w4 +
Bloco
associador
Enquanto | eqm_atual – eqm_ant | precisão , fazer: x5 w5
d
epoca epoca + 1;
eqm_ant eqm_atual;
Para k variando de 1 até a quantidade total de amostras em T, fazer:
x T(k , :); {atribua padrão k de T ao vetor x // Utilize as instruções do item “d”}
u [Link]; {realize as eventuais transposições que sejam necessárias}
w w + .(d(k) – u).x;
Fim_Para
{Execute a rede pelo menos três vezes e
eqm_atual EQM(T,w,d);
analise os números de épocas e os valores
erro(epoca) eqm_atual;
finais para o vetor w}
Fim_Enquanto
17
Fim_Programa
Regra Delta
❑ Compare os resultados
TREINAMENTOS
1º 2º 3º
Pesos Aleatório final Aleatório final Aleatório final
0 =
1
2
3
4
5
Épocas
❑ Obs: quando inserir tabelas (ou figuras) nos relatórios,
escrever no texto o que o leitor deve notar (ou verificar
de importante nelas). 18
j)
f) Trace o gráfico do erro quadrático médio {erro} em função das
épocas de treinamento.
t=1:epoca;
plot(t, erro)
19
f1) Faça o treinamento novamente, mas ao invés de usar pesos
aleatórios use os pesos nulos:
w = [0 0 0 0 0 0]
** Verifique se a rede converge.
f2) Faça novamente o treinamento com os pesos nulos e verifique
se o número de épocas foi o mesmo ou se houve alteração.
20
FASE DE
OPERAÇÃO DA
REDE
21
g) Após o treinamento do ADALINE, aplique a mesma para
selecionar que tipo de reagente será inserido no processo
industrial em relação a outras configurações operacionais.
Carregue numa matriz V o arquivo {[Link]} que contem
a relação completa destas situações representadas por
medições de x1, x2, x3, x4 e x5.
x1 x2 x3 x4 x5
2.9370 0.7290 4.5267 1.9206 3.7214
0.8147 2.8296 4.6581 2.3493 1.9144
V =
3.4284 2.3311 1.3016 1.7078 2.5767
(...) (...) (...) (...) (...)
h) Prepare esta matriz V, adicionando-se os elementos -1 em
sua primeira coluna, a fim de ser inserida nas entradas do
ADALINE já treinado. 22
i) Implemente as instruções que permita a classificação, após a
realização do processo de treinamento, usando-se o algoritmo
seguinte. Forneça também os resultados da classificação.
function [ output_args] = adaline(V,w)
amostras size(V, 1)
Para k variando de 1 até a quantidade
total de amostras em V, faça:
x V(k, :);
u [Link]; ➢ Se { y = -1 } ➔ “Adicionar Reagente R1”
y(k) sinal(u); ➔ Classe C1
Imprima(y);
Fim_Para ➢ Se { y = 1 } ➔ “Adicionar Reagente R2”
➔ Classe C2
23
❑ FUNÇÕES DO MATLAB PARA ESCREVER NA TELA
❑ O comando disp pode imprimir mensagens que
contenham strings delimitadas por aspas e valores de
variáveis
❑ C1 = ‘Classe C1 →Adicionar Reagente R1‘;
❑ C2 = ‘Classe C2 →Adicionar Reagente R2’;
❑ k = 2;
❑ u = 3;
❑ if(u<0) disp(C1);
❑ else disp(C2);
❑ end
24
❑ FUNÇÕES DO MATLAB PARA ESCREVER NA TELA
❑ O comando fprintf permite imprimir na tela com várias
formatações (equivalente ao printf da linguagem C)
❑ %s - utilizado para imprimir uma string
❑ %c - utilizado para imprimir uma character
❑ %d - utilizado para imprimir um n ́umero inteiro
❑ %f - utilizado para imprimir um n ́umero ponto flutuante
❑ \n - Gera uma quebra de linha
❑ \t - Gera tabulação
❑ \\ - utilizado para imprimir uma barra
❑ \% - utilizado para imprimir por cento 25
❑ FUNÇÕES DO MATLAB PARA ESCREVER NA TELA
❑ O comando fprintf permite imprimir na tela com
várias formatações
❑ C1 = ‘Classe C1 →Adicionar Reagente R1‘;
❑ C2 = ‘Classe C2 →Adicionar Reagente R2’;
❑ k = 2;
❑ u = 3;
❑ fprintf('a amostra k=%d pertence a ',k);
❑ if(u<0) y(k) = fprintf(' %s \n', C1);
❑ else y(k) = fprintf(' %s \n', C2);
❑ end
26
❑ >> Adaline( V,w )
❑ a amostra k=1 pertence a classe Adicionar Reagente R2 --> Classe C2
❑ a amostra k=2 pertence a classe Adicionar Reagente R2 --> Classe C2
❑ a amostra k=3 pertence a classe Adicionar Reagente R1 --> Classe C1
❑ a amostra k=4 pertence a classe Adicionar Reagente R2 --> Classe C2
❑ a amostra k=5 pertence a classe Adicionar Reagente R2 --> Classe C2
❑ a amostra k=6 pertence a classe Adicionar Reagente R2 --> Classe C2
❑ a amostra k=7 pertence a classe Adicionar Reagente R2 --> Classe C2
❑ a amostra k=8 pertence a classe Adicionar Reagente R2 --> Classe C2
❑ a amostra k=9 pertence a classe Adicionar Reagente R1 --> Classe C1
❑ a amostra k=10 pertence a classe Adicionar Reagente R2 --> Classe C2
❑ a amostra k=11 pertence a classe Adicionar Reagente R1 --> Classe C1
❑ a amostra k=12 pertence a classe Adicionar Reagente R2 --> Classe C2
❑ a amostra k=13 pertence a classe Adicionar Reagente R1 --> Classe C1
❑ a amostra k=14 pertence a classe Adicionar Reagente R1 --> Classe C1
❑ a amostra k=15 pertence a classe Adicionar Reagente R2 --> Classe C2
27