Ir al contenido principal

La máquina autoreplicable de Von Neumann

A Von Neumann todos los informátic@s le conocemos por "la arquitectura de Von Neumann", para que os hagáis una idea, todos los ordenadores, teléfonos móviles, tablets, consolas,... funcionan siguiendo esta arquitectura (virtualmente hablando).

Pero de entre todas las cosas que hizo (https://es.wikipedia.org/wiki/John_von_Neumann), siempre ha habido una de sus teorías que me ha llamado la atención: "La máquina de Von Neumann".

Este concepto se basa en la autoreplicación, que es lo que hacen los virus cuando se infiltran en nuestro organismo. Si pensamos en los virus informáticos, son máquinas de Von Neumann al 100%.

La teoría de estas máquinas surge de la idea de realizar tareas muy pesadas en entornos hostiles, a los que el hombre no puede acceder, por ejemplo: extracción de mineral en otros planetas.

Voy a demostraros la potencia de estas máquinas a través de este problema:

Supongamos que en el planeta X se ha encontrado una veta de mineral, con el que se obtiene hierro después de procesarlo. Estimamos que en la veta hay 20.000 toneladas de ese mineral. Tenemos una máquina que extrae una tonelada del mineral en una semana, y después tarda tres días en procesarlo y obtener hierro. ¿Cómo hacemos para extraer todo ese mineral? Hay que tener en cuenta que ningún ser humano puede pisar en ese planeta.

a) Primera idea: mandamos un cohete con un robot, el robot extrae el material, lo procesa, lo mete en el cohete y éste hace viajes de ida y vuelta con el material.


Éste es nuestro amigo, que sólo conoce 2 órdenes: Extrae y Procesa

Tiempo de extracción y procesado: 10 x 20.000 = 200.000 días ->  548 años (redondeando)

Se nos va un pelín de tiempo.

b) Con la máquina de Von Neumann: mandamos un cohete con un robot igual que el anterior, pero además puede autoreplicarse en 30 días consumiendo una tonelada de material en el proceso.

Nuestro amigo, que ahora conoce 3 órdenes: Extrae, Procesa
 y Replica

Supongamos cinco iteraciones en el proceso de replicación:

1) Robot original:
     - Extrae material y lo procesa: 10 días
     - Se replica: 30 días
     - Resultado: un robot adicional (primera generación)
2) Tenemos dos robots
     - Extraen material y lo procesan: 10 días
     - Se replican: 30 días
     - Resultado: dos robots adicionales (segunda generación)
3) Tenemos cuatro robots:
     - Extraen material y lo procesan: 10 días
     - Se replican: 30 días
     - Resultado: cuatro robots adicionales (tercera generación)
4) Tenemos ocho robots:
     - Extraen material y lo procesan: 10 días
     - Se replican: 30 días
     - Resultado: ocho robots adicionales (cuarta generación)
5) Tenemos 16 robots:
     - Extraen material y lo procesan: 10 días
     - Se replican: 30 días
     - Resultado: 16 robots adicionales (quinta generación)

Se acaba la fase de autoreplicación, si todo ha ido bien en total tenemos a 32 robots funcionales, y hemos perdido:

 - 31 toneladas de material (en las replicaciones), nos quedan 19.969 toneladas por extraer
 - 200 días (5 iteraciones de 40 días)

Veremos si han merecido la pena estas pérdidas, teniendo en cuenta que nos quedan 19.969 toneladas por extraer.

Empezamos la fase de extracción:

19.969 x 10 = 199.690 días 

199.690 días / 32 robots = 6.240 días -> 17 años (redondeando de nuevo)

Hemos perdido algo de material, pero el tiempo se ha reducido considerablemente: 531 años.

Si aumentáramos el número de iteraciones de la replicación, podríamos seguir bajando el tiempo.

Un genio este Von Neumann.

Imagen de Johnny 5 por cortesía de Wikimedia: https://es.wikipedia.org/wiki/Johnny_5

Entradas populares de este blog

Spring Boot: Página inicial con Bootstrap

  Este es el segundo artículo de la serie sobre Spring Boot que comenzamos hace dos semanas, si quieres ver el primero puedes acceder pulsando aquí . En el primer artículo vimos cómo descargar nuestro proyecto configurado para nuestros intereses y listo para ser importado en nuestro IDE (nosotros usaremos Eclipse ). Lo primero que vamos a hacer es importar el proyecto: File -> Import Existing Maven Projects Seleccionamos el fichero pom.xml en la carpeta donde lo hemos descomprimido y esperamos unos segundos Cuando acabe la importación, esta es la estructura que nos aparecerá: Con Spring Boot no necesitamos configurar el servidor, ya se encarga él de facilitarnos la vida. Lo único que tenemos que hacer es arrancar la clase BootApplication.java , que se encargará de arrancar Tomcat y dejar nuestra aplicación funcionando en el puerto 8080.  Y si todo fuera bien, podríamos acceder a través de la URL:  http://localhost:8080/ Pero ahora mismo tenemos un error de conexión c...

Redirección de puertos en Virtual Box

Continuando con mis anteriores "posts", vamos a terminar nuestro entorno de pruebas redirigiendo los puertos que nos interesan de la máquina virtual a nuestro PC. Con Virtual Box podemos configurar la red de diversas formas, una de ellas es redireccionar los puertos de la máquina virtual a la nuestra. Es bastante fácil y rápido de configurar, y lo que hace es que tengamos unos puertos destinados al entorno de desarrollo y otros para el entorno de pruebas. Ejemplo de uso:  - podemos usar el puerto 8080 para desarrollar en eclipse en nuestro entorno de desarrollo con Tomcat. - usaremos el puerto 80 para el Tomcat del entorno de pruebas Más adelante veremos cómo configurar las redes de virtual box para que sean máquinas independientes conectadas a nuestra red y más opciones. Vamos a hacer la redirección del puerto 22 para poder acceder a nuestra máquina virtual a través de uno de los clientes ssh más extendidos (y con nombre controvertido): ...

ASP.Net MVC: Subida de imágenes al servidor y recorte con Jcrop

Recientemente tuve que incluir, en un proyecto de ASP.Net MVC en el que estoy trabajando, un formulario donde un usuario podía subir su foto al perfil, y si el sistema detectaba que el tamaño de la imagen subida superaba el 100x100, había que recortarla. Esta premisa, aunque parece sencilla, encierra varios problemas técnicos a solucionar: 1) Subida de ficheros al servidor con ASP.Net MVC. 2) Recorte de foto y guardado. 3) Puntos a tener en cuenta: versiones de navegadores y otros aspectos técnicos. Vamos a ir viendo paso a paso cómo implementar esta práctica funcionalidad. Subida de ficheros al servidor con ASP.Net MVC Para subir ficheros al servidor desde la Vista, en Mvc se dispone de la clase System.Web.HttpPostedFileBase.  Para utilizarla, hay que seguir los pasos: - Declarar una propiedad de este tipo en el Model que se va a utilizar: public HttpPostedFileBase Fichero { get; set; } - Crear en la vista el formulario para realizar la subida ...