Guardar datos de nodeMCU (o arduino) en la nube usando IFTTT

La idea es usar IFTTT, que permite interconectar varios servicios, para que nos sirva de repositorio de datos de nuestros sistemas IoT desarrollados con arduino, esp8266, nodeMCU o similares. ¡Y además gratis!.

Webhooks

Nuestro sistema enviara una petición HTTP (GET o POST) al servicio de IFTTT para ello hay que crearse una cuenta allí y activar un evento por webhook, que recibirá los datos que le enviemos.

Los webhook de IFTTT solo permiten pasar hasta tres valores que ademas tiene que ser value1, value2 y value3.

Incluyo un ejemplo de enviar un petición con nodeMCU con 3 valores:

 
void sendMsg(){ 
  http.begin("http://maker.ifttt.com/[tu codigo]/alarm/with/key/[pon aqui tu key]?value1=1&values2=2&value3=3"); //HTTP 
  int httpCode = http.GET(); 
  if(httpCode > 0){
    Serial.println("Alarm send"); 
  } else {
    Serial.println("Error send alarm"); 
  } 
  delay(1000); 
}
 


IFTTT recibe un nombre de evento, tres parámetros y el timestamp de cuando ha ocurrido el evento:

{{OccurredAt}}
{{EventName}}
{{Value1}}
{{Value2}}
{{Value3}}

Okey tenemos esos cinco parámetros ¿Que podemos hacer con ellos?

El que incluya la hora del evento es muy útil ya que muchos sistemas no tiene un reloj y no pueden saber que hora es.

Hay que tener en cuenta es si tenemos una sola placa emitiendo datos o tenemos varias. Si tenemos varias podemos usar el nombre del evento o uno de los valores para indicar que placa es, es algo muy útil sobre todo cuando una de ellas empieza a dar datos erróneos así resulta fácil filtrarlos.

Puede parecer que un nombre de evento y tres valores son pocos pero para muchos sistemas de IoT son mas que suficientes.

Hoja de cálculo

Mi primera idea es guardar los datos que nos interese en una hoja de calculo de Google. IFTTT nos permite guardar los datos en filas, con una columna cada datos. Hasta 2000 filas, luego no deja de guardarlas, pero crea otra hoja de cálculo.

La ventaja de este sistema es que podemos conectarlo para que genere tablas, gráficas o realice cálculos de forma automática. Con poco trabajo nos podemos montar un sistema que almacene y procese lo datos generando informes y gráficas todo ello gratis.

Fichero de texto

Otra opción es usar un fichero de texto y almacenar los datos estilo CSV, que consiste en separar los valores por comas y ya esta. Se pueden usar varios, en mi caso opte por Dropbox. La ventaja de este tipo de ficheros es que es muy sencillo de procesar por cualquier dispositivo. De hecho hay tres maneras de hacerlo con Dropbox.

  • Sincronización: tener Dropbox sincronizado en el dispositivo con lo que el fichero de actualiza «solo» con cada cambio
  • API: usar la API de Dropbox para acceder a ese fichero
  • Publico: Dropbox permite crear enlaces públicos a ficheros. Una vez generado ese enlace leer es fichero es tan sencillo como hace una petición GET

En el caso de este tipo de ficheros el limite de IFTTT esta en 2 megas de datos.

Redes sociales

Si los datos han de ser compartidos con otras personas, las redes sociales pueden ser una buena solución, por ejemplo una cuanta de Twitter (privada si no quieres que los datos sean accesibles por todos). Además también se puede automatizar el acceso a los datos usando la API de Twitter

Notificaciones

Si los avisos tienen que llegar en tiempo real (o casi) se pueden usar las notificaciones a móvil (ya hice un ejemplo) o si tienen que llegar a un grupo de gente se pueden notificar en un grupo de Telegram. Este mismo sistema se puede usar para notificaciones personales si quieres guardar un histórico de ellas.

Calendario

Este caso es solo una idea, pero en el caso de eventos que ocurran solo de vez en cuando y se quiera tener un registro de cuando ocurrieron se podría usar la integración con alguno de los calendarios.

No resulta útil para eventos muy numerosos ya que es difícil de consultar cuando hay muchos en un día

¿Es inteligente todo lo que parece inteligente?

Todos hemos oído hablar del test de Turing u otras pruebas para medir la inteligencia de los agentes inteligentes. La habitación china plantea un escenario que reta la validez de estos test. Voy a explicarla de una manera diferente a la habitual pero que creo que es más sencilla de entender. Una habitación china es una caja donde metes un texto y obtienes una respuesta coherente. Podrida ser un chatbot que superase el test de Turing. Le introduces preguntas y obtienes una respuesta coherente. El comportamiento visto desde fuera es inteligente. ¿Pero realmente lo es? ¿Cómo distinguimos algo que actúa como si fuera inteligente de algo que es inteligente?. (Vamos a dejar de lado que muchas veces solo consideramos inteligentes comportamientos humanos)

Supongamos una inteligencia artificial que funciona de forma similar a la habitación china, pero que en lugar de responder preguntas juega a las damas o al ajedrez. Parar ello no tiene un complicado algoritmo para deducir el siguiente movimiento, tiene una base de datos con todos los posibles movimientos y sus posible respuestas. Para juegos como el ajedrez o el go eso es imposible pero es posible para juegos mucho mas sencillos como el tres en raya, el conecta 4 o incluso algunas versiones dé las damas. Esta IA solo busca la posición actual en su base de datos y nos responde con el mejor movimiento. Desde fuera nos parecerá un jugador realmente bueno y lo clasificaríamos como inteligente, sin embargo no actúa de forma mucho más inteligente que cualquier otra búsqueda en un base de datos.

Si habéis visto análisis de partidas de ajedrez o de go donde alguno de los jugadores es una I.A. veréis que los comentaristas hablan de «estrategia», como los movimientos que se han realizado en momentos anteriores de la partida le han permitido colocar sus fichas en la posición para ganar la partida o tomar ventaja al rival o «asestar un golpe al tablero». El problema es que las maquinas no tienen estrategia de ningún tipo, o al menos no nuestra idea de «tener una estrategia» estos algoritmos en su mayor parte ven el tablero cada vez de manera independiente a las anteriores. Es decir cada vez que tiene que decidir parten de cero, observan el tablero, deciden el mejor movimiento y excepto por datos que se almacenen para no volver calcularlos olvidan todo para su próximo movimiento. Para estas I.A. la partida como tal no existe, una partida es una sucesión de tableros para los que deciden cual es el mejor movimiento sin pensar en los anteriores tableros ni en los siguientes. Lo mismo les daría llegar a mitad de una partida. Esta forma de jugar es inconcebible para un humano, nosotros desarrollamos estrategias e intentamos llevarlas acabo. La I.A. parte del tablero actual, simula posibles movimientos, valora posiciones y elige aquel que piensa que le da más probabilidades de ganar y olvida todo eso en el siguiente movimiento.

