Bits darwinianos

Publicado: 1 diciembre 2013 en Ciencias de la computación, Evolución
Etiquetas:, , , , ,

Dos dificultades esenciales:

1. ¿Cómo es posible que desde la relativamente poca información codificada por nuestro ADN se generen organismos de una complejidad tan alta? ¿Cómo es posible que con unos escasos menos de 30.000 genes del homo sapiens pueda generarse algo tan complejo como un cerebro? ¿Cómo con 30.000 instrucciones puedes construir la exponencial complejidad de las interconexiones neuronales, algo que supera con mucho la potencia de nuestros más avanzados supercomputadores?

2. Al analizar los genomas de diversas especies y compararlas con el humano vemos que compartimos una altísima cantidad de genes con ellas. Si con la levadura compartimos un 40% del genoma o si entre el ratón o el chimpancé y el hombre, sólo existe la diferencia de unos escasos percentiles, ¿cómo es posible que tengamos diferencias fenotípicas tan obviamente abrumadoras?

Apliquemos la teoría de la información a la biología (es maravilloso mezclar disciplinas). Hasta el fabuloso descubrimiento de Watson y Crick, la comunidad científica pensaba que los genes debían de estar codificados en las proteínas ya que éstas muestran una capacidad de combinación más alta que la del ADN. Sin embargo, y esto es una muestra más de que Darwin tenía toda la razón, descubrimos que el código estaba escrito en las bases del ácido desoxirribonucleico. La evolución es chapucera. Pero la selección natural comienza a funcionar y, con total seguridad, empezó a optimizar este, en principio ineficiente, sistema de codificación de la información. Seguramente, la codificación de la información también evolucionó. La evolución es chapucera, pero no tanto: trabaja con lo que tiene (ADN) pero pronto lo optimiza. ¿Cómo puede mejorarse el almacenamiento de información?

1. Compresión: ¿Cómo funcionan los compresores de información típicos de nuestros ordenadores? Sencillamente, buscan patrones que se repiten. Si, por ejemplo, queremos comprimir una imagen de 100×100 píxeles que representa un sencillo cuadrado rojo, solo hace falta un algoritmo que diga: “proyecta un píxel rojo 100 veces de abajo a arriba y hazlo 100 veces en horizontal”, en vez de uno, bastante poco eficiente, que vaya yendo píxel por píxel indicando el color de cada uno. Con dos instrucciones conseguimos hacer lo mismo que, siguiendo el segundo algoritmo, con 10.000. Entonces podemos tener genes que codifiquen instrucciones de muy amplio calado con muy poca información.

2. Iteración de las mismas propiedades fenotípicas. Somos repetitivos: las fibras musculares lisas, los linfocitos B, los hematíes, las células de la piel, etc. son todas iguales. De la misma forma, hay un montón de diseños que se repiten por doquier en el mundo natural: patas, aletas, ojos, sistemas nerviosos y basculares, etc. Así se explica muy bien por qué la mayor parte de los organismos del reino animal son simétricos: nos ahorramos la mitad de la información. Las instrucciones genéticas para fabricar un animal simétrico pueden ser muchas para hacer un lado del individuo, pero solo una para hacer el otro: “Repite lo mismo que has hecho antes”. También explicamos muy bien por qué los organismos son tan poco irregulares. Cada nueva forma que no sea una repetición requiere nueva información: un organismo muy irregular requiere muchas más instrucciones para su desarrollo que uno más regular y simétrico.

Tenemos un tipo de algoritmos que son una perfecta expresión de los dos principios anteriores (compresión e iteración fenotípica) y que, además, se encuentran por doquier en el mundo vivo: los fractales probabilísticos (los alvéolos pulmonares o las redes neuronales son claros ejemplos).

Un fractal probabilístico añade un elemento de incertidumbre. Mientras que un fractal determinista tiene el mismo aspecto cada vez que se presenta, un fractal probabilístico cambia de aspecto (aunque mantiene características similares). En un fractal probabilístico, la probabilidad de que cada elemento generador sea utilizado es menor que 1. De esa manera, los diseños resultantes poseen una apariencia más orgánica. Los fractales probabilísticos son utilizados en programas de gráficos para generar imágenes realistas de montañas, nubes, orillas, follajes y otros parajes naturales. Un aspecto esencial de un fractal probabilístico es que permite la generación de una gran cantidad de complejidad aparente, incluyendo abundantes variaciones en los detalles, partiendo de una cantidad de información sobre el diseño relativamente pequeña. La biología utiliza el mismo principio. Los genes proporcionan la información sobre el diseño, pero los detalles de un organismo exceden en mucho la información genética sobre el diseño.

