ex-perts da informática

99
x-Perts da informática | HackingExtreme 2008.1 1 hackingextreme.blogspot.com

Upload: paullomt

Post on 06-Jun-2015

867 views

Category:

Documents


9 download

DESCRIPTION

Apostila para ex-perts feito pela produção do blog hackingextreme.blogspot.com, baseado em wikipedia.

TRANSCRIPT

Page 1: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

1 hackingextreme.blogspot.com

Page 2: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

> Informática

Chama-se genericamente informática ao conjunto das ciências da informação, estando incluídas neste grupo: a ciência da computação, a teoria da informação, o processo de cálculo, a análise numérica e os métodos teóricos da representação dos conhecimentos e de modelagem dos problemas.

O termo informática, sendo dicionarizado com o mesmo significado amplo nos dois lados do Atlântico [1], assume em Portugal o sentido sinónimo de ciência da computação enquanto que no Brasil é habitualmente usado para referir especificamente o processo de tratamento da informação por meio de máquinas eletrônicas definidas como computadores.

O estudo da informação começou na matemática quando nomes como Alan Turing, Kurt Gödel e Alonzo Church, começaram a estudar que tipos de problemas poderiam ser resolvidos, ou computados, por elementos humanos que seguissem uma série de instruções simples de forma , independente do tempo requerido para isso. A motivação por trás destas pesquisas era o avanço durante a revolução industrial e da promessa que máquinas poderiam futuramente conseguir resolver os mesmos problemas de forma mais rápida e mais eficaz. Do mesmo jeito que as indústrias manuseiam matéria-prima para transformá-la em um produto final, os algoritmos foram desenhados para que um dia uma máquina pudesse tratar informações. Assim nasceu a informática.

Origem da palavra informática

Em 1957, o cientista da computação alemão Karl Steinbuch publicou um jornal chamado Informatica: Informationsverarbeitung ("Informática: processamento de informação").A palavra portuguesa é derivada do francês informatique, vocábulo criado por Philippe Dreyfus, em 1962, a partir do radical do verbo francês informer, por analogia com mathématique, électronique, etc.Em português, há profissionais da área que também consideram que a palavra informática seja formada pela junção das palavras informação + automática. Pode dizer-se que informática é a ciência que estuda o processamento automático da informação por meio do Computador.

> Acesso livre

Acesso livre (AL), do inglês Open Access (OA), é a forma abreviada como no mundo dos sistemas de informação e documentação científica se refere ao acesso livre ao conhecimento. Acesso livre significa a livre disponibilização na Internet de literatura de carácter científico, permitindo a qualquer utilizador pesquisar, consultar, descarregar, imprimir, copiar e distribuir, o texto integral de artigos e outras fontes de informação científica.As duas principais declarações internacionais sobre o acesso livre são a "Iniciativa de Acesso Livre de Budapeste" (Budapest Open Access Initiative) de 2002 e a

2 hackingextreme.blogspot.com

Page 3: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

Declaração de Berlim sobre o Acesso Livre ao Conhecimento nas Ciências e Humanidades (Berlin Declaration on Open Access to Knowledge in the Sciences and Humanities), de 2003.Existem duas vias para o acesso livre, com diferentes variantes. Na edição em acesso livre,[1] também conhecida como via "dourada" para o acesso livre, as revistas tornam os seus artigos livremente acessíveis no momento da publicação. Em exemplo de editora em acesso livre é a Public Library of Science. No acesso livre por auto-arquivo, também chamado a via "verde" para o AL, os autores tornam livremente acessíveis os seus artigos, depositando uma cópia num repositório. Os repositórios são normalmente institucionais ou temáticos (por área disciplinar).O acesso Livre é um tema cuja discussão é de grande actualidade entre académicos, bibliotecários, dirigentes universitários e governantes. Este debate tem grandes consequências na forma como o mundo da ciência publica os resultados da investigação, a qual constitui o centro da difusão do conhecimento, mas também da sua validação, da acreditação dos investigadores e da estruração social da ciência.

> Ciência da informação

Ciência da informação é a ciência que estuda a informação desde a sua gênese até o processo de transformação de dados em conhecimento. A Ciência da Informação estuda ainda a aplicação da informação em organizações, seu uso, e estuda as interações entre pessoas, organização e sistemas de informação. Logística da Informação, planejamento de informação, modelagem de dados e análise, são as principais áreas de estudo. Entre outras áreas estão a teoria da organização.

> Ciência da computação

Ciência da computação é o estudo dos algoritmos e suas aplicações, bem como das estruturas matemáticas indispensáveis à formulação precisa dos conceitos fundamentais da teoria da computabilidade e da computação aplicada. Desempenha por isso um papel importante na área de ciência da computação a formalização matemática de algoritmos, como forma de representar problemas decidíveis, i.e,. os que são susceptíveis de redução a operações elementares básicas, capazes de serem reproduzidas através de um qualquer dispositivo mecânico/eletrônico capaz de armazenar e manipular dados. Um destes dispositivos é o computador digital, de uso generalizado, nos dias de hoje, pelo custo reduzido dos componentes eletrônicos que formam o seu hardware.

Os estudos oriundos da Ciência da Computação podem ser aplicados em qualquer área do conhecimento humano em que seja possível definir métodos de resolução de problemas baseados em repetições previamente observadas.

3 hackingextreme.blogspot.com

Page 4: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

Nascimento da ciência da computação

Antes da década de 1920, computador era um termo associado a pessoas que realizavam cálculos, geralmente liderados por físicos em sua maioria mulheres. Milhares de computadores, eram empregados em projetos no comércio, governo e sítios de pesquisa. Após a década de 1920, a expressão máquina computacional começou a ser usada para referir-se a qualquer máquina que realize o trabalho de um profissional computador, especialmente aquelas de acordo com os métodos da Tese de Church-Turing.O termo máquina computacional acabou perdendo espaço para o termo reduzido computador no final da década de 1940, com as máquinas digitais cada vez mais difundidas. Alan Turing, conhecido como pai da Ciência da Computação, inventou a Máquina de Turing, que posteriormente evoluiu para o computador moderno.

> História da computação

O desenvolvimento da tecnologia da computação foi a união de várias áreas do conhecimento humano, dentre as quais: a matemática, a eletrônica digital, a lógica de programação, entre outras.

Os números e o ábaco

A capacidade do ser humano em calcular quantidades nos mais variados modos foi um dos fatores que possibilitaram o desenvolvimento da matemática e da lógica. Nos primórdios da matemática e da álgebra, utilizavam-se os dedos das mãos para efetuar cálculos.Na região do Mar Mediterrâneo, surgiram o alfabeto e o ábaco. O ábaco dos romanos consistia de bolinhas de mármore que deslizavam numa placa de bronze cheia de sulcos. Também surgiram alguns termos matemáticos: em latim "Calx" significa mármore, assim "Calculos" era uma bolinha do ábaco, e fazer cálculos aritméticos era "Calculare".

A primeira considerada máquina de calcular foi desenvolvida por Wilhelm Schickard em 1592. Ela fazia multiplicação e divisão, mas foi perdida durante a Guerra dos Trinta Anos. A primeira calculadora capaz de realizar as operações básicas de soma e subtração foi inventada em 1642 pelo filósofo, físico e matemático francês Blaise Pascal. Pascal, que aos 18 anos trabalhava com seu pai em um escritório de coleta de impostos na cidade de Rouen, desenvolveu a máquina para auxiliar o seu trabalho de contabilidade. A calculadora usava engrenagens que a faziam funcionar de maneira similar a um odômetro. Pascal recebeu uma patente do rei da França para que lançasse sua máquina no comércio. A comercialização de suas calculadoras não foi satisfatória devido a seu funcionamento pouco confiável, apesar de Pascal ter construído cerca de 50 versões.Em 1671, o filósofo e matemático alemão de Leipzig,Gottfried Wilhelm Leibniz introduziu o conceito de realizar multiplicações e divisões através de adições e subtrações sucessivas. Em 1694, a máquina foi construída, no entanto, sua operação apresentava muita dificuldade e sujeita a erros.

4 hackingextreme.blogspot.com

Page 5: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

Em 1820, o francês natural de Paris, Charles Xavier Thomas, conhecido como Thomas de Colmar,projetou e construiu uma máquina capaz de efetuar as 4 operações aritméticas básicas: a Arithmomet. Esta foi a primeira calculadora realmente comercializada com sucesso. Ela fazia multiplicações com o mesmo princípio da calculadora de Leibnitz e efetuava as divisões com a assistência do usuário.

A revolução industrial

Em 1801, na França, durante a Revolução Industrial, Joseph Marie Jacquard, mecânico francês, (1752-1834) inventou um tear mecânico controlado por grandes cartões perfurados. Sua máquina era capaz de produzir tecidos com desenhos bonitos e intrincados. Foi tamanho o sucesso que Jacquard foi quase morto quando levou o tear para Lyon, pois as pessoas tinham medo de perder o emprego. Em sete anos, já havia 11 mil teares desse tipo operando na França.

Babbage e Ada

O brilhante matemático inglês Charles Babbage (26 de dezembro de 1791 - 18 de outubro de 1871) é conhecido como o "Pai do Computador". Babbage projetou o chamado "Calculador Analítico", muito próximo da concepção de um computador atual.

O projeto, totalmente mecânico, era composto de uma memória, um engenho central, engrenagens e alavancas usadas para a transferência de dados da memória para o engenho central e dispositivos para entrada e saída de dados. O calculador utilizaria cartões perfurados e seria automático.

Por algum tempo, o governo britânico financiou Babbage para construir a sua invenção.

Em parceria com Charles Babbage, Ada Augusta (1815-1852) ou Lady Lovelace, filha do poeta Lord Byron, era matemática amadora entusiasta. Ela se tornou a pioneira da lógica de programação, escrevendo séries de instruções para o calculador analítico. Ada inventou o conceito de subrotina, descobriu o valor das repetições - os laços (loops) e iniciou o desenvolvimento do desvio condicional.

Babbage teve muitas dificuldades com a tecnologia da época, que era inadequada para se construir componentes mecânicos com a precisão necessária. Com a suspensão do financiamento por parte do governo britânico, Babbage e Ada utilizaram a fortuna da família Byron até a falência, sem que pudessem concluir o projeto, e assim o calculador analítico nunca foi construído.

A lógica booleana

5 hackingextreme.blogspot.com

Page 6: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

As máquinas do início do século XIX utilizavam base decimal (0 a 9), mas foram encontradas dificuldades em implementar um dígito decimal em componentes eletrônicos, pois qualquer variação provocada por um ruído causaria erros de cálculo consideráveis.O matemático inglês George Boole (1815-1864) publicou em 1854 os princípios da lógica booleana, onde as variáveis assumem apenas valores 0 e 1 (verdadeiro e falso), que passou a ser utilizada a partir do início do século XX.

Hollerith e sua máquina de perfurar cartões

Por volta de 1890, Dr. Herman Hollerith (1860-1929) foi o responsável por uma grande mudança na maneira de se processar os dados dos censos da época.Os dados do censo de 1880, manualmente processados, levaram 7 anos e meio para serem compilados. Os do censo de 1890 foram processados em 2 anos e meio, com a ajuda de uma máquina de perfurar cartões e máquinas de tabular e ordenar, criadas por Hollerith e sua equipe.As informações sobre os indivíduos eram armazenadas por meio de perfurações em locais específicos do cartão. Nas máquinas de tabular, um pino passava pelo furo e chegava a uma jarra de mercúrio, fechando um circuito elétrico e causando um incremento de 1 em um contador mecânico.Mais tarde, Hollerith fundou uma companhia para produzir máquinas de tabulação. Anos depois, em 1924, essa companhia veio a se chamar IBM.

O primeiro computador

Há uma grande polêmica em torno do primeiro computador. O Z-1 é considerado por muitos como o primeiro computador eletromecânico. Ele usava relés e foi construído pelo alemão Konrad Zuse (1910-1995) em 1936. Zuse tentou vendê-lo ao governo para uso militar, mas foi subestimado pelos nazistas, que não se interessaram pela máquina.

A guerra e os computadores

Com a II Guerra Mundial, as pesquisas aumentaram nessa área. Nos Estados Unidos, a Marinha, em conjunto com a Universidade de Harvard e a IBM, construiu em 1944 o Mark I, um gigante eletromagnético. Num certo sentido, essa máquina era a realização do projeto de Babbage.Mark I ocupava 120 m3, tinha milhares de relés e fazia muito barulho. Uma multiplicação de números de 10 dígitos levava 3 segundos para ser efetuada.Em segredo, o exército norte-americano também desenvolvia seu computador. Esse usava apenas válvulas e tinha por objetivo calcular as trajetórias de mísseis com maior precisão.O engenheiro John Presper Eckert (1919-1995) e o físico John Mauchly (1907-1980) projetaram o ENIAC: Eletronic Numeric Integrator And Calculator. Com 18 000 válvulas, o ENIAC conseguia fazer 500 multiplicações por segundo, porém só ficou pronto em 1946, vários meses após o final da guerra. Os custos para a manutenção e conservação do ENIAC eram proibitivos, pois dezenas a centenas de válvulas

6 hackingextreme.blogspot.com

Page 7: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

queimavam a cada hora e o calor gerado por elas necessitava ser controlado por um complexo sistema de refrigeração, além dos gastos elevadíssimos de energia elétrica.

Alan Turing

Alan Mathison Turing nasceu em 23 de junho de 1912 em Londres, filho de um oficial britânico, Julius Mathison e Ethel Sara Turing. Seu interesse pela ciência começou cedo, logo que aprendeu a ler e escrever, distraia-se fatorando números de hinos religiosos e desenhando bicicletas anfíbias. A maior parte do seu trabalho foi desenvolvido no serviço de espionagem, durante a II Grande Guerra, levando-o somente por volta de 1975 a ser reconhecido como um dos grandes pioneiros no campo da computação, Em 1928, Alan começou a estudar a Teoria da Relatividade, conhecendo Christopher Morcom, que o influenciou profundamente. Morcom morreu em 1930 e Alan se motivou a fazer o que o amigo não teve tempo, durante anos trocou correspondências com a mãe de Morcom a respeito das idéias do amigo e se maravilhou com a possibilidade de resolver problemas com a teoria mecânica quântica.Chegou inclusive a escrever sobre a possibilidade do espirito sobreviver após a morte.Depois de concluir o mestrado em King's College (1935) e receber o Smith's prize em 1936 com um trabalho sobre a Teoria das Probabilidades, Turing se enveredou pela área da computação. Sua preocupação era saber o que efetivamente a computação poderia fazer. As respostas vieram sob a forma teórica, de uma máquina conhecida como Turing Universal Machine, que possibilitava calcular qualquer número e função, de acordo com instruções apropriadas.Quando a II Guerra Mundial eclodiu, Turing foi trabalhar no Departamento de Comunicações da Gran Bretanha (Government Code and Cypher School) em Buckinghamshire, com o intuito de quebrar o código das comunicações alemãs, produzido por um tipo de computador chamado Enigma. Este código era constantemente trocado, obrigando os inimigos a tentar decodifica-lo correndo contra o relógio. Turing e seus colegas cientistas trabalharam num sistema que foi chamado de Colossus, um enorme emaranhado de servo-motores e metal, considerado um precursor dos computadores digitais.Durante a guerra, Turing foi enviado aos EUA a fim de estabelecer códigos seguros para comunicações transatlânticas entre os aliados. Supõe-se que foi em Princeton, NJ, que conheceu Von Neumann e daí ter participado no projeto do ENIAC na universidade da Pensilvânia..Terminada a guerra, Alan se juntou ao National Physical Laboratory para desenvolver um computador totalmente inglês que seria chamado de ACE (automatic computing engine).Decepcionado com a demora da construção, Turing mudou-se para Manchester. Em 1952, foi preso por "indecência", sendo obrigado a se submeter à pisicoanálise e a tratamentos que visavam curar sua homosexualidade.Turing suicidou-se em Manchester, no dia 7 de junho de 1954, durante uma crise de depressão, comendo uma maçã envenenada com cianureto de potássio.

O Teste de Turing

7 hackingextreme.blogspot.com

Page 8: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

O teste consistia em submeter um operador, fechado em uma sala, a descobrir se quem respondia suas perguntas, introduzidas através do teclado, era um outro homem ou uma máquina. Sua intenção era de descobrir se podiamos atribuir à máquina a noção de inteligência

Von Neumann

O matemático húngaro John von Neumann (1903-1957) formalizou o projeto lógico de um computador.Em sua proposta, von Neumann sugeriu que as instruções fossem armazenadas na memória do computador. Até então elas eram lidas de cartões perfurados e executadas, uma a uma. Armazená-las na memória, para então executá-las, tornaria o computador mais rápido, já que, no momento da execução, as instruções seriam obtidas com rapidez eletrônica.A maioria dos computadores hoje em dia segue o modelo proposto por von Neumann.

Esse modelo define um computador seqüencial digital em que o processamento das informações é feito passo a passo, caracterizando um comportamento determinístico (ou seja, os mesmos dados de entrada produzem sempre a mesma resposta).

Gerações de computadores

A arquitetura de um computador depende do seu projeto lógico, enquanto que a sua implementação depende da tecnologia disponível.As três primeiras gerações de computadores refletiam a evolução dos componentes básicos do computador (hardware) e um aprimoramento dos programas (software) existentes.Os computadores de primeira geração (1945–1959) usavam válvulas eletrônicas, quilômetros de fios, eram lentos, enormes e esquentavam muito.A segunda geração (1959–1964) substituiu as válvulas eletrônicas por transístores e os fios de ligação por circuitos impressos, o que tornou os computadores mais rápidos, menores e de custo mais baixo.A terceira geração de computadores (1964–1970) foi construída com circuitos integrados, proporcionando maior compactação, redução dos custos e velocidade de processamento da ordem de microssegundos. Tem início a utilização de avançados sistemas operacionais.A quarta geração, de 1970 até hoje, é caracterizada por um aperfeiçoamento da tecnologia já existente, proporcionando uma otimização da máquina para os problemas do usuário, maior grau de miniaturização, confiabilidade e velocidade maior, já da ordem de nanossegundos (bilionésima parte do segundo).O termo quinta geração foi criado pelos japoneses para descrever os potentes computadores "inteligentes" que queriam construir em meados da década de 1990. Posteriormente, o termo passou a envolver elementos de diversas áreas de pesquisa relacionadas à inteligência computadorizada: inteligência artificial, sistemas especialistas e linguagem natural. Mas o verdadeiro foco dessa ininterrupta quinta geração é a conectividade, o maciço esforço da indústria para permitir aos usuários

8 hackingextreme.blogspot.com

Page 9: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

conectarem seus computadores a outros computadores. O conceito de supervia da informação capturou a imaginação tanto de profissionais da computação como de usuários comuns.

Cronologia da evolução dos computadores História do hardware

> História do hardware

O hardware do Computador é um componente essencial no processo de cálculo e armazenamento de dados pois ele é necessário para o processamento e compartilhamento de dados. O primeiro computador que se tem notícia é literalmente duro. Os Fenícios armazenavam peças cerâmicas representando coisas como estoque e grãos em vasilhames, que não eram usados apenas pelo mercador mas pelos contadores e oficiais do governo.Este texto apresenta os fatos mais significativos no desenvolvimento do hardware do computador.

Primeiros dispositivos para facilitar o cálculo

Ábaco

A Humanidade tem utilizado dispositivos para auxiliar a computação há milênios. Um exemplo é o dispositivo para estabelecer a igualdade pelo peso: as clássicas balanças, posteriormente utilizadas para simbolizar a igualdade na justiça. Um dispositivo mais orientado à aritmética é o ábaco mostrado na figura ao lado.

Primeiras calculadoras mecânicas

Em 1623 Wilhelm Schickard construiu a primeira calculadora mecânica e assim, tornou-se o pai da era da computação. Como sua máquina utilizava técnicas como engrenagens inicialmente desenvolvidas para relógios, ela foi também chamada de 'relógio calculador'. Ela foi colocada em uso prático por seu amigo Johannes Kepler, que revolucionou a astronomia.A máquina de Blaise Pascal (a Pascalina, 1642) e Gottfried Wilhelm von Leibniz (1670) se seguiram.

Leibniz descreveu também o código binário, um ingrediente central de todos os computadores modernos. Entretanto, até 1940, muitos projetos (incluindo a máquina de Babbage do século 19 e mesmo o ENIAC de 1945) foram baseados no sistema decimal, mais difícil de implementar.John Napier notou que a multiplicação e a divisão de números poderia ser feita pela adição e subtracão, respectivamente, de logaritmos destes números. Como números reais podem ser representados pelas distâncias ou intervalos em uma linha, uma simples operação de translação ou movimentação de dois pedaços de madeira, corretamente marcados com intervalos logaritmos ou lineares, foi utilizada como a régua de cálculo por gerações de engenheiros e outros profissionais de ciências

9 hackingextreme.blogspot.com

Page 10: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

exatas, ate a invenção da calculadora de bolso . Assim os engenheiros do programa Apollo para enviar o homem à lua fizeram seus cálculos em réguas de cálculo.

Leitores de cartões perfurados 1801-1940

Em 1801, Joseph-Marie Jacquard desenvolveu uma máquina têxtil em que o padrão de saída era controlado por cartões perfurados. O conjunto de cartões poderia ser

alterado sem alterar a estrutura da máquina têxtil. Este foi um marco na programação.

Em 1890 o censo dos Estados Unidos utilizou cartões perfurados e máquinas de ordenação desenhadas por Herman Hollerith para controlar os dados do censo da década conforme previsto na constituição. A companhia de Hollerith tornou-se posteriormente o núcleo da IBM.No século 20, a eletricidade foi utilizada pela

primeira vez em máquinas de calcular e ordenar. Em 1940, W.J. Eckert do Thomas J. Watson Astronomical Computing Bureau da Universidade de Columbia publicou o artigo Método dos cartões perfurados na computação científica que era suficientemente avançado para resolver equações diferenciais, multiplicar e dividir números de ponto flutuante, baseado unicamente em cartões perfurados e mesas de conexão similares as utilizadas por operadores de telefonia. Os cálculos astronomicos representaram o estado da arte na computação.