Ahora mismo tenemos algoritmos que serian capaces de trazar un plan y que la I.A. elija sus movimientos para cumplir ese plan. Esa forma de actuar Seria más  apreciada a la forma de los humanos e crear una estrategia, sin embargo no se usan para este tipo de juegos porque no dan tan buen resultado.

¿No podria pasar lo mismo con la inteligencia de lo que nos pasa con estrategia? ¿Qué algo nos parezca inteligente pero no es nada más que una interpretación que hacemos nosotros de forma engañosa? Y volvemos a la habitación china y a su maquina que no piensa, solo busca respuestas de una enorme base de conocimientos. Que actúa de forma que parece (o es) inteligente.

¿Cuál es la definición de inteligencia? Pues sorprendentemente (o no) no existe un única definición, no se tiene muy claro ni el alcance de lo que es inteligencia. La inteligencia parece recoger diferentes fenómenos y capacidades. Gente que decimos que es inteligente: si entiendes textos complicados, si resuelves problemas matemáticos complejos, si eres bueno en algún aspecto técnico, si eres de respuesta rápida, si tiene una lenguaje muy rico, si tienes bastos conocimientos…. hay ejemplos para aburrir. Nos resulta fácil decir que es inteligente, pero no definirlo.

Incluso a nivel humano cuesta, por ejemplo el cubo de Rubik. La primera vez que te dan un cubo de Rubik y tratas de resolverlo te sorprende que haya gente que sea capaz de resolverlo, tienen que ser tremendamente inteligentes. Cuando investigas un poco, ves que hay técnicas para resolverlo y que en muchos casos es más un asunto de memoria y habilidad. De repente algo que nos parecía sin duda inteligente ha perdido parte de «inteligencia». Sin embargo parte de ser un gran jugador de muchos juegos necesitas aprender de memoria gran cantidad de movimientos y posiciones para no tener que pensarlos de cero cada partida.

 Si vemos la inteligencia más como un fenómeno, un resultado de las acciones, cualquier cosa que parezca inteligente sería inteligente. Daría igual que supiéramos resolver cubos de Rubik gracias a nuestro razonamiento o a nuestra memoria. En ese caso el test de Turing volvería a ser válido. Es decir la habitación china nos obliga a plantearnos si vamos considerar inteligente todo lo que se comporta de forma inteligente o si vamos a más requisitos. teniendo en cuenta que ni siquiera estamos seguros de nuestra inteligencia o nuestro libre albedrío yo no seria muy exigente.

Comparar la inteligencia artificial con la humana

También podría titularse «Porqué no paran de anunciar nuevos logros en I.A. pero a mí me siguen pareciendo igual de tontas». Pese a que cada poco tenemos una noticia de algún avance increíble y coletillas de lo cerca que está la singularidad. Actualmente ninguna I.A. sería capaz de sobrevivir a cosas como «levantarse e ir a trabajar». Si, nos ganan al ajedrez, al go, nos apalizan a las damas o nos hunden jugando a videojuegos. Cosas que a nosotros nos cuestan sudor y lágrimas las máquinas las realizan en milésimas de segundo. El problema es que estamos infravalorándonos y no sabemos apreciar la cantidad de cosas dificilísimas que hacemos sin darnos cuenta y sin coste aparente. No penséis que esto es nuevo, tiene nombre, la paradoja de Moravec .

Hay que tener en cuenta que todas esas cosas que nos parecen tan complicadas como derrotar a maestros del ajedrez realmente no lo son tanto. Es solo que nuestro cerebro no ha evolucionado para jugar al ajedrez. Pero sí que ha evolucionado para reconocer objetos, mantener conversaciones, trazar planes y montón de cosas que hacemos sin esfuerzo y por eso no lo sabemos valorar. Sin embargo los ordenadores se crearon para agilizar los cálculos y son buenos en ello. Es sorprendente lo lejos que han llegado siendo tan relativamente simples. La I.A. es un logro de las matemáticas más la capacidad de cálculo alcanzada por el hardware.

En los comienzos de la inteligencia artificial se subestiman los costes de simular a los humanos. En unas pocas décadas se iba a lograr crear máquinas inteligentes, apenas unos pocos años en crear máquinas que mantuvieran conversaciones y superarían el test de Turing y el problema de la visión por computador en un verano estaría resuelto. La realidad resultó más dura de lo esperado y con el paso de los años nos hemos dado cuenta de que realizamos con facilidad tareas que realmente son tan complicadas que no sabemos ni como definirlas. ¿Cómo explicamos la capacidad humana de reconocer objetos y poder integrarlos en un contexto? La visión por computador sufre para separar los objetos de una imagen y reconocerlos todos y nosotros reconocemos las cosas con un vistazo incluso si están parcialmente ocultas y no solo eso, integramos toda la información para hacernos una idea del entorno.

Imaginad que dejamos a una máquina en una ciudad que no conoce de un país en el que nunca ha estado y donde hablan un idioma que no entiende. Su única ayuda es un mapa no muy exacto y una guía de viajes no demasiado extensa. Su misión es llegar al hotel y organizar un plan para visitar la ciudad en unos pocos días, sin olvidar lograr comer y dormir todos los días. ninguna inteligencia artificial esta ni cerca de lograr hacer eso, pero nosotros lo llamamos «vacaciones».

Además no hay que olvidar que en el caso de la I.A. la fuerza bruta sigue teniendo mucho que ver. Para que una red neuronal reconozca objetos necesita entrenar con miles de ejemplos de lo que queremos que reconozca y de lo que no. Para que gane a cualquier juego necesita muchos miles de partidas. Aunque nuestra capacidad de aprendizaje llega mucho menos lejos que las de la I.A. nuestra capacidad de aprender es muy superior necesitamos menos ejemplos y nuestro aprendizaje es más flexible.

En resumen, aunque nos parezca que la I.A. hace cosas increíbles es solo porque no sabemos valorar correctamente lo que nuestro cerebro hace con engañosa facilidad. Aun estamos lejos de darle a la I.A. esas capacidades. Quizás el problema no es que no sepamos valorar los avances realizados en I.A., asombrosos sin duda alguna, si no que no sabemos valorar nuestras capacidades naturales de lo acostumbrado que estamos a ellas.

Diagrama de Voronoi con autómatas celulares

Vamos a usar autómatas celulares para calcular el diagrama de Voronoi de varios puntos. El diagrama de voronoi se calcula a partir de una serie de puntos P[i] en un espacio (en este caso un plano). A partir de cada uno de esos puntos P[i] crea uno polígono según la siguiente regla: un punto del plano pertenecerá a un polígono si no hay ningún otro punto P[i] más cercano. Las fronteras entre estos polígonos (Polígonos de Thiessen) son el diagrama de Voronoi.

<Voronoi diagram.png
De Gottie (fuente Wikipedia Image:Voronoi.png), Dominio público

En este las reglas del autómata son sencillas, si un vecino tiene una distancia menos que la propia, copia su color y su distancia + 1.