Ray Kurzweil, La singularidad está cerca

fractales-660x350

 3. Reutilización: tenemos la idea de que un fragmento de información solo realiza una función. Por ejemplo, solemos pensar que para el color de los ojos de un individuo hay un trozo de ADN que codifica exclusivamente esta información. Así, establecemos una función biyectiva entre cada gen y una propiedad fenotípica. Al hacerlo nos quedamos muy cortos: ¿cómo es posible que con la poca información que contiene el ADN los organismos muestren diferencias fenotípicas tan inmensas? La solución consiste en que podemos utilizar cada fragmento de información para varias funciones diferentes. Veamos un ejemplo: supongamos que tenemos una célula madre capaz de generar una serie de organismos diferentes. La información tiene que codificarse en una matriz de 7×7 bits de información, es decir, que tenemos 49 casillas en donde poner un único bit (en este caso una letra del abecedario). La instrucción que debe darse es el nombre del animal que queremos conseguir, siendo los animales posibles los siguientes: humano, perro, asno, alacrán, hormiga, pulpo, medusa, araña, foca y pavo. ¿Cómo guardamos todos esos nombres en la matriz? Aceptando que podemos colocar las palabras en horizontal y en vertical es imposible. Si, por ejemplo, las colocamos así:

A

L A C R A N

H

O R M I G A

M

E D U S A P

H

U M A N 0

E

P U L P O  

R

A R A Ñ A  

R

F O C A    

0

 

nos quedan fuera sapo, asno y pavo. Pero si, colocando igualmente las palabras en horizontal y vertical, reutilizamos algunas letras para varias palabras, como en una vulgar sopa de letras, sí que nos cabe toda la información.

H

U M A N O  

O

P E R R O  

R

U D A S N O

M

L U Ñ   F

V

I P S A P O

A

G 0 A N   C

P

A L A C R A

N

Como vemos la “h” de humano puede usarse también para hormiga, la “p” de perro para pulpo, o varias letras de medusa para humano, perro, sapo y alacrán. Usando los mismos bits para diferentes instrucciones podemos conseguir hacer más cosas con la misma cantidad de información. Y en este ejemplo porque las instrucciones tenían que ser una serie de palabras concretas con sentido. Si partimos de que las instrucciones pueden ser cualquier conjunto de letras sin significado alguno (como ocurre realmente con el ADN, cuyas combinaciones de bases son totalmente convencionales), volvemos a optimizar el sistema. Si, otro ejemplo, cada conjunto de siete letras en horizontal o vertical  constituye una instrucción (“IPSAPOA”=construye un humano), en esa misma matriz de 7×7 bits, el número total de instrucciones posibles sube a 14 (en vez de las 10 del ejemplo inicial): 7 horizontales y 7 verticales. Si además, la instrucción es diferente si la leemos de derecha a izquierda que de izquierda a derecha y de arriba a abajo que de abajo a arriba (“IPSAPOA” es diferente que “AOPASPI”), tenemos ahora 28 instrucciones posibles. Hay muchísimas formas de aumentar la cantidad de información contenida en un código si podemos reutilizarla. Y es que hay muchos tipos de genes cuya información actúa de diversas formas. Escribíamos hace unos cuatro años en el blog:

Pero es que la cosa se ha complicado mucho desde Mendel. Existe la dominancia incompleta (cuando el gen dominante no llega a vencer al recesivo y ambos se expresan), hay genes que modifican el efecto de otros genes (epistasis), genes que afectan a muchas características (pleiotropía), rasgos que son fruto de la interacción acumulada de muchos genes (herencia poligénica), genes que se expresan en diverso grado (expresividad variable) o, haciendo el cálculo en poblaciones, genes que aparecen mucho menos de lo que deberían (penetrancia incompleta). Y además, el fenotipo puede verse afectado por alteraciones no ya en los genes sino en los cromosomas (no sólo afectando a fragmentos o a un cromosoma como en el Síndrome de Down o en el de Turner, sino a dotaciones completas).