Primeiros projetos de máquinas programáveis 1835-1900s

A característica que define um "Computador Universal" é a "programabilidade" que permite ao computador emular qualquer outra máquina de calcular alterando a sequência de instruções armazenadas. Em 1835 Charles Babbage descreve sua Máquina Analítica. Esta máquina tratava-se de um projeto de um computador programável de propósito geral, empregando cartões perfurados para entrada e uma máquina de vapor para fornecer energia. Enquanto os projetos estavam provavelmente corretos, conflitos com o artesão que construia as partes, e o fim do financiamento do governo, tornaram impossivel a sua construção. Ada Lovelace, filha de Lord Byron, traduziu e adicionou anotações ao Desenho da Máquina Analítica de L. F. Manabrea. Ela se tornou uma parceira bem próxima de Babbage. Alguns reinvindicam que ela é a primeira programadora de computadores do mundo, entretando essa reinvindicação e a validade de suas outras contribuições são disputadas por muitos. A reconstrução da Máquina Diferencial está em operação desde 1991 no Museu de Ciências de Londres, ela trabalha como Babbage projetou e mostra que ele estava certo na teoria e permite a produção de partes da precisão requerida. Babbage falhou porque seus desenhos eram muito ambiciosos, ele teve problemas com relações de trabalho, e era politicamente inapto.

Outros tipos limitados de computação mecânica 1800s-1900s

10 hackingextreme.blogspot.com

Page 11: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

No início do século 20 as primeiras calculadoras mecânicas, caixas registradoras e máquinas de cálculo em geral foram redesenhadas para utilizar motores elétricos, com a posição das engrenagens representando o estado de uma variável. Pessoas eram empregadas com o cargo de "computador", e utilizavam calculadoras para avaliar expressões. Durante o Projeto Manhattan, o futuro prêmio Nobel Richard Feynman foi o supervisor de uma sala cheia de computadores humanos, muitos deles mulheres, que entendiam as equações diferenciais que estavam sendo solucionadas para a guerra. Mesmo o renomado Stanislaw Marcin Ulam foi encarregado de trabalhar na tradução da matemática em um modelo computacional aproximado da bomba de hidrogênio, depois da guerra.Durante a Segunda guerra mundial, Os planos de Curt Herzstark para uma calculadora mecânica de bolso literalmente salvaram sua vida. Veja: Cliff Stoll, Scientific American 290, no. 1, pp. 92-99. (Janeiro 2004)

Computadores analógicos, pré-1940

Antes da segunda guerra, computadores mecânicos e elétricos computadores analógicos foram considerados o 'estado da arte', e muitos pensavam que eles eram o futuro da computação. Computadores analógicos utilizam variações contínuas de variáveis físicas, como voltagem e corrente, ou a velocidade de rotação de um dispositivo, para representar as quantidades sendo processadas. Um exemplo ingênuo de tal máquina é o Integrator aquático construído em 1936. Ao contrário dos computadores digitais modernos, computadores analógicos não são muito flexíveis, e precisavam ser reconfigurados (reprogramados) manualmente para trocar o problema em que iriam trabalhar. Computadores analógicos tinham uma vantagem frente aos primeiros computadores digitais pois eram capazes de resolver problemas mais complexos. Desde que os programas de computador não eram ainda muito populares nesta época (apesar do trabalho pioneiro de Babbage), As soluções eram freqüêntemente hard-coded na forma de gráficos e nomogramas, que podiam representar, por exemplo, uma analogia da solução de problemas como a distribuição de pressão e temperatura em um sistema de aquecimento. Mas a medida que os computadores digitais se tornavam mais rápidos e com mais memória (e.g., RAM ou armazenamento interno), eles praticamente substituiram inteiramente os computadores analógicos, e a profissão de programador surgiu.

Primeira geração dos computadores digitais 1940

Válvula termiônica de uso geral utilizada nos primeiros computadoresA era da computação moderna começou com uma corrida de desenvolvimento antes e durante a Segunda guerra mundial, com circuitos eletrônicos, relés, capacitores e válvulas substituindo seus equivalentes mecânicos e o

11 hackingextreme.blogspot.com

Page 12: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

cálculo digital substituindo o cálculo analógico. Os computadores projetados e construídos nesta época foram chamados computadores de 'primeira geração'. Estes computadores eram normalmente construídos manualmente usando circuitos contendo relés e válvulas, e freqüentemente utilizavam cartões perfurados para a entrada e como a memória de armazenamento principal (não volátil). A memória temporária ou memória de trabalho, era fornecida por linhas de retardo acústicas (que utilizam a propagação do som no tempo como um meio para armazenar dados) ou por tubos de Williams (que utilizam a habilidade dos tubos de raios catódicos da televisão para armazenar dados). Em 1954, memórias de núcleo magnético rapidamente substituíram outras formas de armazenamento temporário, e dominaram até a metade da década de 1970.Em 1936 Konrad Zuse iniciou a construção do primeiras calculadoras 'Z-series', calculadoras com memória e programáveis (inicialmente de forma limitada). A calculadora de Zuse totalmente mecânica, mas ainda utilizando o sistema binário foi finalizada em 1938, entretanto, nunca funcionou com confiabilidade por problemas de precisão em suas peças.Em 1937, Claude Shannon finalizou sua tese de mestrado no MIT que implementava Álgebra booleana utilizando relés e chaves pela primeira vez na história. Intitulada Uma análise simbólica de relés e circuitos de comutação, A tese de Shannon forneceu as bases para o desenho prático de circuitos digitais.A máquina seguinte de Zuse, o Z3, foi finalizado em 1941. Ela era baseada em relés telefônicos e funcionou satisfatoriamente. O Z3 passou a ser o primeiro computador programável. Em vários aspectos ele era muito semelhante às máquinas modernas, sendo pioneiro em vários avanços, como o uso de aritmética binária, e números de ponto flutuante. A troca do sistema decimal, mais difícil de implementar (utilizado no projeto de Charles Babbage) pelo simples sistema binário tornou a máquina de Zuse mais fácil de construir e potencialmente mais confiável, com a tecnologia disponível naquele tempo. Esta é algumas vezes vista como a principal razão do sucesso de Zuse onde Babbage falhou, entretanto, muitas das máquinas de hoje continuam a ter instruções de ajuste decimal, a aritmética decimal é ainda essencial para aplicações comerciais e financeiras e hardware para cálculos de ponto-flutuante decimais vem sendo adicionado em muitas novas máquinas (O sistema binário continua sendo utilizado em praticamente todas as máquinas).Os Programas eram armazenados no Z3 em filmes perfurados. Desvios condicionais não existiam, mas na década de 1990 teóricos demonstraram que o Z3 ainda era um computador universal (ignorando sua limitação no seu espaço de armazenamento físico). Em duas patentes de 1937, Konrad Zuse antecipou que as instruções da máquina poderiam ser armazenadas no mesmo espaço de armazenamento utilizado para os dados - A primeira idéia do que viria a ser conhecida como a arquitetura de Von Neumann e que seria implementada no EDSAC britânico (1949). Zuse ainda projetou a primeira linguagem de alto nível, o (Plankalkül), em 1945, apesar desta não ser formalmente publicada até 1971, foi implementada pela primeira vez em 2000 pela universidade de Berlin -- cinco anos após a morte de Zuse.Zuse sofreu dramáticas derrotas e perdeu muitos anos durante a Segunda Guerra Mundial quando os bombardeamentos ingleses e americanos destruíram as suas primeiras máquinas. Aparentemente seu trabalho permaneceu em grande parte desconhecida para os engenheiros americanos e britânicos por muito tempo, no

12 hackingextreme.blogspot.com

Page 13: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

entanto pelo menos a IBM estava a par do seu trabalho e financiou sua companhia após a guerra 1946 em troca de permissões em suas patentes.Em 1940, a calculadora de número complexos, para aritmética de números complexos baseada em relés, foi construída. ela foi a primeira máquina a ser acessada remotamente via uma linha telefônica. Em 1938 John Vincent Atanasoff e Clifford E. Berry da universidade do estado de Iowa desenvolveram o Atanasoff Berry Computer (ABC), um computador com um propósito especial: resolver sistemas de equações lineares, e que empregava capacitores para sua memória. A máquina ABC não era programável, mas era um computador em outros aspectos.Durante a Segunda Guerra Mundial, os ingleses fizeram esforços significativos em Bletchley Park para quebrar a comunicação militar alemã. O principal sistema de criptografia germânico era feito através de uma máquina codificadora (o Enigma com vária variantes) foi atacado com bombas especialmente projetadas que ajudaram a encontrar possíveis chaves para o Enigma, depois que outras técnicas não tiveram sucesso. Os alemães também desenvolveram uma série de sistemas cifradores (chamados cifradores Fish pelos ingleses e cifradores de Lorenz pelos alemães) que eram um pouco diferentes do Enigma. Como parte do ataque contra este cifradores, o professor Max Newman e seus colegas (incluindo Alan Turing) ajudaram a projetar o Colossus. O Colossus Mk I foi feito em um curto período de tempo por Tommy Flowers no centro de pesquisa dos correios em Dollis Hill, Londres e então enviado para Bletchley Park.O Colossus foi o primeiro dispositivo de computação totalmente eletrônico. Ele utilizava apenas válvulas e não possuía relés. Ele tinha uma fita de papel como entrada e era capaz de fazer desvios condicionais. Nove Colossus Mk II foram construídos (O Mk I foi convertido para Mk II totalizando dez máquinas). Detalhes de sua existência, projeto e uso foram mantidos em segredo até a década de 1970. Dizem que Winston Churchill ordenou pessoalmente a destruição dos computadores em peças não maiores que uma mão humana. Devido a este segredo estes computadores não foram incluídos em muitas histórias da computação. Uma cópia reconstruída de uma das máquinas Colossus existe hoje em exposição em Bletchley Park.O trabalho de Turing antes da Guerra teve uma grande influência na teoria da computação, e após a Guerra ele projetou, construiu e programou alguns dos primeiros computadores no National Physical Laboratory na Universidade de Manchester. Seu artigo de 1936 incluía uma reformulação dos resultados de 1931 de Kurt Gödel além de uma descrição do que agora é chamado de máquina de Turing, um dispositivo puramente teórico inventado para formalizar a noção da execução de algorítimos, substituindo a complicada linguagem universal de Gödel baseada em aritmética. Computadores modernos tem a capacidade de execução equivalente a uma máquina de Turing universal), exceto por sua memória finita. Esta limitação na memória é algumas vezes vista como uma fronteira que separa computadores de propósito geral dos computadores de propósito especial anteriores.George Stibitz e colaboradores no Laboratório Bell em Nova Iorque produziram vários computadores baseados em relés no final da década de 1930 e início da década de 1940, mas foram concebidos principalmente para o controle do sistema de telefonia. Seus esforços foram um antecedente de outra máquina eletromecânica americana.

13 hackingextreme.blogspot.com

Page 14: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

O Harvard Mark I (oficialmente, o Calculador Controlado por Sequência) foi um computador de propósito geral eletro-mecânico construído com o financiamento da IBM e com a assistência de alguns funcionários da IBM sob a direção de um matemático de Harvard Howard Aiken. Seu projeto foi influenciado pela máquina analítica. Ele era uma máquina decimal que utilizava rodas de armazenamento em chaves rotativas juntamente com relés. Ele era programado por cartões perfurados, e continha várias calculadoras trabalhando em paralelo. Modelos posteriores continham vários leitores de fita de papel e a máquina podia trocar de leitor dependendo de uma condição. O Desenvolvimento começou em 1939 no laboratório Endicott da IBM; o Mark I foi transferido para a Universidade de Harvard e começou a operar em maio de 1944.

O ENIAC fez cálculos de trajetória balística consumindo 160kW.O ENIAC (Electronic Numerical Integrator and Computer), freqüentemente chamado o primeiro computador eletrônico de propósito-geral, validou publicamente o uso da eletrônica para a computação em larga escala. Isto foi crucial para o desenvolvimento da computação moderna, inicialmente devido à enorme vantagem em velocidade e depois pelo potencial de

