EVOLUÇÃO DE PROGRAMAS INSTRUCTION LIST PARA CONTROLADORES LÓGICO PROGRAMÁVEIS UTILIZANDO PROGRAMAÇÃO GENÉTICA MARCOS L. CARNEIRO, LEONARDO C. BRITO, SÉRGIO G. ARAÚJO Escola de Engenharia Elétrica e Computação, Universidade Federal de Goiás, Av. Universitária, n 1488 – Quadra 86 – Bloco A – 3º piso, 74605-010 – Setor Leste Universitário, Goiânia - GO, BRASIL E-mails: [email protected], [email protected], [email protected] Abstract¾ In this paper, we propose a technique to automatically generate control programs for Programmable Logic Controller (PLC) devices. To this end, previous studies have used genetic programming techniques. Among these programming techniques, the Ladder language was the first to be applied. In this work, we demonstrate that by using the Instruction List programming, we can achieve a greater number of answers to one given problem and more flexibility in the program structure. With collected statistical data and four study cases, the simulations also showed better performance for higher taxes of mutation. Keywords ¾ Genetic programming, automation, PLC, Instruction List. Resumo¾ Esse artigo propõe uma técnica para gerar automaticamente programas para Controladores Lógicos Programáveis (CLP) utilizando Programação Genética (PG). Trabalhos anteriores utilizaram a linguagem Ladder como forma de representação dos programas. Este trabalho propõe a utilização da linguagem Instruction List com o objetivo de alcançar maior desempenho. Os resultados demonstraram que essa técnica foi capaz de produzir maior número de respostas para um mesmo problema e maior flexibilidade da estrutura do programa. Com dados estatísticos coletados através de quatro estudos de caso, as simulações demonstraram também maior desempenho com o uso de elevadas taxas de mutação. Palavras-chave ¾ Programação genética, automação, CLP, Instruction List. 1 Introdução Sistemas automáticos são usados em todas as indústrias e em sistemas de produção em larga escala. Alem disso, existe grande quantidade de pequenos sistemas automáticos dedicados a tarefas simples, como por exemplo, na automação de residências. Entretanto, esses sistemas ainda exigem conhecimento específico e trabalho manual para serem programados. A possibilidade de programar automaticamente um Controlador Lógico Programável (CLP) através da geração automática de programas Ladder e Instruction List usando abordagem de aprendizado de máquina é bastante atrativa uma vez que não é necessário saber os detalhes da lógica da programação, mas apenas cenários intuitivos de funcionamento. Esse artigo propõe o uso da Programação Genética (PG) para gerar programas para serem colocados em CLPs. A abordagem proposta é avaliada através de dados empíricos de simulações. 1.1 Linguagem Instruction List e os CLPs A linguagem Instruction List para PLC se assemelha à linguagem assembly e é usada para fornecer a lógica de controle para o dispositivo de acordo com as entradas de dados no tempo (Lewis, 1995). A Instruction List é uma linguagem de baixo nível encontrada em muitos dispositivos eletrônicos microcontrolados e é basicamente estruturada em duas colunas de código: uma para comandos e outra para entradas, saídas ou referências auxiliares. O CLP é um dispositivo básico para automação de sistemas. Ele pode ser re-programado muitas ve- zes sendo, portanto, possível reinstala-lo em diferentes plantas industriais. Através da evolução de programas de PLC, e a flexibilidade desse equipamento, ele pode representar um hardware evolutivo (Higuichi et al, 1992), (Mange; Tomassini, 1998). Atualmente o CLP é um dispositivo comum, encontrado em plantas industriais e até em residências podendo ter como função o controle da iluminação, de sistemas de segurança e de comunicação. De forma contínua ele realiza leituras em suas entradas, executa um programa e atualiza suas saídas (processo conhecido como scan). Apesar da existência da IEC 1131-1 International Standard for PLC Languages (Lewis, 1995), cada indústria possui uma linguagem Instruction List própria com diversas particularidades. A linguagem de referência usada neste trabalho para a criação dos programas foi a Instruction List do CLP TPW-03 WEG (WEG, 2008). 1.2 Programação Genética A técnica apresentada nesse artigo para a criação de programas de CLP é baseada na programação genética (PG) (Banzhaf, et al, 1998), (Koza, 2000), (Holland, 1975), (Carneiro, 2008). A PG é um sistema de busca e otimização criada inspirada na teoria da evolução natural de Darwin (Darwin, 1859). O primeiro passo do algoritmo é a criação de uma população de programas aleatórios compostos por um conjunto de comandos. Estes possuem o potencial de representar a solução desejada por meio de uma combinação entre eles. Em cada geração, a aplicação das operações genéticas cross-over, mutação e a seleção, transformam os indivíduos (programas) em outro grupo de soluções. Cada solução é testada e um nível de aptidão (fitness) é atribuído a ela de acordo com a fidelidade com que consegue representar o comportamento desejado para o sistema de automação. 1.3 Trabalhos anteriores Esse artigo e uma extensão do trabalho anterior (Carneiro, 2008), no qual programas em linguagem Ladder foram evoluídos geneticamente. O sistema demonstrou ser eficiente para pequenos programas, mas perdia desempenho para programas maiores e mais complexos. Nesses casos, o nível de aptidão da população permanecia próximo do nível ideal, mas não alcançava a pontuação máxima. Um problema observado foi a manipulação de elementos gráficos Ladder que tornou o processo mais lento em relação ao trabalho atual. Dessa forma, simulações que utilizavam um número grande de gerações se tornavam demoradas e improdutivas. No trabalho anterior, uma matriz foi utilizada para representar os elementos gráficos dos programas Ladder. Em simulações utilizando a Instruction List, os programas são representados por conjuntos de linhas de texto e sua lógica é realizada por um sistema de matrizes que representam apenas variáveis booleanas (Boole, 1854). Isso fez o processo de simulação ficar mais rápido permitindo a busca de soluções por um número maior de gerações ou a execução de várias simulações em um tempo menor. Como no trabalho anterior, todo o sistema foi desenvolvido utilizando a plataforma de programação Borland Delphi, incluindo o simulador e o sistema de programação genética. 2 Experimento 2.1 Programação Genética Nos experimentos desta pesquisa foram utilizadas populações de 100 indivíduos. O método de seleção adotado foi o de torneio. O trabalho anterior (Carneiro, 2008), assim como as referências (Manovit, et al, 1998) e (Romero; Mantovani, 2004), demonstraram que a seleção proporcional causa alguns problemas de desempenho. O problema principal é a convergência prematura para um mínimo local. A solução recomendada é a seleção por torneio (Manovit, et al, 1998), (Romero; Mantovani, 2004). Nesse caso, um pequeno grupo de indivíduos da população (4 indivíduos neste trabalho) é selecionado de forma aleatória e em seguida a melhor solução deste pequeno grupo é escolhida. Esse processo auxilia o algoritmo a evitar a convergência prematura e proporciona a chance de reprodução a quase todos os indivíduos da população. Figura 1. Exemplo de programa Instruction List. O operador genético cross-over realiza a troca de informação entre dois indivíduos da população seccionando o código de cada um dos dois indivíduos em dois pontos. Em seguida os segmentos de selecionados são passados de um indivíduo para o outro. A seleção deste código é realizada de forma aleatória e pode atingir qualquer segmento do código. O comprimento do código selecionando também é aleatório, proporcionalmente ao tamanho do indivíduo (Banzhaf, et al, 1998). O operador genético mutação é aplicado em um indivíduo pela seleção aleatória de uma linha do código. O local escolhido pode ser um comando ou uma referência de entrada, saída ou auxiliar (Fig. 1). O código selecionado é substituído aleatoriamente por outro código da mesma classe. Os indivíduos são representados com os próprios comandos de programação, como na Fig. 1 (representação linear). 2.2 Função Objetivo e o Simulador Começando pela população aleatória criada, cada programa passa por uma sequência de testes e ao final de cada iteração um nível de aptidão é atribuído. Essas seqüências de testes são cenários que representam o comportamento do ambiente automatizado. O comportamento é descrito no tempo através da representação do sequenciamento dos acionamentos de suas entradas e as respectivas respostas nos contatos auxiliares, nas saídas e nos temporizadores do sistema. Os trabalhos de (Koza, 2000) e (Banzhaf, et al, 1998) mostraram a relevância dos conhecimentos produzidos pelas analogias entre a inteligência artificial e os sistemas biológicos. Em (Hutchinson, 1957), o autor discute a respeito da tolerância e dos meios de interação entre os seres vivos e o ambiente para que estes realizem seu modo de vida. Deste modo, cada seqüência de teste representa um tipo de pressão do meio no sentido de selecionar melhores soluções, assim como os seres vivos são selecionados por condições como umidade relativa, pH, fluxo de água, velocidade do vento. Figura 2. Diagrama demonstrativo das seqüências de teste. O comportamento do sistema não pode ser descrito diretamente através de uma tabela verdade por possuir memória. Dessa forma, é necessária uma seqüência de tabelas verdade ao longo do tempo, formando assim o que chamamos de linha do tempo. Foi determinado então que um conjunto de linhas do tempo representa um cenário. Os cenários de teste são compostos por linhas do tempo que descrevem cada uma, parcialmente o comportamento do sistema (Manovit, et al, 1998), (Chongstitvatana, Aporntewan, 1999). Apenas a intersecção de todas as linhas do tempo pode representar o comportamento global desejado. A Fig.2 exemplifica que cada seqüência é capaz de selecionar um conjunto de programas (círculos brancos). Como cada seqüência seleciona diferentes características de cada conjunto, a intersecção se torna cada vez menor (área escura), reduzindo o grupo de programas que obedecem a todos os comportamentos ao mesmo tempo. A viabilidade física garante a existência de um programa que possa obedecer todos os comportamentos ao mesmo tempo. Esse projeto utiliza a programação genética pelo fato de ela essencialmente manipular códigos de linguagem de programação. Existem três estruturas de programas executáveis na programação genética: em árvore, linear e em gráfico (Banzhaf et al, 1998). A estrutura utilizada no código foi a linear, assim como a dos programas em assembly, e os programas possuem um limite máximo. Para simular o programa de automação são necessárias linhas do tempo para descrever a seqüência na qual o dispositivo é operado. À medida que a seqüência é percorrida, os resultados registrados formam a linha do tempo das saídas do CLP. Após a simulação do programa, o comportamento das saídas no tempo é comparado com outra linha do tempo de referência que representa o comportamento desejado. Cada linha do tempo criada por um indivíduo é comparada com essa linha do tempo padrão. Para cada igualdade, um ponto é acrescentado no nível de aptidão. Se ao final desse cálculo o nível de aptidão alcançar o valor máximo o indivíduo correspondente, então, atingiu o objetivo. A soma de todos os pontos ao longo da simulação de todos os cenários gera o nível de aptidão da Figura 3. Exemplo de linha do tempo descrevendo o comportamento de um sistema. solução. A Fig. 3 representa um conjunto de linhas do tempo com o comportamento das entradas (I's), suas respectivas saídas (Q's), contatos auxiliares (M's) e temporizadores (T1). Os momentos preenchidos na linha do tempo representam que aquele contato está ativo. Utilizando as linhas do tempo mostradas na Fig. 3 para exemplificar o sistema, cada população de programas receberá como informação de entrada as linhas do tempo I1, I2, I3 e I4. O simulador irá gerar Q1, Q2, M1, M2 e T1. As linhas do tempo M1, M2 e T1 são auxiliares. O nível de aptidão do indivíduo será calculado utilizando apenas Q1 e Q2, pois representam o comportamento das saídas do CLP que afetam o meio externo. 3 Estudos de Caso A técnica proposta foi aplicada em quatro estudos de caso diferentes: controle de iluminação para escadas (caso I), partida direta de motor (caso II), partida direta de motor com reversão (caso III) e partida estrela-triângulo (caso IV). O caso I consiste em uma escada com um interruptor em seu início e outro no final, um conjunto de lâmpadas e um sensor de presença. O objetivo é fazer com que o ambiente se comporte da seguinte forma: a) Quando alguém sobe ou desce a escada, as lâmpadas precisam ser energizadas para fornecer iluminação. b) Após a saída da pessoa, o sistema de iluminação precisa ser desligado manualmente ou em cinco minutos automaticamente. O caso II consiste na lógica de ligação de duas botoeiras em um motor com o seguinte funcionamento: a) Uma botoeira realiza a partida direta do motor através de um inter-travamento. b) Outra botoeira libera o inter-travamento e para o motor. O caso III consiste no sistema de ligação de três botoeiras em um motor para que ele possa partir em dois sentidos diferentes: a) A botoeira I2 parte o motor no sentido horário. b) A botoeira I3 parte o motor no sentido antihorário. c) A botoeira I1 pára o motor. d) Quando o motor está girando em um sentido a botoeira que executa a rotação no outro sentido deve ser impedida de executar sua função até que o motor tenha sido desligado da alimentação através da botoeira I1. O caso IV consiste em um sistema de partida de motor em estrela-triângulo com o seguinte funcionamento: a) A botoeira I2 habilita o funcionamento do motor e inicia sua partida com alimentação estrela. b) Após alguns segundos o sistema deve automaticamente trocar a topologia de alimentação do motor de estrela para triângulo. Durante essa etapa é preciso cautela para que o sistema não ative as duas formas de ligação ao mesmo tempo, o que poderia provocar um curto-circuito. O sistema deve garantir que quando a topologia estrela estiver ligada não seja possível conectar ao mesmo tempo a topologia triângulo, e vice-versa. A comutação das formas de ligação deve ser realizada através de um temporizador. c) A botoeira I1 desabilita a alimentação do motor. Para que a busca pelos programas seja realizada é preciso definir cenários que englobem cada situação de operação através de linhas do tempo. A tabela 1 descreve algumas características de cada estudo como: a necessidade de inter-travamentos, temporizadores e a quantidade de cenários que foram definidos para cada estudo. b) Cross-Over 45%, mutação 45% e reprodução 10%. c) Cross-Over 10%, mutação 80% e reprodução 10%. Os grupos de 500 execuções foram subdivididos em outros grupos, cada um com um limite de geração diferente, indicado nas colunas “Nº Sim” e “Gmax” nas tabelas 2, 3 e 4. Os dados coletados podem ser observados nas tabelas 2, 3 e 4. Em cada tabela podem ser vistos o número de simulações independentes (coluna “Nº Sim”) e a quantidade delas que obtiveram sucesso. Tabela 2. Sucessos para cross-over 80%, mutação 10%, reprodução 10%. Gmax 25 50 100 150 200 300 400 500 Total Nº Sim 150 100 80 50 30 30 30 30 500 Nº de sucessos em cada caso I II III IV 6 73 0 0 3 57 0 0 3 59 0 0 3 37 0 0 1 22 0 0 3 22 0 0 4 21 0 0 6 21 0 0 29 312 0 0 Tabela 3. Sucessos para cross-over 45%, mutação 45%, reprodução 10%. Gmax 25 50 100 150 200 300 400 500 Total Nº Sim 150 100 80 50 30 30 30 30 500 Nº de sucessos em cada caso I II III IV 2 91 0 0 4 70 0 0 7 61 0 0 7 41 0 0 4 29 0 0 3 30 2 0 6 29 2 4 9 30 9 3 42 381 13 7 Tabela 1. Características dos estudos de caso. Caso I II III IV Intertravamento Temporizador sim sim sim não sim não sim sim Nº cenários 4 6 8 4 Foram realizadas 1500 execuções do gerador de programas para cada estudo de caso, resultando em 6000 execuções ao todo. Foi feita uma seqüência de testes com a utilização de diferentes parâmetros iniciais como: número máximo de gerações, número de simulações independentes, taxa de cross-over e taxa de mutação. As 1500 execuções foram divididas em três grupos de 500, cada grupo com os seguintes parâmetros: a) Cross-Over 80%, mutação 10% e reprodução 10%. Tabela 4. Sucesso para cross-over 10%, mutação 80%, reprodução 10%. Gmax 25 50 100 150 200 300 400 500 Total Nº Sim 150 100 80 50 30 30 30 30 500 Nº de sucessos em cada caso I II III IV 1 99 0 0 2 83 0 0 4 79 2 1 7 50 4 0 8 30 2 2 8 30 11 2 8 30 11 6 12 30 14 5 50 431 44 16 Nas tabelas 5, 6 e 7, pela metodologia de (Koza, 2000) foram calculados as porcentagens acumuladas de sucesso e o número de simulações necessárias para se obter um sucesso, P(M,i) e R(z), respectivamente, para cada configuração de simulação. Tabela 5. P(M,I) e R(z) para cross-over 80%, mutação 10%, reprodução 10%. G max 25 50 100 150 200 300 400 500 Caso I 4% / 113 8% / 58 11% / 39 15% / 28 19% / 22 23% / 17 28% / 14 35% / 11 P(M,I) / R(z) Caso II Caso III 49% / 7 0% / 0 52% / 6 0% / 0 57% / 5 0% / 0 59% / 5 0% / 0 60% / 5 0% / 0 61% / 5 0% / 0 62% / 5 0% / 0 62% / 5 0% / 0 Caso IV 0% / 0 0% / 0 0% / 0 0% / 0 0% / 0 0% / 0 0% / 0 0% / 0 Tabela 6. P(M,I) e R(z) para cross-over 45%, mutação 45%, reprodução 10%. G max 25 50 100 150 200 300 400 500 Caso I 1% / 343 4% / 121 8% / 58 13% / 34 18% / 23 24% / 17 30% / 13 39% / 9 P(M,I) / R(z) Caso II Caso III 61% / 5 0%/0 64% / 5 0%/0 67% / 4 0%/0 69% / 4 0%/0 71% / 4 0%/0 73% / 3 0%/1010 75% / 3 1%/539 76% / 3 3%/174 Caso IV 0% / 0 0% / 0 0% / 0 0% / 0 0% / 0 0% / 0 1% / 539 1% / 326 Tabela 7. P(M,I) e R(z) para cross-over 10%, mutação 80%, reprodução 10%. G max 25 50 100 150 200 300 400 500 Caso I 1% / 688 2% / 244 4% / 113 8% / 58 13% / 33 20% / 21 28% / 14 38% / 10 P(M,I) / R(z) Caso II Caso III 66% / 4 0% / 0 73% / 4 0% / 0 79% / 3 1% / 757 82% / 3 2% / 289 83% / 3 2% / 234 84% / 2 4% / 104 85% / 2 6% / 70 86% / 2 9% / 50 Caso IV 0%/0 0%/0 0%/1517 0%/1747 1%/627 1%/402 2%/194 3%/141 A fig. 4 demonstra o formato das soluções obtidas: programa Instruction List e seu correspondente em Ladder. 4 Discussão dos Resultados A partir das 6000 simulações executadas e das tabelas apresentadas percebe-se que o conjunto de parâmetros da tabela 4 é o mais favorável para todos os estudos de caso pelo maior número de soluções. Percebe-se também que os parâmetros da Tabela 2 forneceram os resultados com menor eficiência, sendo completamente ineficientes para os estudos de caso III e IV. Porém, com os parâmetros tabela 3, com um número mais elevado de gerações passou-se a encontrar algumas soluções para os casos III e IV. Essa dificuldade é devida a maior complexidade e Figura 4. Exemplo de solução encontrada. tamanho dos programas da aplicação. Observa-se que quanto maior a quantidade de gerações disponíveis para a evolução do programa, maior é a chance de se encontrarem soluções. Portanto a complexidade do programa afeta o desempenho da técnica. O estudo de caso II, por se tratar de uma aplicação mais simples e de um programa menor, apresentou grande facilidade de produzir soluções. Observase também que houve uma mudança significativa em seu desempenho da tabela 2 para a tabela 4. Um fato a ser observado nos resultados do estudo de caso I é que simulações com maior taxa de cross-over foram mais favoráveis quando o número máximo de gerações é menor. Observa-se nas linhas com geração máxima de 25 que à medida que o cross-over foi sendo reduzido, a quantidade de soluções também foi reduzida. O índice P(M,I) indica a porcentagem de sucesso acumulado referente ao quadro geral de simulações feitas até aquela etapa. À medida que a quantidade de tentativas e o número de gerações aumenta (como as tabelas 5, 6 e 7 indicam), o índice de sucesso acumulado aumenta. Dessa forma tem-se uma visão geral da eficiência das execuções quando se utiliza um determinado limite máximo de gerações e quando se realiza uma determinada quantidade de tentativas, ou execuções. Observa-se pelas tabelas 5, 6 e 7 que o desempenho do estudo de caso I permaneceu praticamente constante para longas simulações, apresentando melhor desempenho para simulações curtas com maior taxa de cross-over. Através das tabelas 6 e 7 percebe-se que a técnica é capaz de encontrar soluções para os estudos de caso III e IV, porém em ambos os casos é preciso que vários processos de busca independentes sejam executados. Essa instabilidade quanto à solução do problema deve-se à necessidade de um processamento com mais gerações. Como (Koza, 2000) descreve, o potencial da programação genética é demonstrado empiricamente, não havendo uma prova matemática de que uma solução será encontrada com certeza. Apesar dos estudos de caso III e IV demonstrarem maior dificuldade para encontrar soluções, foram encontradas 44 e 16 soluções para eles, respectivamente, como pode ser visto na tabela 4. Os resultados obtidos demonstram que a técnica utiliza um número baixo de gerações para encontrar suas soluções. Para o cenário de coleta de dados mais longo foi definido uma quantidade máxima de 500 gerações. Para aplicações de programação genética esta quantidade é considerada baixa, pois é comum encontrar aplicações na área com limites de geração da ordem de 10.000. Portanto para simulações longas com milhares de gerações espera-se que um número ainda maior de soluções seja encontrado. 5 Conclusões Esse artigo propôs uma abordagem para a geração automática de programas de CLP para implementação de pequenos sistemas automáticos. A técnica de evolução de programas Instruction List demonstrou ser eficiente pela capacidade de encontrar programas com uma quantidade menor de gerações comparado com a evolução de programas em Ladder (Carneiro, 2008). Além dos resultados estatísticos obtidos, a análise de cada programa-solução em si demonstrou que a geração de programas com estrutura linear foi capaz de produzir programas com maior diversidade de estruturas. O fato de a estrutura linear ser capaz de gerar qualquer estrutura de um programa Ladder reduziu consideravelmente a quantidade de erros encontrados na estrutura matricial do trabalho anterior. Observou-se também que simulações com maiores taxas de mutação demonstraram ser melhores que simulações com mais cross-over. Isso ocorre, pois o cross-over é uma busca extensiva e a mutação uma busca intensiva. Em praticamente todas as execuções do algoritmo houve evolução da população, porém foram contados apenas os casos que atingiram o nível de aptidão máximo. Taxas altas de cross-over produzem uma evolução mais rápida mas o algorítmo atinge altos níveis de aptidão mas dificilmente convergem para 100%. Novas pesquisas tenderão a restringir o número máximo de linhas usadas pelo programa Instruction List objetivando reduzir o comprimento das respostas. Outro aspecto a ser analisado é a implementação de parâmetros de simulação que variem ao longo do tempo com o objetivo de evitar convergência prematura e a implementação de um filtro de introns a ser aplicado na resposta final fornecida pelo programa. Referências Banzhaf, W., Nordin, P., Keller R. E., Francone F. D. (1998). Genetic Programming, On the automatic Evolution of Computer programs and its applications. Morgan Kaufmann Publishers Inc., San Francisco, Califórnia. Boole, G. (1854). An Investigation of the Laws of Thought on Which are Founded the Mathematical Theories of Logic and Probabilities, Macmillan. Reprinted with corrections, Dover Publications, New York, NY. Carneiro, M. L. (2008). Programação Genética Aplicada à Linguagem Ladder. Induscon – VIII Conferência Internacional de Aplicações Industriais, Poços de Caldas, Minas Gerais, Brasil. Chongstitvatana, P., Aporntewan, C. (1999). Improving Correctness of Finite-State Machine Synthesis from Multiple Partial Input/Output Sequences. Department of Computer Engineering, Faculty of Engineering, Chulalongkorn University, Bangkok, Thailand. Darwin, C. (1859). On the Origin of Species by Means of Natural Selection, John Murray. Higuchi, T., Niwa, T., Tanaka, T., Iba, H., de Garis, H., Furuya, T. (1992). Evolving hardware with genetic learning: A first step towards building a Darwin machine. In Proc. of Int. Conf. on Simulation of Adaptive Behavior (SAB’92). Holland, J. H. (1975). Adaptation in Natural and Artificial Systems. University of Michigan Press. Hutchinson, G. E. (1957). Cold Spring Harbour Symposioum on Quantitative Biology, 22, pp. 415-427. Koza J. R. (2000). Genetic Programming, On the programming of computers by means of natural selection. The MIT Press, Cambridge, Massachussetts, London, England. Lewis, R. W. (1995). Programming Industrial Control System Using IEC 1131-3. IEEE Control. Mange, D., Tomassini, M. (1998). Bio-inspired Computing Machines, towards novel computational architectures. Presses Polytechniques et Universitaires Romandes. Manovit, C., Aporntewan, C., Chongstitvatana P. (1998). Synthesis of synchrounous sequential logic circuits from partial input/output sequence. In Proc. Of Int. Conf. On Evolvavle Systems (ICES’98), pages 98-105. Romero, R., Mantovani, J.R.S. (2004). Introdução a Metaheurísticas. Anais do 3º Congresso Temático de Dinâmica e Controle da SBMAC, UNESP, Campus de Ilha Solteira, Brasil. WEG Automação S.A. (2008). Manual de Instalação – TPW03 Controlador Programável. Av. Pref. Waldemar Grubba, 3000, Jaraguá do Sul, Santa Catarina (SC), Brasil.