El descubrimiento y decodificación del genoma humano ha sido un gran paso, pero solo es el comienzo de una historia mucho más interesante.

Anuncios
comentarios
  1. Masgüel dice:

    Un fractal probabilístico es un fractal irregular. Esa es la clave. Pero Kurzweil se contradice.

    “Un aspecto esencial de un fractal probabilístico es que permite la generación de una gran cantidad de complejidad aparente”

    No es aparente. La complejidad que genera añadir aleatoriedad es real. Esta intuición aparece muy pronto en el pensamiento occidental. Es el clinamen de Epicuro. En el siglo XX reaparece en nuestra literatura bajo la forma de atractores caóticos o puntos de bifurcación en la evolución de sistemas alejados del equilibrio termodinámico.

    Sirve para comprender que la naturaleza en general y los seres vivos en particular, no somos algoritmos. La reproducción de los seres vivos descansa sobre la regularidad, la suficiente invariacia que garantiza el papel de la molécula de ADN en los conjuntos autocatalíticos que son las células. Pero su evolución, su creciente complejidad, se construye sobre lo irregular, sobre la mayor o menor fortuna que depara a cada caso excepcional.

  2. No, Kurzweil dice que un fractal probabilístico genera una complejidad aparente porque él entiende la complejidad en términos de Kolmogorov (o de Gell-mann): algo es complejo en función de la medida del programa que lo genera. La “complejidad” de un fractal es muy poca en esos términos porque el algoritmo generador es relativamente simple, a pesar de que, visualmente, el resultado parezca muy complejo. No obstante, un fractal probabilístico es más complejo que uno determinista, porque al probabilístico hay que añadirle un “aleatorizador”, un generador de números aleatorios para poder generar decisiones al azar, lo cual es complejo.

    Estoy haciendo un entrada sobre la teoría de Stephen Wolfram, el cual piensa que el universo es un autómata celular totalmente determinista. Éste sí que cree que la aleatoriedad es una ficción solo aparente. Kurzweil, por el contrario, sí que acepta la idea de azar (de hecho no para de hablar de algoritmos evolutivos que funcionan por mutación), aunque ambos piensan que el universo es un algoritmo, pues ambos creen que la realidad es un supercomputador y defienden una ontología en la que lo único que existe es información (con lo que yo no estoy nada de acuerdo).

    Por lo demás, yo no lo tengo claro. Ando pensándolo. Lo que creo, por ahora (hasta que le de más forma en mi cabeza) es que mantienen tesis filosóficas algo ingenuas y parece que confunden ontología con epistemología. Una cosa es que podamos calcular lo que sucede en la naturaleza mediante un algoritmo y otra que la realidad misma sea un algoritmo. Una cosa son las matemáticas y otra la realidad. Es posible que esta mezcla genere confusión y pseudoproblemas filosóficos.

  3. Es sólo un detalle, pero no me deja tranquilo: yo tenía entendido que un “bit” es por definición una unidad de información binaria, por lo que las letras (que pueden ser 27 en español) no serían bits, ya que para poder ser definidas se necesitarían por lo menos 5 bits (2^5=32, que es la menor potencia de dos mayor o igual a 27).
    ¿¿Estoy en lo correcto o la definición que manejo de bit está errónea/limitada/anticuada??

  4. David:

    Estás en lo correcto, utilicé mal la expresión bit, pero es que no se me ocurrió una palabra mejor para designar a una unidad de información, aunque no fuese binaria.

  5. Masgüel dice:

    Tonto estoy. Kurzweil habla de complejidad aparente porque se refiere al primer término de la comparación. Un programa informático produce complejidad aparente porque no introduce aleatoriedad real. Pero la evolución de la naturaleza y los seres vivos no obedece un algoritmo que genere pseudoaleatoriedad. El clinamen es aleatorio y es real. La complejidad que genera, también. Un fractal regular, Kolmogorov mediante, será tan complejo como el algoritmo que lo genera. Pero un hipotético fractal probabilístico con elementos de aleatoriedad real (no generada por un algoritmo para números pseudoaleatorios) no parecería complejo. Porque la repetición de formas naturales depende de la emergencia de estructuras capaces de soportar su relativa invariancia, pero el aumento de su coplejidad y diversidad depende de las irregularidades que el azar.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s