segunda-feira, 26 de novembro de 2012

O problema da parada.


Computadores em sua essência são máquinas feitas para resolver problemas através de algoritmos, por incrível que pareça eles possuem certas limitações com algumas tarefas aparentemente simples. Vou demonstrar um deles, que consiste no seguinte:

“É possível construir um programa que recebendo um programa e os dados de entrada para o próprio, diga se ele para ou continua indefinidamente, ou seja entra em loop infinito?”

Alan Turing provou que não, apresentarei uma adaptação para esta prova em pseudocódigo. Vamos começar com uma função que recebe um programa, que nada mais é do que um conjunto de dados, nesse caso um vetor de chars, e a entrada para esse programa, outro vetor de chars.

boolean verificaParada(char[] programa,char[] entrada){
  if(ALGUMA FORMA DE VERIFICAR SE O PROGRAMA PARA){
     return true;
  }else{
     return false;
  }
}

Vamos deixar de lado a maneira como o if funciona, vamos supor por enquanto que ele consegue definir se o programa para. Agora podemos construir a seguinte função:

boolean verificaEleMesmo(char[] programa){
  return verificaParada(programa, programa);
}

É simples, apenas verifica se o programa para quando a entrada for ele próprio. Mais uma função, é dela que vamos tirar a prova.


boolean ferraTudo(char[] programa){
  if(verificaEleMesmo(programa)){
    while(true){
      
    }
    return true;
  }else{
    return false;
  }
}

Basicamente essa função entra em loop infinito se o programa que ela recebe para, verificando quando a entrada é ele mesmo. Mas e se jogássemos o “ferraTudo” como entrada? Ocorreria um paradoxo! Vejamos, se a função "verificaEleMesmo" constatar que o programa "ferraTudo" para, ele ia entrar na condição e ficar em loop infinito, mas se ele entra em loop ele não para, então há uma contradição.


Fonte:

Michael Sipser - Uma introdução à teoria da computação.
http://www.cgl.uwaterloo.ca/~csk/halt/

domingo, 18 de novembro de 2012

Mais um autômato.

O Youtube me recomendou esse vídeo de um autômato incrível, segundo a descrição foi criado no século 18.

quinta-feira, 15 de novembro de 2012

O pato mecânico de Vaucanson.

Um pato mecânico que bate as asas, come e defeca, essa é a criação mais famosa do inventor Jacques de Vaucanson, que também foi o criador de vários autômatos tais como o flautista e tocador de tambor. O "digesting duck" consistia em um autômato em formato de pato que aparentemente comia grãos de milho, os metabolizava e defecava, mas na verdade como o próprio Vaucanson assumiu, o pato armazenava a comida em um reservatório, enquanto os excrementos eram previamente armazenados em outro, ou seja, não havia nenhum metabolismo. Apesar da fraude central, o autômato possuia alguns elementos de uma genuína simulação, suas asas eram compostas de mais de 400 partes articuladas, e os movimentos incluiam beber, fazer um ruído "gorgolejante", esticar o pé, dobrar e esticar o pescoço, todos baseados em estudos exaustivos sobre patos reais.




Na foto acima o pato original e em seguida uma réplica moderna.

A criação de Vaucanson trouxe à tona várias reflexões com relação entre a linha entre o vivo e o não vivo, afinal as máquinas seriam a antítese de um ser vivo? Ou seres vivos seriam máquinas só que extremamente complexas? Quase três séculos depois da invenção do pato em  1739, ainda não conseguimos reproduzir e entender muitos sistemas biológicos, desafios que envolvem as áreas da inteligencia artificial, robótica e biologia.

Fonte:
http://www.guardian.co.uk/books/2002/feb/16/extract.gabywood
Riskin, Jessica. "The defecating duck, or, the ambiguous origins of artificial life." Critical Inquiry 29, no. 4 (2003): 599-633.

domingo, 4 de novembro de 2012

Slime Mold.


Para iniciar as atividades deste blog começarei falando sobre o protozoário Physarum polycephalum, também conhecido como slime mold, o que ele é capaz de fazer é um bom exemplo do tipo de conteúdo que pretendo mostrar aqui que envolve a interdisciplinaridade entre computação, evolução e também biologia.
O Physarum é um organismo unicelular macroscópico que para procurar alimento se expande de uma maneira em que se forma uma rede de conexão entre as fontes de alimentos encontradas. Essas conexões são otimizadas de forma que haja um gasto mínimo de recursos tais como energia e estruturas, e também tolerância à falhas tais como uma desconexão acidental.
Essa habilidade permite que ele por exemplo encontre o caminho mínimo em um labirinto, isso pode ser visto no vídeo abaixo:


Um grupo de pesquisadores analisou as redes formadas por esses organismos e notou que elas poderiam ser mais otimizadas que as feitas pelo homem,  devido ao fato que essa espécie passou por anos de seleção natural sofrendo as mais diversas pressões relativas à economia de recursos e tolerância à falhas. Com isso foi feito um experimento simulando o metrô de Tóquio utilizando um mapa e as estações representadas por flocos de aveia que o Physarum iria procurar, restrições geográficas do mapa tais como lagos e o oceano foram feitas utilizando pontos de luz (que o protozoário evita).
O desenvolvimento pode ser visto na figura abaixo:


O resultado interessante é que a rede criada foi muito semelhante à criada pelo homem, mostrando como se pode se inspirar na natureza pra resolver problemas do dia a dia, outro fato notável é que o protozoário realizou essa tarefa sem possuir um cérebro ou alguma estrutura central de processamento.

Se alguém se interessar (o que eu duvido muito),  nesse site existem algumas informações a mais, e também dicas de como criar um própria cultura, coisa que estou tentado a começar.

http://www.educationalassistance.org/Physarum/PhysarumPlus.html

Fonte:
Tero, A., Takagi, S., Saigusa, T., Ito, K., Bebber, D., Fricker, M., Yumiki, K., Kobayashi, R., & Nakagaki, T. (2010). Rules for Biologically Inspired Adaptive Network DesignScience, 327 (5964), 439-442 DOI: 10.1126/science.1177894