domingo, 30 de dezembro de 2012

Why You Want To Become a Biohacker: Rodrigo Martinez.

Palestra interessante sobre biohackers, impressoras 3D e o futuro das inovações tecnológicas. E também mais uma ferramenta para conhecer: http://www.clothocad.org/.


sexta-feira, 14 de dezembro de 2012

Avida e a ascensão e queda dos parentes traíras.

O Avida é um software utilizado para se criar seres vivos artificiais digitais replicantes, com ele se pode criar várias simulações de modelos evolutivos. Ele funciona da seguinte forma, os organismos são programas que rodam utilizando uma linguagem de programação simplificada que é o seu genoma. A simulação começa com um número de organismos  que já possuem os genes necessários para a replicação e ocasionalmente ocorrem mutações, com isso já temos a receita para a evolução ocorrer: replicação, mutação e competição por recursos. Para que a replicação aconteça  há um  custo energético, e a energia é conseguida através de operações lógicas definidas pelo usuário, geralmente são operações booleanas ou cálculos matemáticos, pode se fazer uma analogia com o metabolismo de seres vivos do mundo físico. Um exemplo interessante de simulação é uma que demonstra a existência de altruísmo via seleção parental em organismos digitais. Ela foi baseada no comportamento de um tipo de bactéria que produz uma toxina até explodir  e a espalhar na área ao redor dela, essa toxina é danosa para organismos que não possuem imunidade a essa substância, como essa bactéria é imune, a toxina acaba eliminando a concorrência por recursos causada por indivíduos estranhos à ela. Dar a vida pelo próximo pode parecer um comportamento um tanto extremo para um ser vivo, cujo objetivo é se replicar e passar os seus genes adiante, mas como é discutido no livro "O gene egoísta" de Richard Dawkins, a seleção é baseada no gene e não no indivíduo, portanto fazendo esse sacrifício o gene estará ajudando várias cópias de si mesmo. Na simulação citada, é mostrado que o sacrifício pelos parentes pode ser vantajoso, só que essa estratégia abre espaços para organismos aproveitadores, que recebem ajuda mas não fazem nada para ajudar os outros. Após rodar uma série de experimentos e simulações diferentes foi constatado que em um ambiente sem “traíras”, os organismos acabam sendo menos discriminatórios na hora de ajudar outros indivíduos, ou seja os que não tenham um grau de parentesco tão próximo (genes não muito parecidos), já com os “traíras”, a estratégia é ajudar aqueles com um grau de parentesco maior (genes parecidos). Nos próximos posts pretendo utilizar o software para rodar minha própria simulação e alguns tutoriais.

Tela do programa. Fonte: Wikipedia.


Paper sobre a simulação mencionadaJeff Clune, Charles Ofria, Robert T. Pennock. "Kin-Selection: The Rise and Fall of Kin-Cheaters" In Pollack, Jordan, M. Bedau, P. Husbands, T. Ikegami and R. Watson (eds.)

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