• Nenhum resultado encontrado

4.3 Implementação da base de conhecimento

4.3.2 Análise dos sinais do SCADA

Nesta seção está descrita a implementação das análises numéricas executadas pelo pro- tótipo. A principal função destas análises é representar o conceito de trend utilizado pelos controladores durante as entrevistas de aquisição de conhecimento.

Como já foi explicado anteriormente, devido ao pequeno número de entrevistas realizadas, existem grandes lacunas no conhecimento adquirido. Uma delas é no significado da expressão “analisar o trend”. Para esta implementação, decidiu-se que o trend de um determinado sinal em um ponto é a derivada do sinal naquele ponto. Como se sabe da teoria de análise de sinais, derivar um sinal tende a diminuir a razão sinal/ruído, o que dificulta a correta interpretação dos dados. Ainda mais quando se considera que os sinais obtidos do SCADA são bastante ruidosos.

Dentre as soluções pesquisadas, Pollock (1999) indica a possibilidade de fazer uma aproxi- mação por polinômio. Essa abordagem tem a vantagem de permitir obter a derivada de forma analítica, a partir do polinômio aproximado. Tem ainda a vantagem de poder ser aplicada mesmo para uma série temporal que não é regularmente espaçada, o que é o caso de todos os dados presentes no SCADA. Portanto, esta foi a estratégia adotada.

Ao se buscar a derivada em um determinado ponto de um sensor, um polinômio (que, após alguns experimentos, foi fixado como de grau 3) será aproximado sobre a série que se inicia 5 horas antes do instante pedido, e que termina exatamente no instante pedido (quando este existe realmente no SCADA), ou no instante presente no banco de dados mais próximo do instante pedido (quando não existe no SCADA nenhuma leitura para o instante pedido, que é o caso mais comum). Caso esse período de 5 horas contenha menos de 5 pontos, os últimos 5 pontos antes do instante pedido serão utilizados, independentemente do time stamp dos pontos.

Uma vez determinado o número de pontos, é realizada a aproximação utilizando um método de mínimos quadrados generalizado (PRESS et al., 2002, cap. 15), para encontrar os 4 coefici- entes do polinômio. Este método utiliza uma decomposição em valores singulares (SVD) para encontrar a solução. O método foi implementado baseando-se no algoritmo descrito em (PRESS et al., 2002, cap. 2), com pequenas alterações. Este algoritmo tem a vantagem de ser numerica- mente estável e rápido. Para fazer com que a aproximação funcione melhor próximo do ponto de interesse, é imposta uma restrição sobre o polinômio: a segunda derivada do polinômio no ponto de interesse deve ser nula.

Como um modo de melhorar o algoritmo, foram utilizados pesos sobre a série, fazendo com que os pontos mais próximos do ponto de interesse tenham um peso maior na solução que os pontos mais distantes. A Figura 4.10 mostra uma comparação do sinal com o polinômio

4.3 Implementação da base de conhecimento 83

Figura 4.10: Exemplo de aproximação produzida pelo algoritmo. A unidade do eixo das ordenadas é milhares de metros cúbicos por dia, que é a unidade padrão utilizada pela empresa-alvo para medição de vazão.

aproximador. Note como a curva se aproxima mais do ponto de interesse (ponta direita do sinal), e se afasta bastante do sinal original conforme ela se afasta desse ponto, por resultado da aplicação dos pesos. Esta curva foi produzida com dados do sensorELOS_61_60_FT-001-qbde 19 de janeiro de 2006, das 2 às 9 horas da manhã.

Esse algoritmo foi considerado satisfatório, uma vez que, na avaliação do engenheiro de conhecimento, a tendência calculada se aproximava da tendência do sinal. Maiores detalhes sobre os testes deste algoritmo se encontram na seção 4.4.1.

Apesar do método implementado ser simples, os testes realizados (ver seção 4.4.1) indica- ram um bom desempenho. Mesmo assim, este é um dos pontos do protótipo que poderia ser bem aprimorado com mais aquisição de conhecimento.

Além de realizar as análises numéricas, esse subsistema é o responsável por ler os arqui- vos dos sensores armazenados pelo SEGRED, e garantir que eles estejam sempre atualizados. Como as tarefas realizadas por esse subsistema são basicamente análises numéricas e de acesso a dados, o CLIPS não é uma linguagem conveniente para o desenvolvimento. Assim, foi esco- lhida a linguagem C++ para a implementação do subsistema, devido a facilidade em interfacear com o CLIPS e a facilidade para se implementar análises numéricas. Como as análises realiza- das pelo sistema são relativamente simples, optou-se por utilizar uma biblioteca extremamente

4.3 Implementação da base de conhecimento 84

simples para a representação de matrizes e vetores3e implementar diretamente os outros algo- ritmos necessários.

A Figura 4.11 mostra o diagrama de classes da implementação realizada. Este diagrama mostra tanto as classes que representam os sensores quanto as classes utilizadas para realizar as análises numéricas.

Figura 4.11: Diagrama de classes da implementação das análises sobre os dados dos sensores.

Neste diagrama, as classes prefixadas com “la” são as classes relacionadas com as opera- ções de álgebra linear. As classesla::vectorela::Matrixrepresentam, respectivamente, ve- tores e matrizes. A classela::Normalizapermite encapsular as ações e constantes necessárias para se normalizar um vetor, isto é, fazer com que todos os valores do vetor se mantenham entre 0 e 1. A normalização é necessária para aumentar a estabilidade da decomposição em valores singulares. Esta classe também permite aplicar a transformação inversa, isto é,“desnormalizar” o vetor. Neste caso, os valores do vetor retornam à condição original.

A classe la::Polyrepresenta um polinômio. Ela utiliza a classe la::vectorpara repre- sentar os coeficientes do polinômio. Esta classe também permite a associação de duas transfor- mações, representadas pela classela::Normaliza, uma à variável dependente do polinômio e outra à variável independente. Isso também foi feito para auxiliar na estabilidade das soluções numéricas.

4.3 Implementação da base de conhecimento 85

A classe abstrata la::Indexable expõe uma interface semelhante a classe la::vector, mas permite que, ao invés de utilizar dados discretos associados a cada elemento do vetor, se defina uma função analítica que será avaliada para cada elemento. Esta classe foi criada para facilitar a implementação dos pesos no algoritmo de aproximação. Esta classe têm duas classes filhas: la::ConstWeight, que faz com que todos os pontos da série tenham o mesmo peso, e la::Sigmoidal, que faz com que os pesos sejam distribuídos de acordo com uma função sigmoidal, com os maiores pesos mais próximos do ponto de interesse.

As classesUpToDate,Sensor,SensorCollectioneIterDirestão associadas ao acesso aos dados dos SCADA. No SEGRED, os dados do SCADA ficam armazenados em arquivos, um para cada sensor. Assim, a classeSensorCollection fornece uma interface para carregar os valores de cada sensor. Ela utiliza a classeIterDir como classe auxiliar para iterar sobre os arquivos no diretório onde estão armazenados os dados dos sensores. Para cada arquivo encon- trado, a classe SensorCollection instância um objeto da classe Sensor. Esta classe fornece uma interface para o acesso a esses dados e implementa todas as análises numéricas descritas anteriormente. A classe Sensordescende da classe UpToDate, que fornece serviços para sin- cronizar os valores armazenados na própria classe com os valores armazenados em um arquivo, sempre que estes mudarem. Isto é necessário porque a cada 30 min o SEGRED recebe novos dados do SCADA.