Prévia do material em texto
PROJETO DE GRADUAÇÃO
MMÓÓDDUULLOO MMIICCRROOCCOONNTTRROOLLAADDOO PPAARRAA CCOONNFFIIGGUURRAAÇÇÃÃOO DDEE
PPLLAATTAAFFOORRMMAA DDEE EEVVOOLLUUÇÇÃÃOO DDEE CCIIRRCCUUIITTOOSS
Rafael Costa Pimentel
Raphael Soares Ribeiro
Orientador: Prof. José Franco Machado do Amaral
Coordenador da Disciplina: Prof. Paulo Sérgio Rodrigues Alonso
Abril 2010
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO
Faculdade de Engenharia
Departamento de Engenharia Eletrônica e de Telecomunicações
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO
FACULDADE DE ENGENHARIA
Departamento de Engenharia Eletrônica e de
Telecomunicações
Projeto de Graduação
MÓDULO MICROCONTROLADO PARA CONFIGURAÇÃO DE PLATAFORMA
DE EVOLUÇÃO DE CIRCUITOS
Rafael Costa Pimentel
Raphael Soares Ribeiro
Orientador: Prof. José Franco Machado do Amaral
Coordenador: Prof. Paulo Sergio Rodrigues Alonso
Abril 2010
ii
Abril 2010
Ficha Catalográfica
PIMENTEL, Rafael Costa
RIBEIRO, Raphael Soares
Módulo Microcontrolado para
configuração de plataforma de evolução
de circuitos.
x, 85 pp, 29,7 cm (UERJ, Engenharia
Eletrônica, 2010 )
Projeto de Graduação – Universidade do
Estado do Rio de Janeiro.
1. Eletrônica Evolucionária
2. Algoritmo Genético
3. MATLAB
4. Comunicação Paralela
5. Comunicação Serial
6. Microcontrolador
I. UERJ/FEN II. Título (série)
iii
Agradecimentos
A Deus, pela oportunidade, a orientação e a perseverança para chegar até aqui.
Aos meus pais pelo incentivo permanente aos estudos e por tornar possível a
realização deste sonho.
À minha irmã pela compreensão e pelo apoio.
Ao professor José Franco Machado do Amaral pela orientação deste trabalho.
Aos funcionários do Laboratório de Engenharia Elétrica pelo apoio.
A todos os professores que contribuíram para a minha formação.
Rafael Costa Pimentel
Agradeço a todos os familiares, professores e amigos que nos ajudaram e
incentivaram o desenvolvimento e a realização deste projeto.
Raphael Soares Ribeiro
iv
MÓDULO MICROCONTROLADO PARA CONFIGURAÇÃO DE
PLATAFORMA DE EVOLUÇÃO DE CIRCUITO
O estudo desenvolvido neste projeto é baseado na teoria da eletrônica
evolucionária. Um microcomputador, com o software MATLAB, executa o
Algoritmo Genético e determina valores adequados para os componentes
utilizados em um circuito analógico reconfigurável. Esses valores são
disponibilizados ao circuito via comunicação paralela. Dados do funcionamento
deste circuito são captados por uma plataforma microcontrolada e
disponibilizados para o PC via comunicação serial para que possam ser
utilizados novamente pelo programa no MATLAB. Os resultados obtidos são
satisfatórios e servirão de base para trabalhos futuros sobre Eletrônica
Evolucionária, tanto em cursos de graduação como de pós-graduação.
v
MICROCONTROLATED CIRCUIT USED TO CONTROL A EVOLVABLE
HARDWARE PLATFORM
The study developed in this Project is based on Evolvable Hardware
theory. A computer, using the MATLAB software, runs a Genetic Algorithm and
tries to find solutions for the components’ values applied into a
reprogrammable analogic circuit. These values are sent to the circuit by the
PC’s paralel port. Data of the operation of this circuit are catch by a
microcontroller and sent to the PC by serial port. So it can be used again to run
the MATLAB’s software. The results are satisfactory and will serve as basis for
future works about Evolvable Hardware, in both undergraduate and graduated
courses.
vi
ÍNDICE
1- Introdução 1
2- Eletrônica Evolucionária 5
2.1 Introdução 5
2.2 Classificação 6
2.3 Aplicações 13
2.3.1 Robótica 13
2.3.2 Medicina 15
2.3.3 Engenharia Civil 16
3- Algoritmos Genéticos 17
3.1 Histórico 17
3.2 Caracterização 18
3.2.1 Problema a ser otimizado 19
3.2.2 Representação das soluções do Problema 20
3.2.3 Decodificação do Cromossomo 21
3.2.4 Avaliação 21
3.2.5 Seleção 21
3.2.6 Operadores Genéticos 22
3.2.7 Inicialização da População 24
3.2.8 Parâmetros e Critérios de Parada 25
4 – Desenvolvimento do Projeto 26
4.1 Diagrama de Blocos 26
4.2 Descrição do Funcionamento Básico dos Componentes 27
4.2.1 E2POT – X9C103P 28
4.2.2 Módulo microcontrolado 31
4.2.3 Amplificador Operacional LM741 33
4.2.4 Comunicação Serial 34
4.2.5 Comunicação Paralela 36
vii
5 – Programação 40
5.1 Descrição do Software 40
5.2 Programa no PC 43
5.2.1 Método extrínseco 45
5.2.2 Método Intrínseco 45
6 – Estudo de Casos 47
6.1 Evolução extrínseca com AG 47
6.2 Evolução extrínseca sem AG 54
6.3 Evolução intrínseca sem AG 56
6.4 Evolução intrínseca com AG 58
7 – Conclusões 62
8 – Bibliografia 64
Apêndice A – Custos do Projeto 67
Apêndice B – Toolbox do GAOT 68
Apêndice C – Esquemático dos Circuitos 70
Apêndice D – Diagrama Funcional do E2POT 72
Apêndice E – Curvas Típicas de Operação do E2POT 73
Apêndice F – Programas no Matlab 74
viii
ÍNDICE DE TABELAS
Tabela 1 - Quadro comparativo das terminologias 19
Tabela 2 – Representação do cromossomo 20
Tabela 3 – Parâmetros porta serial 35
Tabela 4 – Funções de cada pino conector de 9 pinos 35
Tabela 5 - Configuração dos Endereços das Portas 37
Tabela 6 - Funções de cada pino conector da porta paralela 39
Tabela 7 - Parâmetros do AG 41
Tabela 8 - Valores de Ra e Rb encontrados para evolução extrínseca sem
AG
56
Tabela 9 - Valores de Ra e Rb encontrados para evolução intrínseca sem
AG
58
Tabela 10 - Custo dos componentes 67
Tabela 11 - Custo total do projeto 67
ix
ÍNDICE DE FIGURAS
Fig. 1 – Diagrama de Blocos que representa o projeto 02
Fig. 2 – Circuito amplificador analógico 03
Fig. 3 – Estrutura completa do circuito analisado no projeto 04
Fig. 4 – Evolução extrínseca 09
Fig. 5 – Evolução Intrínseca 09
Fig. 6 – FPTA 10
Fig. 7 – FPTA-2 11
Fig. 8 – Trecho de uma arquitetura FPGA típica (Thompson, 1995) 12
Fig. 9 – Diagrama de blocos simplificado de um FPAA 12
Fig. 10 – Robô Evolutivo 14
Fig. 11 – A mão robótica 15
Fig. 12 – Estrutura com os sensores de medição 16
Fig. 13 – Algoritmo Genético básico 18
Fig. 14 – Exemplo de uma roleta de seleção – Routlette Wheel 22
Fig. 15 – Recombinação entre os cromossomos “pai” e “mãe”,
um ponto de recombinação
23
Fig. 16 – Recombinação entre os cromossomos “pai” e “mãe”,
dois ponto de recombinação
23
Fig. 17 – Mutação simples 24
Fig. 18 – Estrutura básica do AlgoritmoGenético 25
Fig. 19 – Diagrama de Blocos que representa o projeto 27
Fig. 20 – Pinagem e Sinais do E2POT 29
Fig. 21 – Microcontrolador PIC18F4550 32
Fig. 22 – Max 232 32
Fig. 23 – Pinagem LM741 33
Fig. 24 – Conector serial RS232 36
Fig. 25 – DB25 que fica atrás do microcomputador 38
Fig. 26 – Conector Macho do Cabo Paralelo 38
Fig. 27 – Configuração da Porta Paralela 44
Fig. 28 – Gráfico da Aptidão para 5 gerações com 20 e 100 indivíduos em
cada geração.
48
x
Fig. 29 – Gráfico da Aptidão para 20 gerações com 20 e 100 indivíduos
em cada geração.
49
Fig. 30 – Gráfico da Aptidão para 50 gerações com 20 e 100 indivíduos
em cada geração.
50
Fig. 31 – Gráfico da Aptidão para 100 gerações com 20 e 100 indivíduos
em cada geração.
51
Fig. 32 – Gráfico da Aptidão para 150 gerações com 20 e 100 indivíduos
em cada geração.
52
Fig. 33 – Gráfico da Aptidão para 200 gerações com 20 e 100 indivíduos
em cada geração.
53
Fig. 34 – Gráfico da Aptidão para os valores de Ra e Rb para evolução
extrínseca sem AG
55
Fig. 35 – Gráfico da Aptidão para os valores de Ra e Rb para evolução
intrínseca sem AG
57
Fig. 36 – Gráfico da Aptidão para 5 gerações com 20 e 100 indivíduos em
cada geração.
60
Fig. 37 – Gráfico da Aptidão para 5 gerações com 20 indivíduos e para 20
gerações com 20 indivíduos.
61
Fig.38 - Esquemático do PIC18F4550 70
Fig. 39 - Esquemático do MAX 232 70
Fig. 40 - Esquemático Amplificador Somador 71
Fig. 41 - Diagrama Interno e ligações do E2POT 72
Fig. 42 - Reposta de Freqüência Típica do X9C103 73
Fig. 43 - Linearidade Típica do X9C103 73
1
1 – Introdução
O desenvolvimento tecnológico decorre do desejo humano de encontrar
novas e melhores maneiras de satisfazer as suas necessidades, usando para
isso conhecimentos, ferramentas, recursos naturais e energia.
Os avanços da ciência trazem descobertas tecnológicas que se revertem
em grandes benefícios à humanidade. Nos campos da física, química,
ecologia, engenharia genética, biotecnologia e informática, podem perceber
tamanhas inovações.
É através de descobertas científicas que o homem tem desenvolvido
fontes alternativas de energia, tais como a nuclear, eólica, solar, e
bicombustíveis, que reduzem a quantidade de detritos liberados na atmosfera,
e, consequentemente, a poluição do ar e o efeito estufa.
As vantagens do avanço do conhecimento humano são inegáveis:
inúmeras descobertas na área de saúde, melhorias nas questões ambientais,
agilidade em aspectos econômicos e maior eficiência na informática. Investir
em tecnologia é construir um futuro melhor e com maiores benefícios.
A necessidade de projetos de engenharia que tenham excelente
desempenho, além de possuírem custo que atenda à realidade do mercado e
sejam versáteis, é a demanda da indústria de hoje. Assim como o mercado
pressionou os profissionais para deixarem de ser apenas especialistas e
passarem a entender toda a realidade da empresa, nos seus mais diversos
setores, o mesmo ocorreu com os equipamentos. Hoje, a estrutura rígida e
imutável de um circuito eletrônico tem sido questionada por novas técnicas.
A atual necessidade de equipamentos mais resistentes às difíceis
condições do ambiente surge como barreira a ser vencida para que a pesquisa
espacial e industrial possa avançar. Questionamentos como estes levaram
pesquisadores a aprimorarem técnicas a serem aplicadas no projeto de
circuitos eletrônicos. É nesse contexto que surge o novo campo chamado
Eletrônica Evolucionária (Evolvable Hardware, EHW).
A Eletrônica Evolucionária é um novo campo de aplicação dos
algoritmos genéticos desenvolvida para manipular circuitos que impossibilitem
correções manuais. Ela pode ser definida como o ramo da engenharia
eletrônica e da ciência da computação baseado na aplicação de estratégias
2
evolucionárias no projeto de hardware que pode ser adaptado de acordo com a
necessidade do ambiente. A configuração do hardware pode ser realizada
através da utilização de algoritmos computacionais. Neste trabalho o algoritmo
utilizado será o Algoritmo Genético. A concepção fundamental deste campo de
pesquisa é que cada possibilidade de configuração de um circuito eletrônico
possa ser representada por um indivíduo, ou cromossomo, passando por um
processo evolucionário, que executa operações genéticas padrão aos circuitos.
Os conceitos biológicos estudados pelo naturalista britânico Charles
Darwin (1809-1882) como a seleção natural, onde o mais apto tem maior
probabilidade de sobreviver e gerar descendentes, são executados aqui de
forma artificial por um algoritmo computacional. Operadores comuns na
natureza como a recombinação sexual e a mutação são aplicadas a fileiras de
bits que representam possíveis configurações do circuito estudado. Neste
trabalho a Eletrônica Evolucionária utiliza-se dos conceitos do Algoritmo
Genético para a evolução de circuitos eletrônicos.
Como a implementação não será realizada apenas em software, mas
também em hardware, a interface escolhida para a comunicação entre o PC e
o circuito a ser configurado, será a interface paralela para dados de saída do
MATLAB, e interface serial para dados de entrada, como podemos observar na
figura 1. As interfaces, paralela e serial, encontram-se largamente difundidas e
tem funcionamento de fácil compreensão.
Figura 1 – Diagrama de Blocos que representa o projeto
3
Atualmente as empresas brasileiras ainda não investem recursos em
pesquisas voltadas para Eletrônica Evolucionária, embora o mercado
americano e europeu tenha voltado seus olhos para este novo nicho. Podemos
notar este aumento pela quantidade de pesquisas existentes sobre o tema de
ambos. A grande expectativa gerada pela Eletrônica Evolucionária vem da
perspectiva de que circuitos evoluídos podem ser extremamente complexos na
sua estrutura e dinâmica e assim podem alcançar desempenho melhor do que
seria possível com as técnicas tradicionais de projeto. A Eletrônica
Evolucionária pode trazer conseqüências práticas para o futuro. Por exemplo,
podemos citar o fato de que circuitos reconfiguráveis podem ser utilizados para
serem utilizados em um chip robusto concentrando diversas funções, operando
em seus limites. Se tal fato se tornar realidade, os limites, padrões e técnicas
utilizadas atualmente pela indústria fabricante de microchips seriam
revolucionados.
Neste trabalho as aplicações, em hardware e software, foram voltadas
para um circuito analógico amplificador somador. Este circuito deve ser
reconfigurado mediante a otimização de seus componentes Ra e Rb.
Figura 2 – Circuito amplificador analógico
A evolução dos componentes será realizada em 4 diferentes testes. O
primeiro e segundo de modo offline (extrínseca), ou seja, a evolução será
realizada no computador e apenas os valores finais dos componentes serão
enviados para o hardware, um utilizando o AG e outro não. No terceiro caso
analisaremos o circuito no modo online (intrínseca), porém o AG não será
utilizado, mas um programa que otimizará o valor dos componentes variando
os valores dos componentes dos limites mínimos ao máximo. A última etapa
4
consiste em utilizar o AG para realizar a evolução também no modo intrínseco
para que os resultados possam ser comparados.
Figura 3 – Estrutura completa do circuito analisado no projeto
Estrutura e organização do trabalho
O capítulo 2 apresenta uma breve introdução sobre Eletrônica
Evolucionária.
O capítulo 3 apresenta os Algoritmos Genéticos, que são uma família de
modelos computacionais inspirados na evolução.
O capítulo 4 apresenta a descrição do funcionamento dos principais
componentes utilizados neste projeto.
O capítulo 5 apresentaa descrição do software e o funcionamento do
programa no PC.
O capítulo 6 apresenta o estudo de casos sobre o divisor de tensão e o
filtro passa banda.
O capítulo 7 apresenta as conclusões sobre este projeto.
5
2 – Eletrônica Evolucionária
2.1- Introdução
Para a ciência, engenharia a eletrônica é o campo que estuda e trata
dos dispositivos eletrônicos e de suas aplicações. A origem dos equipamentos
eletrônicos dá-se às pesquisas de Thomas Alvas Edson, no ano de 1883,
quando este descobre a formação da corrente elétrica através de um filamento
aquecido e uma placa metálica num ambiente de vácuo parcial. Certamente,
quando Faraday, Coulomb, Ampère, Volta, Ohm, Edson e tantos outros
iniciaram suas primeiras experiências em eletricidade e construíram os
primeiros aparelhos elétricos, sequer imaginavam as proporções que eles
alcançariam e tampouco as mudanças que causariam na vida humana.
Alguns marcos foram fundamentais para a evolução da eletrônica. Em
1904 John Ambrose Fleming cria a primeira válvula, esta chamada de válvula
diodo, propiciou um rápido avanço na criação de outros dispositivos e circuitos
que permitiram a execução de muitas tarefas que estavam sendo descobertas
pelo homem naquela época. Com a Primeira Guerra Mundial (1914 – 1918)
surgiram os primeiros equipamentos eletrônicos na área da radiocomunicação.
Na década de 20, após algumas tentativas frustradas de utilização dos
materiais semicondutores, estes despontam como grande promessa
tecnológica. Porém somente na década de 40, já na Segunda Guerra Mundial
(1939 – 1944), com a teoria atômica e quântica em pleno vapor, desenvolve-se
também a física do estado sólido que investiga a estrutura, as propriedades e o
comportamento elétrico dos semicondutores, surge então, o diodo
semicondutor, que substituem as válvulas diodos.
Outros fatos também contribuíram decisivamente no progresso da
eletrônica, dentre eles podemos citar alguns como as atividades espaciais, a
automação industrial, a eletrônica médica entre outros. Estes devido à
dificuldade de manutenção, ou até mesmo a impossibilidade de realizá-la
manualmente, bem como o seu alto custo fez com que as pesquisas fossem
direcionadas para o desenvolvimento de novas técnicas de projeto.
Diante de todas as dificuldades inerentes às limitações existentes nas
técnicas de projeto, um dos limites seria o número de dispositivos aplicados no
6
hardware, isto é, a quantidade de transistores, circuitos integrados, resistores,
capacitores, etc. Os projetistas não estariam aptos a aplicar todos estes
dispositivos que tem se tornado disponíveis nos circuitos. Para superar este
problema foi necessário o aumento do número de projetistas, engenheiros,
desenvolvedores e programadores envolvidos no processo, o que encareceu a
produção. Com a finalidade de superar essas limitações, processos de
automatização dos projetos foram desenvolvidos.
Porém na década de 90, surge um novo campo na área da eletrônica,
denominada Eletrônica Evolucionária (Evolvable Hardware, EHW). A Eletrônica
Evolucionária tem como base um conjunto de informações adquiridas em
outros campos de conhecimentos.
Define-se a Eletrônica Evolucionária como um ramo da eletrônica
baseado na concepção de que uma string de bits, denominada de
cromossomo, é utilizada para configurara um circuito programável (DE GARIS,
1997). Aqui o espaço de busca de um projeto codificado em bits e testado. Os
desempenhos dos circuitos são medidas e analisadas. Aqueles cromossomos
ou indivíduos que representam o melhor desempenho do circuito, segundo
critérios estabelecidos por uma função de avaliação (fitness function), recebem
uma medida de aptidão. Os que forem mais aptos têm uma probabilidade maior
de sobreviver e serem aproveitados, permitindo que o desempenho do circuito
seja melhorado a cada geração. O processo é comandado por um algoritmo
evolucionário. Aquele que é mais comumente utilizado, e que será aplicado
neste trabalho é o Algoritmo Genético (Genetic Algorithm, GA). Este algoritmo
contém operadores importantes como crossover (recombinação) e mutação
das representações do circuito de modo a gerar novos circuitos. Estes
operadores foram idealizados e modelados para que fossem muito
semelhantes ao mecanismo de evolução natural encontrado na natureza.
2.2 – Classificação
A classificação aqui proposta sobre a Eletrônica Evolucionária (Zebulum
�et�al.,) nos dará um conhecimento melhor sobre este tema será dividida em
questões como o tipo do projeto, natureza do produto e plataformas. Existem
outras classificações, porém não serão utilizadas neste trabalho.
7
Tipo de Projeto
Quando pensamos em tipos de projeto na área de eletrônica
evolucionária, podemos facilmente identificar: projetos de otimização, síntese e
reparo de circuitos.
Na otimização, o objetivo é encontrar o melhor valor para os
componentes de modo a fazer com que o circuito alcance a saída desejada. A
topologia do circuito não é alterada, apenas o valor dos componentes. Por
exemplo, Higuchi �et�al. (Higuchi �et �al., 1999) apresentam uma aplicação
industrial relacionada com a produção de telefones celulares. Este é o tipo de
projeto abordado no presente trabalho.
A síntese é um projeto mais complexo que consiste na identificação da
topologia de um sistema, determinação dos tipos e valores dos componentes e
sua implementação (Zebulum �et al., 1998; Salazar & Mesquita, 2000). A
síntese altera a topologia do circuito permitindo que a disposição dos
componentes, isto é como eles estarão conectados, seja alterada.
O auto-reparo é fundamental para garantir o funcionamento linear e
confiável de um sistema de circuito complexo. Abrange os circuitos tolerantes à
falhas e aqueles auto-regeneráveis. Dois princípios são aplicados no projeto
destes sistemas: redundância e reparo on-line. A redundância consiste na
presença de dispositivos extra para o caso de falha dos dispositivos principais
e esta associada ao fator de tolerância à falha que tem por definição mostrar
como a falta de um componente não afeta o funcionamento geral do hardware.
O reparo on-line tem como finalidade deixar o sistema o menor tempo possível
indisponível, para isso este realiza busca na população de circuitos correto ou
rodando o Algoritmo Genético um número limitado de gerações.
Natureza do Projeto
A natureza do projeto pode-se dividir em dois tipos: Analógica e Digital.
A eletrônica digital encontra-se amplamente difundida no mundo atualmente e
a quantidade de projetos utilizando a tecnologia digital só tende a aumantar.
Entretanto o mundo ainda continua sendo analógico, ou seja, grande parte dos
8
circuitos ainda são analógicos, mesmo que seja utilizado tecnologia digital nos
projetos, estes vão necessitar de módulos analógicos para interface com
mundo externo. Tendo em vista, a escolha deste trabalho será por um circuito
analógico: um amplificador somador.
Muitos projetos na área da Eletrônica Evolucionária já foram realizados.
Podemos citar como exeplo de projeto de natureza digital filtros digitais de
resposta finita ao impulso (DEMPSTER, 1995) e o equalizador adaptativo
(MURAKAWA, 1999). Como exemplo de projetos de natureza analógica, tem-
se a evolução de circuitos analógicos que desempenham funções digitais
(BENNETT III, 1999) e síntese de circuitos elétricos analógicos (KOZA, 1997).
Plataformas
Outro critério para classificarmos os projetos em Eletrônica Evolucionária
são suas respectivas plataformas. Nos primeiros testes realizados não era
adequado implementar aplicações de hardware evolutivo, pois muitos não
aceitavam instruções de configuração aleatórias e o tempo para reconfigurar
um circuito era muito alto. Devido e esse fatores tudo era simulado, evolução
extrínseca (DeGaris, 1999).
Na evolução extrínseca, cada etapa do protejo, evolução do circuito,
será testado e analisado através de uma simulação em um software. Todo o
processo é realizado pelo algoritmo e o resultado final, ou seja, a melhor
escolha implantada ao circuito. Este por sua vez não retorna nenhuma
informação a ser utilizada durante o processo evolutivo, ou seja, a maior parte
da evolução é externa ao circuito.
Somente algum tempo depois, com o surgimento dos hardwares que
supriram as carências passadas, foi possível permitir que cada novo conjunto
de instruções, obtidas pelo algoritmo genético, fosse testado diretamente no
hardware, evolução intrínseca (De Garis, 1999).
9
Figura 4 – Evolução extrínseca
Na evolução intrínseca, cada etapa do processo evolutivo gerado pelo
algoritmo é implementado no circuito eletrônico. Este circuito então retorna ao
algoritmo a variável a ser analisada (corrente de saída, tensão de saída, por
exemplo), para que então seja verificada a variação entre o valor real e o
esperado. Este processo se repete até que todas as possíveis soluções sejam
testadas e que a melhor delas seja implementada no circuito.
Figura 5 – Evolução Intrínseca
Módulo
Microcontrolado
Somador
Resultado do
teste é coletado
Melhor indivíduo é
aplicado ao circuito Sim
Critério de
parada foi
alcançado? Avaliação do Indivíduo
Algoritmo
Genético
Não
Novo indivíduo é
testado
Somador
Não
Sim
Melhor indivíduo é
aplicado ao circuito
10
Para teste trabalho utilizamos tanto o processo de evolução intrínseca
quanto extrínseca para compararmos seus resultados.
Uma outra forma de se caracterizar uma plataforma é quanto a sua
granulosidade podendo ser ela fina, grossa ou flexível. Plataformas de
granulosidade fina são formadas por elementos de baixo nível como
transistores, plataformas de granulosidade grossa são formadas por elementos
do tipo portas lógicas, blocos lógicos e componentes analógicos enquanto
plataformas de granulosidade flexível permitem que os elementos construtores
sejam configurados.
A diversidade de plataformas para Eletrônica Evolucionária tem se
elevado desde que o primeiro chip utilizado para experimentos intrínsecos, o
Xilinx 6216, deixou de ser fabricado (STOICA, 2001). Devido há necessidade
no avanço das pesquisas alguns laboratórios passaram a construir suas
próprias plataformas.
O Field Programmable Transistor Array (FPTA) é uma plataforma
reconfigurável de arquitetura versátil e granulosidade fina formada basicamente
de array, matrizes, de blocos compostos por transistores programáveis ou não
que se interligam através de chaves analógicas.
Figura 6 – FPTA
O FPTA pode ser utilizado tanto para a síntese de circuitos analógicos,
digitais e mistos. Sua estrutura deriva da variedade de projetos analógicos,
nos quais normalmente existem fileiras de pares de transistores e possuem
uma média de 4 fileiras entre a alimentação e o terra.
11
Durante o desenvolvimento dos primeiros chips, Stoica(1999) descreve o
programmable tranistor array (PTA), que eram formados por 3 células com 8
transistores interconectados por 24 chaves, porém com conectores externos. O
próximo chip foi o FPTA-1, exatamente um FPTA com 12 células. Sua
vantagem para com o PTA era o fato de que capacitores foram no chip com a
função filtros para cancelar os possíveis ruído, além de ter um maior número de
células.
Continuando na árvore genealógica, temos a terceira geração de
dispositivos voltados para evolução, o FPTA-2. Este tem como diferenciais
resistores e capacitores programáveis. A figura a seguir, mostra a estrutura do
FPTA-2:
Figura 7 – FPTA-2
Os dispositivos comerciais mais comumente encontrados são os Field
Programmable Gate Arrays (FPGA’s) e os Field Programmable Analog Arrays
(FPAAs). Estas plataformas têm flexibilidade para implementar um vasto
número de circuitos eletrônicos. Atualmente os FPGA’s são os dispositivos
lógicos programáveis mais utilizados para síntese de circuitos digitais. Estes
são circuitos integrados da classe VLSI (Very Large Scale Integration) sem
função pré-determinada e granulosidade grossa, que apresentam recursos
eletrônicos independentes que podem ser configurados via software (Xilinx,
1991).
12
Figura 8 – Trecho de uma arquitetura FPGA típica (Thompson, 1995)
Cada célula contém uma unidade que pode desempenhar alguma
função booleana. A saída de cada célula pode ser configurada para ser
conectada a uma saída do circuito ou a outra célula vizinha de acordo os bits
fornecidos. Neste caso, nenhuma configuração de célula pode desarranjar o
restante do circuito.
Atualmente os FPGA´s tem aplicação na indústria de fabricação de
display de cristal líquido (LCD) e as imagens de alta definição, conhecida como
HDTV, isso devido a necessidade de resolução cada vez maiores em relação
aos displays tradicionais.
Os FPAA´s são circuitos integrados (similares ao FPGA’s), que podem
ser configurados para implementarem várias funções analógicas, usando um
conjunto de blocos analógicos configuráveis (BAC) e uma rede programável de
interconexão desses blocos.
Figura 9 – Diagrama de blocos simplificado de um FPAA
13
Cada bloco BAC pode implementar algumas funções analógicas tais
como: adição, subtração, multiplicação, amplificação, integração, diferenciação,
comparação, logaritmo e exponencial. O que o torna atrativo para a evolução
intrínseca é que o circuito pode ser programado através de bits.
Também podemos destacar outras plataformas configuráveis para
síntese evolucionária como a Field Programmable Mixed-Analog-Digital Array
(FPMAs), que deriva de uma FPAA e uma FPGA, e ainda a Programmable
Analog Multiplixer Array (PAMA), desenvolvida pela Pontifícia Universidade
Católica (PUC-RJ), que introduz o conceito de barramento analógico para
interligar componentes discretos através de multiplexadores e
demultiplexadores (SANTINI, 2001)
2.3 – Aplicações
Devido às grandes vantagens e possibilidades que a Eletrônica
Evolucionária disponibilizou, hoje os projetos já superam os simples projeto de
circuito, podendo ser encontrados em varias áreas de aplicações. Dentre estas
áreas se destacam robótica, medicina, engenharia civil, entre outras que
utilizam as técnicas desenvolvidas para a otimização de processos.
2.3.1 – Robótica
Por muito tempo os robôs foram construídos para aplicação muito
simples, que não exigiam nenhuma decisão, normalmente tarefas repetidas em
alta escala. Em outros casos, robôs autônomos deviam ser guarnecidos de
sensores para identificação do ambiente, o que não era difundido na época.
Os princípios da evolução estão começando a ser aplicada ao setor de
robótica. Um exemplo disso é o robô evolutivo, ou “Evobot,” um robô com a
capacidade de aprender na escala discreta, se adaptar à evolução das
imediações, e seletivamente reproduzir (em software e / ou hardware) de uma
forma que melhore as suas chances de sobrevivência ao seu meio.
Os seres humanos aprendem relacionando a sua ecologia através de
seus sentidos visão, audição, tato, paladar e odor. Um robô precisa saber os
formatos dos objetos para sua navegação, devido a isso, os robôs podem ser
14
equipados com entradas sensoriais para aprender sobre sua ecologia. Estes
meios de entrada podem incluir: configuração da visão (reconhecimento de
gestos, a percepção dos movimentos, o magnetismo baseado em sinais acima
e abaixo do espectro visível); configuração dos sons (reconhecimento da fala);
configuração do tato (sensores táteis, de pressãoe monitores de temperatura);
configuração do paladar (sensores químicos) e configuração do odor (sensores
do cheiro).
No campo da robótica evolutiva, esses conceitos são aplicados para a
inovação do robô. Ao invés de robôs, cuja criação e componentes de software
são totalmente especificado, evobots são produzidos com simples mecanismos
de adaptação e capacidade de reprodução seletiva. Com o tempo, sua
programação se adapta às sua biosfera.
Figura 10 – Robô Evolutivo
Um exemplo de robô evolutivo foi elaborado na Gordon University de
Aberdeen, Escócia, pela equipe de inteligência artificial do professor
Christopher MacLeod. Esse aumenta automaticamente sua “inteligência” e
complexidade à medida que o mesmo acontece com sua estrutura física.
Em uma entrevista a revista New Scientist (Janeiro 2009), MacLeod
afirma que, “Se realmente queremos construir robôs humanóides complexos
com ainda mais sensores e comportamentos mais complexos, é fundamental
que possam crescer em complexidade à medida que o tempo passa, como
fizeram as criaturas biológicas”.
15
2.3.2 – Medicina
Na área da medicina um exemplo interessante é o Myoeletric Prosthetic
Hand (Prótese de Mão Myoeletrica). Esta é uma opção de prótese mecânica
controlada eletricamente de acordo com a myoeletrica (impulsos elétricos dos
múscolos), ou seja, quando qualquer movimento muscular é feito, seja ele
contração ou flexão, um pequeno sinal elétrico é gerado, este é analisado e
repassado a prótese. Porém, o tempo de adaptação para utilização e a rejeição
são alguns fatores que restringe esse método.
Desde a década de 60, pesquisas estão sendo feitas para tentar
viabilizar comercialmente as próteses myoeletricas. Contudo muitas delas
apenas desempenham funções simples, como abrir e fechar a mão, e tem seu
uso limitado a atividades diárias.
Para tentar resolver essas as adversidades, pesquisas foram feitas nos
chips de controle das próteses com o intuito de se adaptarem as características
dos indivíduos. Nestes chips foram desenvolvidas técnicas de Eletrônica
Evolucionária, onde em vez do indivíduo se adaptar a mão, o que seria natural,
foi possível fazer com que a mão acostumasse ao indivíduo.
Figura 11 – A mão robótica
A mão robótica i-LIMB ganhou recentemente o prémio para o produto de
engenharia do ano no Reino Unido.
16
2.3.3 – Engenharia Civil
Na engenharia civil o objetivo é utilizar a computação evolucionária na
determinação dos diversos parâmetros de uma ligação, entre estruturas
metálicas, através do método das componentes.
Os sensores são instalados nas extremidades das estruturas para que
esses possam registrar qualquer variação. Como exemplos de parâmetros a
serem verificados, podemos citar desde o diâmetro dos parafusos aos
espaçamentos verticais e horizontais.
Na figura abaixo temos um exemplo da instalação dos sensores nas
extremidades que interligam uma estrutura na outra.
Figura 12 – Estrutura com os sensores de medição
17
3 – Algoritmos Genéticos
3.1 – Histórico
Os primeiros estudos sobre os Algoritmos Genéticos (AG’s) datam do
ano de 1962, propostos por John H. Holland, porém somente em 1975 em seu
trabalho “Adaptation in Natural ans Artificial Systems”, onde Holland divulgou
os seus primeiros resultados.
Seus estudos foram inspirados na teoria da evolução das espécies de
Darwin (1859), onde os indivíduos melhor dotados têm maiores chances de
sobreviver a um ambiente competitivo e somente estes repassam suas
características aos seus descendentes. Holland estudou formalmente a
evolução das espécies e propôs um modelo computacional que, quando
implementado, poderia oferecer boas soluções para problemas extremamente
difíceis que eram insolúveis computacionalmente, até aquela época.
Os AG’s, assim como na evolução biológica, onde a combinação entre
os genes dos indivíduos melhores dotados na espécie podem produzir um novo
indivíduo melhor adaptado às características de seu ambiente, se utilizam de
alguns operadores como seleção, crossover (cruzamento) e mutação e da
aplicação de uma função de avaliação de aptidão. Em cada geração, o
algoritmo busca sua evolução visando uma solução ótima ao problema
proposto.
Os AG’s diferem dos métodos tradicionais de busca e otimização em
quatro fatores:
• Trabalham com uma condição do conjunto de parâmetros e não com os
próprios parâmetros;
• Trabalham com uma população e não com um único ponto;
• Utilizam informações de funções objetivas e não derivadas ou outro
conhecimento auxiliar;
• Utilizam regras de transição probabilísticas e não determinísticas.
Na figura abaixo segue um esquema do algoritmo genético básico
18
Figura 13 – Algoritmo Genético básico
3.2 – Caracterização
Nos experimentos feitos por Darwin, ele pode verificar que a seleção
evolucionária nas espécies ocorre randomicamente e que a sobrevivência ou a
extinção de cada organismo é determinada pela sua habilidade de se adaptar
ao meio ambiente. Cada vida existente tem uma manifestação física ou uma
aparência que se deve ao seu fenótipo, o qual é determinado pelo genótipo,
codificado em forma de DNA. A adaptação ao meio é também chamada de
aptidão. A aptidão é então utilizada para pressionar a população para a
sobrevivência do mais apto.
Para os AG´s, aptidão é o resultado do processo evolucionário aplicado
em uma função, enquanto na natureza a aptidão é a sobrevivência de um
indivíduo em seu meio. Devido a este fator, os indivíduos mais adaptados têm
maiores chances de participarem dos processos de reprodução. Desta
maneira, os genes com características mais benéficas são propagados para as
gerações subseqüentes. Aqueles indivíduos menos adaptados tendem a
morrer.
A analogia entre Algoritmos Genéticos e o sistema natural é
representada através da tabela abaixo:
19
Natural Algoritmos Genéticos
Indivíduo Um ou mais cromossomos com uma aptidão associada
Cromossomo Uma string codificada de parâmetros (binário, ponto flutuantes, etc)
Genótipo Código representando os parâmetros do problema
Fenótipo Versão do problema preparada para ser evoluída
Gene Versão codificada de um parâmetro do problema a ser resolvido
Alelo Valor que o gene pode assumir
Locus Posição ocupada pelo gene no cromossomo
Crossover
Operação que mescla os genétipos de dois ascendentes
selecionados de modo a gerar novos descendentes
Mutação
Operação que espontaneamente altera um ou mais alelos do
genótipo.
Aptidão resultado do processo evolucionário aplicado em uma função
Tabela 1 – Quadro comparativo das terminologias
De maneira a facilitar, podemos caracterizar os AG’s através dos
seguintes componentes (PACHECO, 2005):
1. Problema a ser otimizado
2. Representação das soluções de Problema
3. Decodificação do Cromossomo
4. Avaliação
5. Seleção
6. Operadores Genéticos
7. Inicialização da População
8. Parâmetros e Critérios de Parada
3.2.1 – Problema a ser otimizado
Por sua característica robusta, os AG’s vêm sendo empregados em
diversas áreas de conhecimento como otimização de problemas numéricos e
combinatórias, escalonamento de tarefas, desenvolvimento de layouts
(modelos) para circuitos, aprendizagem de máquinas, etc. (ZEBULUM, 1999).
20
3.2.2 – Representação das soluções de Problema
A representação das possíveis soluções do espaço de busca do
problema define a estrutura do cromossomo a ser manipulado pelo algoritmo.
A representação do cromossomo depende da funcionalidade e do objetivo a
ser alcançado. Abaixo temos os principais tipos de representação.
Tabela 2 – Representação do cromossomoAs representações mais comumente utilizadas são as binárias e a real.
A representação binária é de simples compreensão, fácil manipulação de
cromossomos utilizando os operadores genéticos, além de ser facilmente
transformada em inteiro ou real e, ainda, torna mais fácil a justificativa de
alguns teoremas. Apesar disso, a representação que oferece um melhor
desempenho é a representação por números reais (ponto flutuante).
Neste trabalho a representação escolhida foi à binária. Com esta
representação são necessários um cromossomo de 6 bits para representar as
soluções de um problema em que o intervalo esta entre [0,63] com os quais
podemos representar até 64 possibilidades
Um binário pode ser usado para representar um número real onde
tenhamos p casas decimais de precisão. Para tanto deve-se utilizar K bits de
seguinte forma:
Número real: [ ]máxmínR X,XX ∈
K2 ≥ ( )mínmáx XX − x P10
Exemplo:
0,10X máx =
1,0Xmín =
Representação Problema
Binária Numéricos, Inteiros
Números reais Numéricos
Permutação de símbolos Baseados em ordem
Símbolos repetidos Grupamento
21
Precisão decimal = 1 casa
9 X- X mínmáx =
P10 = 10
K2 ≥ 90 ⇒ k = 7 bits
3.2.3 – Decodificação do Cromossomo
A decodificação do cromossomo representa uma potencial solução para
o problema em questão. Considerando os conceitos até agora propostos por
Holland, os AG’s são capazes de resolver problemas complexos reproduzindo
o processo natural de evolução, através da manipulação das cadeias de dígitos
binários (cromossomos).
3.2.4 – Avaliação
O processo de evolução é direcionado por uma função de avaliação que
determina, através de um índice de aptidão estabelecido, quanto um indivíduo
é ou não uma boa solução para o problema proposto. Os indivíduos mais
aptos, com as melhores avaliações, têm maior chance de sobrevivência ao
longo deste processo evolutivo.
3.2.5 – Seleção
A seleção em AG’s executa o papel equivalente ao da Seleção Natural
na natureza. Na seleção, os indivíduos mais adaptados têm maior possibilidade
para reprodução.
No AG clássico os indivíduos são selecionados aleatoriamente. Para
este método todos dos indivíduos possuem a mesma probabilidade de serem
selecionados.
Outro tipo de seleção em AG’s é a Roulette Wheel (Roleta), nesta cada
indivíduo é representado por uma fatia proporcional a sua aptidão relativa.
Assim, aos indivíduos com maior aptidão é selecionada uma porção maior da
22
roleta, enquanto que aos de menor aptidão é selecionada uma porção menor
da roleta.
Figura 14 – Exemplo de uma roleta de seleção – Routlette Wheel
Além deste método, podemos especificar também outros mecanismos
de seleção: por torneios, proporcional, por normalização linear, por
normalização exponencial e por truncamento (BLICKLE, 1996).
3.2.6 – Operadores Genéticos
Os algoritmos evolucionários funcionam mantendo uma população de
estruturas que evoluem de forma semelhante à evolução das espécies. A estas
estruturas são aplicados os chamados operadores genéticos, tais como,
crossover (cruzamento) e mutação. A seguir tem-se a apresentação dos fatores
principais relacionados a estes operadores.
• Crossover
Crossover é o processo através do qual novos indivíduos são gerados
pela combinação de gene de dois indivíduos no universo da população.
A intenção deste operador é a troca de material entre diferentes
indivíduos.
Para este operador, três tipos de crossover são usualmente utilizados
em AG’s, o crossover de um ponto, de 2 pontos e o crossover uniforme.
Normalmente o mais utilizado é o crossover de um ponto. Neste, dois
indivíduos são selecionados e seus cromossomos são cortados em um
determinado ponto escolhido de forma aleatória, e os segmentos são trocados,
23
formandos dois novos indivíduos. Temos a seguir um exemplo do crossover de
um ponto
Ponto de recombinação
Antes da recombinação Cromossomo A 1 0 0 1 1 1 1 0
Cromossomo B 0 1 0 1 0 0 1 0
Ponto de recombinação
Após a recombinação Cromossomo A’ 0 1 0 1 1 1 1 0
Cromossomo B’ 1 0 0 1 0 0 1 0
Figura 15 – Recombinação entre os cromossomos “pai” e “mãe”,
um ponto de recombinação
Para o crossover de dois pontos, dois pontos são aleatoriamente
escolhidos. No caso de crossover uniforme, a contribuição de cada genitor na
formação dos descendentes é determinada por um padrão aleatório, o que
equivale à criação de diversos pontos de corte.
Pontos de recombinação
Antes da recombinação Cromossomo A 1 0 0 1 1 1 1 0
Cromossomo B 0 1 0 1 0 0 1 0
Pontos de recombinação
Após a recombinação Cromossomo A’ 0 1 0 1 1 1 1 0
Cromossomo B’ 1 0 0 1 0 0 1 0
Figura 16 – Recombinação entre os cromossomos “pai” e “mãe”,
dois ponto de recombinação
24
É importante salientar que os dois primeiros tipos de crossover
preservam características codificadas nos cromossomos. O crossover uniforme
possui a capacidade de combinar quaisquer padrões de bits, mas apresenta
mais chances de destruir boas características dos cromossomos (ZEBULUM,
1999).
• Mutação
Mutação é o processo de modificação aleatoriamente de um ou mais
genes de um cromossomo. A probabilidade de ocorrência de mutação é
denominada taxa de mutação. Essas taxas geralmente são aplicadas a
valores muitos baixos, em torno de 0,1% por posição do cromossomo.
Em outros trabalhos vem demonstrando que em determinadas
aplicações, o aumento desta taxa para valores entre 1 e 5%, melhora o
desempenho dos AG’s.
O operador de mutação é importante porque mantém a diversidade da
população e a variabilidade dinâmica dos programas em evolução. À título de
exemplo, podemos citar a mutação simples.
Antes da recombinação Cromossomo A 1 1 0 0 1 0 1
Ponto de mutação
Após da recombinação Cromossomo A’ 1 0 0 0 1 0 1
Figura 17 – Mutação simples
3.2.7 – Inicialização da População
O processo mais comum para a inicialização da população deve-se
através da escolha aleatória dos indivíduos. Populações iniciais aleatórias
podem ser semeadas com bons cromossomos para uma evolução mais rápida,
quando se conhece o valor de boas “sementes”.
25
3.2.8 – Parâmetros e Critérios de Parada
Em um AG vários parâmetros controlam o processo de evolução
(PACHECO, 2005):
• Tamanho da População: número de indivíduos que irão participar da
simulação.
• Taxa de Crossover: probabilidade de um indivíduo ser recombinado com
outro.
• Taxa de Mutação: probabilidade do conteúdo de uma posição/gene do
cromossomo ser alterado.
• Número de Gerações: total de ciclos de evolução de um AG.
• Total de Indivíduos: total de tentativas em um experimento (tamanho da
população x número de gerações).
Geralmente o número de gerações e o total de indivíduos são empregados
como critérios de parada de um AG. A configuração básica de um AG está
ilustrada na figura abaixo.
Figura 18 – Estrutura básica do Algoritmo Genético
Não
Sim
População
Inicial/Atual Problema
Representação
Avaliação da
População
Operadores
Genéticos
Seleção Critério de
Parada
Resultado
Descendentes Genitores
26
4 – Desenvolvimento do Projeto
O projeto se desenvolveu através de dois pilares básicos: software e
hardware. O hardware do projeto é composto pelo circuito amplificador e por
um módulo microcontrolado. Este módulo é o responsável pela conversão A/D
da tensão de saída do circuito amplificador e envio de dados para o
microcomputador, via comunicação serial.
Com relação à programação utilizou-se o Matlab na partereferente ao
AG, e com a programação do microcontrolador PIC18F4550 presente no
módulo. Na programação do microcontrolador foi utilizada a linguagem
QBASIC. Para o desenvolvimento dos circuitos, conhecimentos teóricos e
tradicionais foram aplicados. Com relação ao Matlab, um pacote específico
para aplicações de AG’s foi utilizado, o pacote GAOTv5 (HOUCK, 1995),
desenvolvido na Universidade da Carolina do Norte. Mais detalhes sobre este
pacote podem ser encontrados no capítulo 5.
4.1 – Diagrama de Blocos
Estabelecida uma população inicial e o número de gerações envolvidas
no processo, o GAOT passa a avaliar cada indivíduo de cada uma das
gerações. O melhor indivíduo de uma geração é sempre passado para a
geração seguinte. Deste modo, a aptidão do melhor indivíduo da geração atual
é sempre igual ou superior ao da geração passada. Ao chegamos à última
geração, critério de parada definido pelo número de gerações, temos a melhor
solução encontrada pelo AG para alcançarmos os critérios estabelecidos no
problema. A solução final obtida através do software é a otimização dos
componentes analógicos do circuito.
Para o circuito do somador, a evolução será realizada tanto na forma
extrínseca quanto intrínseca, ainda para esta, serão utilizados dois métodos
para a evolução, uma utilizando o AG e outra sem a utilização do AG, testando
todas as combinações possíveis de resultados (valores para os
potenciômetros) para obter a melhor resposta. Vale ressaltar que na evolução
intrínseca, cada indivíduo é passado para o hardware e, através de um
conversor A/D, a saída obtida é reutilizada na função de avaliação.
A figura 19 apresenta o diagrama de blocos que representa o projeto.
27
Figura 19 – Diagrama de Blocos que representa o projeto
A transferência de dados de configuração dos componentes dos
circuitos analógicos (E2POTS) será realizada diretamente através da
comunicação paralela. Dado o funcionamento do circuito amplificador somador
analógico, uma saída de tensão será obtida e deve ser enviada para o AG para
que a evolução intrínseca seja realizada. O módulo microcontrolado será o
responsável por converter o sinal analógico para digital e enviar este dado ao
microcomputador via comunicação serial. Para a evolução extrínseca o módulo
não precisa ser utilizado pois toda a evolução é feita diretamente no software
do MATLAB com a modelagem matemática do circuito.
4.2 – Descrição do Funcionamento Básico dos componentes
Em linhas gerais, os principais componentes do trabalho são:
• Microcomputador – Função de executar algoritmo genético através do
Matlab e executar a programação do microcontrolador;
• Módulo Microcontrolado – Responsável pela transferência de dados
entre o microcomputador e o hardware. A comunicação entre o módulo e
o microcomputador é através da porta serial;
28
• Circuito Reconfigurável (Amplificador Somador) – Hardware a ser
configurado.
Desta forma, agora vamos descrever o funcionamento dos principais
componentes utilizados neste projeto: o potenciômetro digital E2POT –
X9C103P, a módulo microcontrolado e o amplificador operacional LM741.
4.2.1 – E2POT – X9C103P
Para o nosso projeto, foi necessário escolher um dispositivo capaz de
ser controlado digitalmente, ou seja, via computador, para a modelagem de um
circuito de teste. O chip X9C103P que utilizamos em nosso projeto foi projetado
pela empresa Xicor (XICOR, 2005). Este dispositivo é um potenciômetro digital
composto por uma matriz de 99 elementos resistivos.
Entre cada um dos resistores existe uma posição de parada para um
cursor, assim como em um potenciômetro mecânico. A posição do cursor é
controlada pelos seguintes sinais de controle: INC , DU/ e CS . A posição do
cursor pode ser armazenada na memória interna do chip, e esta informação
pode ser restaurada ao religarmos o circuito.
A resolução deste dispositivo é igual ao maior valor resistivo da matriz
dividido pelo número de elementos da mesma. No nosso caso, o valor máximo
é de 10KΩ, que dividido por 99 é igual a aproximadamente 100Ω por posição
do cursor.
Especificações Técnicas
• Compatível com X9C102/103/104/503
• CMOS de baixa tensão
o VCC = 3V à 5.5V
o Corrente máxima de trabalho = 3mA
o Corrente de Standby máxima = 500µA
• 99 elementos resistivos
o Compensação de temperatura
• 100 Posições de resistência para o cursor
29
o O cursor é posicionado via interface de 3 pólos
o Similar ao um contador crescente/decrescente TTL
o Posição do contato é guardada numa memória não volátil e é
recuperada ao realimentar o chip
• Informação da posição do contato resistivo permanece guardada por até
100 anos
• Resistência Máxima = 10KΩ.
Temos agora que verificar como realizar o controle do potenciômetro.
Abaixo temos a pinagem e a descrição dos sinais de controle do dispositivo.
Figura 20 – Pinagem e Sinais do E2POT
• VH e VL
Os terminais de tensão alta (VH) e tensão baixa (VL) do chip X9C103P
são equivalentes aos terminais fixos de um potenciômetro mecânico. A tensão
mínima é -5V e a máxima é de +5V. Deve se notar que a terminologia VH e VL
faz referência a posição relativa do terminal em relação à direção de
movimento do cursor selecionada pelo sinal DU/ e não ao potencial de tensão
do terminal.
Símbolo Descrição
VH Terminal Positivo da Matriz
VW Terminal do Cursor
VL Terminal Negativo da Matriz
VSS Terra
VCC Alimentação do chip
DU/ Sinal de Subida/Descida
INC Sinal de incremento
CS Sinal de Seleção do chip
NC Não conectado.
30
• VW
VW é o terminal do cursor, equivalente ao terminal móvel de um
potenciômetro mecânico. A posição do cursor dentro da matriz de
elementos resistivos é definida por sinais de controle.
• Up/Down ( DU/ )
Este terminal indica a direção de movimento do cursor dentro da matriz
e também informa quando o contador é incrementado ou decrementado.
• Increment ( INC )
Este sinal é ativado pela transição de descida de um pulso. A ativação
de INC irá mover o cursor e também irá incrementar ou decrementar o
contador de acordo com a direção indicada pelo nível de sinal lógico
inserido no terminal Up/Down.
• Chip Select (CS )
Este dispositivo é selecionado quando o sinal CS está em nível lógico
baixo. O valor do contador é armazenado numa memória interna não-
volátil quando o sinal CS volta para nível lógico alto enquanto o sinal
INC também está em nível alto. Após esta operação de
armazenamento, o chip será colocado no estado de baixa tensão
(standby) até que o dispositivo seja selecionado novamente.
Por não se tratar de um componente comumente utilizado, passaremos
a descrever de forma sucinta a operação do potenciômetro. Podemos dividir
em três seções principais no chip X9C103: a seção de sinais de controle,
contador e decodificação; a memória não-volátil; e a matriz de resistores.
A seção de sinais de controle funciona como um contador pra cima ou
pra baixo. A saída deste contador é decodificada para ativar uma chave
eletrônica que liga um terminal de um determinado resistor com o terminal do
cursor.
Dentro das condições próprias de operação, o valor do contador pode
ser armazenado numa memória não volátil e guardado para uso posterior. A
matriz de elementos resistivos é formada por 99 resistores conectados em
31
série. Em cada extremo da matriz e entre cada elemento resistivo existe uma
chave eletrônica na qual o cursor pode ser posicionado, transferindo o
potencial daquele ponto para o cursor.
Os sinais INC , DU/ e CS controlam o movimento do cursor ao longo da
matriz. Com CS setado em nível baixo, o chip estará selecionado e apto a
responder aos sinais DU/ e INC. Transições de descida em um sinal pulsado
colocado em INC irão decrementar ou incrementar (dependendo do sinal em
DU/ ) um contador de 7 bits. A saída deste contador é decodificada,
selecionando uma das 100 posições disponíveis ao longo da matriz de
segmentos resistivos.
O cursor quando no extremo da matriz, funciona como um potenciômetro
mecânico, não se movimentando além desta última posição. Desta maneira, o
contador não retorna ao outro extremo da matriz quando incrementado (se
estiver na última posição da matriz) ou decrementado (quando estiver na
primeira posição da matriz).
Quando a alimentação é retirada do chip, o último valor do contador é
armazenado em uma memória não-volátil interna. Quando a alimentação é
restabelecida, o conteúdo da memória é recuperado para o contador.
4.2.2 – Módulo Microcontralado
Microcontroladores são microcomputadores em um único chip. Desta
forma, a CPU (Unidade central de processamento), a memória, as entradas e
as saídas estão presentes em um único chip. O módulo utilizado possui um
microcontrolador da MICROCHIP, o PIC18F4550 (Microchip, 2003). É um
microcontrolador de baixo consumo e alto desempenho com 32kbytes de
memória flash para programação e 256 bytes de EEPROM. É compatível com
o padrão industrial de instruções e pinagem. Este chip ainda possui as
facilidades de utilização do “In Circuit Programming” que permite a gravação de
todo o programa que controlará o projeto na memória Flash (ROSA, 2004).
Assim, não é necessário que o microcontrolador seja retirado do módulo para
ser programado. Entretanto a programação do chip foi realizada via porta USB
com o gravador CERNE USB.
32
Figura 21 – Microcontrolador PIC18F4550
A comunicação entre o PC e o módulo é feita via porta serial, Assim,
tem-se No módulo o chip MAX232 responsável pela interface entre o PC e o
módulo. O MAX232 capta os dados do microcontrolador através dos pinos RX
e TX e envia para a porta serial do PC no padrão RS232 (ROSA, 2004). A
seguir, tem-se a pinagem do MAX232.
Figura 22 – MAX232
Além dos componentes principais do módulo que foram citados acima,
existem ainda dois barramentos de entrada de 8 pinos para coleta de dados e
dois barramentos de saída de 8 pinos para saída de dados.
O circuito completo do módulo pode ser encontrado no apêndice C.
33
4.2.3 – Amplificador Operacional LM741
Para a construção do circuito somador utilizaremos um circuito
integrados LM741 (NATIONAL, 2005). O amplificador operacional é um circuito
integrado de estado sólido que se utiliza de realimentação externa para
controlar suas funções (ROON, 2000). É um dos dispositivos mais utilizados na
eletrônica. Abaixo temos a pinagem deste dispositivo.
Figura 23 – Pinagem LM741
Pinagem:
Pino1: Offset nulling – Como o amplificador operacional é do tipo diferencial,
o offset da tensão de entrada deve ser controlado. A tensão de offset pode
pode ser anulada através da aplicação de uma tensão de polaridade inversa à
da tensão de offset. O potenciômetro de ajuste offset null pode ser usado para
compensar a tensão de offset. Este potenciômetro também pode compensar
irregularidades que possam existir do processo da fabricação que podem vir a
causar o offset. Conseqüentemente, é recomendado para aplicações críticas.
Pino 2: Entrada inversora – Todos os sinais de entrada neste pino serão
invertidos na saída (pino 6).
Pino 3: Entrada não-inversora – Todos os sinais de entrada aplicados neste
pino apareceram na saída sem inversão.
34
Pino 4: V- – Este pino é o terminal de alimentação negativa. Para o 741 os
limites de alimentação são – 4,5 V e – 18 V, e é especificado para operação
entre – 5 e – 15 Vdc. O dispositivo irá operar normalmente ao longo deste
intervalo de tensões de alimentação. É importante ressaltar que este pino não é
o mesmo que o terra.
Pino 5: Offset nulling – Ver pino 1.
Pino 6: Saída – A saída será de polaridade oposta ao sinal de entrada se o
sinal estiver sendo aplicado ao pino 2 (entrada inversora do amplificador
operacional) e terá a mesma polaridade caso seja aplicado ao pino 3 (entrada
não-inversora).
Pino 7: V+ – Este pino é o terminal de alimentação positiva. Para o 741 os
limites de alimentação são + 4,5 V e + 18 V, e é especificado para operação
entre + 5 e + 15 Vdc. O dispositivo irá operar normalmente ao longo deste
intervalo de tensões de alimentação.
Pino 8: N/C (Não conectado) – Não há nada conectado a este pino. O motivo
pelo qual ele está presente no circuito integrado é para manter o padrão de 8
pinos.
4.2.4 – Comunicação Serial
A comunicação entre o módulo microcontrolado e o PC é serial e
somente será utilizada para enviar o valor do sinal de tensão já convertida para
digital.
O padrão de porta serial para microcomputadores que se encaixam na
categoria Data Terminal Equipment (DTE) é o RS232. Suas especificações
básicas são mostradas a seguir.
35
Parâmetro Condições
“0” lógico Entre +3V e +25V
“1” lógico Entre -3V e -25V
Rede indefinida Entre -3V e -25V
Tensão em circuito aberto Sempre menor que 250V
Corrente de curto-circuito Nunca srá maior que 500mA
Tabela 3 – Parâmetros porta serial
Existem dois tipos de porta serial nos PC’s. Uma delas é o conector de
25 pinos e a outra 9 pinos. Neste projeto foi escolhido o conector de 9 pinos
(D-type 9 pins). Suas pinagens e função podem ser verificadas na tabela a
seguir.
Pino Nome Função
1 DCD Data Carrier Detected: Detecção de portadora
2 RX Received Data: Entrada serial de dados
3 TX Transmitted Data: Saída serial de dados
4 DTR
Data Terminal Ready: Indica para ao aparelho que o
microcomputador está pronto para o link
5 GND Terra
6 DSR
Data Set Ready: Avisa ao microcomputador que o aparelho está
pronto para o link
7 RTS
Request To Send: Avisa ao aparelho que o microcomputador
deseja transmitir dados
8 CTS
Clear To Send: Indica que o aparelho está pronto para a
transmissão de dados
9 RI
Ring Indicator: É ativo quando o aparelho detecta um sinal de
ligação externa
Tabela 4 – Funções de cada pino conector de 9 pinos
36
Figura 24 – Conector serial RS232
4.2.5 – Comunicação Paralela
A porta paralela também é uma interface de comunicação entre o
computador e um periférico. Ela é chamada de porta paralela porque conduz os
sinais por meio de oito vias de dados simultâneas, um para cada bit. Os fios de
sinal seguem em paralelo do microcomputador ao seu destino.
Enquanto uma conexão serial envia um bit, uma porta paralela é capaz
de enviar um byte inteiro (8 bits). Por esta razão, a conexão através de portas
paralelas é mais rápida. As portas paralelas são intrinsecamente simples, pois
lidam com os dados da forma como o microcomputador faz, em bytes no lugar
de bits. A porta paralela está ligada diretamente à placa mãe do
microcomputador, logo todos os cuidados devem ser tomadas para que ao
conectar circuitos eletrônicos a essa porta, pois, uma descarga elétrica ou um
componente com a polaridade invertida, poderá causar danos irreparáveis ao
seu computador, seja coerente.
Mesmo sendo a transmissão paralela mas rápida que a serial, a mesma
tem suas limitações. Ela só funciona bem até uns poucos metros. Quando a
distância aumenta, problemas de interferência eletrônica começam a ocorrer no
cabo. Quanto maior o cabo, maior a interferência.
O microcomputador geralmente possui três portas: LPT1, LPT2 e LPT3
(alguns possuem LPT4), e cada porta possui três endereços: data, status e
control. Estes endereços estão numa ordem seqüencial. Para a porta física
37
padrão, a LPT1, tem-se os seguintesendereços: 0x378h (para enviar um byte
de dados pela porta), 0x379h ( para receber um byte de dados pela porta),
0x37Ah ( para enviar dados).
Os computadores estão basicamente configurados da seguinte maneira
(MRS, 2005):
Printer Data Port Status Control
LPT1 0x0378h 0x0379h 0x037ah
LPT2 0x0278h 0x0279h 0x027ah
LPT3 0x03bch 0x03bdh 0x03beh
Tabela 5 – Configuração dos Endereços das Portas
Mas em alguns computadores (principalmente os da IBM) esses valores
podem mudar.
Existem dois tipos de porta paralela nos PC’s. Esta diferença esta
voltada para o modo de como são feitas as transmissão em cada uma. Elas
podem ser unidirecionais ou bidirecionais. Neste trabalho vamos utilizar a a
transmissão unidirecional.
A conexão de qualquer equipamento à porta parelela é feita através do
conector DB25, que esta localizado a parte de trás do microcomputador.
Este tem a função enviar e receber os dados. O conector padrão DB25
possui 25 pinos. A figura abaixo, mostra o conector padrão DB25, onde cada
pino tem um nome que o identifica (MESSIAS, 2005).
38
Figura 25 – DB25 que fica atrás do microcomputador
Figura 26 – Conector Macho do Cabo Paralelo
Suas pinagens e funções podem ser verificadas na tabela a seguir.
39
Pino Nome Função
2 a 9 D0, D1, D2, D3,
D4, D5, D6 e
D7
Usados para enviar dados através da Porta Paralela. São
controlados pelo Registrador de Dados (saída de dados), e
a letra D indica isso. O número que vem após a letra
corresponde à posição do pino dentro do Byte.
10,
11,
12,
13
e
15
S6 – Ack,
S7 – Busy,
S5 – Paper End,
S4 – Select Out
e
S3 – Error
Através desse registrador podemos receber dados do
mundo externo. São controlados pelo Registrador de Status
(entrada de dados), e a letra S indica isso. O número que
vem após a letra corresponde à posição do pino dentro do
Byte.
1,
14,
16
e
17
C0 – Strob,
C1 – Auto Feed,
C2 – Init
e
C3 – Select In
São controlados pelo Registrador de Controle da Porta
Paralela (controla a impressora, pode ser usado como
outras 4 saídas e podem ser usado para enviar dados para o
mundo externo, e a letra C indica isso. O número que vem
após a letra corresponde à posição do pino dentro do Byte.
18 a 25 GND Terra
Tabela 6 – Funções de cada pino conector da porta paralela
Os pinos de 2 à 9 são responsáveis por enviar os dados do microcomputador
para o ambiente externo. Todas as saídas da porta paralela são lógicas. Ou
seja, quando a tensão elétrica está entre 0 à 0,4V, significa que o pino está em
um nível lógico 0. E quando a tensão elétrica está entre 3,1V e 5V significa que
o pino encontra-se em um nível lógico 1. Entretanto os pinos SELECT_IN,
AUTOFEED e STROBE possuem uma lógica invertida. Isto é, colocando o
nível lógico 1 nesses sinais iremos obter uma saída de 0V.
40
5 – Programação
5.1 – Descrição do Software
Baseado nos conceitos da eletrônica evolucionária, utilizamos em nosso
projeto, um pacote desenvolvido pelos professores Chris Houck, Jeff Joines e
Mike Kay: The Genetic Algorithms for Optimization Toolbox (GAOT) for Matlab
5 (HOUCK, 1995). O algoritmo genético nos permite, através das ferramentas
de simulação do MATLAB, analisar problemas dos mais diversos tipos.
O software Matlab integra análise numérica, operações com matrizes e
gráficos de uma forma simples de ser entendida. Além disso, as funções do
Matlab são completamente portáteis de um hardware para outro sem a
necessidade de recompilação, desde que apresentem as mesmas bibliotecas.
O algoritmo utilizado neste trabalho foi implementado como um toolbox
do Matlab, isto é, um grupo de funções relacionadas, chamado GAOT. O
GAOT implementa a evolução simulada em Matlab utilizando as
representações binária e real. Esta implementação é bem flexível quanto aos
operadores genéticos, funções de seleção, funções de terminação assim como
funções de evolução que podem ser utilizadas.
O GAOT foi dividido em módulos individuais, onde cada módulo é
reconhecido como uma função do Matlab, permitindo assim que o código seja
livre para ser expandido e melhorado modificando tais extensões.
Passaremos agora a analisar a estrutura básica do GAOT. As
particularidades dos algoritmos desenvolvidos para cada uma dos circuitos
serão vistas mais adiante.
O comando principal do algoritmo genético é dado pela seguinte
instrução:
[x,endPop,bPop,traceInfo] = ga(bounds ,evalFN ,evalParams
,params , startPop , termFN , termParams , selectFN , selectParams,…
xOverFNs, xOverParams, mutFNs ,mutParams)
No quadro abaixo descrevemos as funções dos parâmetros do comando
principal.
41
Parâmetros de saída:
X Solução final
endPop (opcional) População final
bPop (opcional) Matriz com os melhores indivíduos e a geração
correspondente onde foram encontrados
traceInfo (opcional) Matriz com os valores máximo e médio da população
para cada geração
Parâmetros de entrada:
bounds Matriz com os limites (superior e inferior) das
variáveis
evalFN Função de avaliação, usualmente um arquivo .m;
evalParams
(opcional)
Matriz de parâmetros para a função de avaliação cujo
padrão é [NULL]
params (opcional) Um vetor de opções, isto é [epsilon prob_param
disp_param] onde epsilon é a mudança necessária
para que duas soluções sejam consideradas e
prob_params é 0 se utilizarmos a codificação binária
para representação das soluções, ou 1 para
representação em números reais. Disp_param
(opicional) controla a visualização de como o
progresso do algoritmo será mostrado: 1 mostra a
geração corrente e o valor da melhor solução na
população enquanto que 0 não mostra tais valores
startPop (opcional) Matriz contendo a população inicial. É criada com o
initializega
termFN (opcional) Nome da função de terminação utilizada
termParams
(opcional)
Matriz de parâmetros definida tendo com default [100]
selectFN (opcional) Nome da função de seleção utilizada;
selectParams
(opcional)
Parâmetros para a função de seleção
xOverFNs (opcional) Opções para os operadores de crossover
xOverParams
(opcional)
Parâmetros do crossover
mutFNs (opcional) Opções para os operadores de mutação
42
mutParams
(opcional)
Matriz de parâmetros da mutação.
Tabela 7 – Parâmetros do AG
Para realizar as simulações de evolução, o AG utiliza o parâmetro
evalFN. Ele determina a aptidão da solução com o cálculo do erro, que pode
ser utilizado para as simulações online ou offline. O AG utiliza os operadores
xOverFNs e mutFNs para alterar as soluções durante a busca.
Podemos notar que o sistema GAOT como um todo, apresenta alto nível
de modularidade e é bastante flexível, nos permitindo trabalhar com uma lista
de operadores genéticos, realizando a evolução utilizando qualquer
combinação de seleção, crossover, mutação e função de terminação.
A grande responsável pelo sucesso do AG é sua função de avaliação,
um programa aparentemente secundário, porém que é fundamental para
determinar a aptidão de cada solução durante a busca.
Ela utilizará todos os parâmetros da função principal e nos indicará
apenas a melhor solução encontrada pela simulação de evolução do problema.
Para cada tipo de problema encontrado em nosso cotidiano, podemos definir
uma função de avaliação. Ela é única para a otimização dos problemas e
garante a busca de indivíduos com melhores aptidões. Cada vez que a função
ga é utilizada para resolver um novo problema, uma nova função de avaliação
deve ser modelada e inserida no software.
Operadores genéticos são capazes de alterar mecanismos de busca do
AG. Eles são utilizados paracriar novas soluções baseadas nas soluções
existentes na população. No estudo do algoritmo genético, podemos verificar
que existem dois tipos básicos de operadores, crossover e mutação. O
crossover toma dois indivíduos e produz dois novos indivíduos enquanto que a
mutação altera um indivíduo para produzir uma nova solução. Podemos alterar
os parâmetros da função ga que utiliza ambos os operadores para produzir
novas soluções.
A função de seleção determina quais dos indivíduos irão sobreviver e
serão passados para a próxima geração. A função ga chama a função de
43
seleção a cada geração depois de todos os novos indivíduos terem sido
evoluídos para criar a nova população a partir da antiga.
A inicialização de uma nova população para prover ao ga um ponto de
partida é usualmente realizada pela geração aleatória de indivíduos a partir do
espaço de busca. Contudo, é possível realizar o ‘seed’ da população inicial
com indivíduos, ou gerar soluções de outra forma. A função ga permite tal fato
com o parâmetro startPop que provê ao ga uma população inicial explícita.
Para determinarmos quando a simulação da evolução deve ser
finalizada e a população resultante deve ser informada, utilizamos a função de
terminação. A função ga chama a função de terminação uma vez a cada
geração após a aplicação de todos os operadores e da função de evolução
para o indivíduo resultante.
No apêndice B são informados todos os arquivos encontrados no toolbox
listando, por exemplo, as funções de seleção e os operadores crossover e
mutação disponíveis. É informado também qual dos arquivos pode ser utilizado
com cada representação escolhida para os indivíduos. Neste trabalho, a
representação escolhida para as soluções (indivíduos) é a representação
binária.
5.2 – Programa no PC
Para a implementação do projeto, necessitamos que o algoritmo
genético, cuja versão utilizada foi o GAOTv5, se comunique tanto com o
Hardware externo, para que seja realizada uma evolução intrínseca, quanto
com outro programa, ou função, realizando uma evolução extrínseca.
Utilizaremos para essa comunicação, programas desenvolvidos no
Matlab 2007b, cuja versão contempla em sua biblioteca interna, diversas
funções e parâmetros que configuram facilmente estes tipos de conexão. Para
o caso do envio de dados aos potenciômetros digitais, utilizaremos a porta
paralela do PC, e sua configuração é de fácil implementação no Matlab.
A figura abaixo, mostra os parâmetros utilizados para a configuração da
porta paralela no Matlab.
44
Figura 27 – Configuração da Porta Paralela
Os parâmetros acima são neste projeto introduzidos em todos os
arquivos que necessitavam da utilização da transmissão dos dados através da
porta paralela para acessar dispositivos externos. Em todos os trechos de
programa, podemos verificar que esses arquivos estão relacionados à
configuração dos POTs, como será explicado em seguida.
Como visto no item 4.1, os E2POTs mantém armazenados sempre o
último valor no contador, mesmo que o circuito tenha sido desligado, por isso
quando precisamos que o valor seja nulo, utilizamos um programa
desenvolvido para colocar os POTs num valor inicial igual a zero (os programas
completos aqui mencionados encontram-se no apêndice F). Este procedimento
é fundamental para termos a certeza de que os POTs não continham nenhum
resíduo de operações anteriores.
Este programa para zerar os POTs deve ser executado antes que
quaisquer dados sejam enviados ao circuito, de preferência na primeira linha
do programa principal. Este programa principal é responsável pela evolução do
sistema com o algoritmo genético. Para cada tipo de evolução utilizada (
intrínseca e extrínseca ) existe um programa principal, para a evolução
extrínseca com AG, este programa é denominado “aa_prin_ext_comAG.m”,
para a evolução também extrínseca, porém sem o AG este programa é
chamado de “ab_prin_ext_semAG.m”. Para os modos intrínsecos os
programas principais sem e com AG chamam-se “aa_prin_int_semAG.m” e
“ad_prin_ext_comAG.m” respectivamente. Todos são arquivos do Matlab.
Para o modo offline ( extrínseco ), depois que ocorreu a evolução do
sistema, lembrando que está evolução foi feita toda no computador, os valores
dos resistores gerados por esta evolução são enviados para os potenciômetros
via comunicação paralela. O arquivo responsável por configurar os
potenciômetros, estando eles inicialmente com valores nulos é chamado de
“aa_Configurar_Pots.m”. Estes programas para configurar os POTs são
executados no fim da evolução, de preferência na última linha do programa
principal. O programa para configurar os potenciômetros funciona enviando os
45
dados bit a bit, gerando pulsos para incrementar os POTs até que eles
cheguem aos valores desejados. O código deste programa encontra-se no
apêndice F.
Como o processo de evolução é diferente para cada um dos quatro
casos, vamos explicá-los separadamente.
5.2.1 – Método extrínseco
Para o método extrínseco ( offline ), realizamos duas evoluções. A
primeira, utilizando o AG, é iniciada pelo arquivo “aa_prin_ext_comAG”.m”.
Utilizamos também o arquivo “aa_AmpSomador.m”, onde nós vamos
especificar a tensão de saída desejada, tensões de entrada e resistência de
realimentação do amplificador. Então o programa principal recebe estes dados
através deste arquivo e busca soluções para o resistor 1 e resistor 2. Em
seguida, o software utiliza estes dados como entrada para o modelo do
amplificador somador, cujas características foram desenvolvidas no arquivo. O
AG encontra uma tensão de saída. Esta tensão de saída obtida é comparada
com a tensão de saída desejada e então estes valores são enviados para uma
fórmula de erro, para que possa ser avaliada a sua aptidão dentro da geração.
A segunda evolução está presente no arquivo
“ab_prin_ext_semAG.m”, cuja função de avaliação é “ab_simuladorPIC”. Da
mesma forma que o anterior, especificamos na função de avaliação o modelo
do circuito a ser trabalhado. A função principal então varia o valor teórico das
soluções entre os valores mínimos e Máximos sem a utilização do AG. Para o
caso dos nossos potenciômetos, a variação foi de 0 a 10Kohms para cada um
deles, resultando em um número de 10 mil combinações. Todas as
combinações são verificadas, e a solução que apresentar um menor erro é
então enviada ao circuito físico pela função “aa_Configurar_Pots.m”.
5.2.2 – Método intrínseco
Para o método intrínseco, duas evoluções também foram realizadas, a
primeira, sem a utilização do AG, utilizamos o arquivo
“aa_prin_int_comAG.m”. Ele inicialmente zera o valor dos Pots com o
46
arquivo “aa_Zerar_Pots.m” e então testa diretamente no Hardware pela
porta paralela todas as combinações possíveis de soluções com o arquivo
“aa_Configurar_Pots.m”. para que, a cada ciclo, a aptidão seja testada,
utilizamos o arquivo “Conversao_AD” que capta pela porta serial o sinal já
digital da tensão de saída do circuito fornecida pelo PIC. A função
“adteste.HEX” gravada no PIC é a responsável pela conversão A/D do sinal
de saída do amplificador somador e seu envio para o PC via transmissão
serial. Este processo é repetido e a melhor solução encontrada é mantida no
circuito.
O segundo método intrínseco utiliza o AG. O arquivo principal é o
“ad_prin_int_comAG.m”. Ele inicialmente zera o valor dos Pots com o
arquivo “aa_Zerar_Pots.m” e então testa diretamente no Hardware pela
porta paralela as sooluções do AG com o arquivo “ad_Configurar_Pots.m”.
Para que, a cada ciclo, a aptidão seja testada, também utilizamos o arquivo
“Conversao_AD” que capta pela porta serial o sinal já digital da tensão de
saída do circuito fornecida pelo PIC. A função “adteste.HEX” gravada no PIC
é a responsável pela conversão A/D do sinal de saídado amplificador
somador e seu envio para o PC via transmissão serial. Este processo é
repetido e a melhor solução encontrada pelo arquivo “ad_AmpSomador.m “é
mantida no circuito.
47
6 – Estudo de Casos com o amplificador somador
6.1 – Evolução extrínseca com AG
Para este primeiro estudo, foi feito teste com amplificador somador, onde
desejamos que a tensão de saída fosse -5V. O método de seleção utilizado foi
por roleta que é o método comum utilizado em Ags para valores positivos. A
Taxa de crossover utilizada foi de 40% e a taxa de mutação foi de 0,5%, e
utilizamos seed igual a zero. Utilizamos a representação binária do
cromossomo. E estamos colocando nas entradas Va e Vb do circuito uma
tensão de 5V. Através dos gráficos apresentados abaixo, podemos observar
que a aptidão (encontrada no eixo vertical dos gráficos) varia de acordo com o
número de gerações e com o número de indivíduos de cada geração. Também
verificamos que a tensão de saída também irá variar levemente conforme estes
parâmetros pois os potenciômetros utilizados somente apresentam valores
múltiplos de 100, com um limite máximo de 10K ohms.
No circuito somador estaremos variando dois parâmetros, os resistores
Ra e Rb. Mantivemos o resistor Rf, de realimentação do amp-op, com um valor
constante de 400. Para este teste aplicamos 5V em ambas as entradas Va e
Vb.
A aptidão dos indivíduos será encontrada através de uma fórmula de
erro. A fórmula de erro será dada pela equação abaixo:
Erro = ( Vout – Vdesj ).^2
Onde:
Vdesj = -5
Vout = (-1) * (Va * (Rf) / (Ra)) + (-1) *(Vb * (Rf) / (Rb));
O Vin é um vetor onde variamos o número de pontos que queremos e
especificamos a tensão de entrada.
As resistências Ra e Rb, são as soluções encontradas pelo ga no
programa principal de evolução.
Assim, podemos encontrar a aptidão dos indivíduos através das
seguintes expressões:
48
somaErro = sum(single(Erro))
Aptidao = 1 / (1 + (somaErro/2))
A seguir, iremos mostrar os gráficos variando o número de gerações e o
número de indivíduos de cada geração.
• 5 Gerações, 20 indivíduos
•
•
•
•
•
• 5 Gerações, 100 indivíduos
Figura 28 – Gráfico da Aptidão para 5 gerações com 20 e 100 indivíduos em cada geração.
Para a população com 20 indivíduos em cada geração encontramos uma
aptidão igual 0,998747.
Para a população com 100 indivíduos em cada geração encontramos
uma aptidão igual 0,985466.
49
• 20 Gerações, 20 indivíduos
• 20 Gerações, 100 indivíduos
Figura 29 – Gráfico da Aptidão para 20 gerações com 20 e 100 indivíduos em cada geração.
Para a população com 20 indivíduos em cada geração encontramos uma
aptidão igual a 1.
Para a população com 100 indivíduos em cada geração encontramos
uma aptidão igual 0,987743.
50
• 50 Gerações, 20 indivíduos
• 50 Gerações, 100 indivíduos
Figura 30 – Gráfico da Aptidão para 50 gerações com 20 e 100 indivíduos em cada geração.
Para a população com 20 indivíduos em cada geração encontramos uma
aptidão igual 1.
Para a população com 100 indivíduos em cada geração encontramos
uma aptidão igual 0,995629.
51
• 100 Gerações, 20 indivíduos
•
• 100 Gerações, 100 indivíduos
•
Figura 31 – Gráfico da Aptidão para 100 gerações com 20 e 100 indivíduos em cada geração.
Para a população com 20 indivíduos em cada geração encontramos uma
uma aptidão igual 1.
Para a população com 100 indivíduos em cada geração encontramos
uma aptidão igual 0,996306.
52
• 150 Gerações, 20 indivíduos
• 150 Gerações, 100 indivíduos
Figura 32 – Gráfico da Aptidão para 150 gerações com 20 e 100 indivíduos em cada geração.
Para a população com 20 indivíduos em cada geração encontramos
uma aptidão igual 1.
Para a população com 100 indivíduos em cada geração encontramos
uma aptidão igual a 0,996346.
53
• 200 Gerações, 20 indivíduos
• 200 Gerações, 100 indivíduos
Figura 33 – Gráfico da Aptidão para 200 gerações com 20 e 100 indivíduos em cada geração.
Para a população com 20 indivíduos em cada geração encontramos uma
aptidão igual 1.
Para a população com 100 indivíduos em cada geração encontramos
uma aptidão igual 0,996358.
54
6.2 – Evolução extrínseca sem AG
Já para o segundo estudo de casos, um algoritmo foi desenvolvido para
variar o valor de ambos os potenciômetros de seus valores mínimos ao máximo
( 0 a 10k, com passo de 100 ohms ).
O circuito utilizado é o mesmo amplificador somador, onde desejamos
obter uma dada tensão de saída, mantendo as tensões de entrada e o resistor
de alimentação constantes.
O método utilizado foi o de, por tentativa e erro, testar todas as
combinações possíveis de valores para os potenciômetros, e simulando no
próprio matlab o funcionamento do somador, conseguimos calcular uma tensão
de saída e comparar com a tensão de saída desejada.
For Ra = 0:100:10000
for Rb = 0:100:10000
erro = compara(Ra, Rb, Rf, Va, Vb, Vref);
If erro <= menorErro
menorErro = erro
Ra
Rb
end
end
end
Onde a função “compara(Ra, Rb, Rf, Va, Vb, Vref)” calcula o erro
entre a tensão desejada e a simulada. Então para cada par de soluções para
os potenciômetros, podemos encontrar um erro correspondente da tensão de
saída obtida.
O menor erro, e os correspondentes valores de Ra e Rb, são
armazenados e enviados por comunicação paralela ao circuito físico.
Para a simulação do circuito, os seguintes valores foram inseridos como
dados constantes: Va=Vb= 5v, Rf= 400 ohms e tensão de referência a ser
encontrada (Vref) = -7v
Os gráficos abaixo mostram a evolução do erro no algoritmo.
55
Figura 34 – Gráfico da Aptidão para os valores de Ra e Rb para evolução extrínseca
sem AG
Os valores encontrados ao término da simulação, com erro 0 foram: Ra=
300 e Rb= 6000. Estes foram os primeiros valores a obterem erro 0.
Para descobrir todos as combinações de Ra e Rb para anularmos o erro, basta
inserirmos o sinal de “=” na expressão:
If erro < menorErro
Que após a modificação fica assim:
If erro <= menorErro
Os pares Ra, Rb ( em ohms ) encontrados com este método foram:
56
Ra Rb
300 6000
400 1000
6000 300
1000 400
Tabela 8 – Valores de Ra e Rb encontrados para evolução extrínseca sem AG
Podemos observar que temos dois pares com os mesmos valores. Isso
deve-se ao fato de que as entradas Va e Vb são idênticas.
6.3 – Evolução intrínseca sem AG
No terceiro estudo de casos, o algoritmo anterior foi remodelado para
variar o valor de ambos os potenciômetros de seus valores mínimos ao máximo
( 0 a 10k, com passo de 100 ohms ) e enviá-los ao circuito, testando todas as
combinações.
O circuito utilizado é o mesmo amplificador somador, onde desejamos
obter uma dada tensão de saída, mantendo as tensões de entrada e o resistor
de alimentação constantes.
O método utilizado foi o mesmode, por tentativa e erro, testar todas os
possíveis de valores para os potenciômetros, e comparando a cada ciclo a
tensão desejada com a fornecida ao Matlab pelo PIC pela porta serial.
O menor erro ao longo da simulação, e os correspondentes valores de
Ra e Rb, são armazenados e enviados novamente por comunicação paralela
ao circuito físico no fim dos testes.
Para a simulação do circuito, a efeito de comparação com o método
extrínseco mantivemos o seguinte valor de tensão de referência a ser
encontrada (Vref) = -7v
Os gráficos abaixo mostram a evolução do erro no algoritmo.
57
Figura 35 – Gráfico da Aptidão para os valores de Ra e Rb para evolução intrínseca
sem AG
Os valores encontrados ao término da simulação, com erro 0 foram: Ra=
300 e Rb= 6000. Estes foram os primeiros valores a obterem erro 0. Os
mesmos resultados do exemplo anterior, comprovando a viabilidade de ambos
os métodos.
Para descobrir todos as combinações de Ra e Rb para anularmos o erro, basta
inserirmos o sinal de “=” na expressão:
If erro < menorErro
58
Que após a modificação fica assim:
If erro <= menorErro
Os pares Ra, Rb ( em ohms ) encontrados com este método também foram os
mesmos do estudo de casos anterior:
Ra Rb
300 6000
400 1000
6000 300
1000 400
Tabela 9 – Valores de Ra e Rb encontrados para evolução intrínseca sem AG
Podemos observar que temos dois pares com os mesmos valores. Isso
deve-se ao fato de que as entradas Va e Vb são idênticas.
6.4- Evolução intrínseca com AG
Para este último estudo, foram feitos testes com o amplificador somador,
onde desejamos que a tensão de saída permanecesse constante em -5V. O
método de seleção utilizado é o mesmo apresentado na evolução extrínseca e
foi por roleta que é o método comum utilizado em Ags para valores positivos. A
Taxa de crossover utilizada foi de 40% e a taxa de mutação foi de 0,5%, e
utilizamos seed igual a zero. Utilizamos a representação binária do
cromossomo. E estamos colocando nas entradas Va e Vb do circuito uma
tensão de 5V. Através dos gráficos apresentados abaixo, podemos observar
que a aptidão (encontrada no eixo vertical dos gráficos) varia de acordo com o
número de gerações e com o número de indivíduos de cada geração. Também
verificamos, que a medida tensão de saída também irá variar levemente
conforme o teórico visto no estudo 1 devido à perda de precisão pelo conversor
A/D do PIC. Chega a apresentar erro de 1 bit e meio durante a conversão.
No circuito somador estaremos variando dois parâmetros, os resistores
Ra e Rb. Mantivemos o resistor Rf, de realimentação do amp-op, com um valor
59
constante de 1000ohms. Para este teste aplicamos 5V em ambas as entradas
Va e Vb.
A aptidão dos indivíduos será encontrada através de uma fórmula de
erro. A fórmula de erro será dada pela equação abaixo:
Erro = ( Vout – Vdesj ).^2
Onde:
Vdesj = -5
O Vin é um vetor onde variamos o número de pontos que queremos e
especificamos a tensão de entrada.
As resistências Ra e Rb, são as soluções encontradas pelo ga no
programa principal de evolução.
Assim, podemos encontrar a aptidão dos indivíduos através das
seguintes expressões:
somaErro = sum(single(Erro))
Aptidao = 1 / (1 + (somaErro/2))
Como o tempo necessário à simulação é muito maior para as evoluções
intrínsecas, e visto que o resultado próximo do teórico sempre é obtido, um
número menor de testes foi realizado.
Um dos testes realizados foi variar os parâmetros de crossover e
mutação.
A seguir, iremos mostrar os gráficos variando o número de gerações e o
número de indivíduos de cada geração.
60
Gráficos para: Crossover = 40% e mutação =5%
• 5 Gerações, 20 indivíduos
• 5 Gerações, 100 indivíduos
Figura 36 – Gráfico da Aptidão para 5 gerações com 20 e 100 indivíduos em cada geração.
Para a população com 20 indivíduos em cada geração encontramos uma
aptidão igual 0,998043.
Para a população com 100 indivíduos em cada geração encontramos
uma aptidão igual 0,971676.
61
Gráficos para: Crossover = 60% e mutação =10%
• 5 Gerações, 20 indivíduos
• 20 Gerações, 20 indivíduos
Figura 37 – Gráfico da Aptidão para 5 gerações com 20 indivíduos e para 20 gerações com 20
indivíduos.
Para a população com 20 indivíduos e 5 gerações encontramos uma
aptidão igual 0,81970
Para a população com 20 indivíduos e 20 geração encontramos uma
aptidão igual 0,971676.
62
7 – Conclusão
Desenvolvemos neste projeto algumas aplicações utilizando o algoritmo
genético em um circuito analógico para verificar os fundamentos da eletrônica
evolucionária.
O protótipo que foi evoluído consiste em um amplificador somador
inversor. Diversos outros hardwares também foram utilizados, mas não eram o
foco deste projeto como: Conversão A/D interno do microcontrolador PIC
18F4550, conversão da lógica TTL para RS232 com o CI MAX232.
Também utilizamos os recursos da programação, através de um
programa matemático, o Matlab, e da programação que foi gravada no PIC
através do software PICPGM complilada por outro software, o MikroBasic.
Analisando os resultados foi possível comprovar que através do
Algoritmo Genético que o sistema é capaz de gerar valores que atendam as
especificações iniciais do circuito.
Conseguimos com os 4 casos apresentados obter informações
detalhadas dos diferentes métodos de evolução. Apesar da perda de precisão
nos métodos intrínsecos, verificamos que os resultados ainda são bastante
satisfatórios e as diferenças numéricas obtidas não são de grande relevância.
Notamos que a evolução extrínseca e bastante eficiente em relação ao
tempo gasto no processo, quando comparados ao método online. Percebemos
também que isto ocorre, pois conseguimos modelar o circuito para um
funcionamento ideal. Caso a situação que um equipamento se encontre seja de
difícil modelagem matemática, o método intrínseco consegue ser bem eficaz.
O uso de códigos mais enxutos, e velocidades maiores de
processamento podem tornar o uso do método intrínseco recomendado para
quaisquer tipos de casos.
Outros resultados, com maior número de indivíduos e gerações, podem
melhorar o desempenho do sistema, mas isso depende de um maior poder
computacional.
A grande vantagem de se trabalhar com a Eletrônica evolucionária são
os projetos que receber reparos humanos constantes torna-se inviável. Assim,
através da Eletrônica Evolucionária tais reparos poderiam ser feitos
automaticamente, sem necessitar de uma assistência técnica externa. Projetos
63
espaciais e equipamentos médicos são os que despertam maior interesse na
comunidade científica.
Para futuros trabalhos, fica como sugestão, fundamentado nos
resultados obtidos na aplicação da técnica desenvolvida, usar este algoritmo
para a criação de um software educacional de síntese de circuitos digitais. Para
isto, é necessário fazer uma interface amigável utilizando linguagens
direcionadas para objetos e testar outros tipos de técnicas para os operadores
genéticos ou outros algoritmos evolutivos.
64
8 – Bibliografia
[1] AMARAL, J. F. M., “Síntese de Sistemas Fuzzy por Computação
Evolucionária”. Tese de Doutorado, PUC-Rio,Fevereiro 2003.
[2] DUARTE, C. P. E. V., “Ambiente de Testes de Estrutras CMOS Projetadas
para Eletrônica Evolucionária” Tese de Pós-Graduação, COPPE/UFRJ,
Março 2006
[3] Guimarães, A. L. P., “Estruturas CMOS Programáveis para Aplicação em
Eletrônica Evolucionária” Tese de Pós-Graduação, COPPE/UFRJ, Março
2006
[4] ALVES, G. B. “Introdução ao Hardware Evolutivo: Conceitos e Aplicações”,
Centro Universitário do Leste de Minas Gerais-MG, Março 2001
[5] MENEZES, N. G., “Síntese Topológica Evolucionária e Otimização numérica
de Parâmetros de Estruturas CMOS” Tese de Pós-Graduação, COPPE/UFRJ,
Março 2006
[6] SOBRINHO, E. F. G., “Uma Ferramenta Alternativa para Síntese de
Circuitos Lógicos Usando a Técnica de Circuito Evolutivo” Tese de Pós-
Graduação, UNESP-SP, Junho 2007
[7] BLICKLE, T., “Theory of Evolucionary Algorithms and Application to system
Synthesis”. Tese de doutorado, Swiss Federal Institute of Technology,
Zurique, 1996.
[8] FOGEL, D. B., “Evolutionary Computation – Toward a New Philosophy of
Machine Intelligence”. IEEE Press, Piscataway, NJ,1995.
[9] HOLLAND, J. H., “Adaptation in Natural and Artificial Systems”, University
of Michigan Press, 1975.
65
[10] HOUCK, C. R., JOINES, J. A., KAY, M. G., “A Genetic Algorithm for
Function Optimization: A Matlab Implementation”, North Carolina State
University, 1995.
[11] KOZA, J. R. et al., “Genetic Programming III”. San Francisco, CA: Morgan
Kaufmann Publishers, 1999.
[12} LOHN, J. D., COLOMBANO, S. P., “A circuit representation technique for
automated circuit design”. IEEE Trans. On Evolutionary Computation,
3(3):205-219, 1999.
[13] MATHWORKS, “Matlab – The Language of Technical Computing”,
Fonte: www.mathworks.com, último acesso em 24/02/2010.
[14] MESSIAS, A. R., “Porta Pararela”, material didático, 2010.
Fonte: www.rogercom.com/pparalela/introducao.htm, último acesso em
10/03/2010.
[15] MESSIAS, A. R., “Portas Seriais”, material didático, 2010.
Fonte: www.rogercom.com/pparalela/introducao.htm, último acesso em
10/03/2010.
[16] MICHALEWICZ, Z., “Genetic Algorithms+Data Structures=Evolution
Programs”, Springer-Verlag, 1994.
[17] MICROSHIP, “FilterLab filter design software”, site oficial da Microship,
2010.
Fonte: www.microship.com, último acesso em 10/03/2010.
[18] MILLER, J. F., “Digital filter design at gate-level using evolutionary
algorithms”. Em W. Banzhaf et al., editors, Proc. Of the Genetic and
Evolutionary Computation Conference (GECCO’99), pag. 1127 -1134.
Morgan Kaufmann, 1999.
66
[19] MURAKAWA, M. et al., “The grd chip: Genetic reconfiguration of dsps for
neural network processing”, IEEE Transactions on Computers, 48(6):628-
638, 1999.
[20] NATIONAL, “Datasheet LM741 Operational Amplifier”, site oficial da
National, 2010.
Fonte: www.national.com, último acesso em 10/03/2010.
[21] PACHECO, M. A. C., “Algoritmo Genético: Princípios e aplicações” ICA,
Laboratório de Inteligência Computacional Aplicada
Fonte: www.ica.ele.puc-rio.br, último acesso em 10/03/2010.
[22] PACHECO, M. A. C., Notas de Aula em Computação Evolucionária
Fonte: www.ica.ele.puc-rio.br, último acesso em 10/03/2010.
[23] SALVADOR, O., “Introdução a Algoritmos Genéticos”., Curso de Ciência
da Computação, Universidade Católica de Pelotas, 2000.
[24] SANTINI, C. C., “Desenvolvimento de um Plataforma Reconfigurável
Analógica para a Evolução Intrínseca de Circuitos”, Tese de Mestrado, PUC-
Rio, Julho 2001.
[25] TORRENSEN, J., “An Evolvable Hardware Tutorial”. Department of
Informatics, University of Oslo
Fonte: http://heim.ifi.uio.no/~jimtoer/fpl04_Torresen.pdf, último acesso em
13/03/2010.
[26] VIEIRA, P. F., “Síntese Evolucionária de Circuitos MOS Integrados
utilizando Programação Genética”, Tese de Mestrado, COPPE-Rio, 2004
[27] XICOR, “Datasheet E2POT X9C102/103/104/503 – Digitally-Controlled
(XDCP) Potentiometer”, site oficial da Xicor, 2005.
Fonte: www.xicor.com, último acesso em 24/02/2010.
67
Apêndice A – Custos do Projeto
Componentes Eletrônicos
Diversos
Quant. Valor R$
Soquete 40 Pinos 2 10,00
Soquete 8 Pinos 6 7,50
Soquete 16 Pinos 2 7,40
Placa 210x210 1 20,00
PIC 18F4550 1 35,00
Conversor RS232 2 10,00
Frete + Imposto E2Pots 1 30,00
E2Pots 4 62,16
Amp-OP 741 4 3,60
Resistor 1KΩ 5 1,25
Capacitor 27pF 3 0,75
Capacitor 15pF 3 0,75
Capacitores 56pF 2 0,50
Capacitores 100nF 2 0,50
Capacitores 1µF/50v 5 1,25
Cabo Comunicação Paralela 1 9,40
Cabo Comunicação Serial 1 7,20
Potenciômetro 1 2,50
Conector para Porta Serial 2 7,50
Conector para Porta Paralela 2 10,00
Gravador USB para PIC 1 220,00
Barra de Pino Modulado com 14
pinos
5 7,50
TOTAL 454,60
Tabela 10 – Custo dos componentes
Descrição Valor em US$
Componentes Eletrônicos 70.00
Homem-Hora 17500.00
Total 17570.00
Tabela 11 – Custo total do projeto
68
Apêndice – B – Toolbox do GAOT
Interface Principal
ga.m O Algoritmo Genético
initializega.m Função de inicialização para representação em real ou binário e utilizada pelo ga.m
initializeoga.m Função de inicialização por ordem baseada na representação.
Operadores utilizados durante a simulação da evolução
Operadores de Crossover
Representação ponto flutuante e binária
simpleXover.m Operador do Algoritmo usado pelo ga.m
Representação ponto flutuante
heuristicXover.m Operador do Algoritmo usado pelo ga.m
arithXover.m Operador do Algoritmo usado pelo ga.m
Representação Order-Based
cyclicXover Operador do Algoritmo usado pelo ga.m
linerorderXover Operador do Algoritmo usado pelo ga.m
orderbasedXover Operador do Algoritmo usado pelo ga.m
partmapXover Operador do Algoritmo usado pelo ga.m
singleptXover Operador do Algoritmo usado pelo ga.m
uniformXover Operador do Algoritmo usado pelo ga.m
Operadores de Mutação
Representação binária
binaryMutation.m Operador do Algoritmo usado pelo ga.m
Representação ponto flutuante
boundaryMutation.m Operador do Algoritmo usado pelo ga.m
multiNonUnifMutation.m Operador do Algoritmo usado pelo ga.m
nonUnifMutation.m Operador do Algoritmo usado pelo ga.m
unifMutation.m Operador do Algoritmo usado pelo ga.m
Representação ponto flutuante e binária
inversionMutation Operador do Algoritmo usado pelo ga.m
Representação Order-Based
adjswapMutation.m Operador do Algoritmo usado pelo ga.m
69
shiftMutation.m Operador do Algoritmo usada pelo ga.m
swapMutation.m Operador do Algoritmo usada pelo ga.m
threeswapMutation.m Operador do Algoritmo usada pelo ga.m
Funções de Seleção
normGeomSelect.m Função de Seleção usada pelo ga.m
roulette.m Função de Seleção usada pelo ga.m
tournSelect.m Função de Seleção usada pelo ga.m
Funções de Terminação
maxGenTerm.m Função de Terminação usada pelo ga.m
optMaxGenTerm.m Função de Terminação usada pelo ga.m
Funções utilizadas para representação binária
calcbits.m Função de precisão binária usada ga.m
f2b.m Conversão de Real para Binário usado pelo ga.m
b2f.m Conversão de Binário para Real usado pelo ga.m
Funções Utilitárias
parse.m Insere espaços em branco separando nomes usado pelo ga.m
delta.m Usado pelo nonUnifMutation.m e mult...m
Demonstrações
gademo1.m Demonstração introdutória do GAOT
gademo2.m Demonstração Multi-dimensional do GAOT
gademo3.m Referência do GAOT
floatExample.m Exemplo usando representação real
floatGradExample.m Exemplo explorando estudo(Lamarckian e Baldwinian)
binaryExample.m Exemplo usando representação binária
orderBasedExample.m Exemplo usando ordem baseado na representação
Funções utilizadas nas demonstrações
gademo1eval1.m Exemplo dafunção eval usado pelo gademo1.m
coranaEval.m Cálculo da função Corana usado pelo gademo2.m
coranaMin.m Cálculo negativo da função Corana usado pelo gademo2.m
gaMichEval.m Michalewicz - evolução do problema
gaZBGradEval.m Michalewicz Evolução usado pelo Exemplo Learning
gaZBGrad.m Gradiente usado por SQP durante learning
tspEval.m Função usada em orderBasedExample
70
Apêndice – C – Esquemáticos dos Circuitos
I- Esquemático do módulo microcontrolado
Figura 38 – Esquemático do PIC 18F4550
Figura 39 – Esquemático do MAX 232
71
Figura 40 – Esquemático Amplificador Somador
72
Apêndice – D – Diagrama Funcional do E2POT
Figura 41 – Diagrama Interno e ligações do E2POT
73
Apêndice – E – Curvas Típicas de Operação do E2POT
Figura 42 – Reposta de Freqüência Típica do X9C103
Figura 43 – Linearidade Típica do X9C103
74
Apêndice – F – Programas
1- Evolução extrínseca com AG
• Programa Principal para evolução extrínseca:
aa_prin_ext_comAG.m
echo on
global bounds
% Setting the seed back to the beginning for comparison sake
rand('seed',0)
% Crossover Operators
xFns = 'simpleXover';
xOpts = [.4];
% Mutation Operators
mFns = 'binaryMutation';
mOpts = [0.005];
% Termination Operators
termFns = 'maxGenTerm';
termOps = [200]; % 200 Generations
% Selection Function
selectFn = 'roulette'
selectOps = [];
% Evaluation Function
evalFn = 'a_GA_Divisor_Com_Vetor';
evalOps = [];
type a_GA_Divisor_Com_Vetor
% Bounds on the variables
bounds = [1 100; 1 100];
% GA Options [epsilon float/binar display]
gaOpts=[1e-6 0 1];
% Generate an intialize population of size 20
startPop = initializega(100,bounds,'a_GA_Divisor_Com_Vetor',[],[1e-6
0]);
% Lets run the GA
% Hit a return to continue
pause
[x endPop bestPop trace]=ga(bounds,evalFn,evalOps,startPop,gaOpts,...
termFns,termOps,selectFn,selectOps,xFns,xOpts,mFns,mOpts);
75
% x is the best solution found
x
% Hit a return to continue
pause
% endPop is the ending population
endPop
% Hit a return to continue
pause
% trace is a trace of the best value and average value of generations
trace
% Hit a return to continue
pause
% Plot the best over time
clf
plot(trace(:,1),trace(:,2));
XLABEL({'Melhor Individuo ao Longo das Geracoes'});
% Hit a return to continue
pause
% Add the average to the graph
clf
plot(trace(:,1),trace(:,3));
XLABEL({'Media dos Individuos ao Longo das Geracoes'});
% Hit a return to continue
pause
echo off
• Programa para Zerar POTs: aa_Zerar_Pots.m
function[ ]=aa_Zerar_Pots()
parport = digitalio('parallel','LPT1'); % Configura porta paralela
LPT1
addline(parport, 0:7, 'out'); % Seleciona quais pinos
da porta queremos acessar
sprintf('Calibrando Pots - Aguarde')
delay = 500;
for m=1:1:100;
pause(0.05);
n=0;
while n<delay
n = n+1;
end
dado = [0 0 0 0 0 0 0 0]; % [LSB ---> MSB]
putvalue(parport,dado); % Joga os dados na porta
de saida
n=0;
while n<delay
n = n+1;
76
end
dado = [1 0 0 1 0 0 0 0];
putvalue(parport,dado);
n=0;
while n<delay
n = n+1;
end
dado = [0 0 0 0 0 0 0 0];
putvalue(parport,dado);
end
• Programa do amplificador somador ( método extrínseco ):
aa_AmpSomador.m
function [sol,Aptidao] = aa_AmpSomador(sol,options)
Rf = 400;
Va = 5;
Vb = 5;
Vdesj = -5;
Rb = sol(1) * 100;
Ra = sol(2) * 100;
Vout = (-1) * (Va * (Rf) / (Ra)) + (-1) *(Vb * (Rf) / (Rb));
resposta = Vout;
if Vout < -12
resposta = -12;
end
if Vout > 12
resposta = 12;
end
Vout=resposta;
Erro = ( Vout - Vdesj ).^2;
somaErro = sum(single(Erro));
Aptidao = 1 / (1 + (somaErro/2));
• Programa para Configurar POTs ( método extrínseco ):
aa_Configurar_Pots.m
sprintf('Configurando Pots - Aguarde')
parport = digitalio('parallel','LPT1'); % Configura porta paralela
LPT1
77
addline(parport, 0:7, 'out'); % Seleciona quais pinos
da porta queremos acessar
delay = 500;
for m=1:1:Ra;
n=0;
while n<delay;
n = n+1;
end
dado = [0 1 0 0 0 0 0 0]; % [LSB ---> MSB]
putvalue(parport,dado); % Joga os dados na
porta de saída
n=0;
while n<delay;
n = n+1;
end
dado = [1 1 0 0 0 0 0 0];
putvalue(parport,dado);
n=0;
while n<delay;
n = n+1;
end
dado = [0 1 0 0 0 0 0 0];
putvalue(parport,dado);
end
%Configurando Pot 2
for m=1:1:Rb;
n=0;
while n<delay;
n = n+1;
end
dado = [0 0 1 0 0 0 0 0];
putvalue(parport,dado);
n=0;
while n<delay;
n = n+1;
end
dado = [0 0 1 1 0 0 0 0];
putvalue(parport,dado);
n=0;
while n<delay
n = n+1;
end
dado = [0 0 1 0 0 0 0 0];
putvalue(parport,dado);
end
pause(5);
sprintf('Fim do Ajuste dos Pots')
78
2- Evolução extrínseca sem AG
• Programa principal para cálculo dos POTs sem AG ( método
extrínseco ): ab_segundoExperimento.m
function main
Vref = -7;
menorErro = 1000;
Rf = 400;
Va = 5;
Vb = 5;
for Ra = 0:100:10000
for Rb = 0:100:10000
erro = compara(Ra, Rb, Rf, Va, Vb, Vref);
if erro < menorErro
menorErro = erro
Ra
Rb
end
end
end
% Enviar dados Ra e Rb para o hardware
aa_Zerar_Pots
aa_Configurar_Pots(Rb,Ra)
function erro = compara(Ra, Rb, Rf, Va, Vb, Vref)
Vout = ab_simuladorPIC(Ra, Rb, Rf, Va, Vb);
erro = (Vref - Vout).^2;
• Programa para simular o amplificador somador (método
extrínseco) : ab_simuladorPIC.m
function resposta = ab_simuladorPIC(Ra, Rb, Rf, Va, Vb)
Vout = (-1) * (Va * (Rf) / (Ra)) + (-1) *(Vb * (Rf) / (Rb));
resposta = Vout;
if Vout < -12
resposta = -12;
end
if Vout > 12
resposta = 12;
end
79
3- Evolução intrínseca sem AG
• Programa principal para cálculo dos POTs sem AG ( método
intrínseco ): ac_prin_int_comAG.m
function main
clear all
clc
menorErro = 1000;
delay = 500;
Vref=-5 % definir qual a tensão desejada de saída
aa_Zerar_Pots
for Ra=0:100:10000
n=0;
while n<delay;
n = n+1;
end
dado = [0 1 0 0 0 0 0 0]; % [LSB ---> MSB]
putvalue(parport,dado); % Joga os dados na
porta de saída
n=0;
while n<delay;
n = n+1;
end
dado = [1 1 0 0 0 0 0 0];
putvalue(parport,dado);
n=0;
while n<delay;n = n+1;
end
dado = [0 1 0 0 0 0 0 0];
putvalue(parport,dado);
for Rb=0:100:10000
n=0;
while n<delay;
n = n+1;
end
dado = [0 0 1 0 0 0 0 0];
putvalue(parport,dado);
n=0;
while n<delay;
n = n+1;
end
dado = [0 0 1 1 0 0 0 0];
putvalue(parport,dado);
n=0;
while n<delay
n = n+1;
end
dado = [0 0 1 0 0 0 0 0];
putvalue(parport,dado);
erro = compara(Vref);
if erro < menorErro
menorErro = erro
80
A=Ra
B=Rb
end
end
aa_Zerar_Pots
for Rb=0:100:10000
n=0;
while n<delay;
n = n+1;
end
dado = [0 0 0 0 0 0 0 0];
putvalue(parport,dado);
n=0;
while n<delay;
n = n+1;
end
dado = [0 0 0 1 0 0 0 0];
putvalue(parport,dado);
n=0;
while n<delay
n = n+1;
end
dado = [0 0 0 0 0 0 0 0];
putvalue(parport,dado);
end
end
% Enviar dados Ra e Rb para o hardware
aa_Zerar_Pots
Ra=A/100
Rb=B/100
aa_Configurar_Pots
function erro = compara(Vref)
[VoutAD]=Conversao_AD;
Vout = [VoutAD];
erro = (Vref - Vout).^2;
• Programa para coleta de dados serial e transformação para sinal
de tensão: Conversao_AD.m
function[VoutAD]=Conversao_AD
s=serial('COM1');
s.Name='interface_serial';
s.BaudRate=9600;
s.Parity='none';
s.DataBits=8;
s.StopBits=1;
s.FlowControl='none';
s.Terminator='LF';
s.Timeout=5;
fopen(s);
s.Status;
Serial_Data=fread(s,1,'uint8');
VoutAD=(Serial_Data+1)*(4.99/256);
fclose(s);
delete(s);
clear s;
81
4- Evolução intrínseca com AG
• Programa principal para cálculo dos POTs com AG ( método
intrínseco ): ad_prin_int_comAG.m
clc
echo on
global bounds
aa_Zerar_Pots
Ra=0;
Rb=0;
% Setting the seed back to the beginning for comparison sake
rand('seed',0)
% Crossover Operators
xFns = 'simpleXover';
xOpts = [.4];
% Mutation Operators
mFns = 'binaryMutation';
mOpts = [0.005];
% Termination Operators
termFns = 'maxGenTerm';
termOps = [5]; % 200 Generations
% Selection Function
selectFn = 'roulette'
selectOps = [];
% Evaluation Function
evalFn = 'ad_AmpSomador';
evalOps = [];
type ad_AmpSomador
% Bounds on the variables
bounds = [1 100; 1 100];
% GA Options [epsilon float/binar display]
gaOpts=[1e-6 0 1];
% Generate an intialize population of size 20
startPop = initializega(20,bounds,'ad_AmpSomador',[],[1e-6 0]);
% Lets run the GA
% Hit a return to continue
pause
[x endPop bestPop trace]=ga(bounds,evalFn,evalOps,startPop,gaOpts,...
termFns,termOps,selectFn,selectOps,xFns,xOpts,mFns,mOpts);
82
% x is the best solution found
x
% Hit a return to continue
pause
% endPop is the ending population
endPop
% Hit a return to continue
pause
% trace is a trace of the best value and average value of generations
trace
% Hit a return to continue
pause
% Plot the best over time
clf
plot(trace(:,1),trace(:,2));
XLABEL({'Melhor Individuo ao Longo das Geracoes'});
% Hit a return to continue
pause
% Add the average to the graph
clf
plot(trace(:,1),trace(:,3));
XLABEL({'Media dos Individuos ao Longo das Geracoes'});
% Hit a return to continue
pause
echo off
• Programa do amplificador somador ( método intrínseco ):
ad_AmpSomador.m
function [sol,Aptidao] = ad_AmpSomador(sol,options)
Vdesj = 3;
Rb = round(sol(1));
Ra = round(sol(2));
aa_zerar_Pots
aa_Configurar_Pots(Rb,Ra)
[VoutAD]=Conversao_AD;
Vout = [VoutAD]
Erro = ( Vout - Vdesj ).^2;
somaErro = sum(single(Erro));
Aptidao = 1 / (1 + (somaErro/2));
83
5- Programa do módulo microcontrolado
• Programa para a conversão A/D no microcontrolador
PIC18F4550: adteste.HEX.
program adteste
main:
usart_init(9600)
repete:
usart_write(adc_read(0)/4)
delay_ms(1000)
goto repete
end.