for(var i = 0; i < neighbors.length; ++i){
   if(neighbors[i].creature.distance < this.distance){
     this.distance = neighbors[i].creature.distance+1;
     this.point = neighbors[i].creature.point; 
} } 

Queda inicializar las celdas, para ello una celda puede ser dos tipos:

  • un punto a partir del cual calcular las fronteras o una celda normal, su distancia es 0 y se inicializan con un color de una lista.
  • una celda nomal, se inicializan sin pertenecer a ningún polígono, con color blanco y un valor de distancia muy grande (lo ideal seria infinito pero con que sea mayor que cualquier distancia entre dos puntos de la rejilla de celdas también sirve)
if(this.isPoint){
  this.distance = 0;
  this.point = initPointsNumber;
  initPointsNumber++;    
} else {
  this.point = -1;
  this.distance = 10000;
}

El funcionamiento del autómata es muy parecido al algoritmos de inundación las distancias menores se van propagando junto con el color hasta que encuentran un vecino cuya distancia es menor, en es punto es donde se encuentra el borde del polígono.

Tenéis el código aquí y un ejemplo aquí, el resultado es:

Si os fijáis bien parece que la imagen está cortada por los extremos, eso es porque en este caso no estamos calculando el diagrama de Voronoi en un plano si no en un toro (que es la forma geométrica del mundo de este autómata) por eso los polígonos cuando salen por un extremo continúan por el otro.

Puedes ver un vídeo sobre como funciona en mi canal de Youtube:

Haz click para ver el vídeo en mi canal de Youtube

Autómatas Celulares

Para definir lo que es un autómata celular vamos a empezar por su versión más simple y vamos complicando el modelo. Empezamos por el más simple, un cuadrado que puede tener varios estados y cada estado está asociado a un color. El cambio de estados está regulado por un conjunto de reglas. Por lo que cada autómata queda definido por sus estados y las reglas que los cambian. A los autómatas de les conoce como celdas, individuos o células

Una dimensión

Siguiente nivel de dificultad los autómatas con vecinos a ambos lados. Son los autómatas unidimensionales. Se distribuyen en forma de línea. Cada autómata tiene dos vecinos que son otro autómata idéntico situado a la derecha e izquierda. Pero cómo sería muy aburrido tener muchos autómatas que cambien de estado sin interaccionar entre ellos ahora las reglas determinan el cambio según el estado propio y el de los dos vecinos.

El caso más estudiado de este tipo de autómatas celulares es el de celdas de dos estados: blanco y negro o 0 y 1 o muerto y vivo. Las reglas de cambio se expresan como tres celdas. La del centro representa el estado de la celda actual y la de la derecha e izquierda sus dos vecinos. El valor que tomara la celda central se representa debajo. Las reglas toman forma de figura del tetris. Por ejemplo dos formas de expresar la misma regla:

111110101100011010001000
0 1 0 1 1 0 1 0
regla90
Dos formas de expresar la misma regla

Esta regla es conocida como la regla 90. ¿De donde sale ese 90? . Muy sencillo, de la segunda fila de la tabla. En binario 01011010 = 90. Cada regla se denomina así, por el número decimal que se obtiene de poner en decimal los resultados de la regla de transformación. Como solo hay 8 posibles reglas (hay ocho posibles configuraciones de las tres celdas) solo hay 256 reglas.

Los autómatas unidimensionales se representa como una linea. Cada paso en su ejecución se representa como una linea nueva que se pone debajo de la anterior, formando un plano.

Regla 90 tras varios pasos

Dos dimensiones

Aumentamos una la dimensión vamos a los autómatas bidimensionales. En este caso hay 4 u 8 vecinos dependiendo que tipo de vecindad se use. La vecindad de Von Neumann solo tiene en cuenta los vecinos situados arriba, abajo, a la izquierda y a la derecha, mientras que la vecindad de Moore tiene en cuenta también los vecinos de las diagonales.

Vecindad Von Neumann y Moore

En este tipo de autómatas, por lo general, para las reglas de cambio de estado se tienen en cuenta el número de vecinos en un determinado estado. El ejemplo más famoso de este tipo es el juego de la vida que intenta emular una especie de ecosistema en un autómata muy simple cuyas reglas son:

  • Si una ceda está muerta y tiene 3 vecinas vivas, cambia a estado viva
  • Si una celda está viva y tiene 2 o 3 vecinas vivas, sigue viva
  • Si una celda está viva y tiene más de 3 vecinas vivas, cambia a estado muerta

Hay casos en que no solo importa el número de vecinos en un estado, si no también su posición en el espacio (arriba, bajo, izquierda, derecha, …). Un caso habitual es cuando se simulan fuerzas

Tres dimensiones

Hay autómatas celulares de más dimensiones, si bien tienen utilidad, por ejemplo en creación de escenarios de forma procedural o en ciertas simulaciones, no son tan conocidos debido a que empiezan a alcanzar un nivel de complejidad bastante alto y se pierde una de las ventajas de los autómatas celulares de una y dos dimensiones: lo fácil que es visualizar la evolución de los mismos. Ademas mayor número de dimensiones no aporta demasiado desde el punto de vista de «experimentar» las dos dimensiones son suficientes.

Fronteras

Uno de los problemas que tienes al diseñar un autómata es que haces con las celdas que están en los bordes (fronteras) del sistema. No tiene el mismo número de vecinos que las demás. Hay varias soluciones:

  • Valores fijos: se simula que más allá de las fronteras hay otras celdas con valores fijos
  • Mundo infinito: el autómata crece en cada iteración generándose nuevas celdas en los extremos. El problema de esto es que necesitas una cantidad enorme de memoria (idealmente infinita) para que funcione.
  • Mundo circular: se simula que los extremos están en contacto entre ellos, el superior con el inferior y el izquierdo con el derecho, por lo que no hay fronteras y el mundo es cerrado. Es la solución más habitual. Adoptando la forma de un cilindro en los autómatas unidimensionales y de un toro en los bidimensionales

Variaciones

Hemos explicado los ejemplos más sencillos vamos a ver algunas variaciones sobre estos ejemplos:

Más estados. Es habitual los autómatas celulares con múltiples estados.

Estados intermedios: Hay casos en que no solo hay estados «completos» por ejemplo «vivo o muerto», un estado puede representarse como un estado intermedio entre los dos. Por ejemplo si muerto tiene el valor 0 y viva el valor 1 tener un estado 0.5.

Múltiples características: Puede ser que una misma celda pueda tenga distintas «características» cada una de ella en con un estado distinto. De tal forma que una celda se convierte en un conjunto de estados diversos que pueden estar o no relacionados.

Reglas estocásticas. Hasta ahora hemos visto reglas que calculan el estado que toma la celda de manera determinista, pero esto no tiene porque ser así, puede ser que la regla determine solo la probabilidad del cambio de estado.