miniaturização. Construído sob a direção de John Mauchly e J. Presper Eckert, ele era 1.000 vezes mais rápido que seus contemporâneos. O desenvolvimento e construção do ENIAC iniciou em 1941 e entrou em operação completa 1945. Quando seu projeto foi proposto, muitos pesquisadores acreditavam que milhares de delicadas válvulas iriam queimar com uma freqüência tal que o ENIAC estaria freqüentemente desligado para reparos e não teria uso prático. Ele foi, entretanto, capaz de fazer 100.000 cálculos simples por segundo por horas entre as falhas nas válvulas.`Programar' o ENIAC, entretanto, significava modificar a sua fiação interna - podemos dizer que isto nem se qualifica como programação, de outro modo qualquer tipo de reconstrução de algum computador limitado pode ser visto como programação. Vários anos depois, entretanto, ele se tornou capaz de executar programas armazenados em uma tabela de funções na memória.Todas as máquinas daquela data ainda deixavam de possuir o que passou a ser conhecido como a arquitetura de von Neumann: seus programas não eram armazenados no mesmo 'espaço' de memória que os dados e assim os programas não podiam ser manipulados como os dados.A primeira máquina com a arquitetura von Neumann foi o Manchester "Baby" ou Máquina Experimental em pequena escala, construída na Universidade de Manchester em 1948; ela foi seguida pelo Manchester Mark I em 1949 que funcionava como um sistema completo utilizando o tubo de Williams para a memória e introduziu o uso de registradores de índice. O outro candidato ao título de "primeiro computador com programas armazenados de forma digital" foi o EDSAC, projetado e construído na Universidade de Cambridge. Operacional menos de um ano depois do Manchester "Baby", ele era capaz de resolver problemas reais. O EDSAC foi inspirado nos planos do EDVAC, o sucessor do ENIAC; estes planos existiam na

14 hackingextreme.blogspot.com

Page 15: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

época que o ENIAC ficou operacional. Ao contrário do ENIAC, que utilizava processamento paralelo, O EDVAC utilizava uma única unidade de processamento. Seu desenho era simples e foi o primeiro a ser implementado em cada nova onda de miniaturização, e aumento de confiabilidade. Muitos consideram o Manchester Mark I / EDSAC / EDVAC os pais dos quais derivaram a arquitetura de todos os computadores correntes.O primeiro computador universal programável na Europa foi criado por um time de cientistas sob a direção de Segrey Alekseevich Lebedev do Instituto de Eletrotecnologia de Kiev, União Soviética (hoje Ucrânia). O computador MESM (МЭСМ, Pequena máquina eletrônica de cálculo) tornou-se operacional em 1950. Ele tinha cerca de 6.000 válvulas e consumia 25 kW de potência. Ele podia fazer aproximadamente 3.000 operações por segundo.A máquina da Universidade de Manchester tornou-se o protótipo do Ferranti Mark I. O primeiro Ferranti Mark I foi entregue à Universidade em fevereiro de 1951, e no mínimo nove outros foram vendidos entre 1951 e 1957.Em junho de 1951, o UNIVAC I (Universal Automatic Computer) foi entregue para o departamento de censo dos Estados Unidos da América. Mesmo tendo sido fabricado por Remington Rand, a máquina é freqüentemente chamada indevidamente de "IBM UNIVAC". Remington Rand vendeu 46 máquinas por mais de US$1 milhão cada. O UNIVAC foi o primeiro computador 'produzido em massa'; todos os predecessores foram feitos em pequena escala. Ele utilizava 5.200 válvulas e consumia 125 kW de potência. Utilizava uma linha de retardo de mercúrio capaz de armazenar 1.000 palavras de 11 dígitos decimais mais o sinal (palavras de 72 bits). Ao contrário das máquinas anteriores ele não utilizava cartões perfurados para entrada e sim uma fita de metal.Em Novembro de 1951, A empresa J. Lyons começou uma operação semanal de contabilidade de uma padaria com o LEO (Lyons Electronic Office). Este foi a primeira aplicação comercial em um computador programável.Ainda em 1951 (Julho), Remington Rand demonstrou o primeiro protótipo do 409, uma calculadora programável com cartões perfurados e plugues. Ele foi instalado inicialmente, no serviço de receita interna de Baltimore, em 1952. Veja em Rowayton Historical Society's timeline maiores detalhes. O 409 evoluiu para se tornar o Univac 60 e 120 em 1953.

Segunda geração 1947-1960

O grande passo seguinte na história da computação foi a invenção do transístor em 1948. Ele substituiu as frágeis válvulas, que ainda eram maiores e gastavam mais energia, além de serem menos confiáveis. Computadores transistorizados são normalmente referidos como computadores da 'segunda geração' e dominaram o mercado nos anos entre 1950 e início de 1960. Apesar de utilizar transistores e placas de circuito impresso estes computadores ainda eram grandes e utilizados principalmente em universidades, orgãos públicos e grandes empresas. O IBM 650 baseado em válvulas de 1954 pesava 900 kg, a fonte de alimentação pesava cerca de 1350 kg e ambos eram mantidos em gabinetes separados de 1,5 metros por 0,9 metros por 1,8 metros. Ele custava US$500.000 ou podia ser alugado por US$3.500 por mês. Entretanto a memória tinha originalmente apenas 2000 palavras de 10

15 hackingextreme.blogspot.com

Page 16: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

dígitos, uma limitação que forçava uma programação difícil, para obter resultados. Este tipo de limitação dominou a programação por décadas.Em 1955, Maurice Wilkes inventou a microprogramação, hoje utilizada universalmente na implementação dos projetos de CPU. O conjuto de instruções da CPU é definido por uma programação especial.Em 1956, A IBM vendeu seu primeiro disco magnético, RAMAC (Random Access Method of Accounting and Control). Ela utilizou 50 discos de metal de 24 polegadas, com 100 trilhas por lado. Ele podia armazenar 5 megabytes de dados a um custo de US$10.000 por megabyte.A primeira linguagem de programação de alto nível criada, o FORTRAN, foi também desenvolvida na IBM naquela época. (O projeto de Konrad Zuse de 1945 de uma linguagem de alto nível, Plankalkül, não estava implementado ainda.)Em 1959 a IBM construiu um mainframe baseado em transistores, o IBM 1401, que utilizava cartões perfurados. Ele se tornou um computador de propósito geral popular e 12.000 foram vendidos, tornando-se a mais bem sucedida máquina na história dos computadores. Ele utilizava uma memória principal magnética de 4000 caracteres (mais tarde expandida para 16.000). Muitos aspectos de seu projeto foram baseados no desejo de substituir as máquinas de cartões perfurados da década de 1920 que estavam em uso.Em 1960 a IBM vendeu o mainframe IBM 1620 baseado em transistores, originalmente utilizava somente fita de papel perfurado, mas foi logo atualizado para cartões perfurados. Ele provou ser um computador científico popular e cerca 2.000 foram vendidos. Ele utilizava uma memória de núcleo magnético de até 60.000 dígitos decimais.Ainda em 1960, a DEC lançou o PDP-1 sua primeira máquina destinada ao uso por pessoal técnico em laboratórios e para pesquisa.Em 1964 a IBM anunciou o System/360, que foi o primeira família de computadores que podia executar o mesmo programa em diferentes combinações de velocidade, capacidade e preço. Ele ainda foi pioneiro no uso comercial de microprogramas, com um conjunto estendido de instruções projetado para processar muitos tipos de dados, não apenas aritméticos. Além disto, ele unificou a linha de produtos da IBM, que anteriormente incluía uma linha "comercial" e uma linha "científica" separadas. O programa fornecido com o System/360 ainda incluía outros avanços, incluindo multiprogramação, novas linguagens de programação e independência dos programas dos dispositivos de entrada e saída. Mais de 14 000 System/360 foram vendidos até 1968.Ainda em 1964, a DEC criou o PDP-8 uma máquina muito pequena, novamente destinada a técnicos e laboratórios de pesquisa.

Terceira geração e posterior, após-1958

A explosão no uso dos computadores começou com a 'Terceira Geração' de computadores. Estes se baseiam na invenção independente do circuito integrado (ou chip) por Jack St. Claire Kilby e Robert Noyce, que posteriormente levou à invenção do microprocessador por Ted Hoff da Intel.

No final da década de 1950, pesquisadores como George Gamow notaram que

16 hackingextreme.blogspot.com

Page 17: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

longas seqüências de nucleotídeos no DNA formavam um código genético, assim surge uma outra forma de codificação ou programação, desta vez com expressões genéticas. Na década de 1960, foi identificado análogos para a instrução de parada halt, por exemplo.Na virada do milênio, pesquisadores notaram que o modelo descrito pela mecânica quântica poderia ser visto como elementos computacionais probabilísticos, com um poder de computação excedendo qualquer um dos computadores mencionados anteriormente, a Computação quântica.

> Computação paralela

Computação paralela é caracterizada pelo uso de várias unidades de processamento ou processadores para executar uma computação de forma mais rápida. Ela baseia-se no fato de que o processo de resolução de um problema pode ser divido em tarefas menores, que podem ser realizadas simultaneamente através de algum tipo de coordenação. O conceito foi originalmente pelo ILLIAC IV em 1976, uma década após sua concepção teórica.

Definição

O interesse por problemas cada vez mais complexos tem levado a necessidade de computadores cada vez mais potentes para resolve-los. Entretanto, limitações físicas e econômicas têm restringido o aumento da velocidade dos computadores sequenciais, ou seja, computadores que executam instruções em série, uma após a outra pela CPU. Por outro lado, problemas computacionais usualmente podem ter algumas de suas partes dividida em pedaços que poderiam ser solucionados ao mesmo tempo, ou processados em paralelo. Processamento paralelo é então uma forma pela qual a demanda computacional é suprida através do uso simultâneo de recursos computacionais como processadores para solução de um problema.Uma maneira clássica de se classificar arquiteturas de computadores é pela forma como fluxo de instruções e os dados se apresentam. Essa classificação é conhecida por taxonomia de Flynn.A terminologia frequente da computação paralela inclui:

Eficiência, o tempo de execução de uma tarefa em um único processador divido pelo tempo de execução da mesma tarefa utilizando-se múltiplos processadores.

Sobrecarga de paralelismo, o trabalho extra associado à versão paralela de uma solução comparado a sua versão sequencial, envolvendo o tempo de CPU e a quantidade de memória para a sincronização, comunicação e criação do ambiente paralelo.

Sincronização, a coordenação de tarefas simultâneas. Tarefa, um pedaço de trabalho computacional discreto e independente.

> Computador quântico

17 hackingextreme.blogspot.com

Page 18: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

Um computador quântico é um dispositivo que executa cálculos fazendo uso direto de propriedades da mecânica quântica, tais como sobreposição e interferência. Teoricamente, computadores quânticos podem ser implementados e o mais desenvolvido atualmente trabalha com poucos qubits de informação. O principal ganho desses computadores é a possibilidade de resolver em tempo eficiente, alguns problemas que na computação clássica levariam tempo impraticável, como por exemplo: fatoração, busca de informação em bancos não ordenados, etc.Computadores quânticos são diferentes de computadores clássicos tais como computadores de DNA e computadores baseados em transístores, ainda que estes utilizem alguns efeitos da mecânica quântica.

A estrutura dos computadores quânticos

Em mecânica quântica, é possível que uma partícula esteja em dois ou mais estados ao mesmo tempo. Uma famosa metáfora denominada o gato de Schrödinger expressa esta realidade: imagine que um gato está dentro de uma caixa, com 50% de chances de estar vivo e 50% de chances de estar morto, para a mecânica quântica, até abrirmos a caixa e verificarmos como está o gato, ele deve ser considerado vivo e morto ao mesmo tempo. A esta capacidade de estar simultaneamente em vários estados chama-se superposição.Um computador clássico tem uma memória feita de bits. Cada bit guarda um "1" ou um "0" de informação. Um computador quântico mantém um conjunto de qubits. Um qubit pode conter um "1", um "0" ou uma sobreposição destes. Em outras palavras, pode conter tanto um "1" como um "0" ao mesmo tempo. O computador quântico funciona pela manipulação destes qubits.Um computador quântico pode ser implementado com alguns sistemas com partículas pequenas, desde que obedeçam à natureza descrita pela mecânica quântica. Pode-se construir computadores quânticos com átomos que podem estar excitados e não excitados ao mesmo tempo, ou com fótons que podem estar em dois lugares ao mesmo tempo, ou com prótons e nêutrons, ou ainda com elétrons e pósitrons que podem ter um spin ao mesmo tempo "para cima" e "para baixo" e se movimentam em velocidades próximas à da luz. Com a utilização destes, ao invés de nano-cristais de silício, o computador quantico é menor que um computador tradicional.Uma molécula microscópica pode conter muitos milhares de prótons e nêutrons, e pode ser usada como computador quântico com muitos milhares de qubits. A grande questão a ser resolvida hoje para a implementação destas máquinas é a capacidade de controlar este sistema, já que as interferências são grandes e o tempo de coerência dos estados das partículas, pequeno.

O poder dos computadores quânticos

Encontrar todos os factores primos de um número grande pode ser uma tarefa muito difícil. Um computador quântico poderia resolver este problema muito rapidamente. Se um número tiver n bits (ou seja, se tiver o comprimento de n dígitos quando escrito em binário), então um computador quântico com um pouco mais de 2n qubits poderá encontrar os seus factores. Também poderá solucionar um problema relacionado,

18 hackingextreme.blogspot.com

Page 19: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

chamado problema do logaritmo discreto. Esta capacidade poderia permitir a um computador quântico quebrar qualquer dos sistemas criptográficos actualmente em uso. A maior parte das cifras de chave pública mais populares poderiam ser quebradas com rapidez, incluindo formas da cifras RSA, ElGammal e Diffie-Helman. Estas cifras são utilizadas para proteger páginas web seguras, email encriptado e muitos outros tipos de dados. A quebra destes códigos poderia ter um impacto significativo. A única forma de tornar seguro um algoritmo com o RSA seria tornar o tamanho da chave maior do que o maior computador quântico que pudesse ser construído. Parece provável que possa sempre ser possível construir computadores clássicos com mais bits que o número de qubits no maior computador quântico, e se se verificar que isto é verdade, então algoritmos como o RSA poderão permanecer seguros.Se um computador quântico fosse baseado nos prótons e nêutrons de uma molécula, seria talvez demasiado pequeno para ser visível, mas poderia factorizar números inteiros com milhares de bits. Um computador clássico a correr algoritmos conhecidos também poderia factorizar estes números. Mas para o conseguir fazer antes que o sol desaparecesse, teria de ser maior que universo conhecido. Seria algo inconveniente construí-lo.Não surpreendentemente, os computadores quânticos poderiam também ser úteis para correr simulações de mecânica quântica. O aumento de velocidade poderia ser tão grande como para factorizações. Isto poderia trazer grandes benefícios a muitos físicos.Atualmente se sabe que essa vantagem dos computadores quânticos existe apenas para os três problemas seguintes: fatoração, logaritmo discreto e simulações de física quântica. Existe outro problema em que os computadores quânticos têm uma vantagem menor, porém menos significativa. É a busca quântica em base de dados, à qual é referida algumas vezes por square root speedup.Suponha que existe um problema como encontrar a senha para desencriptar um arquivo. O problema possui as quatro propriedades:

A única forma de resolvê-lo é chutar respostas repetidamente e verificá-las Existem n respostas possíveis para se verificar Toda resposta possível gasta o mesmo tempo de verificação Não existem pistas indicando quais respostas sejam melhores. Gerar as

possibilidades randomicamente é tão eficiente quanto verificá-las em alguma ordem especial

Problemas com todas as quatro propriedades levarão uma média de n/2 tentativas para encontrar a resposta usando um computador clássico. O tempo gasto por um computador quântico seria proporcional à raiz quadrada de n. Isso pode representar um ganho enorme, encurtando o tempo para solução de alguns problemas de anos para segundos. Essa vantagem pode ser usada para atacar cifras simétricas tais como o 3DES e AES. Porém a defesa contra tal ataque é fácil, consistindo em dobrar o tamanho da chave para a cifra. Há também mais métodos complicados para tornar uma comunicação segura, tal como usar criptografia quântica.

19 hackingextreme.blogspot.com

Page 20: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

Atualmente não há outro problema prático conhecido para o qual os computadores quânticos mostrem um ganho expressivo sobre os computadores clássicos. As pesquisas continuam, e mais problemas podem, então, ser identificados.

A história dos computadores quânticos

1981 - Richard Feynman elaborou a primeira proposta de utilizar um fenômeno quântico para executar rotinas computacionais. Foi numa palestra apresentada na Primeira Conferência de Computação Física no MIT. Ele mostrou que um computador tradicional levaria um tempo extremamente longo para simular um simples experimento de física quântica. Por outro lado, sistemas quânticos simples podem executar enormes quantidades de cálculos num curto espaço de tempo. Poderia ser possível utilizar essa capacidade para se calcular algo útil.1985 - David Deutsch, na Universidade de Oxford, descreveu o primeiro computador quântico universal. Exatamente como uma Máquina de Turing pode simular outra máquina de Turing eficientemente, um computador quântico universal é capaz de simular o funcionamento de outro computador quântico com complexidade, no máximo, polinomial. Isso fez crescer a esperança de que um dispositivo simples seja capaz de executar muitos algoritmos quânticos diferentes.1994 - Peter Shor, no Bell Labs da AT&T em Nova Jersey, descobriu um excelente algoritmo. Ele permite a um computador quântico fatorar grandes inteiros rapidamente. Ele resolve tanto o problema da fatoração quanto o problema do logaritmo discreto. O Algortimo de Shor poderia, em teoria, quebrar muitos dos sistemas criptográficos em uso atualmente. Essa descoberta criou um enorme interesse nos computadores quânticos, até fora da comunidade acadêmica.1996 - Lov Grover, no Bell Labs, descobriu o algoritmo de pesquisa em bases de dados quânticas. O speedup de raiz quadrada não foi tão dramático quanto o speedup para fatoração, logs discretos, ou simulações físicas. Mas o algoritmo poderia ser aplicado a uma variedade muito maior de problemas. Qualquer problema que tinha que ser resolvido por uma pesquisa de força bruta, aleatória, podia agora ter um speedup de raiz quadrada.1996(?) - ???? Proposto o primeiro esquema para correção de erro quântico. Isso é uma aproximação a computadores quânticos que podem processar grandes números de qubits por longos períodos de tempo. Erros sempre são introduzidos pelo meio, mas uma forma de correção de erros quânticos pode sobrescrevê-los e corrigí-los. Esta pode ser a chave tecnológica para a produção em larga escala de computadores quânticos que realmente funcionam. Estas propostas adiantadas tiveram um certo número de limitações. Poderiam corrigir alguns erros, mas não erros que ocorrem durante o próprio processo da correção. Algumas melhorias foram sugeridas, e a pesquisa sobre esta continua ativa.199? - ???? no MIT foram construídos os primeiros computadores quânticos baseados em montagem térmica. O computador é , na verdade, uma única molécula pequena, que armazena qubits na rotação (spin) de seus protons e nêutrons. Trilhões e trilhões destas moléculas podem flutuar em um copo da água. O copo está colocado em um equipamento de ressonância magnética nuclear, similar à imagem por ressonância magnética das máquinas usadas nos hospitais. Este conjunto do room-temperature (' ' thermal ' ') das moléculas (' ' ensemble ' ') tem quantidades

20 hackingextreme.blogspot.com

Page 21: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

maciças de redundância, que permite que mantenha coerência muito melhor do que muitos outros sistemas propostos.2007 - Empresa Canadense D-Wave afirmou ter desenvolvido um computador híbrido chamado Orion que inclui um processador quântico de 16 qubits mas que também processa bits convencionais [1]. Se confirmado, será a primeira máquina desse tipo capaz de realizar tarefas práticas o que é surpreendente. Alguns especialistas vinham prevendo que demoraria 20 anos para que os computadores quânticos pudessem ser usados na prática. O Orion seria capaz de resolver problemas de lógica, encontrar soluções para o jogo Sudoku e pesquisar alternativas para drogas usadas na indústria farmacêutica. Em seu estágio atual, o Orion não teria aplicação comercial. Mas a D-Wave diz que vai produzir um computador de 32 qubits ainda neste ano. No primeiro semestre de 2008, a empresa pretende chegar a 512 qubits para, em menos de dois anos, atingir 1 quiloqubit. A comunidade científica recebeu o anúncio da empresa com ceticismo, por ela não ter liberado maiores detalhes do processador.

Como trabalha

Um computador clássico com três bits de memória pode apenas armazenar três caracteres (uns ou zeros). Num determinado momento, pode conter os bits "101". Um computador quântico pode atualmente armazenar 16 valores analógicos em pares para formar 8 números complexos. Em um dado instante, ele poderia conter isto:

Estado Amplitude Probabilidade

* (a+ib) (a²+b²)

000 0.37 + i 0.04 0.14

001 0.11 + i 0.18 0.04

010 0.09 + i 0.31 0.10

011 0.30 + i 0.30 0.18

100 0.35 + i 0.43 0.31

101 0.40 + i 0.01 0.16

110 0.09 + i 0.12 0.02

111 0.15 + i 0.16 0.05

Se existissem n qubits, então esta tabela teria 2n linhas. Para um n nas centenas, isso seriam mais linhas do que os átomos conhecidos no universo.A primeira coluna mostra todos os estados possíveis para os três bits. Um computador clássico apenas suporta um destes padrões de cada vez. Um computador quântico pode colocar-se na super posição de assumir os 8 estados simultaneamente. A segunda coluna mostra a "amplitude" para cada um dos 8 estados. Estes 8 números complexos são uma imagem dos conteúdos de um computador quântico num determinado momento. Durante a computação, estes 8 números irão modificar e interagir uns com os outros. Neste sentido, um computador quântico de 3-qubit tem muito mais memória do que um computador clássico de 3-bit.

21 hackingextreme.blogspot.com

Page 22: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

No entanto, não existe nenhuma forma de ver directamente estes 8 números. Quando o algoritmo é terminado, é feita uma única medida. A medida fornece uma simples linha de 3-bit, e elimina todos os 8 números complexos. A linha fornecida é gerada aleatoriamente. A terceira coluna da tabela calcula a probabilidade de cada linha possível. Neste exemplo, há uma probabilidade de 14% de que a linha fornecida seja "000", uma de 4% de que seja "001", e assim por diante. Cada probabilidade é encontrada com a execução do quadrado do módulo do número complexo (ou a multiplicação do complexo pelo seu conjugado - dá no mesmo). O quadrado do módulo de (a+ib) é (a²+b²). As 8 probabilidades somam até 1.Geralmente, um algoritmo num computador quantico irá dar início a todos os números complexos de modo a se equivalerem a valores, por isso todos os estados terão probabilidades equivalentes. A lista de números complexos pode ser vista como um vector de 8 elementos. Em cada passo do algoritmo, esse vector é modificado ao multiplicá-lo por uma matriz. A matriz advém da física da própria máquina, e será sempre invertivél, e irá garantir que as probabilidades continuem a somar até 1 (ou seja, a matriz será sempre ortogonal).Para uma máquina térmica completa, a operação é realizada disparando um curto pulso de radiação no recipiente de moléculas. Diferentes tipos de pulsos resultam em diferentes matrizes. O algoritmo para o computador quântico consiste em que pulsos usar e em que ordem. A sequência é usualmente escolhida de modo que todas as probabilidades tendam a 0 exceto uma. Essa probabilidade é a que corresponde à linha que é a resposta correta. Então, quando as medidas são feitas, essa resposta é a mais provável de ser retornada. Para um dado algoritmo, as operações serão sempre feitas na mesma ordem. Não existe regras "SE ENTÃO" para variar a ordem, já que não há modo de ler a memória antes da medição no final.Para mais detalhes na sequência de operações usada para vários algoritmos, veja computador quântico universal, Algoritmo de Shor, busca quântica em base de dados, e correção de erro quântico.O computador quântico do exemplo acima pode ser imaginado como uma caixa preta contendo 8 números complexos. Ou, pode ser imaginado como 8 caixas pretas, cada uma contendo 1 número complexo, cada um se situando num universo alternativo diferente, e todas se comunicando uma com as outras. Essas duas interpretações correspondem a Interpretação Copenhaque e Interpretação Everett de diferentes-mundos, respectivamente, da mecânica quântica. A escolha da interpretação não influi no cálculo, ou no comportamento do computador quântico. Nos dois casos, é um vetor de 8 elementos que é modificado pela multiplicação da matriz.

Teoria da Complexidade

Esta secção mostra o que é actualmente conhecido matematicamente acerca do poder dos computadores quânticos. Descreve os resultados conhecidos da teoria da complexidade e da teoria da computação que dizem respeito aos computadores quânticos.Uma classe de problemas que pode ser resolvida eficientemente por computadores quânticos é chamada BQP, para "bounded error, quantum, polynomial time". Computadores quânticos somente executam algoritmos aleatórios, então BQP em computadores quânticos é a parte contrária do BPP em computadores clássicos. É

22 hackingextreme.blogspot.com

Page 23: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

definido como um conjunto da problemas solucionável como um algoritmo de tempo polimonial, cuja probabilidade de errar é reduzida para metade. Um computador quântico "resolve" um problema se, para toda situação, sua resposta estará certa com alta probabilidade. Se esta solução for encontrada em tempo polinomial, então este problema é BQP.BQP é supostamente disjunto de NP-Completo e super-conjunto de P, mas nada é conhecido. Tanto a factorização de inteiros como o logaritmo discreto pertencem a BQP. Ambos são problemas NP mas suspeita-se que não estejam em P nem em NP-Completo. Existe um comum mal-entendido que os computadores quânticos poderão resolver problemas completos em NP em tempo polinomial. Existem muitas dúvidas, mas é considerada uma afirmação falsa.Já foi mostrado que se um computador quântico pudesse ser desenhado com operadores não-lineares, então poderia resolver problemas completos em NP em tempo polinomial e até para #P-Completos. No entanto estes formulações ainda não foram aprovadas por outros colegas.Embora computadres quânticos sejam algumas vezes mais rápidos que os computadores clássicos, eles não podem solucionar problemas que computadores clássicos não podem resolver, tendo tempo e memória suficientes. Uma Máquina de Turing pode simular um computador quântico, então um computador quântico nunca poderá solucionar um problema sem a capacidade de decisão parecido com o Problema da parada. A existência de computadores quânticos não pode refutar a tese de Church-Turing.> Estrutura de dados

Estruturas de dados e algoritmos são temas fundamentais da ciência da computação, sendo utilizados nas mais diversas áreas do conhecimento e com os mais diferentes propósitos de aplicação. Sabe-se que algoritmos manipulam dados. Quando estes dados estão organizados (dispostos) de forma coerente, caracterizam uma forma, uma estrutura de dados. São a organização e os métodos que manipulam esta determinada estrutura que lhes conferem singularidade. As estruturas de dados são chamadas tipos de dados compostos que dividem-se em dois: homogêneos (vetores e matrizes) e heterogêneos (registros). As estruturas homogêneas são conjuntos de dados formados pelo mesmo tipo de dado primitivo. As estruturas heterogêneas são conjuntos de dados formados por tipos de dados primitivos diferentes (campos do registro) em uma mesma estrutura. A escolha de uma estrutura de dados apropriada pode tornar um problema complicado em um de solução bastante trivial. O estudo das estruturas de dados está em constante desenvolvimento (assim como o de algoritmos), mas, apesar disso, existem certas estruturas clássicas que se comportam como padrões.

23 hackingextreme.blogspot.com

Page 24: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

Estruturas de dados clássicas

Vetores ou arrays

VetoresPB, ou vectoresPE ou arrays são estruturas de dados lineares e estáticas, isto é, são compostas por um número fixo (finito) de elementos de um determinado tipo de dados. O tempo de acesso aos elementos de um vetor é muito rápido, sendo considerado constante: o acesso aos elementos é feito pelo seu índice no vetor. Porém, a remoção de elementos pode ser custosa se não for desejável que haja espaços "vazios" no meio do vetor, pois nesse caso é necessário "arrastar" de uma posição todos os elementos depois do elemento removido.Essa é uma estrutura muito recomendada para casos em que os dados armazenados não mudarão, ou pouco mudarão, através do tempo.

Lista

Uma Lista é uma estrutura de dados linear. Uma lista ligada é linear e dinâmica, composta por células que apontam para o próximo elemento da lista. Para "ter" uma lista ligada, basta guardar seu primeiro elemento, e seu último elemento aponta para uma célula nula.

Pilha

As pilhas são estruturas baseadas no princípio LIFO (last in, first out), onde os dados que foram inseridos por último na pilha serão os primeiros a serem removidos. Existem duas funções que se aplicam a todas as pilhas: PUSH, que insere um dado no topo da pilha, e POP, que remove o item no topo da pilha.

Fila

As filas são estruturas baseadas no princípio FIFO (first in, first out), em que os elementos que foram inseridos no início são os primeiros a serem removidos. Uma fila possui duas funções básicas: ENQUEUE, que adiciona um elemento ao final da fila, e DEQUEUE, que remove o elemento no início da fila.A operação ENQUEUE sempre pode ser executada, uma vez que teoricamente uma fila não tem limite. A operação DEQUEUE só pode ser aplicado se a fila não estiver vazia, causando um erro de underflow ou fila vazia se esta operação for realizada nesta situação.

Árvores

24 hackingextreme.blogspot.com

Page 25: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

Uma árvore é uma estrutura de dados em que cada elemento tem um ou mais elementos associados, podendo definir-se uma árvore recursivamente como:

1. uma estrutura (uma árvore); 2. um nó (designado por raiz), que contém a informação a armazenar e um

conjunto finito de árvores (as sub-árvores). 3. Não Existe árvores vazias, no minímo haverá um nó raiz(que não possui pai)

Cada árvore tem apenas uma raiz. Além disso, os elementos associados a cada nó são habitualmente chamados de filhos desses nós. Os nós sem filhos de uma árvore são chamados de folhas.

Árvores binárias

Uma árvore binária é uma árvore em que cada nó tem no máximo dois filhos. São muito utilizadas como estruturas de buscas, como árvores de busca binária e árvores AVL.

Tabela de hashing

Em ciência da computação a tabela hash (de hashing, no inglês), também conhecida por tabela de espalhamento ou tabela de dispersão, é uma estrutura de dados especial, que associa chaves de pesquisa (hash) a valores. Seu objetivo é, a partir de uma chave simples, fazer uma busca rápida e obter o valor desejado. É algumas vezes traduzida como tabela de escrutínio.

> Engenharia de software

Engenharia de software é uma área do conhecimento da informática voltada para a especificação, desenvolvimento e manutenção de sistemas de software aplicando tecnologias e práticas de ciência da computação, gerência de projetos e outras disciplinas, objetivando organização, produtividade e qualidade.

Atualmente, essas tecnologias e práticas englobam linguagens de programação, bases de dados, ferramentas, plataformas, bibliotecas, padrões, processos e a questão da Qualidade de Software.

Os fundamentos científicos para a engenharia de software envolvem o uso de modelos abstratos e precisos que permitem ao engenheiro especificar, projetar, implementar e manter sistemas de software, avaliando e garantindo suas qualidades. Além disso, a engenharia de software deve oferecer mecanismos para se planejar e gerenciar o processo de desenvolvimento de um sistema de informação.

Definição

25 hackingextreme.blogspot.com

Page 26: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

Segundo Friedrich Ludwig Bauer, "Engenharia de software é a criação e a utilização de sólidos princípios de engenharia a fim de obter software de maneira econômica, que seja confiável e que trabalhe eficientemente em máquinas reais". O próprio significado de engenharia já traz os conceitos de criação, construção, análise, desenvolvimento e manutenção.A engenharia de software se concentra nos aspectos práticos da produção de um sistema de software, enquanto a ciência da computação estuda os fundamentos teóricos dos aspectos computacionais.O termo foi criado na década de 1960 e utilizado oficialmente em 1968 na NATO Conference on Software Engineering (Conferência sobre Engenharia de Software da OTAN). Sua criação surgiu numa tentativa de contornar a crise do software e dar um tratamento de engenharia (mais sistemático e controlado) ao desenvolvimento de sistemas de software complexos. Um sistema de software complexo se caracteriza por um conjunto de componentes abstratos de software (estruturas de dados e algoritmos) encapsulados na forma de procedimentos, funções, módulos, objetos ou agentes e interconectados entre si, compondo a arquitetura do software, que deverão ser executados em sistemas computacionais.Os fundamentos científicos para a engenharia de software envolvem o uso de modelos abstratos e precisos que permitem ao engenheiro especificar, projetar, implementar e manter sistemas de software, avaliando e garantido suas qualidades. Além disto, a engenharia de software deve oferecer mecanismos para se planejar e gerenciar o processo de desenvolvimento. Empresas desenvolvedoras de software passaram a empregar os conceitos de Engenharia de Software sobretudo para orientar suas áreas de desenvolvimento, muitas delas organizadas sob a forma de Fábrica de Software.A Engenharia de Sistemas é uma área mais ampla por tratar de todos os aspectos de sistemas baseados em computadores, incluindo hardware e engenharia de processos além do software.

Áreas de Conhecimento

Segundo o SWEBOK (Corpo de Conhecimento da Engenharia de Software), as áreas de conhecimento da Engenharia de Software são:

Requisitos de Software Projeto (Design) de Software Construção de Software Teste de Software Manutenção de software Gerência de Configuração de Software Gerência de Engenharia de Software Processos de Engenharia de Software Ferramentas e Métodos de Engenharia de Software Qualidade de Software

Conforme Pressman, a Engenharia de Software (ES) é uma tecnologia em camadas. E a base de todas essas camadas é o foco na qualidade do software desenvolvido.

26 hackingextreme.blogspot.com

Page 27: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

Portanto, inclusive do ponto de vista didático, é interessante estudarmos a ES em suas camadas de Processo, Métodos e Ferramentas.

Processo de Software

Processo de software, ou processo de engenharia de software, é uma seqüência coerente de práticas que objetiva o desenvolvimento ou evolução de sistemas de software. Estas práticas englobam as atividades de especificação, projeto, implementação, testes e caracterizam-se pela interação de ferramentas, pessoas e métodos.SEE e PSEE são os ambientes voltados ao desenvolvimento e manutenção de processos. O projeto ExPSEE é uma continuação dos estudos de processos, principalmente do ambiente PSEE.Devido ao uso da palavra projeto em muitos contextos, por questões de clareza, há vezes em que se prefira usar o original em inglês design.

Modelos de Processo de Software

Um modelo de processo de desenvolvimento de software, ou simplesmente modelo de processo, pode ser visto como uma representação, ou abstração dos objetos e atividades envolvidas no processo de software. Além disso, oferece uma forma mais abrangente e fácil de representar o gerenciamento de processo de software e consequentemente o progresso do projeto.Exemplos de alguns modelos de processo de software:

Modelos ciclo de vida Sequencial ou Cascata (do inglês waterfall) - com fases distintas de

especificação, projeto e desenvolvimento. Desenvolvimento iterativo e incremental - desenvolvimento é iniciado com um

subconjunto simples de Requisitos de Software e interativamente alcança evoluções subseqüentes das versões até o sistema todo estar implementado

Evolucional ou Prototipação - especificação, projeto e desenvolvimento de protótipos.

V-Model - Parecido com o modelo cascata, mas com uma organização melhor, que permite que se compare com outros modelos mais modernos.

Espiral - evolução através de vários ciclos completos de especificação, projeto e desenvolvimento.

Componentizado - reuso através de montagem de componentes já existentes. Formal - implementação a partir de modelo matemático formal. Ágil RAD Quarta geração

Modelos de Maturidade

Os modelos de maturidade são um metamodelo de processo. Eles surgiram para avaliar a qualidade dos processos de software aplicados em uma organização

27 hackingextreme.blogspot.com

Page 28: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

(empresa ou instituição). O mais conhecido é o Capability Maturity Model Integration (CMMi), do Software Engineering Institute - SEI.O CMMi pode ser organizado através de duas formas, contínua e estagiada. Pelo modelo estagiado, mais tradicional e mantendo compatibilidade com o CMM, uma organização pode ter sua maturidade medida em 5 níveis:

Nível 1 - Caótico; Nível 2 - Capacidade de repetir sucessos anteriores pelo acompanhamento de

custos, cronogramas e funcionalidades; Nível 3 - O processo de software é bem definido, documentado e padronizado; Nível 4 - Realiza uma gerência quantitativa do processo de software e do

produto; Nível 5 - Usa a informação quantitativa para melhorar continuamente e

gerenciar o processo de software.

O CMMi é um modelo de maturidade recentemente criado com o fim de agrupar as diferentes formas de utilização que foram dadas ao seu predecessor, o CMM.

Metodologias e Métodos

O termo metodologia é bastante controverso nas ciências em geral e na Engenharia de Software em particular. Muitos autores parecem tratar metodologia e método como sinônimos, porém seria mais adequado dizer que uma metodologia envolve princípios filosóficos que guiam uma gama de métodos que utilizam ferramentas e práticas diferenciadas para realizar algo [1].Assim teríamos, por exemplo, a Metodologia Estruturada, na qual existem vários métodos, como Análise Estruturada e Projeto Estruturado (muitas vezes denominados SA/SD, e Análise Essencial). Tanto a Análise Estruturada quanto a Análise Essencial utilizam a ferramenta Diagrama de Fluxos de Dados para modelar o funcionamento do sistema.

Metodologia Estruturada o Análise Estruturada o Projeto Estruturado o Programação Estruturada o Análise Essencial o SADT o DFD - Diagrama de Fluxo de Dados o MER - Modelo de Entidades e Relacionamentos

Metodologia Orientada a Objetos o Orientação a Objetos o Rational Unified Process ( RUP )

Desenvolvimento ágil de software o Feature Driven Development ( FDD ) o Enterprise Unified Process (EUP) o Scrum (Scrum)

28 hackingextreme.blogspot.com

Page 29: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

o Crystal (Crystal Clear, Crystal Orange, Crystal Orange Web) o Programação extrema ( XP )

Outras Metodologias o Microsoft Solution Framework ( MSF )

Modelagem

A abstração do sistema de software através de modelos que o descrevem é um poderoso instrumento para o entendimento e comunicação do produto final que será desenvolvido.A maior dificuldade nesta atividade está no equilíbrio (tradeoff) entre simplicidade (favorecendo a comunicação) e a complexidade (favorecendo a precisão) do modelo.Para a modelagem podemos citar 3 métodos:

Análise estruturada, criada por Gane & Searson; Análise essencial, criada por Palmer & McMenamin e Ed. Yourdon; UML criada por Grady Booch, Ivar Jacobson & Jaimes Rumbaugh (veja

exemplos).

Atualmente a modelagem mais recomendada, e sendo a mais comum, é a utilização da linguagem UML.

Ferramentas, Tecnologias e Práticas

A engenharia de software aborda uma série de práticas e tecnologias, principalmente estudadas pela ciência da computação, enfocando seu impacto na produtividade e qualidade de software.Destacam-se o estudo de linguagem de programação, banco de dados e paradigmas de programação, como:

Programação estruturada Programação funcional Programação orientada a objetos Componentes de Software Programação orientada a aspecto

Ferramentas

Outro ponto importante é o uso de ferramentas CASE (do inglês Computer-Aided Software Engineering). Essa classificação abrange toda ferramenta baseada em computadores que auxiliam atividades de engenharia de software, desde a análise de requisitos e modelagem até programação e testes.Os ambientes de desenvolvimento integrado (IDEs) têm maior destaque e suportam, entre outras coisas:

Editor

29 hackingextreme.blogspot.com

Page 30: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

Compilador Debug Geração de código Modelagem Deploy Testes não automatizados Testes automatizados Refatoração (Refatoring) Gestão de Riscos nos projectos de Software Uso da Prototipagem na Eng. de Requisitos

Gerência de Projetos

A gerência de projetos se preocupa em entregar o sistema de software no prazo e de acordo com os requisitos estabelecidos, levando em conta sempre as limitações de orçamento e tempo.A gerência de projetos de software se caracteriza por tratar sobre um produto intangível, muito flexível e com processo de desenvolvimento com baixa padronização.

Planejamento

O planejamento de um projeto de desenvolvimento de software inclui:

organização do projeto (incluindo equipes e responsabilidades) estruturação das tarefas (do inglês WBS - work breakdown structure) cronograma do projeto (do inglês project schedule) análise e gestão de risco estimativa de custos

Essas atividades sofrem com dificuldades típicas de desenvolvimento de software. A produtividade não é linear em relação ao tamanho da equipe e o aumento de produtividade não é imediato devido aos custos de aprendizado de novos membros. A diminuição de qualidade para acelerar o desenvolvimento constantemente prejudica futuramente a produtividade.A estimativa de dificuldades e custos de desenvolvimentos são muito difíceis, além do surgimento de problemas técnicos. Esses fatores requerem uma análise de riscos cuidadosa.Além da própria identificação dos riscos, há que ter em conta a sua gestão. Seja evitando, seja resolvendo, os riscos necessitam ser identificados (estimando o seu impacto) e devem ser criados planos para resolução de problemas.

Análise de Requisitos

As atividades de análise concentram-se na identificação, especificação e descrição dos requisitos do sistema de software. Em resumo, requisito é uma necessidade que o software deve cumprir.

30 hackingextreme.blogspot.com

Page 31: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

Há várias interpretações e classificações sobre requisitos, entre elas:

funcional não funcional de usuário de sistema

É comum que o cliente não saiba o que ele realmente deseja, que haja problemas na comunicação e ainda que haja mudança constante de requisitos. Todos esses fatores são recrudescidos pela intangibilidade sobre característicos de sistemas de software, principalmente sobre o custo de cada requisito.

Gestão

Pessoal Produto Processo Projeto Material

Histórico

A Engenharia de Software (ES) surgiu em meados dos anos 1970 numa tentativa de contornar a crise do software e dar um tratamento de engenharia (mais sistemático e controlado) ao desenvolvimento de sistemas de software complexos. Um sistema de software complexo se caracteriza por um conjunto de componentes abstratos de software (estruturas de dados e algoritmos) encapsulados na forma de procedimentos, funções, módulos, objetos ou agentes interconectados entre si, compondo a arquitetura do software, que deverão ser executados em sistemas computacionais.

ES no Presente e Tendências

Atualmente existe um destaque todo especial para a Engenharia de Software na Web. Também utilizado por Presmann a sigla WebE, é o processo usado para criar WebApps (aplicações baseadas na Web) de alta qualidade. Embora os princípios básicos da WebE sejam muito próximos da Engenharia de Software clássica, existem peculiariedades especificas e próprias.Com o advento do B2B (e-business) e do B2C (e-commerce), e ainda mais com aplicações para a Web 2.0, maior importância ficou sendo esse tipo de engenharia. Normalmente adotam no desenvolvimento a arquitetura MVC (Model-View-Controller).

31 hackingextreme.blogspot.com

Page 32: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

> Computação científica

Computação científica (ou ciência computacional) é o campo de estudo interessado na construção de modelos matemáticos e técnicas de soluções numéricas utilizando computadores para analisar e resolver problemas científicos e de engenharia. De forma prática, é a aplicação de simulação computacional outras formas de computação para problemas em diversas disciplinas científicas.O campo é distinto da ciência da computação, o estudo matemático da computação, dos computadores e do processamento de informação. Também é diferente da teoria e experimentação, formas tradicionais de ciência e engenharia. Cientistas e engenheiros desenvolvem programas de computador que modelam sistemas sendo estudados e os executam com diversos conjuntos de parâmetros de entrada. Tipicamente, tais modelos requerem uma grande quantidade de cálculo, e são geralmente executados em supercomputadores ou plataformas de computação distribuída.A computação científica é atualmente considerada como um terceiro modo da ciência, complementado a experimentação (observação) e a teoria.

Aplicações

Elementos do domínio de problemas para a computação científica incluem a simulação numérica, que pode ser usada para reconstruir ou entender eventos conhecidos, como um desastre natural, e para prever o futuro ou situações não observadas, como o tempo. Outra aplicação é a adequação de modelos e a análise de dados, como o uso da teoria de grafos para modelar redes. Uma outra aplicação é o uso de diversos parâmetros em um modelo computacional para encontrar cenários otimizados.

Implementação

Linguagens de programação geralmente usadas para aspectos mais matemáticos da computação científica incluem Fortran, MATLAB, GNU Octave e PDL. Para aspectos mais intensos computacionalmente são geralmente utilizadas variações de C ou Fortran.

> Física computacional

A Física computacional é uma área de pesquisa interdisciplinar que envolve o uso de conceitos e técnicas da Física e da Ciência da computação.

Abordagem tradicional

Gráfico do espaço de fase de um pêndulo caótico, gerado utilizando métodos de integração numérica.

32 hackingextreme.blogspot.com

Page 33: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

Um assunto tradicional da Física computacional é o uso de métodos computacionais para a solução de problemas para os quais já existe uma teoria quantitativa. Esse estudo é importante pois muitos sistemas físicos são descritos por equações que não podem ser resolvidas por meio da álgebra.As técnicas desenvolvidas permitem a solução de várias classes de problemas em diversas áreas da Física. São utilizados métodos de integração numérica para a solução de equações diferenciais ordinárias, métodos estatísticos como o método de Monte Carlo, métodos matriciais para a solução de problemas de autovalores e autovetores, entre outros.

Abordagem moderna

Atualmente, a Física computacional possui atuação muito mais abrangente que a tradicional. O conhecimento em Ciência e Engenharia da Computação é utilizado como ferramenta para os avanços tanto em Física teórica como experimental, ao mesmo tempo em que conceitos da Física são aplicados à Teoria da computação.São desenvolvidos métodos para a Mineração de dados, conhecida também pelo termo inglês data mining, com o objetivo de reconhecer padrões e auxiliar a formulação de hipóteses a respeito de dados obtidos por meio da Física experimental. Para essa tarefa, são muito utilizadas técnicas de Estatística, Inteligência artificial e Processamento de sinais.É estudada também a Visualização computacional, com o objetivo de facilitar a interpretação dos dados, cada vez mais complexos, por parte do físico. Ela é utilizada tanto durante o processo de simulação, no trabalho de Física teórica, como no processo de Mineração de dados.

Integração com outras Ciências

Os profissionais da Física computacional, por possuírem uma formação de natureza interdisciplinar, muitas vezes participam de pesquisas envolvendo outras áreas do conhecimento além da Física e da Ciência da computação.

Neurociência

Aquisição de dados e processamento de sinais do neurônio H1 da mosca no DipteraLab.A Neurociência é uma área de pesquisa que conta com o auxílio de físicos computacionais[6][7], que contribuem com seus conhecimentos nas áreas[8] de Física teórica, utilizando conceitos da Física e técnicas computacionais para modelar o cérebro, e de Física experimental e construção de hardware e software para laboratório, com o objetivo de coletar os dados experimentais necessários.

Lingüística

33 hackingextreme.blogspot.com

Page 34: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

Alguns físicos computacionais, interessados na Lingüística computacional, trabalham em áreas de pesquisa relacionadas à interação humano-computador por meio de linguagem natural. Um dos objetivos é beneficiar a pesquisa em Física e outras ciências, fornecendo maior integração entre linguagem matemática e linguagem natural.

> Matemática computacional

A Matemática computacional é uma área da matemática e da computação que, colaborando na solução de problemas de todas as áreas tanto das ciências exatas, quanto de outras áreas quaisquer, trata do desenvolvimento de modelos matemáticos, para o tratamento de problemas complexos, e desenvolvimento de métodos numéricos de obtenção de soluções.No Brasil colabora fortemente com a computação científica; com três centros de estudos avançados um na UFMG(com um curso de graduação), em Belo Horizonte, um na Unicamp(com o curso de matemática aplicada e computacional), em Campinas, e outro na USP de São Carlos. Esta última em um sentido mais estrito, trata dos aspectos de programação e desenvolvimento de códigos, técnicas de visualização de resultados de processamento numérico, processamento de alto desempenho computacional.Possui também forte integração com a Modelagem Computacional, uma área de conhecimento que trata da aplicação de modelos matemáticos à análise, compreensão e estudo da fenomenologia de problemas complexos em áreas tão abrangentes quanto as Engenharias, Ciências exatas, Computação, e Ciências humanas.Atua na interface com outras ciências como a física, a engenharia, a biologia, a ciência da computação, a tecnologia da informação, dentre outras.

> Geometria computacional

Geometria Computacional é um ramo da Ciência da Computação que estuda técnicas, algoritmos e estruturas de dados para a resolução computacional de problemas geométricos.Os problemas em Geometria Computacional são tratados em termos de objetos geométricos elementares como pontos, retas, segmentos de reta, polígonos, etc. Em geral, o objetivo desta disciplina é resolver os problemas geométricos de forma eficiente, isto é, utilizando o menor número possível de operações simples sobre os elementos geométricos.

Contexto

A Geometria Computacional emergiu de áreas de desenvolvimento e análise de algoritmos em meados da década de 1970. No entanto, a principal motivação para seu desenvolvimento como disciplina autônoma foi o progresso em áreas como Computação Gráfica, desenho assistido por computador (CAD/CAM), robótica, dentre outras, para as quais é essencial um bom fundamento computacional básico, em termos de processamento de elementos geométricos.

34 hackingextreme.blogspot.com

Page 35: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

É importante destacar, por outro lado, que alguns dos problemas tratados nesta disciplina são tipicamente geométricos por natureza.Além das aplicações citadas acima, a Geometria Computacional contribui para melhorias em diversas outras áreas: sistemas de informação geográfica (SIGs), visão computacional, otimização combinatória, processamento de imagens, teoria dos grafos, desenho de circuitos integrados, dentre outras.

Principais problemas

Dentre os principais problemas tratados por essa disciplina, destacam-se: par de pontos mais próximo, fecho convexo, diagrama de Voronoi e triangulação de Delaunay.Muitos desses problemas tem enunciados simples e várias soluções possíveis, desde as mais ingênuas até as mais eficientes. A título de exemplo, o problema do par de pontos mais próximo pode ser enunciado da seguinte forma: Dado um conjunto de N pontos em um plano, encontrar os dois pontos do conjunto que guardam a menor distância entre si.

> Modelagem computacional

Modelagem computacional é uma área de conhecimento multidisciplinar que trata da aplicação de modelos matemáticos à análise, compreensão e estudo da fenomenologia de problemas complexos em áreas tão abrangentes quanto as Engenharias, Ciências exatas, Matemática Computacional, e Ciências humanas.

Introdução

A modelagem computacional é a área que trata da simulação de soluções para problemas científicos, analisando os fenômenos, desenvolvendo modelos matemáticos para sua descrição, e elaborando códigos computacionais para obtenção daquelas soluções. É área em expansão, de ampla aplicação, em:

desenvolvimento de produtos industriais, pesquisas científicas básicas e aplicadas, simulações e previsões temporais e espaciais de fenômenos, matemática, física, química, engenharia e tecnologia, biologia e saúde, meio ambiente e ecologia, oceanografia e geofísica, dentre outras.

Algumas áreas de atividade econômica que auferem benefícios da modelagem computacional são:

agroindústria, medicina, construção civil e estruturas,

35 hackingextreme.blogspot.com

Page 36: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

aeronáutica, engenharia naval e indústria automobilística, indústria do petróleo e petroquímica, dentre outras áreas de aplicação.

Motivação

A sofisticação dos problemas com que a humanidade tem se deparado nas últimas décadas, em áreas tão diversas como as megaestruturas e a mecânica do contínuo, a nanotecnologia, a genômica e a bioinformática, a computação quântica, a ecologia, e a astrofísica, em novos materiais e em desenvolvimento sustentado, a título de exemplo, nos apresenta exigência de respostas exponencialmente mais complexas com relação àquelas que precisamos gerar no passado, apresentando para a ciência e para a comunidade científica um desafio: a necessidade de obtenção de resposta cada vez mais sofisticadas, objetivando tratar aquela complexidade, em tempo sucessivamente menor e por meio de solução de problemas complexos.

Problemas complexos

Problemas complexos, ou de grande grau de complexidade, resultam em inflação da quantidade de variáveis físicas a manipular e controlar no processo de estabelecimento do problema, estabelecimento de hipóteses para o modelo, proposição de teorias, postulados e teoremas, guias para a busca de solução do problema, controle, aferimento e aproximação da solução. Usualmente problemas complexos demandam forte esforço de cálculo, a partir do estabelecimento de modelos matemáticos robustos ou do estabelecimento de teias de relações entre variáveis em diversas escalas de observação, desde a nano, passando pela micro, até o macro. O eixo de estabelecimento do modelo de solução de problemas complexos tem sido a observação do problema, de sua fenomenologia e a concepção do modelo físico e do modelo fenomenológico que antecede o desenvolvimento do modelo matemático, desenvolvimento do sistema de equações que regem o problema, e sua solução computacional mediante um código apropriado. O estabelecimento desta concepção de tratamento e abordagem de problemas complexos em ciência, bem como de sua solução a partir deste modelo, considerando uma diversidade de modelos qualitativos, e sobretudo modelos quantitativos, em abordagem numérica usualmente computacional, busca assim superar a incerteza na trajetória de evolução do problema sob análise, e sobre as variáveis do problema.Modelos matemáticos estabelecidos a partir de modelos fenomenológico, recaem em sistemas de equações diferenciais parciais ou de equações diferenciais ordinárias de elevado número de incógnitas, demandando forte esforço computacional na sua solução. A aproximação das soluções dessas equações por procedimentos numéricos tornou-se necessária à medida em que as ciências ambientais, engenharias, tecnológicas, e as ciências niológicas e da saúde, avançavam no sentido da satisfação das necessidades humanas.

36 hackingextreme.blogspot.com

Page 37: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

Abordagem de soluções

A abordagem computacional é a adotada na modelagem computacional. Trata-se de área multidisciplinar para o estabelecimento de modelos, com adoção de formulações matemáticas na solução de problemas científicos em estreita aliança e integração com as linhas de pesquisa que definem as áreas de conhecimento associadas aos problemas complexos. Os resultados projetados oferecem uma metodologia para a determinação, no tempo e no espaço do impacto de intervenções humanas, como por exemplo no desmatamento de mata nativa e implantação de indústrias, com base no conhecimento do fluxo das substâncias ou materiais envolvidos nas emissões industriais e no transporte destas no ambiente, das taxas de acumulação nas áreas de influência e projeção dos efeitos sobre as populações afetadas.Tal abordagem compõe a área de modelagem computacional, na interface com as engenharias, a matemática computacional, a física computacional, e com a computação científica, pertinente á abordagem de soluções para problemas complexos, pertinente à mecânica do contínuo. Na modelagem computacional os problemas tratam de elevado número de variáveis, propondo-se a adoção de métodos numéricos de tratamento do problema, associado à ferramenta computacional, e às técnicas de programação avançadas, adequadas à otimização da busca das soluções dos problemas complexos. Tal procedimento é adequado tanto a meios contínuos, homogêneos como heterogêneos, bem como a sistemas discretos, determinísticos e probabilísticos, incorrendo em menor custo computacional.

Abrangência e interfaces

A área que aqui conceituamos, é também denominada como simulação computacional científica e mecânica computacional. Trata-se de área que engloba o conjunto de conhecimentos relacionados aos métodos numéricos que envolvem os procedimentos de análise e solução de problemas complexos relacionados à Mecânica do Contínuo, às Ciências Exatas e às Ciências Naturais e Ambientais, a Fenômenos Biológicos, e à Mecânica Orgânica. Diz respeito ao estudo de áreas diversas, particularmente a Mecânica dos Sólidos e a Mecânica dos Fluidos, a Biofísica e Biomecânica, a Sistemas Ecológicos e Populacionais. Seu campo de aplicação, e escalas de observação, abrange asescalas espacial e do tempo, transientes e estacionários. A modelagem computacional, destina-se à solução de problemas complexos regidos por equações diferenciais ordinárias e parciais, e a problemas de valores iniciais e de valores de contorno.

Origem e aplicações

Reunindo um grupo de conhecimentos originados na Mecânica Clássica e na Engenharia Mecânica, passou a superá-las, e tem sido utilizado no meio acadêmico e técnico, denominando o conjunto de conhecimentos fortemente associados ao emprego de computadores na solução de problemas científicos e particularmente métodos numéricos, tais como:

37 hackingextreme.blogspot.com

Page 38: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

1. nas Engenharias e em Ciências Tecnológicas e Exatas: abrangendo a mecânica do contínuo, mecânica dos sólidos, mecânica dos fluidos, mecânica das estruturas, nanotecnologia e nanofísica, mecânica dos solos e fundações, mecânica da fratura, teoria da elasticidade, teoria das estruturas e resistência dos materiais, aspectos de teoria de projeto e projeto auxiliado por computador, engenharia assistida por computador, plasticidade e viscoelasticidade, escoamento de fluidos, escoamento e mecânica em meios porosos, otimização e programação linear, métodos variacionais e numéricos, algoritmos genéticos, paralelos e distribuídos, visualização científica, modelagem molecular, teoria do caos, e álgebras diversas, dentre outras aplicações.

2. em Ciências Ambientais: em ecologia computacional, em modelagem de ecossistemas e biomas, na simulação e modelagem de trocas de massa e energia entre populações, destas para o meio ambiente, e entre ecossistemas, no desenvolvimento de métodos numéricos de solução de sistemas de EDOs e EDPs, estudos de impacto de desmatamento de mata nativa, das alterações ambientais decorrentes, simulação e projeção temporal. Modelos de implantação de indústrias, e simulação de impacto ambiental determinada pela implantação de sistemas de produção. Simulação, análise, modelagem e projeção temporal e espacial do fluxo das substâncias ou materiais envolvidos nas emissões industriais e no transporte destas no ambiente, das taxas de acumulação nas áreas de influência e projeção dos efeitos sobre as populações afetadas

3. em Ciências Biológicas e da Saúde: abrangendo a genômica e a proteômica computacionais, simulação de ação de proteínas e de seqüências de códigos genético, visualização espacial de seqüências genéticas, modelagem espacial de proteínas, modelagem estrutural de vírus e bactérias, análise de movimentos de seres microscópicos, modelagem hemodinâmica, de sistemas orgânicos, da ação farmacológica e da simulação virtual de drogas terapêuticas ou curativas. Modelos computacionais odontológicos, protéticos e de implantes. Modelagem de sistemas orgânicos biofísicos, biomecânicos e celulares.

Deve ser observado, também, que não se trata de área da Ciência da Computação, ainda que com esta inter-relacionada, e sim da possibilidade de aplicação de conceitos e idéias abrangendo as etapas de análise e compreensão do fenômeno sob estudo, estabelecimento de sistema de equações adequado a simulação do fenômeno em questão, desenvolvimento de softwares adequados à solução do problema científicos abordado, e aplicação à estudo teórico ou prático, compreendendo análise crítica dos resultados e calibração do modelo desenvolvido.

Métodos e técnicas

38 hackingextreme.blogspot.com

Page 39: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

Alguns dos métodos estudados na modelagem computacional com direcionamento à solução de problemas típicos das engenharias, das ciências exatas, biológicas e ambientais, são: Métodos dos Elementos Finitos, Métodos dos Elementos de Contorno, Método dos Volumes Finitos, Métodos das Diferenças Finitas, Métodos Integrais e Variacionais, Métodos Autoadaptativos, computação distribuída, Redes e Grids Computacionais, Computação Vetorial e Paralela Aplicada, Pré e Pós-processamento Gráfico e Otimização, Sistemas de Orientação Espacial, Modelagem do Espaço Humano, Simulação Computacional, realidade virtual e Protótipos Computacionais.A modelagem computacional utiliza um conjunto de métodos, ferramentas e formulações direcionadas à solução de problemas complexos, envolvendo grande número de variáveis, volumosa massa de dados, processamento e manipulação de imagens. Desenvolvimento de modelos matemáticos e de métodos numéricos, bem como discretização e tratamento de meios contínuos estão no seu campo de abrangência.A Modelagem Científica Computacional aplica então a computação a outras áreas do conhecimento. Ela permite que se criem modelos computacionais para situações em que é impossível ou muito caro testar ou medir as diversas soluções possíveis para um fenômeno a partir de modelos experimentais ou por solução analítica. Viabiliza a adoção de abordagem computacional, avançando além das limitações, completando e integrando-se a estas outras abordagens e muitas vezes sendo a única opção, à abordagem experimental e à analítica.Por modelagem científica concebe-se não só a modelagem relacionada ao desenvolvimento de métodos numéricos e variacionais, como também à compreensão e desenvolvimento de modelos associados à fenomenologia física dos problemas complexos, aplicação de modelos já desenvolvidos, simulação, previsão e projeções temporais e espaciais do desenvolvimento de soluções para aqueles problemas.

Limitações em ciência cognitiva

Podem surgir problemas quando se simula processos cognitivos, por causa das limitações do computador. Foi sugerido por Palmer e Kimchi que se pode especificar uma teoria sucessivamente com mais detalhe até chegar ao ponto de ser possível escrever um programa de computador e que deve ser possível também de separar a partir de que ponto é que a implementação é dependente da linguagem de programação e máquina, em vez de ser depender do cérebro. É que o programa vai ter sempre aspectos que não estão relacionados com a teoria psicológica, mas que a tecnologia disponível impõe ao pesquisador. Um exemplo são as funcionalidades que são incluídas no programa para saber qual é o seu estado interno a determinada altura enquanto corre, e que, obviamente, não estão relacionadas com o funcionamento do cérebro.O desempenho também pode ser problemático, porque também é limitado com a tecnologia disponível, sendo impossível comparar directamente as velocidades de respostas de ambos máquina e cérebro, embora possa haver uma relação de proporcionalidade entre os dois, ou no mínimo o produto de ambos deve estar bastante próximo.

39 hackingextreme.blogspot.com

Page 40: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

> Detecção e correcção de erros

Em matemática, ciências informáticas e telecomunicações detecção e correcção de erros é um assunto de grande importância e relevância na manutenção da integridades dos dados em canais com ruído ou em sistemas de armazenamento não imunes a falhas.

Definições

Detecção de erros

Detecção de erros é a capacidade de detectar erros causados por ruído ou outras causas durante a transmissão de um emissor para um receptor.

Correcção de erros

Correcção de erros, para além da detecção do erro, permite a sua correcção.

Implementação

Há duas formas de implementar um sistema de correcção de erros:

Pedido Automático de Repetição ou ARQ (Automatic repeat request): o transmissor envia os dados e um código de detecção de erros, que permite que o receptor detecte a existência de erros. Se não encontrar erros, envia uma mensagem (um ACK, ou seja, aviso de recepção) ao emissor. Se o emissor não seceber o ACK, então é porque a mensagem continha erros e é automaticamente re-transmitida.

Correcção Adiantada de erros ou FEC (Forward error correction): O emissor codifica os dados com um código de correcção de erros e envia a mensagem. O receptor descodifica a mensagem que recebe para a forma "mais provável" ou seja, os códigos são implementados de forma a que a quantidade fosse necessária uma quantidade de ruído "improvável" para que a mensagem chegasse errada ao receptor.

Esquemas de detecção de erros

Existem diversos esquemas para se conseguir a detecção de erros de transmissão, e estes esquemas são, na sua maioria, muito simples. Todos os códigos de detecção de erros (incluindo detecção e correcção) transmitem mais informação do que a

40 hackingextreme.blogspot.com

Page 41: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

mensagem original. Na maioria dos esquemas, para além da mensagem, são transmitidos dados de "confirmação" - dados extra (também conhecidos como dados redundantes) que servem para a detecção de erros.

Esquemas de repetição

Existem algumas variantes deste esquema, mas basicamente consiste em enviar repetição da informação. Por exemplo, se fosse pretendido enviar a mensagem "olá", seria enviada "olá olá olá". Se fosse recebida a mensagem "olá olá olb", como uma das repetições não coincidia, sabia-se que tinha havido um erro. Este esquema é pouco eficiente (transmite 3 vezes os mesmos dados) e pode ser problemático em situações em que o erro ocorre no mesmo sítio - no nosso exemplo "olb olb olb". Neste caso, a mensagem "olb" era detectada como correcta.

Esquemas de paridade

As mensagens são partidas em vários blocos de bits (uns e zeros numa transmissão digital). O número de ocorrências do "1" é contado. Depois é activado um bit de paridade - 1 se o número de "1" for par e 0 se o número de "1" for impar. Quando a mensagem chega, é testado o bit de paridade para verificar está de acordo com o número de "1" da mensagem. Este esquema tem o problema de falhar quando o número de erros na transmissão é impar. Por exemplo:

Mensagem enviada: 10010100 - 3 ocorrências de 1 - 3 é impar - bit de paridade = 1

Mensagem recebida: 10010111 - 5 ocorrencias de 1 - 5 é impar - bit de paridade = 1

Resultado: a mensagem recebida está errada e é detectada como correcta.

Redundância ciclica (CRC)

Uma forma mais complexa de detecção e correcção de erros é a utilização de propriedades matemáticas da mensagem a ser transmitida. Este método considera cada bloco de dados da mensagem como um coeficiente polinomial, dividindo-o depois por um outro polinómio predeterminado. Os coeficientes resultantes da divisão são enviados pelo emissor como dados redundantes, para detecção de erros no receptor. No receptor, são novamente calculados os mesmos coeficientes e comparados com os que foram enviados pelo emissor. Se não forem coincidentes, indica que houve um erro na transmissão.

Checksum

O checksum de uma mensagem é uma soma aritmética de certos componentes da mensagem - por exemplo a soma de todos os bytes que a compoem. Esta soma é enviada pelo emissor e recalculada no receptor, para ser comparada com a soma enviada. Se não forem coincidentes, indica que houve um erro na transmissão.

41 hackingextreme.blogspot.com

Page 42: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

Correcção de erros

Os métodos descritos acima são suficientes para determinar se houve ou não um erro na transmissão de uma mensagem. Mas nas maiorias das vezes isto não é suficiente. As mensagem têm que ser recebidas sem erros e o mero conhecimento de que existiu um erro não chega. Haveria uma grande vantagem se o receptor pudesse determinar qual foi o erro e corrigi-lo. Isto é possível. Vejamos o seguinte exemplo:

"Se faltarm algmas letrs consguims entndr a mensgm".

Este conceito pode ser aplicado à correcção de erros nas transmissões digitais.

Pedido automático de repetição

O Pedido automático de repetição ou ARQ Automatic Repeat-reQuest é um método de controle de erros para transmissões de dados qe usa os códigos de detecção de erros para conseguir transmissões confiáveis. Usa também as mensagens de acknowledgment e/ou não acknowledgement e os timeouts (tempos limites). Um acknowledgment (ACK) é uma mensagem enviada pelo receptor para o transmissor e que indica que um bloco de dados foi correctamente recepcionado.Normalmente, quando o emissor não recebe o ACK antes de se esgotar o tempo limite, isto significa que o bloco de dados não foi recepcionado correctamente e retransmite-o.

Código de correção de erros (ECC - error-correcting code)

O ECC é um código no qual cada sinal de dados está em conformidade com regras específicas de construção. Os desvios dessas regras podem ser detectados e corrigidos. Esta técnica é normalmente usada em armazenamento de dados no computador (por exemplo: DRAM) e em transmissões de dados.Alguns códigos podem detectar e corrigir um certo número de bits de erros. Se apenas corrigirem um erro, são chamados códigos de correcção de erro único (ou SEC - single error correcting) e os que conseguem detectar dois erros são chamados de detecção de erro dupla (ou DED - double error detecting (DED).

> Vida artificial

Vida artificial é o nome dado à disciplina que estuda a vida natural através da tentativa de recriar fenômenos biológicos em computadores ou outros meios “artificiais”. Complementa a abordagem analítica tradicional da biologia com uma abordagem sintética onde, ao invés de estudar os fenômenos biológicos através de ver como funcionam os organismos vivos já constituídos, cria um sistema que se comporta como um organismo vivo. O processo de síntese é uma ferramenta importante em diversas disciplinas. Química sintética, por exemplo, não só contribui para o entendimento teórico dos fenômenos químicos como também nos permite

42 hackingextreme.blogspot.com

Page 43: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

fabricar novos materiais com uso prático e fornecer componentes não encontrados na natureza. As tentativas de recriar os fenômenos biológicos de maneira artificial podem resultar não só na melhor compreensão teórica dos fenômenos estudados como também em aplicações práticas dos princípios biológicos na tecnologia de computadores (hardware e software), robótica, medicina, nanotecnologia e diversas áreas de engenharia.

Princípios Básicos

Natural, Artificial e Sintético

“A ciência natural é o cerne do conhecimento sob os objetos e fenômenos do mundo que nos cercam, sob suas características e propriedades inerentes, sob seus comportamentos e suas interações intrínsecas. A tarefa principal das ciências naturais é transformar os prodígios da natureza em lugar-comum, mostrando-nos que a complexidade é uma máscara para a simplicidade, descobrindo os padrões escondidos no meio do caos aparente.” (Simon, 1969)O mundo que nos cerca atualmente é formado, basicamente, por elementos construídos por seres humanos (artificiais), em detrimento dos elementos naturais. Praticamente todos os componentes de nosso ambiente se mostram, ou seja, possuem características, construídas por seres humanos. A temperatura onde gastamos a maior parte do nosso tempo é mantida artificialmente, assim como a umidade e até mesmo as impurezas que respiramos são controladas. Mesmo sendo controladas artificialmente, estes fenômenos trabalham com algum tipo de matéria-prima natural. O termo natural é definido como algo “da, ou referente à, ou produzido pela natureza” (Holland, 1980), ou seja, em que não há trabalho ou intervenção do homem. É preciso ter muito cuidado para não confundir um fenômeno natural com um fenômeno biológico. Uma floresta pode ser entendida como um fenômeno natural, ao passo que uma fazenda certamente é um fenômeno biológico, mas nunca natural. As várias espécies das quais o homem é dependente, tais como o gado e o trigo, em última instância, são artefatos de sua engenhosidade. Um campo arado não faz mais parte da natureza do que uma estrada asfaltada, nem menos. O ser humano vive em um mundo cercado de objetos naturais e artificiais e seu ambiente é definido pelas iterações entre esses elementos e seus próprios propósitos.A definição formal do termo artificial pode ser descrita como: “(1) produzido pela arte ou pela indústria; não-natural, (2) Dissimulado, disfarçado, fingido, (3) postiço” (Holland, 1980). Ou seja, artificial é algo feito pelo ser humano, o oposto do natural. Apesar disso, os elementos que nós habitualmente denominamos artificiais não podem ser consideradas em separado à natureza. Eles não possuem nenhum tipo de isenção que os faça ignorar, ou mesmo violar, as leis da natureza, as leis físicas que regem o nosso mundo. Ao mesmo tempo, estes artefatos são adaptados aos objetivos e desejos humanos. Eles são o que são, desde que possam conduzir objetos ou seres humanos mais rapidamente (aeroplano) ou serem apreciados pelo paladar (criação de gado). Se os objetivos dos seres humanos mudarem, seus artefatos também mudam – e vice-versa. Por outro lado, como exemplificou Simon

43 hackingextreme.blogspot.com

Page 44: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

(1969), uma gema produzida por um vidro colorido imitando uma safira, é um objeto artificial. Mas uma gema que fosse construída pelo ser humano, mas cuja composição química fosse indistinguível de uma gema natural, é um objeto sintético. Tais artefatos são imitações da natureza, em todos os seus detalhes, e esta imitação pode ou não utilizar os mesmos componentes básicos do objeto natural a ser imitado. O termo sintético é comumente usado como sinônimo para projetado ou composto.A engenharia trata do sintético, da síntese, enquanto que a ciência trabalha com a análise. O engenheiro preocupa-se como os objetos devem ser, como deve ser sua funcionalidade, ou seja, quais são seus objetivos, enquanto que a ciência concentra-se no que os objetos são.A Vida Artificial pode ser vista como um elo que une a dicotomia gerada entre o pensamento descritivo (analítico) e o pensamento normativo(sintético). Podemos descrevê-la como um campo de estudo devotado ao entendimento da vida pela tentativa de abstrair os princípios fundamentais das dinâmicas que envolvem os fenômenos biológicos (análise); e recriar tais dinâmicas em outro meio físico, como os computadores, tornando-os assim acessíveis para novos tipos de manipulações, experiências e testes (síntese). Enquanto que a pesquisa em biologia natural é essencialmente analítica, pois tenta quebrar os fenômenos complexos em seus componentes básicos, a Vida Artificial é, ao mesmo tempo, sintética, pois seu objetivo é construir fenômenos complexos a partir de elementos unitários; e analítica, pois é originada da análise dos fenômenos naturais, além de prover um complemento para as pesquisas biológicas tradicionais, pois permite a exploração de novos caminhos na tentativa de entender a vida.

A Vida

O que é vida? Para desenvolvermos um sistema capaz de nos fornecer pistas sobre a vida e sua evolução, é necessário um aprofundamento maior sobre o que nós entendemos sobre o conceito de vida. Formalmente, pode-se definir vida por:1. Conjunto de propriedades e qualidades graças às quais animais e plantas, ao contrário dos organismos mortos ou da matéria bruta, se mantêm em contínua atividade, manifestada em funções orgânicas tais como o metabolismo, o crescimento, a reação a estímulos, a adaptação ao meio, a reprodução e outras; existência. 2. Estado ou condição dos organismos que se mantêm nessa atividade desde o nascimento à morte; existência. 3. A flora e/ou a fauna. 4. A vida humana. 5. O espaço de tempo que decorre do nascimento à morte; existência. 6. O tempo de existência ou de funcionamento de uma coisa. 7. Um dado período da vida. 8. Estado ou condição do espírito após a morte... (Holland, 1980).Tradicionalmente, o conceito de vida tem sido identificado por uma coleção de materiais que observam certas listas de propriedades, tais como: metabolismo, adaptação, autonomia, crescimento, auto-suficiência, replicabilidade, reatividade (irritabilidade), evolução, etc. A maioria dos organismos vivos seguem estas regras. No entanto, alguns outros sistemas obedecem à subconjuntos destas regras, como os vírus, a própria Terra e alguns tipos de robôs. A abordagem cientifica tradicional tem reduzido o estudo dos sistemas vivos numa busca por respostas sobre a bioquímica dos organismos vivos. Esta alternativa vê a vida como nada mais que uma série complexa de fenômenos físicos e químicos.

44 hackingextreme.blogspot.com

Page 45: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

Mesmo assim, a questão permanece sem resposta pois existem muitas maneiras de se obterem sistemas dinâmicos complexos (sistemas físicos), mas dentre destes, quais podem-se considerar realmente vivos? Que tipo de complexidade estamos procurando? Ninguém contesta o fato de que a vida é uma espécie de arranjo complexo de substâncias, mas qual é o limiar de complexidade necessário após o qual a matéria pode ser dita viva? Para estudarmos a vida é necessário sintetizar a organização da matéria com o mesmo limiar de complexidade, ou é suficiente simular os comportamentos dos organismos vivos?Objetivamente ou subjetivamente, pode-se reconhecer certas organizações de matérias como vivas. É a partir de percepção do mundo que nos cerca, que pode-se categorizar os organismos vivos dos não-vivos. É importante observar que esta percepção muda de indivíduo para indivíduo, assim como de espécie para espécie. Os seres humanos reconhecem as plantas como seres vivos, participantes do nosso ecossistema, o que não ocorre com os animais ditos inferiores . Estes não possuem uma percepção consciente que os permita reconhecer uma planta como um ser vivo e uma pedra como um ser inanimado, apesar de reconhecerem (e reagirem de acordo) à presença de outros animais.Esta habilidade de reconhecer e categorizar eventos nos ambientes em que atuam, é uma das mais importantes diferenças entre os sistemas vivos e os não-vivos. A vida requer a habilidade de reconhecer e controlar os eventos em seu ambiente, para a sobrevivência do indivíduo. Esta é uma característica comum a toda vida conhecida, em conjunto com a habilidade de armazenar e transmitir registros sob estas habilidades. Além disso, esta característica representa também a ruptura da física com a biologia. Os sistemas físicos são independentes de qualquer organismo em particular, são universais, inexoráveis, imunes à qualquer tipo de controle por qualquer organismo. Já os sistemas biológicos estendem seu controle para os organismos, permitindo que estes categorizem e controlem aspectos relevantes nas substâncias que os cercam. E é a definição da relevância destes aspectos que fornecem aos processos de categorização e controle um atributo extra, diferente das simples iterações (É iteração ou INteração?) físicas de ação-reação.Resumindo, quando um organismo é apto a reconhecer e atuar sob aspectos de seu ambiente que são importantes para a sua própria sobrevivência, pode-se dizer que os mecanismos pelos quais o organismo reconhece e atua são funcionais, em referência ao próprio organismo (auto-referência). A física, por si só, não preocupa-se com as funções dos mecanismos, e sim como estes funcionam.Em outras palavras, qualquer organização que atravesse o limiar de complexidade da vida, pode ser dito como emergente da física, pois seus atributos não podem ser explicados completamente pelas leis físicas. Funções, controle e categorização não podem ser explicadas unicamente pela física, apesar de seguirem fielmente suas leis. Finalmente, podemos entender a origem da vida como um problema de emergência de processos de categorização e controle a partir de um meio físico.

Dos Aminoácidos aos Seres Humanos

Atualmente, a teoria mais aceita sobre a origem da vida na Terra tem suas bases na criação do próprio Sistema solar. Quando a Terra se formou, a cerca de 4,6 bilhões de anos atrás, ela era um deserto sem mares ou costas, uma rocha incandescente

45 hackingextreme.blogspot.com

Page 46: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

agredida continuamente por colisões com os milhões de fragmentos de cascalho que ocupavam desordenadamente o espaço exterior, restos do nascimento do sistema solar.A lua, provavelmente, estava muito mais próxima (cerca de 18 000 quilômetros) que agora ( ±400 000 quilômetros ). Assim, a Lua girava em torno da Terra em cerca de seis horas, provocando enormes marés de rocha fundida. A atmosfera era composta, primeiramente, por hidrogênio e hélio, os gases mais comuns e leves do universo. Muito cedo, contudo, a força dos ventos solares acabaram por esvaziar a atmosfera desses gases, que foram substituídos por gases que se infiltravam através das rachaduras e fendas e das crateras vulcânicas. Estes gases eram constituídos provavelmente por metano, dióxido de carbono, amoníaco e vapor de água.Milhões de toneladas de carbono orgânico eram esparramados na superfície terrestre, provindo das estrelas cadentes que bombardeavam a Terra incessantemente. Alguns cometas também caíram, trazendo consigo enormes quantidades de gelo. No entanto, devido à alta temperatura terrestre, todo este gelo era vaporizado instantaneamente.Centenas de milhões de anos se passaram. Os grandes bombardeios abrandaram e grande parte do calor originado pela formação da Terra já havia sido irradiado para o espaço. A temperatura esfriou, até um ponto abaixo da ebulição da água. Grandes nuvens formaram-se, provocando chuvas torrenciais sobre as negras superfícies basálticas. Desse modo, a própria Terra fornecia os elementos básicos (água, carbono e energia) para a construção de aminoácidos, a partícula elementar de toda a vida terrestre. Através de sua constante agitação, o próprio caráter caótico do jovem planeta teria apressado o nascimento da vida combinando os aminoácidos e as moléculas orgânicas em combinações quase infinitas.A formação de aminoácidos, a partir do carbono e a energia fornecida pelos raios ultravioletas, abundantes naquela época, já foram demonstradas experimentalmente em laboratório. Tubos de ensaio contendo uma sopa de elementos semelhantes aos da Terra primitiva, sofrendo a ação contínua de faíscas elétricas, acabavam gerando alguns tipos primitivos de aminoácidos, que seriam a origem dos demais. Apesar disso, a formação da primeira célula a partir dos aminoácidos é um fenômeno que encontra-se, ainda, em torno de diversas teorias e especulações, mas sem nenhuma certeza.As primeiras células sobre a Terra tinham uma alimentação abundante, pois flutuavam num mar composto de aminoácidos e outras moléculas menos desenvolvidas. Além disso, novos suprimentos de aminoácidos eram constantemente gerados em volta dessas pelos raios ultravioletas. Contudo, à medida que as células prosperavam e multiplicavam-se, as reservas de moléculas orgânicas livres diminuíram até a exaustão. Num primeiro momento, as células foram quase dizimadas pela falta de alimentos. Mas, com a diminuição brusca do número de consumidores, a produção de aminoácidos aumentou o que levava a um novo aumento no número de células. Este vai-e-vem celular ocorreu, provavelmente dezenas de vezes, até que algumas células mutantes apresentaram uma característica importantíssima para a evolução da vida: a fotossíntese. Elas conseguiam utilizar a energia solar para produzir elas mesmas as moléculas orgânicas necessárias a sua sobrevivência. A vida sobreviveu graças à fotossíntese.

46 hackingextreme.blogspot.com

Page 47: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

No entanto, a fotossíntese não terminou imediatamente com a carência geral de alimentos. Para crescer e multiplicar-se, cada célula necessitava de dois elementos fundamentais: energia e substâncias químicas (moléculas orgânicas, hidrogênio, etc.). O hidrogênio, uma das peças básicas para a vida celular, tornava-se cada dia mais escasso. Para suprir a falta de hidrogênio, algumas células conseguiram adaptar-se ao ambiente, retirando esse das moléculas de gás sulfídrico, que era jorrado em grandes quantidades pelos vulcões e fendas da crosta terrestre.A vida, então, prosseguiu sem maiores sobressaltos, por uns cem milhões de anos. Neste intervalo de tempo, as células sofreram novas modificações, que as permitiram obter hidrogênio de uma fonte muito mais abundante que o gás sulfídrico: o vapor de água. Essas células, apesar de necessitar cerca de dez vezes mais energia para quebrar a molécula d’água, obtinham esta muito mais facilmente que o gás sulfídrico. Como a fonte de energia era ilimitada (raios solares), a troca foi vantajosa. Obviamente, nesta época, a quase totalidade da vida terrestre concentrou-se nos mares e oceanos. Estas células, conhecidas como cianobactérias, surgiram há uns 2,6 bilhões de anos atrás e acabaram por multiplicar-se desenfreadamente, cobrindo todos oceanos e mares terrestres, o que acabou gerando uma segunda crise na vida terrestre.Cada vez que uma desses células separava um molécula de dióxido de hidrogênio (água), utilizava os átomos de hidrogênio e liberava os átomos de oxigênio, que era um verdadeiro veneno nesta etapa evolutiva. O oxigênio é altamente reativo, principalmente com o ferro. Naquele tempo, existiam vastas quantidades de compostos de ferro (sais ferrosos) suspensos no mar, que combinando-se com o oxigênio formavam o óxido ferroso, que era precipitado sob o mar. Muito rapidamente, as reservas de sais ferrosos foram combinadas, formando enormes depósitos de ferro, o que diminuiu drasticamente a quantidade de sais ferrosos no mar. Logo, as moléculas de oxigênio começaram a nadar livremente pelo ar e mar terrestres, ameaçando as cianobactérias, que eram adaptadas a baixos níveis de oxigênio.Novamente, foi preciso uma readaptação ao ambiente. Primeiramente, algumas células acabaram por desenvolver enzimas especais que podiam fixar os componentes formados pelo oxigênio, transformando-os em componentes inofensivos para as cianobactérias. Tais células acabaram por prosperar rapidamente, através da seleção natural, tornando-se o padrão nos oceanos, que continha cada vez mais oxigênio. Tendo aprendido a tolerar o oxigênio, algumas destas células sofreram mutações que as permitiram utilizar o oxigênio, altamente reativo, como fonte de energia. As cianobactérias, que aprenderam a utilizar a respiração como forma de obter energia, se espalharam ainda mais rapidamente pelo planeta. As células que puderam sobreviver à explosão de oxigênio multiplicaram-se nos mares. Um outro efeito da concentração excessiva de oxigênio foi a formação da camada de ozônio na atmosfera terrestre, cortando assim drasticamente a quantidade de luz (ultravioleta) que atingia a Terra. Em um ambiente mais ameno, as células mostraram-se aptas a diversificar-se igualmente em terra. A vida alterou a face do mundo, num processo contínuo que perdura até os dias de hoje.É importante observar que até hoje não há provas de que a existência da vida, assim como a de vida altamente organizada, seja inevitável. Esta feliz confluência de coincidências pode ser, ou não, uma exceção no universo.

47 hackingextreme.blogspot.com

Page 48: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

A Importância da Evolução

A evolução biológica pode ser definida como a mudança progressiva no material genético de uma população por muitas gerações. Estas mudanças não precisam ser adaptativas. Na verdade, muitos genecistas acreditam que a maior parte da evolução pode ser considerada adaptativamente neutra ( Kimura, 1968; Hartl e Clark, 1989 ). Em seu livro, Charles Darwin (1859) apresenta o que viria a ser o núcleo de toda a teoria evolucionária atual, cujos principais conceitos eram:

indivíduos variam de todas as formas viáveis nos ambiente em que ocupam; a variação é hereditária; a auto replicação de indivíduos tende a produzir mais descendentes que

possam sobreviver com os recursos limitados disponíveis no ambiente; pelo resultado do embate pela sobrevivência, os indivíduos melhores

adaptados irão gerar um maior número de descendentes na próxima geração.

Os dois principais conceitos apresentados acima são a seleção natural e a variação genética. A seleção natural é o processo pelo qual os indivíduos mais aptos produzem, em média, mais descendentes, em gerações sucessivas, do que os indivíduos menos aptos. A variabilidade genética resulta dos eventos aleatórios que podem ocorrer aos indivíduos de uma determinada população. Estes eventos incluem a mutação aleatória do material genético, a morte acidental de um indivíduo com alto grau de adaptabilidade antes que esse tivesse a oportunidade de reproduzir-se, etc.

Genótipos, Fenótipos e Mutações

O gene é a unidade da hereditariedade. Cada gene, agindo sozinho ou com outros genes, determina uma ou mais características do organismo resultante. Todas as formas de vida conhecidas são baseadas em códigos genéticos. Mesmo os organismos unicelulares são construídos a partir do material genético do núcleo celular. Um conjunto completo de genes é conhecido como genótipo.Os genes são encontrados no interior do material genético denominado cromossomo. Na maioria das células, cada gene ocupa uma posição em particular num cromossomo específico. Os cromossomos podem quebrar-se, durante a reprodução celular, e parte de seus genes são transferidos de um lugar para outro dentro do mesmo cromossomo ou para outros cromossomos. Quando isso acontece, novas combinações dos genes são formadas.Os genes também podem mudar na sua composição química. Neste tipo de recombinação alterada ou variação química, eles acabam por produzir diferentes elementos a partir de genes inalterados. Esse processo é conhecido por mutação e tem um papel decisivo na evolução das espécies. Muitos fatores ambientais podem acabar alterando a estrutura da molécula de DNA (material genético). Alguns fatores podem ser físicos, e outros são químicos. Uma mutação ocorre quando estas

48 hackingextreme.blogspot.com

Page 49: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

alterações acabam por provocar mudanças permanentes na seqüência básica do DNA, que provocam uma mudança hereditária da síntese de proteínas.Muitas mutações tendem a ser nocivas em seus efeitos. Tais efeitos podem reduzir a adaptabilidade de um descendente ou até mesmo matá-lo. Muitos tipos de câncer e algumas anormalidades de nascimento são atribuídas à mutações. Para minimizar os prejuízos feitos ao DNA, existem um grande número de mecanismos de auto reparação que tentam evitar o aparecimento de mutações.Por outro lado, muitas vezes um novo gene ou um novo arranjo dos cromossomos possibilita ao descendente uma adaptação melhor ao ambiente que a dos seus pais. Estas mutações, neste caso, é que acabam fornecendo a matéria prima da seleção natural.O fenótipo é o organismo de um ser vivo considerado em relação aos caracteres apreciáveis com o uso dos sentidos. Ou seja, o fenótipo de um indivíduo é o conjunto de comportamentos deste, em relação ao ambiente em que vive. Comportamentos estes definidos pelo código genético (genótipo) e pela capacidade de percepção e aprendizado do indivíduo frente ao mundo que o cerca. Essa definição é de suma importância em Vida Artificial, pois é a partir dos comportamentos dos indivíduos que esta busca a compreensão da vida e da sua evolução.

O Efeito de Baldwin

O aprendizado durante o tempo de vida de um indivíduo não afeta diretamente o seu material genético; conseqüentemente as ações aprendidas durante o tempo de vida do indivíduo não podem ser transmitidas diretamente aos seus descendentes. No entanto, alguns biólogos evolucionistas tem discutido um efeito indireto do aprendizado na evolução, inspirado nas idéias de J.M. Baldwin(1896). Ele introduziu o conceito de seleção orgânica na tentativa de explicar alguns exemplos de características que eram, inicialmente, adquiridas pelos membros de uma população em evolução durante o seu tempo de vida. Posteriormente estas características surgiam codificadas em seu material genético. Logo, a seleção orgânica é o processo pelo qual os indivíduos que são aptos a adquirir uma nova característica durante o seu tempo de vida terão uma maior probabilidade de sobrevivência e passarão esta habilidade de adquirir tal característica para os seus descendentes.Em seu artigo (Mitchell e Forrest, 1989) explicam o efeito de Baldwin pela teoria de que o aprendizado ajuda na sobrevivência do indivíduo, logo os organismos que sejam mais capazes de aprender terão o maior número de descendentes e incrementarão a freqüência de genes responsáveis pelo aprendizado. Se o ambiente for estável o suficiente para que as melhores ações a serem aprendidas permaneçam as mesmas, esta combinação de fatores pode gerar uma codificação genética destas ações que, originalmente, deveriam ser aprendidas.A capacidade de adquirir um certo comportamento desejado permite ao organismo que está aprendendo a preferência na sobrevivência. Sem este aprendizado, a possibilidade de sobrevivência, e a oportunidade de uma nova descoberta genética originada pelos genes responsáveis pelo aprendizado, diminuem. Neste aspecto indireto, o aprendizado pode afetar a evolução, mesmo se o que está sendo aprendido não puder ser transmitido geneticamente.

49 hackingextreme.blogspot.com

Page 50: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

Resumindo, o aprendizado fornece soluções parciais codificadas geneticamente para conseguir vantagens parciais, ao invés do paradigma tudo-ou-nada dos organismos que não apresentam características de aprendizado. Um aspecto comum para o aprendizado é que ele fornece a capacidade ao organismo de adaptar-se à aspectos imprevisíveis do ambiente – aspectos que mudam muito rapidamente para a evolução tratar geneticamente. No entanto, apesar deste claro benefício da aprendizagem, o que o Efeito de Baldwin nos coloca é diferente: ele indica que o aprendizado ajuda os organismos a adaptarem-se geneticamente a aspectos previsíveis, mas difíceis, e que o aprendizado ajuda indiretamente na transformação destas adaptações em código genético.

A Aptidão do Indivíduo e a Seleção Natural

Para ilustrarmos o conceito de aptidão de um indivíduo e suas conseqüências para a seleção natural, partiremos do estudo de Wright(1932) que apresenta a idéia da paisagem adaptativa ou superfície de aptidão, que é um meio útil de visualizarmos como a seleção atua numa população que está evoluindo. A idéia aqui é traçar a aptidão ( fitness ) como uma função sob o espaço de todas as combinações genéticas possíveis para uma espécie em um ambiente em particular, como visto na figura a seguir colocar figura. O gráfico resultante forma a superfície de aptidão. O espaço de possíveis organismos têm milhares de dimensões, e as superfícies de aptidão tem tipicamente um grande número de picos e vales, variando na altitude, pois algumas combinações dos genes são mais adaptativas do que outras.A população é representada como uma nuvem de pontos sob a superfície de aptidão, um ponto para cada organismo na população. Quanto mais variável for a população, mais esparramada será a representação desta sob o gráfico. Os descendentes dos indivíduos mais aptos em uma população tendem a ser mais numerosos e mais aptos que os indivíduos menos aptos. Logo, após muitas gerações, a seleção natural tende a mover a população para os picos (aptidão elevada), enquanto que a caráter aleatório das mutações tendem a mover a população de forma esparsa sob a superfície do gráfico. Se a seleção natural dominar a evolução da população, a tendência é um aumento gradual no gradiente da superfície de aptidão; se a aleatoriedade dominar, a evolução tende a desviar-se por toda a superfície.Na biologia, a aptidão é definida como a habilidade relativa à sobrevivência e reprodução no contexto de um ambiente em particular e de uma coleção de genes. Na natureza, a aptidão de um organismo é muito difícil de ser determinada, assim como a contribuição de um traço genético em particular. Medidas precisas de aptidão são necessária pois mesmo mudanças muito pequenas podem desencadear grandes conseqüências evolucionárias.Como veremos adiante, a aptidão pode ser considerada um atributo de todo um genótipo, ao invés de referir-se a um gene ou traço específico. A seleção natural favorece determinados genótipos. O sucesso reprodutivo de determinados genótipos é determinado pela totalidade de traços e qualidades produzidas num dado ambiente. A aptidão de um genótipo em particular é determinada pelos eventos em todos os estágios do seu ciclo de vida. O elemento mais óbvio da aptidão é a viabilidade, ou seja, a habilidade de um organismo desenvolver-se e sobreviver desde o nascimento até a fase adulta. Um outro componente importante é a habilidade de formar pares

50 hackingextreme.blogspot.com

Page 51: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

para o acasalamento, conhecido como a seleção sexual (ver seção seguinte). A seleção sexual é responsável pelas competições entre os machos de uma mesma espécie, escolha de um macho, escolha de uma fêmea, ou escolha mútua, através de interações entre os machos e fêmeas.Outra componente da aptidão é denominado direção meiótica, que trata sobre as diferenças na produção das combinações genéticas (usualmente de forma não aleatória) dos gametas, durante a formação destes (meiose). Outra forma de seleção é seleção gamética, que resulta das diferenças no sucesso das fertilizações entre os gametas produzidos. A fecundidade de um indivíduo, ou seja, o número de zigotos (gametas fertilizados) produzidos, é um outro componente para a aptidão global de um genótipo.Os efeitos combinados de todos estes componentes determinam a aptidão de um dado genótipo. É preciso ressaltar que um indivíduo, mesmo que viável e saudável na fase adulta, terá um grau de aptidão zero se falhar em encontrar um parceiro compatível durante a seleção sexual.A aptidão também pode ser aplicada e quantificada a partir de uma sociedade de indivíduos (genótipos) em termos de sua adaptabilidade com o ambiente dado. Neste caso, as observações dos comportamentos seriam realizadas de uma forma macroscópica (Bedau, Packard, 1992), levando em conta toda as transformações realizadas pela sociedade como um todo, a tentar adaptar-se ao seu meio ambiente. A formulação de quantificadores macroscópicos da evolução e adaptação, assim como as descrições dos mecanismos microscópicos de onde estas quantidades macroscópicas emergem, é essencial se a Vida Artificial for utilizada como uma ciência exploratória e quiser contribuir significativamente para a biologia evolucionária real. No entanto, esta abordagem apresenta uma análise difícil em termos de como definir e tratar estes quantificadores macroscópicos.

A Reprodução

A reprodução, seja ela sexuada ou assexuada, é o mecanismo pelo qual a célula perpetua a si mesma. Na reprodução assexuada, os novos indivíduos são produzidos pela simples divisão de células não reprodutíveis, através da formação de botões a partir de um sistema de origem (pais), pela formação de esporos, que são germinados diretamente neste novo indivíduo, etc. Ou seja, não é necessário para as células, ou para o núcleo celular, fundir-se com outro indivíduo para a reprodução. As novas gerações assexuadas são, essencialmente, idênticas, pois um pai único acaba por transmitir uma cópia fiel de si mesmo para todos os seus descendentes (clonagem).Na reprodução sexuada, as novas gerações têm origem após uma fusão entre os núcleos das células de dois pais diferentes, o que acaba produzindo uma maior variação genética. As células que são utilizadas neste processo são denominadas gametas. Estas células formam pares provenientes de dois pais diferentes, para produzir um zigoto, ou seja, um ovo fertilizado, que é o ponto de partida para a nova geração. Cada tipo de sistema reprodutivo provê algumas vantagens e desvantagens com maior ou menor importância evolutiva. Os sistemas assexuados são mais produtivos, mais prolíficos, e acabam por colonizar rapidamente um novo ambiente,

51 hackingextreme.blogspot.com

Page 52: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

pois muitos descendentes assexuados de constituição genética e adaptabilidade similares, acabam por preencherem rapidamente um habitat.Já as espécies sexuadas são mais variáveis, logo um mínimo de tipos genéticos de uma mesma população podem adaptar-se às diferentes condições flutuantes, provendo uma chance maior para a continuação da população. Em geral, as espécies sexuadas são melhores adaptáveis a ambientes novos e sob influência de mudanças abruptas, enquanto que as espécies assexuadas trabalham melhor em cercanias estáticas. No entanto, é importante observar que, em certas espécies em que o sexo é norma, uma mutação genética faz, eventualmente, aparecer uma fêmea assexuada, portadora de óvulos já prontos para gerar um embrião. Esta, é claro, acaba se reproduzindo com tamanha velocidade que logo se espalha por grandes áreas. Ora, como na competição por alimentos costuma vencer quem pertence ao time mais numeroso, a população assexuada tende a sobreviver aos indivíduos sexuados que lhe deram origem. (Oliveira, 1990)A seleção sexual refere-se às vantagens que certos indivíduos têm sobre os outros indivíduos do mesmo sexo e espécie, com respeito a reprodução. A seleção sexual pode ser resultado da preferência demonstrada por uma fêmea por certos machos que estão competindo por ela, ou pelas interações entre os machos competidores que acabam resultando em um só macho que irá impedir os demais de procriar. Sistemas de procriação competitiva ocorrem em muitas espécies animais devido ao número excessivo de machos em relação às fêmeas. A poligamia, ou seja, um macho procriar exclusivamente com muitas fêmeas, ocorre em certas espécies e acaba por acentuar a competição entre os machos.Em seu livro, Darwin (1859) dá uma grande ênfase à seleção sexual como uma das principais forças no processo evolucionário. Ele estabeleceu que qualquer traço hereditário que incrementasse a taxa de sobrevivência e reprodução seria transmitida para seus descendentes. No entanto, Darwin também considerou a possibilidade de que alguns fatores envolvidos na seleção sexual poderiam não ter nenhuma função na luta pela sobrevivência, o que representa uma dicotomia entre a seleção natural e a seleção sexual.

A Morte

Como visto acima, na seleção natural, a fonte das mudanças são as mutações nos genes. A criação da natureza emerge da realização de experiências com os genes e observando seus resultados. Portanto, a natureza deve destruir suas criações antigas para dar espaço para a criação de novas experiências. A mortalidade de organismos multicelulares é uma necessidade evolucionária.Rucker (1993) enfatiza esta idéia, ao fazer cálculos sob o que ocorreria caso surgissem seres imortais. Suponhamos que cada indivíduo, em média, produza um novo descendente a cada trinta anos. Logo, se ninguém morresse e todos continuassem a reproduzir-se, a população iria dobrar a cada trinta anos. Se o processo iniciasse com dois imortais, teríamos 2n imortais após 30*n anos. Uma estimativa indica que o universo tem o mesmo tamanho de um cubo de dez bilhões de anos-luz de lado. Considerando um ano-luz como dez trilhões de quilômetros, o universo teria, mais ou menos 101078 metros cúbicos.

52 hackingextreme.blogspot.com

Page 53: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

Suponha que cada indivíduo ocupe um metro cúbico de espaço, quanto tempo seria necessário para que esta população de imortais preenchessem todo o universo? Segundo os cálculos de Rucker, em apenas 260 gerações (± 7800 anos), esta população encheria completamente o universo.Além do efeito devastador em termos de espaço, a morte ajuda na evolução de outras maneiras. A evolução é possível sempre que tivermos: (1) reprodução, (2) variação do genoma e (3) seleção natural. A variabilidade genética ocorre durante a reprodução, pelo cruzamento e mutação nos genomas do descendente. Já a seleção natural ocorre com a morte do indivíduo, ou seja, nem todas as criaturas tornam-se aptas a reproduzir-se antes de morrerem. Os indivíduos que reproduzem-se possuem genomas que são selecionados pelo processo de competição pela vida, originando descendentes que possam sobreviver.

A Evolução do Ser Humano

É importante estudarmos a evolução de nossa espécie em particular, que acabou por dominar toda a Terra. A Terra levou bilhões de anos para criar a primeira célula. A partir daí, a explosão da vida transformou por completo o ambiente que a cercava. Mas o que impulsionou a evolução do ser humano, em detrimento às demais sociedades, foi a integração pela linguagem super desenvolvida. A linguagem é utilizada em duas funções principais: comunicação entre os integrantes da sociedade e a modelagem da realidade.Utilizando o material da linguagem, as pessoas podem construir modelos da realidade (sistemas de sinais) que nunca existiram no cérebro antes. Além disso, a linguagem pode ser considerada uma extensão comum unificada para todos os membros da sociedade. Este é um modelo coletivo da realidade que todos os membros da sociedade esforçam-se para aperfeiçoar, além de preservar a experiência das gerações anteriores, evitando a repetição dos erros.A emergência dos seres humanos e sua integração formaram um novo mecanismo para a evolução. Antes, o desenvolvimento e o melhoramento dos níveis mais altos da organização (a estrutura do cérebro) ocorriam como resultado do combate pela sobrevivência e pela seleção natural. Este processo demorado requeria milhares de gerações. Na sociedade humana, o desenvolvimento da linguagem e da cultura são o resultado de esforços criativos de seus membros. A seleção de variantes necessárias para aumentar a complexidade da matéria do organismo pelo método da tentativa-e-erro foi trocado dentro do cérebro humano: ele tornou-se inseparável dos atos voluntários do indivíduo. Logo, a velocidade da evolução cultural aumentou várias vezes.Resumindo, podemos constatar que, na evolução da cultura humana, o cérebro humano tornou-se a fonte da criatividade, e não mais um objeto de experimentação. Além disso, o aprendizado do indivíduo não era mais descartado, sendo repassado para seus descendentes de forma mais direta e objetiva. Este postulado não descarta a evolução biológica natural que ainda deve estar atuando sobre os seres humanos. Seria muita pretensão considerarmo-nos o ápice da evolução. Podemos considerar que os seres humanos são a espécie mais desenvolvida do planeta Terra, após 4,6 bilhões de anos. Isto não implica que a luta pela sobrevivência esteja ganha.

53 hackingextreme.blogspot.com

Page 54: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

> História da vida artificial

Modelagem de Sistemas de Vida Artificial

Boids

Como visto anteriormente, os boids foram propostos por Craig Reynolds (1987). Seu objetivo era produzir criaturas artificiais que apresentassem um comportamento semelhante a um bando de pássaros. A cada passo, cada boid atualiza seu vetor velocidade e move-se ao longo desse vetor até a sua nova posição. Um boid simples não possui nenhum estado interno e sempre reage da mesma maneira em situações iguais. Além disso, um único boid colocado num ambiente vazio não realizará nenhum comportamento complexo. Ele apenas voará numa determinada direção, em linha reta. Quando são colocados diversos boids num ambiente, o número de situações possíveis torna-se extremamente alta – cada boid reage diferentemente de acordo com a posição e a velocidade de outros boids.As três regras que compõem o vôo geométrico dos pássaros virtuais de Reynolds estão descritas a seguir:

Evitar colisões: cada boid deve manter-se numa distância de cruzeiro otimizada, uma espécie de zona de segurança, entre ele mesmo e seus companheiros nas cercanias de sua vizinhança. Se um outro boid estiver dentro da zona de segurança, há o perigo de colisão. Os boids evitam as colisões diminuindo a velocidade, se o vizinho que atravessou a zona de segurança estiver na sua dianteira, ou aumentando a velocidade, se este estiver na traseira, como visto na primeira parte da figura abaixo. Assim como o boid não deve aproximar-se demais de outro boid, ele também não deve afastar-se demais do boid que estiver mais próximo. Ou seja, se um boid e seu vizinho mais próximo estiverem mais longe que a distância de cruzeiro, o boid na frente aumenta a sua velocidade e de trás diminui a velocidade, como observado na segunda parte da figura acima;

54 hackingextreme.blogspot.com

Page 55: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

Igualar velocidades: cada boid tenta voar paralelamente ao seu vizinho mais próximo. Esta regra é realizada pelo ajustamento da tangente do vetor posição para que este se aproxime da tangente do vetor posição do vizinho mais próximo. Esta regra não modifica a velocidade do boid;

Concentração do bando: cada boid tenta manter-se rodeado por outros boids por todos os lados. Isto é realizado calculando a posição média (centroid) em relação aos outros boids, e movendo-se para esta nova posição. Para realizar isso, o boid calcula o vetor que aponta para o centroid e gira a tangente do seu vetor posição para que os dois ângulos aproximem-se. Esta regra não modifica a velocidade do boid.

Turmites

Um turmite é um modelo de criatura de vida artificial que emula uma máquina de Turing em um ambiente bidimensional. Um turmite simples pode mover-se em quatro direções: norte, sul, leste e oeste. O estado da máquina de Turing é dado por um conjunto quíntuplo contendo: estado presente, cor de leitura, cor de escrita, novo estado e giro. O estado corrente e o novo estado são as direções que os turmites devem seguir. A cabeça da máquina de Turing muda sua posição adicionando um giro à sua direção e movendo-se em sua nova direção. Os turmites são inicializados em algumas condições iniciais e seus movimentos são determinados apenas pelos giros e por uma tabela de mudança de estado. Um exemplo de tabela de mudança de estado para um turmite que movimenta-se em quatro direções é mostrado a seguir:

Mudança em X: (Leste = 1) (Norte = 0) (Oeste = -1) (Sul = 0) Mudança em Y: (Leste = 0) (Norte = 1) (Oeste = 0) (Sul = -1)

Devemos assumir que cada máquina de Turing possui uma direção e que, ao final de cada iteração, o turmite move-se um passo em sua direção corrente. A mudança da direção ocorre em função do seu valor de giro, que varia de acordo com o conjunto abaixo:K = [ 0, 1, .... número de direções possíveis – 1 ]Em nosso exemplo, o turmite pode girar, sempre no sentido contrário ao dos ponteiros do relógio, de zero a três vezes. O efeito do giro na direção corrente do turmite é dada pela tabela abaixo:

Giro 0: Leste(Leste) Norte(Norte) Oeste(Oeste) Sul(Sul) Giro 1: Leste(Norte) Norte(Oeste) Oeste(Sul) Sul(Leste) Giro 2: Leste(Oeste) Norte(Sul) Oeste(Leste) Sul(Norte) Giro 3: Leste(Sul) Norte(Leste) Oeste(Norte) Sul(Oeste)

Por exemplo, se considerarmos um passo dado por Direção = Oeste e Giro = 3, teremos ao final Direção = Norte, como mostrado na figura abaixo:

55 hackingextreme.blogspot.com

Page 56: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

Vírus

O termo vírus de computador é derivado e análogo ao vírus biológico. As infecções biológicas expandem-se quando o vírus (um pequeno casco contendo material genético) consegue injetar-se numa grande célula do corpo. A célula infectada é convertida numa fábrica biológica para a replicação do próprio vírus. Similarmente, um vírus de computador é um segmento de código de máquina (tipicamente entre 200 e 4000 bytes) que replica seu código, quando ativados, em um ou mais programas hospedeiros. Quando os programas infectados são executados, o código viral também é executado o que acaba por expandindo a infecção.Um vírus possui três estágios de ‘vida’:

Execução: para que um vírus se espalhe, ele precisa ser executado. Esta fase ocorre como um resultado direto para um usuário que invoque um programa infectado, ou indiretamente, quando o sistema executa o código viral como parte de sua seqüência de inicialização ou ao executar uma tarefa administrativa em segundo plano;

Replicação: o vírus, ao ser executado, replica-se para um ou mais programas escolhidos aleatoriamente;

Realização de tarefas: além de auto replicar-se, os vírus podem realizar outras tarefas paralelamente, que apresentam uma variedade de efeitos (benéficos ou malévolos) que acabam por indicar a presença do vírus.

56 hackingextreme.blogspot.com

Page 57: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

Algumas considerações podem ser feitas em relação às semelhanças entre os vírus e a Vida Artificial (Spafford, 1991):

Vírus como um molde no espaço tempo: os vírus são representados como moldes de instruções que existem ao mesmo tempo em muitos sistemas computadorizados. Os vírus não são associados com o maquinário físico, mas com as instruções executadas por este hardware;

Auto replicação: os vírus de computador possuem a habilidade de reproduzir-se, gerando uma cópia exata ou mutante de seu código genético, o que constitui um dos princípios básicos da vida;

Armazenamento da informação de sua própria representação: assim como os vírus biológicos, que utilizam o DNA para armazenar toda a informação necessária para a replicação da célula, os vírus de computador utilizam o seu código como um gabarito ao auto replicar-se;

Metabolismo virótico: esta propriedade envolve a energia ou a matéria que um organismo vivo necessita transformar para executar as suas atividades. Os vírus de computador utilizam a energia elétrica do sistema para executar as suas atividades. Eles não convertem matéria, mas utilizam esta energia para executar as suas instruções e infectar outros programas;

Interações funcionais com o ambiente: os vírus executam inspeções em seus sistemas hospedeiros como parte de sua atividade. Eles examinam as arquiteturas de memória e do disco rígido, alterando os endereços para que possam ocultar a si mesmos, ou seja, ele alteram seu ambiente para suportar a sua existência;

Interdependência entre todas as partes do vírus: assim como os vírus biológicos, se um vírus de computador for dividido, ele será destruído e cessará suas atividades normais;

Estabilidade perante perturbações: alguns vírus de computador podem rodar numa grande variedade de máquinas, sob diferentes sistemas operacionais. Muitos vírus podem constranger e derrotar programas antivírus;

Evolução: esta é a maior diferença entre os vírus biológicos e os vírus de computador, pois o segundo não apresenta uma evolução. Apesar de ser possível construir um vírus capaz de evoluir de uma forma contínua, este seria tão grande e complexo, que dificilmente deixaria de ser detectado e seria, então, eliminado. No entanto os vírus de computador apresentam mutações. Normalmente estas mutações variam poucas instruções, principalmente as que imprimem mensagens, ou os tipos de formas de ativação e replicação;

Crescimento: o crescimento do vírus pode ser medido pelo número de arquivos infectados no sistemas. Certos vírus podem invadir todos os arquivos em algumas poucas ativações;

Outros comportamentos: os vírus de computador agrupam-se em espécies com nichos ecológicos bem definidos, baseados no tipo de máquina hospedeira e no seu sistema operacional. Estas espécies são adaptadas para um ambiente específico e não sobrevivem se movidas para um ambiente diferente. Além disso, alguns vírus exibem comportamentos predatórios. Como exemplo, o vírus DenZuk procura e replica-se por cima das instâncias do vírus Brain, se os dois estiverem presentes no mesmo sistema. Outros vírus

57 hackingextreme.blogspot.com

Page 58: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

apresentam um comportamento territorial, marcando seus domínios territoriais para que outros vírus do mesmo tipo não possam entrar em sua área, competindo com o vírus original.

Minhocas

Uma minhoca de computador (worm) é um programa de computador que, parecido com os vírus, pode auto replicar-se. A diferença é que um worm não expande-se infectando programas executáveis hospedeiros. Ao invés disso, um worm inicia sua execução por si próprio, copiando seu código para novas posições de memória. Alguns worms mandam cópias de si mesmo para outros usuários utilizando o correio eletrônico. Os worms rodam independente e viajam de máquina para máquina através das conexões de rede; os worms podem ter porções espalhadas rodando em diversas máquinas e, usualmente, não mudam outros programas. Apesar disso, eles podem carregar outros códigos que infectam o sistema (vírus). Poucos worms foram construídos até hoje, principalmente os que executam funções danosas, pois eles são difíceis de construir. Os worms necessitam um ambiente de rede e um autor que esteja familiarizado com os serviços e facilidades da rede, assim como as operações necessárias para suportar o seu transporte de uma máquina para outra.

Mundos Virtuais

A construção de modelos de Vida Artificial utilizando mundos virtuais, usualmente bidimensionais, é a forma mais difundida e utilizada no estudo científico da Vida Artificial. As simulações computadorizadas de Vida Artificial são feitas construindo-se um mundo virtual no qual programas de computador (agentes) podem mover-se, competir e evoluir. Um agente neste mundo virtual contém, normalmente, um número pessoal de identificação, sua posição atual, e alguns valores que são utilizados para a comparação e definição dos comportamentos a serem seguidos. Estes comportamentos podem ser representados por tabelas, algoritmos genéticos e/ou redes neurais. Além disso, o agente pode manter dados adicionais sobre o seu estado, sua velocidade, os membros de sua colônia, o tipo de identificação de suas presas e predadores. O mundo virtual, que é compartilhado por todos os agentes, é formado por uma grade de células, parecida com um tabuleiro de xadrez. Cada agente habita uma única célula de cada vez (ver seção 2.1). O mundo apresenta um marcador ou uma trilha individual para cada agente, que representa as mudanças de posição do agente. Além disso, o mundo mantém também algumas marcas que os agentes podem interpretar como comida, veneno, muros, caminhos, etc. Um exemplo típico de um mundo virtual é dado pela figura a seguir. Os agentes trabalham dentro de um laço de execução, usualmente definido como o que segue:

Receba e analise as informações do mundo; Calcule a saída, a nova posição e os novos valores para os marcadores

internos; Repasse a saída para o mundo.

58 hackingextreme.blogspot.com

Page 59: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

Os agentes podem receber vários tipos de informações do mundo, dependo do poder computacional da máquina e das variáveis envolvidas e desejadas pelo pesquisador. Em termos de processamento, o modo mais vantajoso é receber informações apenas da célula para a qual o agente está movendo-se. Alternativamente, pode-se construir um agente que receba informações de todos os seus vizinhos. Outros modos incluem a concepção de visão, onde o agente recebe e calcula a distância e a direção dos outros agentes que estejam dentro do seu campo de visão.Finalizando, um agente ainda pode receber informações sobre todos os agentes do mundo, com a sua localização e tipo. Este tipo de informação, além de apresentar o maior custo computacional, não apresenta nenhuma similaridade com os modelos biológicos existentes.Os quatro principais modos de percepção de um agente podem ser visualizados na figura a seguir:

A partir da percepção do mundo que os cerca, os agentes podem tomar suas decisões. O processo de tomada de decisões é o mais importante e, potencialmente, o mais difícil de ser definido e executado. É a partir da definição destes comportamentos básicos que o sistema será posto a prova quanto à emergência de uma inteligência, normalmente não explicitada.

59 hackingextreme.blogspot.com

Page 60: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

Sistemas de Mundos Virtuais

Tierra

O projeto Tierra é um dos mais avançados no estudo da evolução dos organismos, ao nível da evolução do genoma. Ele foi desenvolvido por Tom Ray (1994) na Universidade de Delaware. O Tierra provê um ambiente onde a evolução darwiniana pode ocorrer dentro de um computador, sem uma direção explícita ou intervenção humana.Para Ray, deve-se observar uma distinção nítida entre simulações e instanciações de vida artificial. Por simulações, ele entende como populações de estruturas de dados num programa de computador que são utilizadas para representar populações de entidades biológicas (predadores, presas, formigas, etc.). A maioria dos projetos discutidos nas próximas seções encontram-se nesta categoria. Em uma instanciação de vida artificial, populações de estruturas de dados não representam explicitamente nenhum organismo ou processo vivo, mas sim obedecem algumas leis artificiais abstraídas das leis naturais que governam os processos vivos.Para Ray, apenas as instanciações de vida artificial podem ser consideradas vivas. No Tierra, os organismos são programas de computador em linguagem de máquina. Um organismo é uma string linear de instruções que são executadas movendo-se um ponteiro de execução ao longo deste. O principal avanço conceptual no projeto Tierra é a construção de um conjunto de instruções em linguagem de máquina extremamente robustas. Um programa (organismo) escrito neste conjunto de instruções pode sofrer mutações aleatórias ou recombinações e, mesmo assim, continuar executável.O Tierra apresenta um conjunto de 32 instruções, onde cada instrução é representada por um número de 5 bits. Um programa pode ser considerado uma simples concatenação de números de bits e, qualquer combinação de números de 5-bits é considerado um programa válido. Por exemplo, o operador de mutação opera sob os bits da string de execução. Modificando um destes bits ele pode transformar uma operação de JUMP (salto incondicional) numa operação de NOP (nenhuma operação). O programa, do ponto de vista do sistema operacional, continuará executável, apesar de não realizar mais nenhuma tarefa útil ou produzir ações sensíveis ao observador.O operador de mutação é utilizado pelo sistema operacional para conduzir a evolução. Para as simulações realizadas, o sistema operacional aloca um certo número de ciclos de CPU e uma parcela de memória para as populações de organismos. Após um certo número de iterações (definidas pelo usuário), o sistema introduz erros (mutações) aleatórias nos organismos.Em uma simulação típica, o sistema operacional é infectado por alguns organismos, capazes de auto reproduzir-se (fazer uma cópia de si mesmo em outras partes da memória). Logo, o sistema operacional irá executar o organismo repetidamente, o que ocasionará um aumento no número dos descendentes.Ocasionalmente, algumas mutações introduzidas nos descendentes acabam por impedir que este reproduzam-se. No entanto, outros tipos de mutações acaba por acelerar o processo de reprodução dos descendentes. Quando há uma superlotação na memória, alguns organismos devem ser eliminados. Os organismos que serão

60 hackingextreme.blogspot.com

Page 61: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

excluídos são escolhidos de acordo com o quão bem estes rodam no sistema operacional, ou seja, elimina-se os organismos que podem gerar erros em certas condições. Cada organismo incrementa seu grau de penalidade, fornecido pelo sistema operacional, quando gera alguma condição de erro. O organismo é eliminado pelo sistema se acumular um grande número de penalidades (de acordo com os outros organismos da população). O resultado desta abordagem indica que os organismos que conseguem reproduzir-se rapidamente com um mínimo de erros ao sistema irá dominar a população. Mesmo assim, nas simulações realizadas, variabilidade da população é mantida, devido as contínuas mutações e recombinações.Alguns fenômenos evolucionários básicos são observados, como o parasitismo. O Tierra é um ambiente artificial onde os organismos melhores adaptados sobrevivem, sem precisar uma definição de um grau de aptidão explícito. Neste ambiente, há apenas dois recursos: tempo de CPU (energia) e memória (território). Os organismos que conseguirem melhor adaptar-se ao ambiente e capturar a maior quantidade de recursos terá um taxa de sobrevivência mais alta que os demais.O Tierra apresenta uma abordagem extremamente bottom-up para a construção de simuladores de Vida Artificial mais gerais. Apesar de apresentar algumas vantagens, como a mutabilidade e o grau de aptidão emergente, o sistema apresenta algumas dificuldades para a implementação de funções de alto nível tais como a percepção e a comunicação. No entanto, alguns fenômenos de baixo nível, como o estudo de organismos multicelulares, podem ser melhores estudados com esta abordagem.

Evolutionary Reinforcement Learning

Em seu artigo, Ackley (1992) construíram agentes adaptativos, que movem-se aleatoriamente num espaço bidimensional, onde encontram-se alimentos, predadores, lugares escondidos a explorar, etc. Cada estado do agente inclui as entidades visualizadas pelo seu campo visual, o seu nível interno de energia, além de outras variáveis pertinentes.Para a formação do seu comportamento, cada agente possui duas redes-neurais, do tipo feed-forward: (1) rede avaliadora que mapeia o estado do agente no tempo t como um número que representa o quão bom este estado é; (2) rede de ações que mapeia o estado do agente no tempo t como uma ação a ser tomada no tempo t+1. As únicas possibilidades de ações permitidas são o movimento para uma das quatro posições adjacentes (Norte, Sul, Leste e Oeste), mas estas ações podem resultar em situações como : alimentar-se, servir de alimento para um predador, descobrir um novo esconderijo, etc.A arquitetura das redes neurais é a mesma para todos os agentes, mas os pesos para cada agente podem mudar. Os pesos das redes de avaliação são fixados na hora da criação (inicialização) do agente. Esta rede representa os comportamentos inatos e os desejos herdados de seus antecessores, tais como estar-perto-da-comida-é-bom. Já os pesos da rede de ações podem mudar seus valores durante o tempo de vida do indivíduo, de acordo com o algoritmo ERL. O genoma de cada agente codifica os pesos para a rede de avaliação e os pesos iniciais para a rede de ações.

61 hackingextreme.blogspot.com

Page 62: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

Todos os agentes tem uma reserva interna de energia (representada por um número real) que deve manter-se acima de um determinado nível para prevenir a morte; o que é alcançado alimentando-se com a comida encontrada no ambiente. Um agente deve, além disso, manter-se longe de predadores, ou acabará sendo devorado.Um agente só pode reproduzir-se se tiver uma quantidade de energia suficiente em seu compartimento interno. A reprodução assexuada é realizada clonando-se seus genomas e submetendo-os a mutação. Dois agentes que estejam suficientemente próximos podem gerar descendentes, cruzando seus genomas. Não há uma função de avaliação (fitness) externa, que possa avaliar o agente. Na verdade, o fitness emerge pelas suas ações e interações com o ambiente durante o seu curso de vida. O comportamento do agente é definido pelo algoritmo ERL : a cada tempo t, o agente avalia seu estado corrente, utilizando sua rede de avaliação. Esta avaliação é comparada com a avaliação produzida em t-1, em conjunto com a ação provocada, e esta comparação gera um sinal de reforço (positivo ou negativo) utilizado para modificar os pesos da rede de ações. A idéia aqui é que os agentes aprendam a agir de modo a melhorar o seu estado atual. Após este passo de aprendizado, a rede de ações já modificada é utilizada para determinar a próxima ação a ser executada.Ackey e Littman compararam os resultados de três experimentos distintos: (EA) evolução da população em conjunto com o aprendizado dos agentes, (E) apenas evolução genética da população e (A), apenas aprendizado dos agentes. A estatística utilizada nesta comparação foi o período de tempo necessário para que esta população se extinguisse, em função dos predadores e das adversidades do ambiente. A melhor performance foi exibida pela população EA, seguida de perto pela população A, e muito abaixo, a população E. Análises mais detalhadas da população EA revelaram que, em respeito a certos comportamentos, a importância relativa entre o aprendizado e a evolução muda durante o curso da evolução. Analisando os genes relativos ao comportamento de aproximar-se da comida (tanto na rede de avaliação como na rede de ações), eles descobriram que, nas primeiras gerações, os genes avaliadores da proximidade da comida (estar-perto-da-comida-é-bom) permanecem relativamente constantes perante a população, enquanto que os genes iniciais codificados na rede de ações eram muito mais variáveis. Esta observação indica a importância de manter as metas para o processo de aprendizado, assim como a importância do aprendizado para a sobrevivência.No entanto, mais tarde, os genes avaliadores tornaram-se mais variáveis na população enquanto que os genes da rede de ações tornaram-se mais constantes. Este fato indica que os comportamentos inatos tornaram-se mais significativos que a aprendizagem durante esta fase. Ackey e Littman interpretaram estas observações como uma variante do efeito de Baldwin. Inicialmente, é necessário para os agentes aprenderem à aproximar-se do alimento; logo, a manutenção do conhecimento explícito de que estar-perto-da-comida-é-bom é essencial para o processo de aprendizagem tome lugar. Mais tarde, o conhecimento avaliativo de que estar-perto-da-comida-é-bom é transformado para uma codificação genética, em termos de comportamentos : aproxime-se-da-comida-se-estiver-por-perto. Logo, o conhecimento avaliativo não é mais necessário. A habilidade inicial de aprender um comportamento é o que permite que este seja, eventualmente, codificado geneticamente.

Echo

62 hackingextreme.blogspot.com

Page 63: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

O Echo é um modelo de sistema ecológico, formulado por Holland (1975, 1992). O Echo modela a ecologia do mesmo modo que os Algoritmos Genéticos modelam as populações genéticas. Ele abstrai virtualmente todos os detalhes físicos dos sistemas ecológicos reais e concentra-se num pequeno número de interações, baseadas nas primitivas agente-agente e agente-ambiente. A meta do Echo é estudar como simples interações sobre agentes simples podem emergir em fenômenos de alto nível, tais como o fluxo de recursos no sistema, ou a cooperação e competição em redes de agentes (ex.: comunidades, redes comerciais, distinção de raças e espécies ). O Echo estende os A.G. em diversos e importantes modos: os recursos são modelados explicitamente no sistema, os indivíduos (agentes) possuem uma localização geográfica que afeta o seu fitness (implícito), certos tipos de interações entre agentes são construídos sob o sistema (combate, permuta, acasalamento), e o fitness é endógeno.O sistema consiste de uma população de agentes distribuídos num conjunto de setores do ambiente. Muitos agentes podem coabitar o mesmo setor, cada um deles apresentando uma determinada localização geográfica. Também distribuídos no ambiente, temos vários tipos diferentes de recursos renováveis (onde cada tipo de recurso é codificado por uma letra : a, b, c ...). Diferentes tipos de agentes usam diferentes tipos de recursos e podem guardar estes recursos (representados pelas letras) internamente.Os agentes interagem por acasalamento, comércio ou luta. O comércio e a luta resultam na troca dos recursos internos entre os agentes, e o acasalamento resulta num descendente cujo genoma é a combinação de seus pais. Cada agente tem um conjunto particular de regras que determinam suas interações com outros agentes (ex.: quais recursos estão disponíveis e podem ser trocados, as condições pelas quais deve-se iniciar uma luta). A aparência externa de um agente também pode ser codificada nestas regras, como um string visível para os outros agentes. Esta característica abre a possibilidade da geração e evolução de regras sociais e a potencialidade para o mimetismo, um fenômeno freqüentemente observado nos ecossistemas naturais. As regras de iterações (Este aqui é iteração ou interação?) utilizam strings, o que torna mais fácil a sua transformação para o genoma. Os agentes também podem reproduzir-se de forma assexuada, através de replicação.Os genótipos de cada agente codificam os detalhes das regras pelas suas interações (condições pelas quais a regra deve ser aplicada) e os tipos de recursos necessários. Como em outros modelos de vida artificial, o Echo não possui uma função de fitness guiando a seleção e a reprodução. Na verdade, um agente reproduz-se quando acumula recursos suficientes para fazer uma cópia exata de seu genoma. Como nos A.G. tradicionais, a replicação é submetida a uma baixa taxa de mutação, e o acasalamento implica na troca do seu material genético.Nas primeiras simulações, o sistema Echo demonstrou comportamentos surpreendentemente complexos, o que incluía algo parecido coma uma diferença de duas espécies biológicas competitivas desenvolvendo, progressivamente, estratégias ofensivas e defensivas cada vez mais complexas; dependências ecológicas entre diferentes espécies, tais como o triângulo natural formiga-lagarto-mosca; e o desenvolvimento de uma sensibilidade para diferenciar diversos recursos renováveis, em função dos diferentes números de fenótipos.

63 hackingextreme.blogspot.com

Page 64: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

Possíveis estudos futuros para o modelo Echo incluem: (1) estudo da evolução da aparência externa como mecanismos para comunicação social; (2) extensão do modelo para suportar a evolução de metazoários, ou seja, comunidades de agentes conectados que possuem características e/ou funções internas quando agrupados, e reproduzem-se unitariamente. Esta capacidade suporta o estudo da especialização de um agente individual e a evolução de indivíduos multi-celulares; (3) estudo da evolução dinâmica do schemata da população; (4) e, utilizando-se dos resultados de (3), formular uma generalização do teorema do schema, baseado no fitness endógeno.

Strategic Bugs

Neste modelo, desenvolvido por Bedau e Packard (1992), o mundo é composto por um ambiente bidimensional, contendo apenas agentes adaptativos (insetos) e alimento. O suprimento de alimento é renovável, ou seja, ele é reposto periodicamente e distribuído dinamicamente no ambiente. Os insetos (agentes) sobrevivem descobrindo e comendo os alimentos, armazenando-os num reservatório interno até ter energia suficiente para a reprodução.Os agentes usam energia do seu reservatório interno para movimentar-se. Se o reservatório tornar-se vazio, o agente morre (por inanição). Os comportamentos de cada agente são controlados por uma tabela interna que mapeia os dados sensoriais da vizinhança local do agente num vetor que indica a direção e a distância que o agente deve executar como próximo movimento ( ex. se-mais-de-10-unidades-de-comida-estiverem-a-2-passos-ao-sul -> ande-dois-passos-para-o-sul ). Esta tabela é o material genético do agente, e cada entrada representa um gene. O agente pode reproduzir-se assexuadamente, e neste caso, transferir seu material genético ao seu descendente com uma baixa taxa de mutação por gene; ou sexualmente, onde o acasalamento ocorre com um agente espacialmente adjacente, produzindo um descendente cujo material genético é a combinação de seus pais, possivelmente com um algum pequeno número de mutações. O objetivo de Berdau e Packard era definir e medir o que eles denominavam o grau de Atividade Evolucionária no sistema, durante um certo intervalo de tempo, onde a Atividade Evolucionária é definida informalmente como "a taxa pela qual as inovações genéticas úteis são absorvidas pela população". Bedau e Packard diziam que o "uso permanente de novos genes é o verdadeiro sinal da atividade evolucionária", ou seja, a Atividade Evolucionária é definida para medir a taxa de tempo na qual novos e úteis genes são descobertos, e que acabam por persistir na evolução.Para quantificar a Atividade Evolucionária, Bedau e Packard começaram mantendo estatísticas da utilização dos genes para cada novo gene que aparecia na população (cada gene era uma entrada na tabela de pares entrada-ação). A cada gene era atribuído um contador, inicializado em zero, que era incrementado a cada momento em que o gene era utilizado, ou seja, no momento em que a situação de entrada surgia e ação correspondente era utilizada. Quando um agente pai passava um gene para seu filho, por reprodução sexual ou não, o valor do contador era passado e permanecia com o gene. A única situação em que o gene era inicializado em zero era quando um novo gene era criado por mutação. Desta maneira, os contadores

64 hackingextreme.blogspot.com

Page 65: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

refletiam a utilização dos genes sob muitas gerações. Quando um agente morre, os genes e seus contadores são destruídos.Berdau e Packard plotaram, para cada passo de tempo durante a evolução, histogramas dos números de genes na população, mostrando seus valores de uso. Estes histogramas mostraram, o que eles denominaram, “ondas de atividades” durante o período observado, demonstrando que conjuntos de genes eram continuamente descobertos e acabam por persistindo na população, ou seja, que a população achava e explorava inovações genéticas continuamente. Esta era, precisamente, a definição de Berdau e Packard para a evolução e, de acordo com eles, enquanto as ondas continuassem a ocorrer, pode-se dizer que a população está continuamente evoluindo.Eles acabaram por definir um número apenas, a Atividade Evolucionária num dado tempo, A(t) que mede o grau no qual a população está adquirindo novos e úteis materiais genéticos num dado tempo t, ou seja, se está ou não ocorrendo ondas de atividades no tempo t e como são suas características. Se A(t) for positivo, a evolução está ocorrendo em t. Considerando que a vida é um problema para a população e não para organismos individuais, Bedau e Packard propuseram A(t) como um teste para a vida no sistema. Se A(t) fosse positivo, o sistema está exibindo vida em t. A importância deste modelo é a definição de uma quantidade macroscópica como a Atividade Evolucionária. A formulação de quantificadores macroscópicos da evolução e adaptação, assim como as descrições dos mecanismos microscópicos de onde estas quantidades macroscópicas emergem, é essencial se a Vida Artificial for utilizada como uma ciência exploratória e quiser contribuir significativamente para a biologia evolucionária real.

Learning Classifier Systems

Os Sistemas de Qualificação do Aprendizado ( SQA ) (Holland, Holyoak, Nisbett, Thagard, 1986) tem sido utilizados como modelos de comportamentos baseados no paradigma do estímulo-resposta e em outros processos cognitivos complexos. Os sistemas de qualificação são baseados em três princípios: aprendizado, retorno intermitente do ambiente, e modelos hierárquicos internos que representam o ambiente. Estes sistemas têm sido utilizados para modelar uma grande gama de comportamentos inteligentes: comportamento humano em situações sociais e econômicas, sistemas de classificação e categorização, etc.Assim como as Redes Neurais, os sistemas de qualificação constituem-se de máquinas paralelas e algoritmos de aprendizagem que ajustam a configuração destas máquinas durante todo o tempo. Apesar disto, estes sistemas são diferentes das Redes Neurais nos detalhes da máquina paralela, que são referenciadas como Sistemas de Performance Interna, e nos detalhes dos algoritmos de aprendizado. A máquina dos SQA é mais complexa que a maioria das Redes Neurais, trabalhando com quantidades denominadas “mensagens” e controlando seus estado com regras if-then, que especificam os modelos das mensagens.Um Algoritmo Genético é utilizado para descobrir regras úteis, baseado no retorno intermitente do ambiente e num algoritmo de armazenamento de crédito interno, denominado bucket-brigade. Um SQA consiste de três camadas, sendo que o Sistema de Performance Interna forma a primeira camada. Como segunda camada, o

65 hackingextreme.blogspot.com

Page 66: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

algoritmo de aprendizagem bucket-brigade coordena a fixação dos valores do crédito interno entre os classificadores que estão competindo (de forma análoga a uma Rede Neural utilizando back-propagation). Como última camada, temos os operadores genéticos que criam novos classificadores.Associado a cada classificador existe um parâmetro de Força. Esta medida reflete a utilidade de cada regra, baseada na experiência passada do sistema. O algoritmo de bucket-brigade é o mecanismo pelo qual este parâmetro é alterado. O algoritmo está baseado na metamorfose de uma economia, onde o ambiente atua como o produtor das matérias-primas e como o consumidor dos produtos finais e, cada classificador, atua como um intermediário na cadeia de produção. Usando o bucket-brigade, o SQA está apto a identificar e utilizar um subconjunto de regras que provaram-se úteis no passado.No entanto, a base inicial de regras de um SQA não contém todos os classificadores necessários para uma boa performance. O Algoritmo Genético interpreta a Força de cada regra como uma medida de seu fitness e, periodicamente (após os valores das Forças terem sido estabilizados pelo bucket-brigade), remove as regras que não mostraram-se relevantes ou úteis no passado (Força com baixo valor), e gera novas regras utilizando-se operadores de mutação, crossover e outros de propósitos especiais.Assim como nos A.G. tradicionais, estas adições e remoções são realizadas probabilisticamente. Considerando a definição de indução como todo o processo de inferência que expande o conhecimento na face da incerteza, o A.G. atua como um mecanismo indutivo nos SQA. Uma motivação importante na formulação dos SQA foi o princípio pelo qual os sistemas indutivos necessitam a habilidade de construir modelos internos do ambiente. Os modelos internos devem habilitar o sistema a gerar predições, mesmo que o conhecimento do ambiente seja incompleto ou incorreto e, posteriormente, refinar seu modelo interno quando informações adicionais tornarem-se disponíveis. Em (Riolo, 1991) utiliza-se os SQA para modelar o aprendizado latente e o comportamento de olhar ao seu redor, distinguindo tipos diferentes de objetos, observados em ratos. Para tanto, Riolo desenvolveu um labirinto simples, similar aos observados em experimentos com ratos de verdade, com um ponto inicial e vários pontos finais. Em cada ponto final havia um caixa, com ou sem comida, e que poderiam ser ou não distinguíveis uma da outra ( pela cor, formato, etc. ). Para o experimento, seguiu-se o seguinte algoritmo: ( 1 ) antes da “comida estar” colocada nas caixas, os ratos ( agentes ) sem fome são colocados no labirinto para explorá-lo; ( 2 ) deixavam os agentes explorarem o ambiente por 24 horas; ( 3 ) os agentes eram, então, colocados em algum dos pontos finais do labirinto, habilitados a alimentarem-se de alguma caixa; ( 4 ) os agentes eram colocados no ponto inicial do labirinto e seu comportamento é observado.Se as caixas fossem distinguíveis, os agentes escolhiam normalmente o caminho que levava a caixa onde estes alimentaram-se em 3. Riolo fez algumas observações sobre o experimento : ( 1 ) na fase de exploração, os agentes aprenderam a estrutura do labirinto sem um objetivo a ser alcançado; ( 2 ) eles aprenderam a usar um modelo interno para realizar uma busca exploratória que os permitiu predizer qual caixa está em cada parte do labirinto; ( 3 ) os agentes tornaram-se aptos a utilizar esta busca com o reconhecimento, onde eles associaram a “comida” com uma determinada caixa; ( 4 ) este tipo de inferência não pode ser gerada por sistemas reativos simples (

66 hackingextreme.blogspot.com

Page 67: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

estímulo-resposta ). O experimento de Riolo é um dos principais demonstrações da necessidade de modelos internos para os SQA realizarem determinadas tarefas.

Sistemas Imunológicos

Os Sistemas Imunológicos ( S.I.) são sistemas adaptativos onde o aprendizado é realizado por mecanismo evolucionários semelhantes a evolução biológica. O Sistema Imunológico real é capaz de reconhecer, virtualmente, qualquer célula ou molécula estrangeira. Para tanto, ele deve distinguir as células do próprio corpo, assim como as moléculas criadas por estas ( cerca de 105 proteínas diferentes ) de todas as outras células estrangeiras. Estima-se que o S.I. é capaz de reconhecer cerca de 1016 moléculas estrangeiras diferentes ( obs.: o genoma humano tem cerca de 105 genes ). O modelo de A.G. proposto por (Forrest, Javornik, Smith, Pereleson, 1996) é baseado num universo onde os antígenos ( partículas estrangeiras ) e os anticorpos ( células que realizam o reconhecimento ) são representados por strings binárias. Mais precisamente, as strings binárias são utilizadas para representar os receptores nas células B e T, e os epitopes dos anticorpos. O reconhecimento nos S.I. naturais é realizado por ligações moleculares. A química complexa do reconhecimento dos antígenos é simplificada no sistema binário, e modela como uma simples comparação de strings.O A.G. é utilizado para evoluir populações de strings que combinam-se bem com antígenos específicos. Para strings de tamanho variável, uma combinação perfeita é altamente improvável, logo um regra de combinações parciais é utilizada para descobrir o maior número de combinações perfeitas numa determinada população. Esta regra de combinação parcial reflete o fato de que o reconhecimento no sistema imunológico natural necessita um alto grau de confiabilidade, para evitar confusões entre suas próprias moléculas e as estrangeiras.As populações são criadas randomicamente e, enquanto que os anticorpos evoluem junto com os antígenos, estes co-evoluem em separado ( pois não dependem dos primeiros ). Os antígenos são apresentados a população de anticorpos seqüencialmente e os anticorpos que tiverem maior afinidade tem seu fitness incrementado.O sistema imunológico binário tem sido utilizado para estudar aspectos diferentes dos sistemas imunológicos reais: ( 1 ) a habilidade de detectar padrões ( esquemas ) no ambiente ruidoso formados pelos antígenos apresentados randomicamente; ( 2 ) a habilidade de descobrir e manter informações sobre as diversas populações de antígenos; ( 3 ) e a habilidade de aprender eficientemente, mesmo quando nem todos os anticorpos estão expressados e nem todos antígenos são apresentados.

SimVidA

SimVidA é um sistema de vida artificial que enfoca na especialização da eficiência de criaturas nadantes em um mundo líquido bidimensional. Desenvolvido por Rodrigo Setti, neste ambiente as criaturas são formadas por estruturas circulares ligadas por segmentos, diferentes combinações de pesos, comprimentos e forças de torque produzem diferentes estilos de "nados" dos seres, cujo objetivo é conseguir grãos de energia espalhados randômicamente pelo ambiente. As criaturas morrem quando sua

67 hackingextreme.blogspot.com

Page 68: Ex-Perts da Informática

x-Perts da informática | HackingExtreme 2008.1

energia chega a zero - gasta pelo nado - e em contrapartida, se reproduzem assexuadamente quando este valor ultrapassa um certo limiar energético determinado pelos genes.Na ocorrência de reprodução, um clone do ser é criado recebendo uma percentagem - determinada pelos genes - de sua energia, entretanto existe uma propriedade ajustável que possibilita uma probabilidade de mutação, que é uma alteração pequena em um ou mais genes do novo animal.Com o decorrer do tempo de simulação é possível observar claramente uma seleção natural Dawinística a favor de criaturas mais eficiêntes no nado. Diferêntes parâmetros ajustáveis produzem diferêntes tendências evolucionárias. É possível aplicar isolamentos geográficos numa espécie e observar divergências evolutivas entre populações buscando a eficiência por meios diversos, neste sistema existe somente um nicho, por esta razão sempre haverá uma tendência a estabilização de uma espécie dominante.

Fim

68 hackingextreme.blogspot.com