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.
Download

evolução de programas instruction list para controladores lógico