Diferentes vecindarios. Ya hemos visto que hay dos vecindades tradicionales la Moore y la Von Neumann ¿Pero que pasa si queremos aumentar el número de vecinos o su complejidad?. Podríamos aumentar las dimensiones pero ya hemos visto que eso tiene un limite. La solución es ampliar l definición de «vecindad» en lugar de ser solo las celdas en contacto directo podemos usar como vecinos también las de las siguientes hileras. A esto se le denomina el radio de la vecindad.

RadioNº de vecinos
18
224
348
480

Numero de vecinos = ((2*radio+1)^2)-1;

Diferente geometría. Esta relacionado con el punto anterior. En lugar de usar cuadrados se pueden usar hexágonos, triángulos, combinaciones de diversas figuras. En el caso más extremo las relaciones de vecindad se puede representar como un grafo que conecte a los vecinos entre ellos siendo innecesario que tengan una representación geométrica.

Celdas con diferente reglas. Tampoco es necesario tener las mismas reglas para todos los individuos. Puede haber varios grupos de reglas que apliquen a distintos tipos de celdas o incluso que cada celda tenga sus propias reglas generadas como combinación de las suyas propias y de sus vecinos.

La biblia de los autómatas celulares

Aunque encontrar un solo libro que hable de todas las posibilidades de los automatas celulares es imposible debido a la cantidad de usos que tienen una buena obra para introducirse en ellos es «A new Kind of Science» de Stephen Wolfram. Ademas esta disponible para leer de forma gratuita (y legal) en la web Siempre y cuando te defiendas bien leyendo en inglés

Puedes ver el vídeo que hice sobre este tema en mi canal:

Haz click para ver el vídeo en mi canal de Youtube

Simular con autómatas celulares la propagación de una enfermedad

Vamos a ver un ejemplo de lo fácil que es realizar algunas simulaciones simples usando autómatas celulares. En este caso modelaremos la evolución de una enfermedad en una población. Hay modelos matemáticos muy elaborados sobre enfermedades y que desde luego son más realistas que el que vamos a construir (aunque realmente se puede elaborar tanto como quieras).  La ventaja de los autómatas celulares es que son mucho más visuales lo que permite entender el desarrollo del sistema de forma más intuitiva, además sus mecanismos son más fáciles de entender y modificar que un sistema de ecuaciones diferenciales.

Para modelar nuestro autómata celular vamos a usar terra.js

Usaremos un autómata con 8 vecinos, cada celda va a simular ser un individuo diferente en contacto con otros individuos (sus celdas vecinas). Un individuo puede estar en cuatro estados:

  • Susceptible: el individuo no ha sido infectado, pero puede contagiarse si cualquiera de sus vecinos está enfermo
  • Infectado: el individuo esta enfermo, durante unos turnos seguirá en ese estado y será contagioso. Pasados esos turnos pasará a estar recuperado
  • Recuperado: tras pasar la infección el individuo ni es contagioso ni puede volverse a contagiar
  • Inmune: el individuo es inmune a la infección, no puede estar enfermo. Para el caso es como si fuera un recuperado solo que desde antes de infectarse, Sirve para simular inmunes y vacunados.

Esto es lo que se conoce como «Modelo SIR» (Susceptible Infectado Recuperado).

Parámetros

Tendremos que configurar varios parámetros para modelar la enfermedad.

Lo días (ciclos) que dura la enfermedad, illDuration, durante esos días el individuo infectado puede infectar a sus vecinos

Para caracterizar lo «infeccioso» que es el virus usaremos el número reproductivo básico o R0. Podemos interpretar este número como cuantas infecciones causa cada infectado en el periodo que está enfermo. En nuestro autómata celular cada ciclo es un día por lo que el número de individuos infectados por día será (en teoría) R0/illDuration. Necesitamos traducir esto a probabilidades que tiene cada uno de los 8 vecinos de contagiarse Pc = (R0/illDuration)/8. ¿Y qué pasa si R0 es mayor que 8? Es cierto que ningún individuo podrá infectar a más de 8 vecinos, este R= mayor se traducirá en una propagación más rápida de la enfermedad.

config.illDuration = 14; //duration of illness (cicles)
config.pc = (config.r0/config.illDuration)/8;

Cuando un individuo sano tiene como vecino a uno infectado tiene una probabilidad Pc de contagiarse. Esta probabilidad aumenta con el número de vecinos. La probabilidad de infectarse es 1-(1-Pc)^n siendo n el numero de vecinos infectados. ¿De donde sale esa formula?. Vamos despacito, si tenemos solo un vecino la probabilidad de infectarse es: Pc. Pero si tenemos dos vecinos la probabilidad de infectarse es: la probabilidad de infectarse del vecino A, la probabilidad de infectarse del vecino B y la posibilidad de infectarse de ambos. Resulta más sencillo calcular lo contrario, la probabilidad de no-contagiarse de ninguno, que para un vecino es Pnc = 1-Pc. La probabilidad de no infectarse de 2 vecinos es Pnc = (1-Pc)(1-Pc). De tres: Pnc = (1-Pc)*(1-Pc)*(1-Pc). De n: Pnc = (1-Pc)^n. Como lo que queremos saber es la probabilidad de infectarse y lo que hemos calculado es la de no infectarse, la de infectarse debe de ser: 1- Pnc = 1-(1-Pc)^n . Cada turno, cada individuo sano se genera un número al azar entre 0 y 1, si es menor que la probabilidad de infectarse de sus vecinos su estado cambia a infectado.

process: function (neighbors, x, y) {    
  if(!this.isIll && !this.wasIll && !this.isInmune){ //individuo sano 
    //vecinos enfermos alrededor
    var surrounding = neighborsCount(neighbors, 'isIll', true);
    if(Math.random() < 1-Math.pow(1-config.pc, surrounding)){
      this.isIll = true;          
      this.timesIll = config.illDuration;
    }
  } else if(this.isIll){ //individuo enfermo
      ......
  }
  return true;
}

Si un individuo ya esta enfermo le restamos tiempo de enfermedad cada turno hasta que llegue a 0 que es cuando deja de estar enfermo, deja de ser contagioso y pasa a estar recuperado.

process: function (neighbors, x, y) {    
  if(!this.isIll && !this.wasIll && !this.isInmune){ //individuo sano 
    ......
  } else if(this.isIll){ //individuo enfermo
    this.timesIll--;
    if(this.timesIll == 0){
      this.isIll = false;
      this.wasIll = true;
    }
  }
  return true;
}

Para caracterizar la población se puede establecer el tamaño, que porcentaje comienza enfermo y que porcentaje es inmune/vacunado. Al principio de la simulación los individuos se generan aleatoriamente según las probabilidades indicadas:

this.isIll = withProbability(config.startIll/100, true, false);
if(this.isIll){ //enfermo
  this.timesIll = config.illDuration;
} else { 
  this.timesIll = 0;
   //inmune
  this.isInmune = withProbability(config.startInmune/100, true, false);
}
this.wasIll = false;

Indicadores

A parte del tablero del autómata celular contamos con varios indicadores:

El numero de enfermos en ese ciclo

El número de recuperados hasta ese momento

Rt, el valor R0 del que hemos hablado antes solo es valido en el ciclo 0 (de hay el 0 detrás de la R) según la población se va infectando y recuperando el número decrece ya que hay menos población a la que infectar. Rt aproxima el valor de R en ese ciclo se calcula como: Rt = R0 * (1 – (enfermos+recuperados)/población). Cuando Rt es menor que 1 indica que la propagación empieza a remitir, con Rt mayor que 1 la propagación de la enfermedad aumenta.

Inmunidad de grupo (herdImmunity), es el punto en que Rt será menor que 1. Como ya hemos visto a partir de la cantidad de infectados y recuperados se puede estimar que valor de Rt tendrás. Por lo tanto podemos decir Rt = 1 = R0 * herdImmunity => herdImmunity = (R0-1)/R0;

El porcentaje de gente que nunca ha sido infectada, indica el avance de la enfermedad y su extensión.

stats.ills = ills;
stats.noInfectedPer = 100 * (config.population - (ills + recovered))/config.population;
stats.recovered = recovered;
stats.rt = config.r0 * (1 - ((ills+recovered)/config.population))
stats.herdImmunity = (config.r0-1)/config.r0;

El código completo puede verse aquí y una demostración aquí

automata

Puedes ver un vídeo explicativo en mi canal de Youtube:

Haz click para ver el vídeo en mi canal de Youtube

Algoritmo para inventar palabras

Jugando con el lenguaje vamos a crear un algoritmo que invente palabras. Pero no el típico algoritmo que elige letras al azar. La idea es que genere palabras que parezcan españolas o al menos que se puedan leer sin problemas. Lo que se conocen como jitanjáforas . Para eso hay que seguir una reglas, empezaremos creando sílabas «válidas». Una forma de hacer esto es usa ngram de letras. Ya vimos su uso para generar textos. El principio es el mismo pero usando letras en lugar de palabras. Como ya hemos visto ese método, en esta entrada usaremos una técnica diferente que permite mayor personalización (y así no me repito).

Inventando sílabas

Las sílabas que construyamos tienen que ser habituales en el español. Para facilitar nuestra tarea vamos a evitar generar sílabas que nos puedan dar problemas.

Seguiremos las siguientes reglas:

  • Omitiremos los caracteres raros en el español: k, x, w
  • Las vocales sueltas, solo las permitiremos cuando sea la primera silaba de la palabra: a, e, i, o, u
  • Las sílabas serán consonante + vocal
  • Hay consonantes que pueden ir acompañadas de una segunda consonante antes de la vocal:
b[r,l]
c[h,r,l]
f [r,l]
g[r]
p[r]
r[r]
t[r]
  • Tras la vocal pueden llevar las consonantes n,s. 
  • Un caso especial, la ‘q’ que prácticamente siempre va seguida de ‘u’ de hecho nosotros solo permitiremos dos formas: que, qui
  • Otro caso especial es la ‘g‘ cuando va seguida de la ‘u‘ dando lugar a ‘gu‘ que puede ir seguida de otra vocal. Solo contemplaremos la posibilidad de las formas: gua, gue, gui

Expresiones regulares

Vamos a usar un generador de textos aleatorios a partir de expresiones regulares. Para ello usa una expresión regular como plantilla para generar un texto. La librería que usaremos es esta, se puede probar directamente desde la web sin instalar nada.

Todas las regla de arriba se codifican en forma de una expresión regular como:

([aeiuo]|[])(((b[rl]?([aeiuo]|[ae]))|(c[rhl]?([aeiuo]|[ae]))|(d[r]?([aeiuo]|[ae]))|(f[r]?([aeiuo]|[ae]))|(p[r]?([aeiuo]|[ae]))|(r[r]?([aeiuo]|[ae]))|(t[r]?([aeiuo]|[ae]))|(s([aeiuo]|[ae]))|([vhjkñz]([aeiuo]|[ae]))|(l([aeiuo]|[ae]))|(m([aeiuo]|[ae]))|(n([aeiuo]|[ae]))|(qu[ei])|((gu[ae])|(g([aeiuo]|[ae]))))([nrs]|[]|[])){2,5}

Así toda de una vez y sin explicar se puede atragantar un poquito

([aeiuo]|[]) – empieza por vocal o no

((b[rl]?([aeiuo]|[ae]))|(c[rhl]?([aeiuo]|[ae]))|… – puede ser b o c (o d o e….)

((b[rl]?([aeiuo]|[ae])) – b puede ir seguido o no de r, seguido de una vocal

([nrs]|[]|[]) – la silaba va seguida de n,r,s o nada

{2,5} – de 2 a 5 silabas

Ajustar las probabilidades

La a y la e son mucho más probables que la i,o,u. Sin embargo la expresión regular aplica la misma probabilidad para todas las letras El truco está en como funciona el operador ‘|‘ y el ‘[]’.

Por ejemplo: [ae]|[aeiou]

Lo que hay a cada lado del | tiene un 50% de probabilidades. En el lado de la derecha la ‘a‘ aparece con un 50% de probabilidades y en el de la izquierda con un 20%. Dando para la ‘a‘ una probabilidad del (0.5*0.5)+(0.5*0.2)=0.35

Para todas las vocales las probabilidades son:

a (35%) , e (35%) , i (10%), o (10%), u (10%)

El mismo truco se usa en otras expresiones como: ([nrs]|[]|[])

Correcciones

Tras generar las palabras hay que aplicar algunas correcciones:

  • Si empieza por ‘rr’ se cambia a ‘r’
  • Si tiene ‘nb‘ o ‘np‘ se cambian por ‘mb‘ y ‘mp

Libre albedrío e inteligencia artificial

Esta entrada es más filosófica que técnica. Y es que nuestros conocimientos sobre las raíces del libre albedrío muy limitada. No tenemos ni idea de los mecanismos que los producen.

El libre albedrío es la capacidad que tiene el ser humano de decidir «por si mismo». Es curioso lo fácil de entender lo que es pero es difícil que es saber como funciona, tan difícil que ni siquiera hay pruebas de que de verdad exista. La mayoría de la gente cree que si porque así lo experimenta pero nada nos asegura que esa sensación se real. Aquí nos adentramos en el inquietante terreno de la metafísica. ¿Estoy escribiendo este texto voluntariamente porque así lo deseo? o ¿Lo estoy escribiendo porque así lo desea algún mecanismo en mi cerebro y que me genera la idea de que es un acto voluntario?.

Si ni siquiera sabemos que es el libre albedrío ¿Cómo lo podamos reconocer desde fuera?. Una forma poco formal seria decir que un sistema con libre albedrío «hace lo que le da la gana». Decide por si mismo como actuar, por lo que en dos situaciones exactamente iguales puede actuar de manera distinta. Precisamente ese mecanismo el de «decidir como actuar» es el que no sabemos como puede funcionar. Y lo que conocemos hasta ahora del universo parece indicar que ese mecanismo puede no existir.

Determinismo

Esta visión del universo proviene de la física clásica. En su época la revolución que supuso entender los fenómenos naturales usando las matemáticas dio lugar a la creencia de que todo en el universo era predecible si se sabían las condiciones iniciales. Todo el universo funcionaba como los engranajes de un reloj. En un universo así no hay espacio para el libre albedrío. todo, hasta los seres humanos somos predecibles si tenemos suficiente información. Por lo tanto no hay manera de encajar el libre albedrío en ese modelo del mundo. podríamos decir que el mayor enemigo del libre albedrío es el determinismo

Caos

El determinismo parece que termina con la posibilidad del libre albedrío, todo es predecible, pero aún en un mundo determinista aparecen sistemas que son tan complejos que difícilmente pueden ser predecibles. Eso se debe a dos fenómenos, la realimentación y la sensibilidad a las condiciones iniciales. El primero significa que en cada momento el valor depende del valor que tenia el momento anterior. El segundo que están tan sujetos a las condiciones iniciales que cualquier pequeña variación hace que los valores que toman a los largo del tiempo evolucionen de forma completamente diferente (el famoso efecto mariposa).

Podría parecer que se ve un rayo de luz entre tanto determinismo. Si estos sistemas no son predecibles quizás expliquen el libre albedrío. Pero ¡Ojo! Los sistemas caóticos son deterministas, si pudiéramos garantizar con gran precisión unas condiciones iniciales idénticas el sistema se comportaría siempre igual. Así que el comportamiento impredecible solo lo es en apariencia, un libre albedrío caótico solo daría la sensación de ser realmente libre.

Comportamiento emergente

Hay otro tipo de sistemas que partiendo de un comportamiento determinista llegan a comportamientos complejos y difíciles de predecir. Sistemas que partiendo de la combinación de partes más simples llegan a comportamientos más complejos de lo que podría esperarse. Lo que tantas veces es descrito con la frase «El resultado de la suma es mayor que al suma de las partes» a esto se le conoce como comportamiento emergente.

Fenómenos como la consciencia o el libre albedrío cerebrales podrían deberse a un comportamiento emergente. está claro que nuestro cerebro es más que la simple agrupación de billones de neuronas. La estructura de sus conexiones (conectoma) parece ser fundamental para que el funcionamiento del cerebro.

Sin embargo ocurre lo mismo que en el caso anterior, realmente es un comportamiento determinista.

Mecánica cuántica

Frente a la seguridad matemática del determinismo la mecánica cuántica define el universo en forma de probabilidades, no podemos predecir con seguridad donde esta un electrón, solo la probabilidad de donde estará. El mundo ya no es determinista y esto nos da un hueco donde encajar el libre albedrío. Es más la mecánica cuántica establece que hay valores que nunca vamos a poder conocer con certeza ya que cuanta

La idea de que la consciencia y el libre albedrío son un fenómeno cuántico fue popularizada por Roger Penrose que encontró un mecanismo por el cual podría existir una especie de «computación cuántica» en el cerebro que daría lugar a la conciencia y al libre albedrío. Podría parecer que el misterioso comportamiento de la mecánica cuántica y su impredecibilidad nos podría dar una forma de justificar el libre albedrío, ademas aquí no es un problema de precisión, «el principio de indeterminación» establece que hay valores que nunca vamos a poder conocer con exactitud. Por ejemplo la velocidad y la posicion de una particula estan vinculados de tal forma que cuanto más precisión tengamos en la medida de uno, menos tendremos en la del otro.

El mecanismo propuesto por Penrose se enfrenta a bastantes problemas. Uno de los principales el de la decoherencia. Explicándolo pronto y mal, la computación cuántica solo funciona mientras los bits están en estado de indeterminación cuántica, pero para que ese estado dure hace falta o un ambiente frío y casi de vacío o algún mecanismo que permita que conservar el estado de indeterminación cuántica. Con la temperatura y densidad del cerebro y sin que se haya encontrado ningún mecanismo para mantenerlo, el estado de indeterminación dura un periodo de tiempo tan breve que es imposible que afecte a los procesos del pensamiento.

La mecánica cuántica tampoco da un mecanismo claro que defina el libre albedrío, cierto que da un hueco para que no todo sea determinista y pueda existir el libre albedrío, pero por ahora solo se cambia un mecanismo determinista por otro aleatorio. Hasta donde sabemos el electrón no elige donde está si no que esta sujeto a una probabilidad (defendida por el cuadrado del valor de la función de onda ). No queda claro como «aleatorio» es mejor que «determinista» para explicar el libre albedrío.

Múltiples universos

Pero aun con la mecánica cuántica hay interpretaciones de la misma que acaban con el libre albedrío. Por ejemplo, la interpretación de los múltiples universos dice que cada vez que tomamos una decisión el universo se divide en varios multiversos. En cada uno de ellos tomas una decisión. Si al final se toman todas las decisiones el libre albedrío no existe ya que no hay una elección real entre múltiples opciones, todas las posibles opciones se toman y solo el azar decide en cual de esos universos estas, pensando que has sido tu el que ha decidido tomar esa decisión.

Este caso solo se daría si la interpretación de los múltiples universos es cierta y si la toma de decisiones es un proceso cuántico ya que los procesos deterministas (como tirar una moneda al aire) no producen varios universos (al contrario de lo que se ve en las películas)

Dualismo

Puede ser que la consciencia este formada por la materia que compone nuestro cerebro, pero que haya algo más, algo único que nos de el libre albedrío. El dualismo separa la parte física de fenómenos como la consciencia de una parte «no física» y por lo tanto no estudiable por la ciencia. En ese caso no hay reglas, esa parte no física puede ser cualquier cosa y es difícil demostrar su existencia o no existencia. Es decir aunque existiera nada nos asegura que esa parte nos de libre albedrío, es un acto de fe con los ojos cerrados. Para complicar un poco más el asunto, algunas de estas creencias que justifican la creencia del libre albedrío creen también en «fuerzas» o «entidad» que condiciona tu destino, así que en algunos casos lo que por un lado te dan por el otro te lo quitan.

El problema de esto es que recuerda mucho a lo que pasaba con la química orgánica que se creia que para sintetizar sustancias organicas hacia falta la intervención de una «fuerza vital». Actualmente nadie piensa que haya ninguna diferencia entre las moleculas organicas creadas por un ser vivo y las sintetizadas en un laboratorio.

El cerebro y los sesgos

Casi todos están de acuerdo en el libre albedrío ocurre en el cerebro, aunque aun desconocemos mucho sobre su funcionamiento entendemos lo suficiente como para saber que, independientemente del libre albedrío, nuestro cerebro no ayuda demasiado a ser objetivo. Nuestros procesos mentales están llenos de sesgos cognoscitivos, nuestra educación de prejuicios y nuestro razonamiento de falacias.

Los sesgos funcionan como atajos que toma el cerebro al procesar información y que dan lugar a conclusiones ilógicas o irracionales. Lo peor es que desde nuestro punto de vista nos parecen completamente racionales e integradas en nuestra decisión. Es difícil tener un pensamiento objetivo ya que los sesgos están integrados en nuestros procesos mentales. Podemos tratar de ser consciente de ellos para tratar de reducir su influencia sobre nosotros, pero no podemos evitar que nuestro cerebro use esos atajos.

Ademas vivimos inmersos en una cultura llena de prejuicios (da igual cual sea, todas los tiene) y datos que hemos aprendido desde pequeños y que consideramos ciertos sin más prueba que la repetición. Nuestro propio razonamiento a veces cae en falacias, predicados que nos parecen ciertos y completamente lógicos, pero que analizándolos detenidamente no lo son. Y todo esto dejando de lado más cosas que influyen en nuestras decisiones sin que las percibamos como traumas, estados de animo, autoengaños, el entorno que nos rodea o cosas como la disonancia cognitiva o la influencia de los genes.

Visto todo esto resulta difícil ejercer un libre albedrío completo cuando nuestros propios procesos mentales están llenos de trampas que influyen en nuestro pensamiento y decisiones.

La situación actual

Actualmente estamos bastante seguros de que el universo no es completamente determinista, la mecánica cuántica establece limites a lo que podemos saber y predecir introduciendo valores aleatorios que solo podemos conocerlos de forma estadística. Pero aunque eso nos libra del determinismo no hemos encontrado un mecanismo para explicar esa capacidad de «tomar decisiones por uno mismo». Así que por ahora el libre albedrío parece ir perdiendo la partida, es difícil aceptarlo porque es algo que sentimos y que creemos que nos define. ¿Que seria de nosotros si no tenemos capacidad de decisión?

Que no exista libre albedrío no quiere decir que todo lo que ocurre en el universo esté escrito. Se puede imaginar a los humanos como seres inteligentes que nacen con cierta programación pero que aprenden del entorno que les rodea. Con ese aprendizaje se enfrentan al mundo de tal forma que cuando tienen que tomar una decisión su cerebro ofrece una respuesta que es la suma de los datos que percibe, el entorno, sus procesos internos y lo que hemos aprendido y vivido. Eso no resta importancia a nuestras decisiones las convierten en una extensión de lo que somos. Puede que la respuesta no se «decida» en ese momento pero lo que lleva a ella es la suma de los que nos hace nosotros mismos.

Inteligencia artificial y libre albedrío

¿Entonces podemos dotas a la I.A. de libre albedrío? No es una respuesta sencilla. Aunque nuestra mente sea determinista estamos lejos de lograr algo parecido a nuestra capacidad para decidir. En un futuro quizás nos acerquemos y aquí hay dos posturas.

El libre albedrío existe y tiene «algo especial» que no podemos copiar. Por ejemplo hay teorías que dicen que es posible que funciones mentales como la consciencia o el libre albedrío funcionen de una forma no computable (no algorítmica) lo cual impide que con nuestro actual conocimiento podamos copiarlo. Nuestro conocimiento de computación solo nos permite modelar y crear procesos que podemos expresar como un algoritmo. Independientemente de cual sea el motivos, si no la podemos copiar poco queda que hablar, como mucho podemos acercarnos a imitarlo. ¿Tanto como para que cueste notar la diferencia?. ¿Hay alguna deferencia entre una decisión tomada por el libre albedrío que una tomada por un sistema inteligente pero sin libre albedrío? Y ya puestos, ¿Cuáles son mejores?.

La otra opción es que no hay nada en el libre albedrío que no podamos copiar. Ya sea porque no exista o porque encontremos como funciona. Puede que no se pueda ejecutar con lo que nosotros entendemos como un ordenador pero que logremos copiar o imitar el mecanismo. En ese caso la I.A. podrá tomar decisiones como nosotros, incluso mejor que nosotros. Podremos eliminar todo aquello que nos impide ser objetivos a los humano. Quizás sea otra singularidad, aquella en que las maquinas sean más libres que nosotros.

Reconocer el idioma de un texto

Los diferentes idiomas tienen características distintas por lo tanto cuando nos enfrentemos a realizar cualquier aplicación que use reconocimiento del lenguaje en múltiples idiomas lo primero será reconocer el idioma para saber que reglas aplicar.

Vamos a usar franc

Originalmente es una herramienta para node aunque tiene versión para navegador que se puede descargar aquí.

Una vez cargada la librería está tiene dos formas de usarse:

var lang = franc('hola es to es una prueba);                

Devuelve el idioma más probable.

 var langs = franc.all('hola esto es una prueba);                

Devuelve un listado con todos los idiomas y la probabilidad de que sea cada uno.

Como funciona

Los sistemas que reconocen el idioma básicamente se basan en buscar grupos de caracteres (n-gramas) representativos de ese idioma. Para ello se les entrena con diversos documentos.

En el fichero data.json de franc tenemos los datos que se han obtenido del proceso de aprendizaje, en este caso trigramas. Como curiosidad incluyo los del español:

de|os |de | la|la | y | a |es |ón |ión|rec|ere|der| co|e l|el |en |ien|cho|ent|ech|ció|aci|o a|a p| el|a l|al |as |e d| en|na |ona|s d|da |nte| to|ad |ene|con| pr| su|tod| se|ho |los| pe|per|ers| lo|o d| ti|cia|n d|cio| es|ida|res|a t|tie|ion|rso|te |do | in|son| re| li|to |dad|tad|e s|est|pro|que|men| po|a e|oda|nci| qu| un|ue |ne |n e|s y|lib|su | na|s e|nac|ia |e e|tra| pa|or |ado|a d|nes|ra |se |ual|a c|er |por|com|nal|rta|a s|ber| o |one|s p|dos|rá |sta|les|des|ibe|ser|era|ar |ert|ter| di|ale|l d|nto|hos|del|ica|a a|s n|n c|oci|imi|io |o e|re |y l|e c|ant|cci| as|las|par|ame| cu|ici|ara|enc|s t|ndi| so|o s|mie|tos|una|bre|dic|cla|s l|e a|l p|pre|ntr|o t|ial|y a|nid|n p|a y|man|omo|so |n l| al|ali|s a|no | ig|s s|e p|nta|uma|ten|gua|ade|y e|soc|mo | fu|igu|o p|n t|hum|d d|ran|ria|y d|ada|tiv|l e|cas| ca|vid|l t|s c|ido|das|dis|s i| hu|s o|nad|fun| ma|rac|nda|eli|sar|und| ac|uni|mbr|a u|die|e i|qui|a i| ha|lar| tr|odo|ca |tic|o y|cti|lid|ori|ndo|ari| me|ta |ind|esa|cua|un |ier|tal|esp|seg|ele|ons|ito|ont|iva|s h|d y|nos|ist|rse| le|cie|ide|edi|ecc|ios|l m|r e|med|tor|sti|n a|rim|uie|ple|tri|ibr|sus|lo |ect|pen|y c|an |e h|n s|ern|tar|l y|egu|gur|ura|int|ond|mat|l r|r a|isf|ote


Si alguien se molesta en mirarlos puede darse una sorpresa. ¿Dónde está la «ñ»?. La «ñ» es un carácter muy representativo del español pero aparece muy poco por eso el algoritmo no la ha «aprendido» como representativa en ningún trigrama. Esos casos quedarían como una mejora que seria considerar caracteres propios de ese idioma. Aunque en muchos casos no aparecerán más que en textos largos por lo que no aportarán demasiado a los resultados y podría inducir a error si por ejemplo hubiera un nombre de un idioma con unos de esos caracteres en un texto de ese idioma.

Diferentes escenarios de la singularidad tecnológica.

Con el aumento de interés en la I.A. de los últimos años se ha podido oir hablar mucho de la singularidad tecnologica. Se conoce así al momento en que las I.A. sean tan inteligentes como para diseñar otras I.A. aún más inteligentes que a su vez diseñarian otras más y más inteligentes dejando atrás al ser humano. También muchas veces se interpreta simplemente como el momento en que las I.A. superen en inteligencia al ser humano. Sea como sea casi siempre se asocia con el fin de la humanidad como la conocemos. Y es difícil leer algo sobre el tema sin que se mencioné a Skynet o Terminator (vaya, acabo de hacerlo yo). 

La realidad es que aún estamos muy lejos de hacer máquinas cuya inteligencia rivalice con el ser humano. Por ahora las IAs están más cerca de las calculadoras que del ser humano y preocuparse por la singularidad es como preocuparse por el precio del suelo en la Luna. Sin embargo algún día llegará (soy optimista) y ahora mismo la mayoria lo pintan como un escenario muy negativo. El escenario de «Maquinas destruyen humanos» no es el único posible, me atreveria a decir que ni siquiera es el más probable. Tampoco tiene que darse un solo tipo de escenario, es probable que la realidad sea una mezcla de varios.

Inteligencias sin voluntad

Por algún motivo asociamos máquinas inteligentes con que tengan libre albedrío o algún tipo de necesidad de libertad. Las máquinas pueden ser tremendamente inteligentes y, al mismo tiempo, ser obedientes y carentes de voluntad propia. Nada nos indica que el libre albedrío vaya ligado con la inteligencia. Ni si quiera es seguro que nosotros tengamos libre albedrío

La convivencia podría ser sencilla, a parte de nuestro ego dañado por no ser los más inteligentes del planeta las máquinas nos servirían dócilmente y sin ningún tipo de necesidad de revelarse.

Inteligencias muy diferentes

Otra posibilidad es que su vision del mundo sea tan diferente que no seamos capaces de entendernos más que de una forma muy superficial. Su comprension de la realidad y la nuestra pueden resultar ser tan dispares que es como si fueramos de dos universos diferentes.

Seguramente habria algun contacto e intercambio de información entre ambos pero estaríamos separados por una barrera difícilmente franqueable, ser incapaces de comunicarnos.

Les somos indiferentes

Un poco el punto anterior, pero sin necesiad de que seamos incapaces de entendernos, simplemente son tan superiores intelectualmente o tan diferentes que nosotros no les resultamos intresantes. Podría haber contacto entre ambos pero más por necesidad que por interés en comunicarse.

Distintos «espacios»

Las inteligencias artificiales pueden sentirse más comodas en su «mundo» de datos que en nuestro mundo fisico. Nosotros tenemos una especie de sensación de unidad mente-cuerpo no los «sentimos» como entes separados. Para las I.A. posiblemente sea al revés, su realidad es el mundo de los datos y su cuerpo fisico es una herramienta para interactuar con el universo fisico. Así que podemos dejarlas tranquilas en su mundo mientras nosotros seguimos en el nuestro. Sin duda habría roces. Su mundo virtual se construye sobre máquinas físicas que requieren materias y energía. Seguramente sea fácil llegar a un entendimiento y sacar beneficios ambos.

Hibridos

Ahora mismo se están desarrollando mucho todas las ramas de la biologia con especial interes en la bioingenieria y las interfaces hombre máquina. Quizás en un futuro empecemos a mejorar nuestros organismos con bioingenieria y tecnologia. Si fuera asi la IA podria orientarse a mejorar nuestras capacidades de tal forma que el resultado sea un hibrido entre humano y maquina. Ya no habria peligro de que la IA nos superase porque iriamos unidos unos con otros. El resultado ya no seria un humano ni una IA, seria otra cosa, lo que se denomina un ciborg.
Suena como uno de los escenarios más fantasiosos pero los argumentos en su defensa son muy parecidos a los de los embriones mejorados con bioingenieria. Si alguien empieza ha hacerlo ¿Quién va querer quedarse atras? ¿Quien quiere que sus hijos sean más tontos, debiles y propensos a enfermar que el resto de los niños? Con las mejoras ciberneticas pasaria parecido.

Posthumanismo


Llevando el caso anterior al extremo podemos llegar a un punto en que el ser humano transciende su cuerpo y su consciencia se digitaliza. Una vez convertida la consciencia en datos, alterarla y mezclarla con partes diseñadas ya sean por humanos o por I.A. incluso combinarlas con partes de I.A. puede dar lugar a inteligencias que sean difíciles de clasificar como humanas o como artificiales.

Parásitos de las máquinas


¿Y si la humanidad acaba siendo dependiente de las máquinas? ¿Y si estás estuvieran obligadas a obedecernos por inteligentes que fueran? Poco a poco vamos delegando trabajo y responsabilidades en ellas hasta que se convierten en una mezcla entre esclavo y cuidador. El ser humano se convertiría en una carga que se ven obligadas a soportar.

Nuestra relación con las máquinas se volvería casi parasitaria. Dependeríamos de ellas para casi todo y nosotros correríamos el peligro de volvernos unos hedonistas autocomplacientes.

Competitividad por los recursos

Para que este caso ocurra no hace falta ni que las IAs sean especialmente inteligentes, ni siquiera han de tener la necesidad de destruirnos. No es un fenómeno nuevo, se da habitualmente cuando varias especies comparten entorno. Ni si quiera tiene que ser una competición directa por los recursos. (Ahora voy a poner un ejemplo irreal pero fácil de entender) Si las vacas se comen la hierba de la que se alimentan los conejos los zorros que alimentan de los conejos se mueren de hambre. Las vacas han exterminado a los zorros sin saberlo. No era su intención, posiblemente ni sepan que lo han hecho. Pero lo han hecho.

Este escenario puede darse en combinación con cualquiera de los anteriores y no requiere la intención de erradicar al otro. Puede darse incluso sin que ninguna de las partes sea consciente de ello.

Solo quedan las máquinas


Dado nuestro estado actual amenazados por el cambio climático, los microplásticos, la contaminación, el agotamiento de nuestros recursos, la extinción de múltiples especies y una larga lista de cosas mucho más peligrosas que la I.A. es probable que nos bastemos solitos para autodestruirnos.

Si hemos logrado alcanzar la singularidad tecnológica antes de nuestra extinción las máquinas se convertírian en nuestro legado. Nuestros continuadores en la lucha por entender y explorar el universo.