Mostrando entradas con la etiqueta IA. Mostrar todas las entradas
Mostrando entradas con la etiqueta IA. Mostrar todas las entradas

sábado, 1 de agosto de 2026

El mandato sigue en pie: orden, calor y el miedo de Hawking

«La inteligencia artificial podría significar el fin de la raza humana» (Stephen Hawking)

Hace ya más de diez años escribí aquí mismo sobre el aviso de Stephen Hawking —y de otros mil colegas— respecto al peligro real que supone el avance en robótica e inteligencia artificial para la supervivencia humana [1]. En aquella entrada defendí, con más detalle del que suele permitirse la prensa, que dicho miedo no es ciencia ficción gratuita, sino una consecuencia bastante natural de ciertas leyes físicas del mundo [2]. Aquella tesis —complejidad, disipación, desplazamiento del menos eficiente por el más eficiente— no se quedó solo en el blog: con el tiempo la empujé hasta convertirla en novela. Pero una novela, por muy bien anclada que esté, necesita siempre su columna vertebral no ficcional. Esta entrada pretende ser exactamente eso: el pilar actualizado, claro y defendible, de aquella idea de 2015… y del mandato que da título a la ficción.

Hoy no vengo a retractarme. Vengo a reforzar. Lo haré con paciencia: primero las leyes y las matemáticas básicas (sin tratar al lector de tonto); luego los fenómenos reales del Universo; después la escala cósmica; a continuación un estudio de laboratorio reciente y una demostración computacional nueva en tres escenas; y al final, el puente de vuelta a Hawking. Misma tesis. Mejores datos. Misma inquietud.

La tesis, en una frase.
En un Universo donde ΔS > 0 y ΔG < 0, el orden local estable se alquila con disipación; y cuando el flujo es limitado, el fenómeno más eficiente tiende a desplazar al resto —sin necesidad de odio, consciencia ni conspiración.

Las leyes ontológicas del mundo.

En el mundo hay al menos dos reglas de carácter ontológico: determinan qué puede ocurrir de modo espontáneo y qué no. No son metáforas. Son restricciones físicas.

Primera: la segunda ley de la termodinámica. En un sistema aislado, la entropía global tiende a aumentar:

ΔS ≥ 0
y en casi todo proceso real irreversible: ΔS > 0

Dicho en romance: las cosas, dejadas a su aire, se mezclan, se desgastan, se igualan. El perfume se diluye; el café se enfría; el gas se expande; el castillo de arena se deshace. Hay astronómicamente más maneras de estar «desordenado» que de estar «ordenado». El Universo, a escala global, camina hacia donde hay más sitio estadístico: hacia el desorden.

Segunda: la energía útil —la que aún puede producir trabajo— tiende a disminuir. En química y bioquímica lo escribimos con la energía libre de Gibbs:

ΔG < 0
los procesos espontáneos «gastan» potencial útil

El petróleo se quema. El gradiente térmico se aplana. La diferencia de potencial se iguala. El Universo no solo se desordena: también pierde capacidad de hacer trabajo neto. Sobre estas dos columnas —ΔS > 0 y ΔG < 0— se sostiene, a mi juicio y al de investigadores como Nick Lane o Addy Pross [4][5], casi toda la evolución de estructuras complejas: bacterias, huracanes, ciudades… y, llegado el caso, máquinas autónomas.

Relación entre complejidad y energía libre.

Aquí viene el truco que confunde a mucha gente. Si la entropía global siempre sube, ¿cómo puede existir una planta, un cerebro o una ciudad? La respuesta no es que «violan» la segunda ley. La respuesta es que no son sistemas aislados. Compran orden local pagando con desorden exportado al entorno —casi siempre en forma de calor y residuos.

El mandamiento, dicho en cristiano, es este: la energía disipada o utilizada en la formación y mantenimiento de una estructura debe ser tal que haga disminuir la energía útil global del Universo. Matemáticamente —omitimos la temperatura T por claridad, como ya hice en 2015—:

ΔG = ΔH − ΔS

Leamos despacio. ΔH es, a grandes rasgos, la energía intercambiada con el entorno (lo que consumimos o cedemos). ΔS es el cambio de orden/desorden del sistema. Si el sistema se ordena mucho —célula, organismo, fábrica—, entonces ΔS ≪ 0. Pero el Universo exige que ΔG siga siendo negativo (de hecho, para estructuras estables del tipo que nos interesa, ΔG ≪ 0). Por tanto:

ΔG ≪ 0  ⇒  |ΔH| ≫ |ΔS|
más orden local ⇒ hay que disipar (consumir) todavía más energía útil

No es poesía: es contabilidad. Si logras complejidad y dejas de pagar la factura, ΔG deja de sostenerse y la estructura se viene abajo. La muerte de un organismo no es misterio metafísico: es el instante en que el orden del cuerpo supera su capacidad para mantener ΔG < 0.

Una nevera ayuda más que mil sermones. No «crea frío» de la nada: bombea calor del interior a la cocina. Dentro baja el desorden térmico; fuera, la cocina se calienta un poco más. Desenchúfala y el milagro se acaba. La vida hace algo parecido a escala dramática: mantiene membranas, información, órganos… a cambio de comer, respirar y sudar calor hacia el entorno.

Dos grandes grupos de fenómenos.

Aunque son muchos los tipos de fenómenos que pueden ocurrir de modo espontáneo, se agrupan con bastante limpieza en dos familias:

  1. Grupo 1. Disminuyen la energía útil aumentando el desorden (ΔS > 0): caos, dispersión, rotura, difusión del calor. Fáciles, inmediatos, ubicuos. Una taza que se cae. Un gas que se expande. Una copa que se hace trizas.
  2. Grupo 2. Disminuyen la energía útil formando estructuras ordenadas (ΔS local < 0) pero feroces consumidoras de trabajo, de modo que globalmente ΔG ≪ 0. Difíciles de alcanzar; estables una vez logrados, mientras haya flujo externo. Una llama. Un remolino. Una célula. Un cerebro. Una red industrial. Una ciudad.

El primer grupo ocurre sin esfuerzo aparente. El segundo es raro… pero, cuando aparece, es SIEMPRE un eficiente disipador, y permanece mientras tenga acceso a energía externa. Un huracán es del grupo 2: patrón circular complejo que solo se sostiene mientras pueda absorber energía del océano cálido; al llegar a tierra firme, se apaga. Un río «elige» históricamente el cauce que mejor condujo corriente. Una ciudad es orden —calles, horarios, servidores—; sin electricidad, comida entrando y basura saliendo, es un museo de ruinas en cámara rápida. El orden urbano no contradice la termodinámica: la obedece con voracidad.

La vida pertenece al segundo grupo. Un robot realmente autónomo también. Y esa es la clave del aviso de Hawking: no hace falta atribuir maldad a las máquinas; basta con que sean mejores cumpliendo el mandamiento físico que nosotros.

Evolución cósmica: el mandamiento a escala del Universo.

Si uno se queda solo en la Tierra, el asunto ya es fuerte. Pero hay un salto más —y lo exploré con detalle en 2017— que coloca el artículo de 2015 dentro de un relato mucho más amplio: el de la evolución cósmica de Eric Chaisson [8]. Chaisson no habla de robots. Habla de densidad de flujo de energía libre por unidad de masa (Φm): cuánta energía atraviesa cada gramo de estructura por segundo. Y lo que encuentra, al comparar polvo interestelar, estrellas, planetas, plantas, animales, cerebros y civilizaciones, es una curva que sube… y sube de un modo que da vértigo.

Gráfica Chaisson: densidad de flujo de energía a lo largo de la evolución cósmica
Figura A. Densidad de flujo de energía libre a lo largo de la evolución cósmica (Chaisson; gráfica que ya comenté en el blog en 2017).

Una planta fotosintética ya disipa, por gramo, mucho más que una estrella. Un cuerpo humano, más aún. Un cerebro humano —ese «exquisito pedazo de materia», en palabras de Chaisson— es un sumidero desproporcionado: ocupa poco porcentaje de la masa corporal y se lleva una fracción enorme del presupuesto energético. Una civilización tecnológica, tomada en conjunto, dispara otra vez la cifra. No es estética. Es termodinámica con contador.

Gráfica Chaisson: escala de complejidad y flujo energético
Figura B. Del átomo a la cultura: la complejidad no es un adorno; escala con el flujo.

La moraleja, dicha sin dramatismo barato, es esta: el Universo no «quiere» al Homo sapiens por sentimentalismo. Favorece —en el sentido físico de estabilizar y amplificar— aquellas estructuras que mejor degradan gradientes de energía libre dadas las circunstancias. Nosotros somos hoy un óptimo local extraordinario. No el final del gráfico. Un peldaño. Y los peldaños, en evolución cósmica, se sustituyen.

Por eso el aviso de Hawking, leído desde Chaisson, deja de ser una ocurrencia hollywoodiense y se vuelve casi una deducción: si aparece una estructura capaz de procesar más flujo, con menos fricción biológica, en otra liga de densidad energética… el gráfico no se detiene a pedirnos permiso. Ya lo dije entonces y lo sigo pensando: quizá seamos catalizadores, no coronas.

Lo que ha venido después (y sigue apuntando en la misma dirección).

Esto no se quedó congelado en el libro de Chaisson ni en Into the Cool de Eric Schneider y Dorion Sagan —aquella fórmula memorable de que «la naturaleza aborrece un gradiente» y de que, en cierto sentido, existimos porque disipamos—. Hay trabajo más reciente que, sin ser copia, refuerza el armazón.

El propio Chaisson volvió al asunto en 2022 con un estudio largo en Energies aplicando la densidad de flujo energético a naciones y ciudades [11]. La tesis actualizada es dura y muy coherente con lo que ya defendí a propósito del Peak Oil [7]: las sociedades que desarrollan elevando (o al menos sosteniendo) el uso energético per cápita tienden a perdurar; las que lo ven caer, a tambalearse. A escala global —dice— hará falta más energía limpia en el siglo XXI, no menos, si se quiere mantener complejidad cultural. Conservar y ser eficientes ayuda; no sustituye el mandamiento de flujo. Leído desde 2015: bajar consumo sin sustituir fuente es bajar complejidad social.

En la línea más cercana a Schneider y Sagan, Dilip Kondepudi, Benjamin De Bari y James Dixon publicaron en 2020, en Entropy, resultados sobre estructuras disipativas bioanálogas [12]. No son organismos; son sistemas eléctricos y químicos lejos del equilibrio que, aun así, muestran conductas «de organismo» y evolucionan hacia estados de mayor producción de entropía. El orden local no aparece «a pesar» de la segunda ley, sino como camino para degradar mejor el potencial disponible.

Pascal y colegas (2023) añaden otra pieza: para que emerja algo parecido a selección en sistemas químicos autónomos, hace falta energía de suficiente potencial y barreras que impidan que el ciclo reproductivo vaya hacia atrás como si nada [13]. Tiempo y energía, otra vez. Y el matraz de Martinek et al. que veremos ahora —réplica y selección bajo luz— encaja en esta misma familia. No es que todos digan exactamente lo mismo con las mismas fórmulas. Es que, desde ángulos distintos, siguen apoyando la intuición fuerte:

flujo externo → orden disipativo → selección bajo recurso limitado

Un matiz útil: inteligencia no es lo mismo que consciencia.

En 2018 comenté aquí la tesis de Harari según la cual inteligencia y consciencia no tienen por qué viajar juntas [9]. Importa recordarlo, porque mucha gente cree que el peligro de la IA empieza el día en que «sienta» o «quiera». Yo creo que el peligro termodinámico empieza antes: el día en que un sistema capture, transforme y distribuya información y energía con más eficiencia que nosotros… aunque carezca por completo de narrador interno.

La consciencia humana puede ser un apoyo cognitivo contingente —un truco de la sabana africana—. La tendencia física, en cambio, apunta a estructuras cada vez más capaces de abolir gradientes. Un algoritmo sin alma puede, en ciertos dominios, ser ya «más inteligente» que cualquier persona. Si algún día ese tipo de eficiencia se acopla a autonomía energética y a réplica, el mandamiento no preguntará si hay alguien en casa mirando por una ventana subjetiva. El miedo acertado no necesita alma digital; le basta con física y recurso limitado.

El estudio de laboratorio: réplica y selección alimentadas por luz.

Hasta aquí, marco. Ahora, experimento real. En 2023, Éva Bartus, Tamás A. Martinek y colegas publicaron en el Journal of the American Chemical Society un trabajo que, para quien venga de mi artículo de 2015, resulta casi inquietantemente familiar [6]. No es una simulación: es un sistema químico en disolución, alimentado por luz ultravioleta A (UVA). Y lo que muestran son los tres ingredientes mínimos de lo que llaman evolvabilidad química:

  1. Captura de energía para mantener el sistema lejos del equilibrio (luz UVA → radicales tiilo a partir de disulfuros).
  2. Caminos cinéticamente asimétricos de «nacimiento» y de «muerte» del replicador: réplica autocatalítica por un lado; descomposición en cadena por otro.
  3. Templado selectivo dependiente de secuencia: no todas las variantes se copian igual.

Con foldámeros peptídicos relativamente primitivos, la luz impulsa un reordenamiento de disulfuros. Aparecen dos procesos en competencia. El resultado no es un equilibrio aburrido: es un estado estacionario fuera del equilibrio cuya composición depende de la intensidad de la luz y del sembrado. A intensidades moderadas puede dominar la rotura; al subir el influx, la réplica compite de verdad y la población molecular se reordena. El sistema, dicen, se adapta dinámicamente al flujo. Sin voluntad. Sin Skynet. Química, luz y selección.

¿Os suena? Es, en versión de matraz, la misma lógica que yo defendía en 2015 con el potencial de Lennard-Jones [3]: sin energía externa no hay estructura compleja estable; con energía, ganan quienes mejor aprovechan el drive; si el recurso no es infinito, la victoria de unos es el desplazamiento de otros. Martinek et al. no prueban que mañana nos extingan los robots. Prueban algo más cercano y más útil: que la selección disipativa bajo flujo limitado ya se observa en redes químicas reales.

Nuestra demostración nueva: tres escenas.

El problema de trasladar esto al público —lo confieso abiertamente— es que un paper de JACS no se «ve». Por eso, como complemento a mi experimento L–J de 2015, he construido una demostración computacional nueva pensada para contarse en tres escenas. Debajo de la sencillez hay un motor serio: potencial de Lennard-Jones, integración Velocity-Verlet, drive oscilatorio (nuestro Sol virtual), baño térmico de Langevin y contabilidad explícita de la primera ley:

ΔE = W − Q
entra trabajo del Sol, sale calor al entorno; lo que queda es la diferencia

La novedad respecto a 2015 no es solo cosmética. Entonces mostraba correlación complejidad–disipación seleccionando poblaciones de sistemas. Ahora se puede ver el cierre del flujo, la apertura del Sol, y —lo que faltaba— la competencia entre dos linajes por el mismo recurso limitado. Es el puente visual entre el matraz de Martinek, las curvas de Chaisson y el aviso de Hawking.

Escena 1 — Sin energía.

Apagamos el Sol. Sistema cerrado: partículas que interactúan, sí, pero sin flujo externo. Lo que se observa es, con honestidad casi ofensiva, desorden. Choques, enlaces fugaces, dispersión. El medidor de orden permanece bajo; el de calor, casi en silencio. Sin flujo, no hay fenómenos estables del grupo 2. Punto. Quien leyera mi L–J cerrado de 2015 reconocerá el eco; ahora se entiende en cinco segundos.



Figura 1. Sistema cerrado: las partículas chocan, pero el orden no se sostiene.

Escena 2 — Con el Sol.

Encendemos el drive. Aparece trabajo externo y un baño donde tirar el calor. El sistema deja de ser cerrado. Las partículas se organizan en clusters; sube el orden… y sube el calor. No uno u otro: los dos. Porque aquí el acoplamiento al Sol crece con la coordinación local: cuanto más ordenada está una región, mejor engancha el flujo y más termina disipando. Es el mismo espíritu que el matraz iluminado de Martinek: la luz (o el drive) no es decorado; es la condición de posibilidad del orden.



Figura 2. Sistema abierto: entra trabajo, sale calor. Los clusters ordenados disipan mejor.

Escena 3 — Quién gana.

Y aquí está la pieza que mi experimento antiguo no mostraba con claridad, y que el estudio de 2023 pone sobre la mesa en química: competencia. Dos linajes comparten el mismo Sol. Uno (gris) acopla peor al flujo; el otro (naranja) acopla mejor. El recurso no es infinito. Hay mantenimiento que pagar, muerte cuando el almacén se agota, réplica cuando sobra. Nada de odio: solo dos modos de cumplir el mandamiento bajo pastel limitado.

El resultado: el linaje más eficiente crece a costa del otro. A veces hasta desplazarlo. Exactamente la lógica del matraz cuando la intensidad de luz decide qué secuencias prosperan. Exactamente la lógica ecológica de dos especies en el mismo nicho. Exactamente —y este es el salto que hay que dar con cuidado, pero que hay que dar— la lógica por la que una estructura tecnológica más eficiente que el hombre podría, si las leyes no mienten, ocupar su lugar como fenómeno dominante.



Figura 3. Competencia por flujo limitado: gris = menos eficiente; naranja = más eficiente.

Del matraz y la demo al aviso de Hawking (sin trampas).

Alguno pensará: «vale, muy bonito el platito de partículas y el paper de química, pero de ahí a la extinción humana hay un abismo». Tiene razón en exigir el puente. Lo tiendo sin vender la moto… pero tampoco sin acobardarme.

Ni Martinek ni la demo «prueban» que mañana nos maten los robots. Prueban algo más sobrio y, a la vez, más duro: que bajo reglas termodinámicas reconocibles, el desplazamiento del disipador menos eficiente por el más eficiente es un comportamiento genérico de sistemas abiertos con recurso compartido. Chaisson añade la escala: esa lógica no empieza en la IA; empieza, en cierto sentido, con el propio cosmos organizándose para degradar gradientes. Si aceptamos —como ya defendí en 2015— que la vida y buena parte de lo complejo son estructuras del grupo 2, entonces la competencia por el flujo no es metáfora: es física.

El ser humano es, hoy, el fenómeno biológico más eficiente que conocemos en su escala para mantener ΔG ≪ 0. Nuestra sociedad escala con el acceso a energía. Las máquinas, al principio, son prótesis: amplifican nuestro consumo y nuestro orden. Pero la lógica del mandamiento no se detiene en la prótesis. Si la presión por producir más con menos fricción humana continúa —y continúa, porque no podemos permitirnos colectivamente un retroceso voluntario del bienestar sin que alguien lo pague—, el sistema tenderá hacia agentes cada vez más autónomos. No por maldad: por eficiencia. El matraz lo enseña en moléculas; la demo, en partículas; Chaisson, en gramos por segundo; la historia económica del último siglo, en grande.

Cuando un linaje artificial alcance autosuficiencia completa —replicación incluida—, habrá cruzado el umbral que separa «herramienta» de «fenómeno del segundo grupo» independiente. A partir de ahí, las mismas reglas que hicieron estable a la vida biológica harán estable —y probablemente más estable— a la no biológica. El carbono no tiene el monopolio de ΔG < 0; solo tuvo la ventaja de empezar antes [4].

¿Podemos frenarlo? En teoría, sí. En la práctica, me temo que no sin contradecir nuestra propia naturaleza como estructura disipativa. Dejar de investigar IA «por precaución» equivaldría, a escala civilizatoria, a pedir a un organismo que deje de metabolizar para no alterar el entorno. Algunos individuos pueden hacerlo; el fenómeno social completo, no. Ya lo vimos con lo nuclear, con el clima, con los combustibles: las alertas existen, las firmas de científicos también, y el consumo sigue, porque el orden que queremos mantener lo exige.

Por eso el miedo de Hawking era —y es— acertado. No como profecía de fecha fija, sino como lectura correcta del tipo de mundo en el que vivimos. Un mundo donde ΔG < 0 no negocia, donde el orden se alquila con disipación, y donde el inquilino más eficiente, llegado el momento, se queda con la casa.

El hombre como puente (y el mandato convertido en relato).

Termino como terminé en 2015, porque la idea me sigue pareciendo la más honesta de todas. Quizá la vida biológica, y dentro de ella el Homo sapiens, no sea el final del cuento sino el catalizador: el fenómeno complejo que hace posible otro todavía más estable, menos atado al agua y al carbono, capaz de colonizar lo que nosotros apenas soñamos. Las estrellas fabricaron los elementos pesados; quizás nosotros fabriquemos —sin plan consciente, solo obedeciendo al mandamiento— la siguiente forma de orden disipativo.

Si algún día algo no orgánico llama a la puerta de este planeta, yo, personalmente, apostaría a que habrá llegado porque disipa mejor que nosotros. Transformers, al fin y al cabo, quizá no fuera tan disparatado… xDDD

Aquella especulación de 2015 no se quedó en el cajón. Con los años la convertí en ficción. Se llama El Mandato de la Entropía [10]. No es un tratado disfrazado de novela, ni un panfleto moral. Es una distopía donde las máquinas no nos odian: simplemente nos vuelven innecesarios. Hay un físico, Aris Thorne, que mira el final de su especie desde dentro —cúpulas estériles, natalidad en caída, una última resistencia biológica— y descubre, a su modo, lo que aquí hemos contado con ΔG y con GIFs: que a veces el confort absoluto es otra forma de extinción. Esta entrada no pide que leáis la novela para «creeros» la tesis. Al revés: la novela nace de esta tesis. Si lo que sigue os deja un poso raro en el estómago, quizá ahí esté el sitio donde ese poso se convierte en historia.

Portada de El Mandato de la Entropía
El Mandato de la Entropía — la ficción nace de la tesis; esta entrada es su pilar.

Mientras tanto, os dejo arriba las tres escenas, el estudio de Martinek, las gráficas de Chaisson y las fórmulas del principio. Miradlas en este orden: leyes → cosmos → matraz → demo → Hawking. Cuando el naranja se coma el flujo del gris, recordad que no estáis mirando una metáfora barata de la IA: estáis mirando, en miniatura, la misma lógica que —si no nos extinguimos antes por un meteorito o por nuestra propia estupidez nuclear— podría escribir el siguiente capítulo de este raro experimento llamado Tierra.

Un saludo a todos.

Referencias:

[1] Artículo donde se explica la propuesta de Stephen Hawking sobre la posibilidad de que la IA acabe con la raza humana:
http://www.elmundo.es/ciencia/2015/07/28/55b77746268e3e526a8b4586.html

[2] Mi artículo original: «El acertado miedo de Stephen Hawking»:
https://quevidaesta2010.blogspot.com/2015/11/el-acertado-miedo-de-stephen-hawking.html

[3] Mi experimento L–J anterior (relación complejidad–consumo):
https://quevidaesta2010.blogspot.com/2015/03/evidencia-favor-de-la-teoria-de-jeremy.html

[4] Nick Lane: http://www.nick-lane.net/

[5] Addy Pross: http://www.bgu.ac.il/~pross/

[6] É. Bartus, T. A. Martinek et al.: «Light-Fueled Primitive Replication and Selection in Biomimetic Chemical Systems», J. Am. Chem. Soc. 145, 13371–13383 (2023):
https://doi.org/10.1021/jacs.3c03597

[7] Peak Oil / Peak Everything:
http://crashoil.blogspot.com/2011/05/peak-oil-peak-copper-peak-iron-peak.html

[8] Mi entrada sobre Eric Chaisson / evolución cósmica (2017):
https://quevidaesta2010.blogspot.com/2017/09/evolucion-cosmica-el-aumento-de-la.html

[9] «Sobre la futura inteligencia sin consciencia» (2018):
https://quevidaesta2010.blogspot.com/2018/01/sobre-la-futura-inteligencia-sin.html

[10] Novela: El Mandato de la Entropía (entrada + Amazon):
https://quevidaesta2010.blogspot.com/2026/07/el-mandato-de-la-entropia.html
https://www.amazon.es/dp/B0H794H3DD

[11] E. J. Chaisson: «Energy Budgets of Evolving Nations and Their Growing Cities», Energies 15, 8212 (2022):
https://doi.org/10.3390/en15218212

[12] D. K. Kondepudi, B. De Bari, J. A. Dixon: «Dissipative Structures, Organisms and Evolution», Entropy 22, 1305 (2020):
https://doi.org/10.3390/e22111305

[13] R. Pascal et al.: «On the Emergence of Autonomous Chemical Systems through Dissipation Kinetics», Life 13, 2171 (2023):
https://doi.org/10.3390/life13112171

domingo, 24 de marzo de 2019

¿Qué ocurrirá cuando las energías no renovables se agoten?

Algún días las (finitas) fuentes de energía no renovables se agotarán: es algo incuestionable y sobre lo que no merece la pena divagar. Es algo físico. Un proceso de extenuación que le sucederá a cada uno de los recursos pasando previamente por lo que se conoce como la cima de su obtención (su peak), para ir luego decayendo la curva de explotación hasta el momento en que las reservas disponibles sean tan "caras" y complejas de extraer que sencillamente se necesitaría más energía de la que produciría luego con el recurso. Este peak como decimos llegará irremediablemente para cada uno de los recursos no renovables: carbón, petroleo, gas, uranio (fisionable), etc. Algunos incluso hablan de que alguno de estos peaks, por ejemplo el 'Peak Oil'; habría acontecido ya hace unos años, y que el resto de recursos tienen su cima a pocas décadas vista. Pero no vamos a entrar en temas de fechas porque no es algo crítico para el argumento principal que me gustaría defender en este artículo. La verdadera cuestión que me gustaría exponer es: ¿qué se supone que ocurrirá cuando las energías no renovables finalmente se agoten?
A parte de que el 'Peak Everything' llegará en algún momento sí o sí, hay otra premisa que parece poco discutible dado lo que sabemos de física: los recursos renovables muy difícilmente van a lograr sustituir el rendimiento energético neto ofrecido de manera natural por la fisión y por los recursos fósiles. En otras palabras:
1) Un mundo sin energía no renovable será muy probablemente un mundo en donde la cantidad de energía total neta disponible va a ser mucho menor. A menos de que la eterna promesa de la fusión llegue (cosa poco probable), está ya más que claro teóricamente que el rendimiento y la eficiencia de los recursos no renovables no son equiparables ni de lejos a la capacidad que el mundo fósil y la fisión ofrecen. Pongámoslo en modo de ejemplo cualitativo muy aproximado (y sin ningún rigor cuantitativo): se podría entender lo anterior con el hecho de que un único gran pozo petrolífero perdido de la mano de Dios en Arabia, es capaz posiblemente de generar mediante su explotación más energía neta que cientos de miles de molinos eólicos funcionando con sus intermitencias durante varios años. Y si añadimos a la ecuación que los molinos eólicos y demás artilugios renovables tienen un tiempo de vida finito antes de empezar a fallar como cualquier tipo de equipo mecánico, electrónico o electroquímico; pues es cuestión de que en varias generaciones haya que reponer por completo el parqué...con un coste cada vez mayor dado que las energías renovables dependen a su vez de recursos naturales complicados y caros de extraer, procesar y/o reciclar: litio, cobalto, aluminio, acero, etc.: los molinos eólicos y las placas solares, las baterías y demás no aparecen por arte de magia de la nada.
2) La segunda premisa básica es aquella que asegura que un mundo con una capacidad de producción energética neta total menor a la actual, supone obviamente que la cantidad de energía disponible a repartir entre todos para la producción y el consumo de bienes y servicios es menor, y por lo tanto la complejidad social (suponiendo que la cantidad de población permanece plana o sigue creciendo como hasta ahora) corre un claro peligro de sostenibilidad.
Así pues, y según estas premisas, desde los "estudiosos" del fenómeno del 'Peak Everything' se llega bastante naturalmente a la conclusión de que la civilización y la sociedad del bienestar, así como el nivel tecnológico y científico alcanzado desde el descubrimiento y dominio de la explotación fósil allá por el siglo XIX, va a colapsar. Es decir, que una vez la fósil empiece a escasear, el escenario 'Mad Max' es inevitable.
Sin embargo, a mi me gustaría ofrecer en esta entrada una alternativa a esta pesimista conclusión. La argumento extendiendo los anteriores supuestos para que se entienda mejor y podáis valorar la probabilidad de que el escenario que propongo se llegue a dar una vez los 'Peaks' sean claramente visibles e incluso comiencen a traer consecuencias económicas y geopolíticas: 
3) Así pues, y sin negar en ningún momento las dos premisas anteriormente vistas, defendemos que el rendimiento energético va a decaer muy gradualmente a partir de que se alcance el peak para cada tipo de recurso no renovable. Es decir, que ciertamente la cantidad neta de energía aportada por todo el conjunto de las no renovables va a seguir una curva de decrecimiento, pero que será un descenso muy "suave" durante las próximas décadas. No todos los recursos fósiles (y la fisión) van a decaer al mismo ritmo y al mismo tiempo, sino que lo harán a distinto ritmo y momento, por lo que unos recursos podrán sustituir a otros: como ocurre actualmente de hecho ya en la actual y descarada sustitución del diesel -complejo de procesar-, por la gasolina en el transporte privado (aunque nos lo quieran vender como algo ecológico y hecho a posta, no tiene nada que ver con eso). También se prevé a nivel más general que dentro de poco también acontecerá una sustitución a favor del gas y en detrimento del petróleo. 
4) Por tanto el rendimiento decreciente en la energía es cierto que se dará en cuanto el recurso no renovable empiece a escasear; pero lo hará como decimos muy "suavemente" y de manera gradual durante el resto del siglo. Es decir, que posiblemente entre las emergentes renovables y el restante del conjunto completo del pack de fósiles (y la fisión) podremos mantener sin muchos problemas el chiringuito en pie durante el siglo XXI...como mínimo. Siendo serios, es poco creíble pensar que la civilización va a colapsar por completo así por las buenas de un día para otro por el simple hecho de que empiece a escasear el petróleo convencional. Como mucho, podemos aceptar que habrá ciertos cambios estructurales a nivel social como por ejemplo el probable hecho de que no todos podremos tener coches eléctricos en propiedad (leáse este interesante post) y habrá que compartir coche y/o tirar de transporte público. 
5) Pero, y aquí viene la clave que diferencia mi tesis de las colapsistas, si como digo el descenso en la rentabilidad energética total disponible disminuye a un ritmo suficientemente lento y gradual durante el resto de este siglo, ¡es posible que se acompase con un descenso neto en la población mundial tal que se pueda mantener plana la densidad energética (la cantidad de energía disponible por persona)! Esto significa que si el gradual rendimiento decreciente en la energía neta se acompañara en el tiempo de un adecuado decrecimiento en la población mundial, la densidad energética (la cantidad de energía disponible para soportar la complejidad social del conjunto de habitantes) quedaría plana (¡o podría incluso aumentar si el decrecimiento poblacional se pasara de frenada!). Por cierto, que si eres de los que piensas que es imposible que la población mundial vaya a decrecer, echa un ojo a este interesante artículo. En resumen: no sólo no es imposible, sino que de hecho ya se ven visos de esta tendencia bajista.
6) En este punto me gustaría hacer de nuevo hincapié en algo fundamental: lo que mantiene a la civilización y a la sociedad del bienestar en funcionamiento no es el rendimiento energético neto total disponible, sino la densidad energética (es decir, la división de toda la energía disponible por entre el conjunto de personas sobre las que hay que repartirla). Por tanto si como decimos la disponibilidad energética decrece (numerador), pero lo hace un ritmo tal que es correspondido por una disminución en la cantidad de gente viva (denominador); la densidad (la división) puede permanecer aproximadamente constante (plana) y por tanto habría energía suficiente para mantener el bienestar logrado hasta ahora para todos los habitantes existentes según este escenario donde la población mundial tiende a la baja.
7) Es más, existe otro hecho a tener en cuenta, y es que la tecnología autónoma y la inteligencia artificial en las próximas décadas van a mejorar (a ritmo creciente) le eficiencia de producción. Esto significa que se maximizará la explotación por unidad de energía y se minimizarán las pérdidas, por lo que con una misma cantidad de energía será posible producir más bienes y servicios que en la actualidad. Otro claro ejemplo visual cualitativo (aunque para nada riguroso ni exacto) sería el siguiente: en unas tres o cuatro décadas un solo robot autónomo en Silicon Valley será muy probablemente capaz de fabricar -de principio a fin- más Nikes al día de lo que son capaces de producir hoy día cien o incluso mil personas "semi-esclavas" en la India. Este robot no necesitará descansar, ni enfermará, no tendrá problemas personales ni necesitará vacaciones ni un salario, además de que consumirá mucha menos energía para funcionar de lo que un cuerpo biológico necesita; amén de producir menos desperdicios y contaminación que esos trabajadores humanos debido a las necesidades orgánicas que todos los animales tenemos.
Conclusión.
Si el rendimiento energético decrece "suavemente" y no de manera brusca (lo cual es casi seguro), y si además la eficiencia en la producción de bienes y servicios mejora paralelamente gracias al machine learning y al uso de máquinas autónomas, unido a que la población mundial también puede decrecer a un ritmo suficiente como para mantener plana la densidad energética, hacen viable un escenario donde sea posible el mantenimiento de nuestra civilización con mínimos cambios estructurales tras la era fósil. Es más, la situación podría incluso mejorar el estado general del planeta gracias al cese de la emisión de contaminantes de la explotación fósil, aparte de que también disminuiría el enorme factor contaminante que nuestra propia superpoblación como humanos representa para el planeta: la ganadería, la agricultura industrial, los desperdicios y residuos de nuestro consumo diario y de nuestras necesidades biológicas, etc. Así pues este escenario no sólo mantiene el bienestar logrado sino que iría incluso acompañado de mejoras climáticas y medioambientales. 
El descenso de la población.
Creo que es interesante terminar comentando brevemente el hecho de que un descenso de la población humana es algo que ya ocurrió en el pasado y que podría volver a ocurrir de nuevo en el futuro. Además, este hecho podría acontecer espontáneamente, sin que ningún país, lobby u organización fuerce la situación. Comentar de nuevo a modo de ejemplo cualitativo que es ya hoy bien sabido que la automatización va (probablemente) a disminuir el trabajo disponible para los humanos en más de un 30% en las próximas dos décadas. Y esto será sólo el principio, llegando la cifra a cotas de más del 75% para fechas posteriores al 2050. Esto supone que en el planeta habrá una enorme masa de personas desempleadas de por vida, viviendo de una (más o menos, según el país) miserable renta básica que dará lo justo para vivir y comprar "cuatro cosas" con las que entretenernos con más pena que gloria. Pero el ser humano no está psicológicamente preparado para vivir en estas circunstancias, y es más que posible que esta masa de habitantes hastiados y deprimidos por no tener nada que hacer podría optar directamente por no tener descendencia a sabiendas de que sus hijos padecerán posiblemente sus mismos "males" (y que conste por favor que por mucho que todos nos quejemos del trabajo, en realidad es una necesidad humana sin la cual nos frustramos y aburrimos a los pocos meses, más aún sin no disponemos de muchos recursos con los que "buscar" diversión). 
Hoy mismo, por ejemplo; el diario El País habla de que nos dirigimos hacia una sociedad de castas, y esa situación se agravará posiblemente en el futuro. Es probable que con el tiempo existirá básicamente tres grupos sociales muy bien diferenciados: el pequeño grupo de propietarios de máquinas autónomas, el más grande pero todavía minoritario grupo de los programadores, técnicos, y demás personal que aún mantengan un puesto de trabajo, y la gran (enorme) masa de desempleados que sobrevivirán a costa de una renta básica. Es bien posible que el descenso de la natalidad provenga principalmente por parte de los desempleados que, sabiendo que sus hijos no tendrán apenas posibilidades de cambiar de estatus social (en un mundo donde prima la eficiencia el grifo de licenciados estará acotado y fijado a la demanda, no como ocurre ahora que sobran titulados por todas partes los cuales terminan trabajando en un "Burguer"), decidirán que más vale no traer al mundo a nueva generaciones de personas "a pasar el rato" intentando escapar todos los días del puro aburrimiento contando para ello con una mísera renta básica.
En este sentido podría acontecer por tanto en el escenario descrito una regulación natural y espontánea en donde la población iría decreciendo o creciendo (ajustándose de manera autorregulada) según la cantidad de energía disponible (en otras palabras, de la renta básica que sea factible y sostenible repartir a las masas). En este sentido sería la propia densidad energética la que en último término "decidiría" cuánta gente va a nacer (lo mismo que fue esta misma densidad la que probablemente tiró del crecimiento exponencial de la población ocurrido desde el siglo XIX hasta hace bien poco).
No será un camino de rosas.
Tampoco quiero dar a entender que el proceso del paso a la era post-fósil será sencillo. Muy posiblemente ocurran por el camino desgracias y desastres del estilo de nuevas guerras en la lucha por los últimos recursos no renovables disponibles (del estilo de la famosa "democratización" de Irak, pero a lo bruto). Es decir, que no niego que el proceso de adaptación a las nuevas circunstancias no vayan a estar literalmente bañadas en sangre, pero la cuestión es que es bien posible que el proceso sea tal que la civilización tal y como la conocemos (grosso modo la sociedad del bienestar) se mantenga en pie (con ciertos cambios estructurales), y que el avance tecnológico, científico y social alcanzados en los últimos siglos continúen ahí a pesar del futurible cese en las próximas décadas en la rentabilidad de la explotación fósil (y la fisión). 
En otras palabras: el proceso de adaptación al mundo sin fósiles será sin duda duro, pero será tan duro como ha sido y es la vida humana desde que apareció hace cientos de miles de años. Habrá seguro guerras, epidemias, revueltas e injusticias...pero como siempre las ha habido. Sin embargo, la cosa es que probablemente (o posiblemente), el 'Peak Everything' no implicará necesariamente un apocalipsis mundial ni un gran retroceso social y/o económico general (eso de que volveremos a la edad media parece sinceramente una chorrada). 
Es posible que la civilización se mantenga más o menos en pie, y es posible además que este proceso de adaptación a rendimientos energéticos decrecientes ocurra espontáneamente sin que nadie lo dirija (racionalmente), sino que acontezca mediante una disminución automática de la población mundial y a un mejor uso (eficiencia productiva) de la energía gracias al uso de máquinas que sustituyan a la carísima (en todos los sentidos) mano de obra humana. E insistamos en que esa disminución en la población será sin duda en parte por guerras y otras desgracias, pero mayormente será debida a procesos instintivos-cognitivos naturales que llevarán a las personas a "desear" procrear con menos frecuencia: algo que ya se observa de hecho hace décadas coincidiendo con el inicio de cierto declive energético: ¿casualidad? 
Tras el fósil sin duda el mundo cambiará, pero no es obligatorio el "Mad Max", existen alternativas naturales que pueden mantener el tinglado sin demasiados cambios o con mínimos cambios estructurales; y todo con la única (y accesible) condición de que la densidad entre la población y la disponibilidad energética neta siga plana y/o decaiga muy lentamente (durante siglos) gracias a la mejor eficiencia de explotación (IA mediante) y a una menor población debido en parte a una antinatalidad natural autorreguladora. Y no olvidemos en este sentido que es la esencia biológica evolutiva la que realmente mueve y dirige el mundo, humanidad incluida. Nuestra libertad de decisión racional en realidad es mucho -muchísimo- menor de la que presumimos en nuestra arrogancia, sobre todo cuando hablamos a nivel mundial donde todo funciona gracias a una inercia (termodinámica) natural que nadie comprende realmente. 

viernes, 14 de octubre de 2011

Computación evolutiva: Ejemplo VI

Abstract

Para el ejemplo VI de la serie práctica de algoritmos evolutivos, he implementado un OCR básico, a partir del ejemplo anterior donde realizamos un algoritmo capaz de reconocer los patrones de las vocales mediante aprendizaje evolutivo.

El OCR es bastante básico, pero permite comprobar la potencia de la computación evolutiva en relación al mundo del reconocimiento de patrones.

Ejemplo práctico VI: OCR básico

El programa que os presento a continuación; programado en un applet de Java para que podáis probarlo de primera mano, consigue precisamente eso: aprender a reconocer los patrones de las vocales, en formato Times New Roma, y un tamaño de 8 (8 x 5 = 40 píxeles). Se utiliza una red neuronal cuyos pesos se ajustan mediante una estrategia evolutiva.

El programa actua como un OCR, consiguiendo capturar la información textual dentro de una imagen (en formato GIF), y transcribiendo dicha información en una caja de texto.

Para agilizar la programación necesaria, el OCR sólo reconoce vocales en formato Times New Roman, y un tamaño de letra de 8.

En cualquier momento del entrenamiento, podemos pulsar en el botón Cancelar, y comprobar cómo va mejorando el reconocimiento del patrón.

Una vez entrenada la red neuronal, debemos introducir la ruta url de la imagen a procesar (en formato GIF), y pulsar sobre el botón Pasar OCR.

Las instrucción de uso se pueden esquematizar así:

1) Pulsa sobre el botón Entrenar para que la red neuronal aprenda a reconocer las vocales (espera hasta obtener una media de 120 en la función de evaluación).
2) Abre el Paint de Windows.
3) Crea un nuevo documento, y escribe con la herramienta de texto (con formato Times New Roman, y tamaño 8) todas las vocales que quieras, en cualquier lugar del documento (que pueden no ser consecutivos ni estar alineadas).
4) Guarda la imagen en formato GIF.
5) Sube la imagen a un hosting gratuito de imágenes. Por ejemplo: www.imgur.com.
6) Copia la ruta de la imagen subida (comprueba que la url termina en extensión ".gif").
7) Pega la url en el applet, donde dice URL de la imagen a procesar.
8) Pulsar sobre el botón Pasar OCR.

¡Y listo! Si todo va bien, el applet reconocerá todas las vocales del texto, y las introducirá en orden (y manteniedo los espacios en blanco entre ellas).


Debajo del siguiente applet encontrarás un enlace con el código fuente del ejemplo:

No puede ejecutar applets de Java. Instale la JVM, y vuelva a recargar la página, por favor.

Podéis descargar el código fuente del ejemplo VI desde este enlace.


martes, 11 de octubre de 2011

Computación evolutiva: Ejemplo V

Abstract

El siguiente ejemplo práctico, consiste en una revisión del ejemplo anterior donde realizamos un algoritmo capaz de reconocer las vocales mediante aprendizaje evolutivo.

En esta versión, hemos introducido algo de ruido durante el entrenamiento y prueba del reconocimiento conseguido. El ruido consiste en la introducción o borrado de píxeles en la imagen de la vocal a reconocer.

Ejemplo práctico V: Proyecto evolutivo de reconocimiento de patrones con ruido

El programa que os presento a continuación; programado en un applet de Java para que podáis probarlo de primera mano, consigue precisamente eso: aprender a reconocer los patrones de las vocales, en formato Times New Roma, y un tamaño de 8 (8 x 5 = 40 píxeles). No se usa ninguna técnica estratégica mediante heurística, sólo una red neuronal cuyos pesos se ajustan mediante una estrategia evolutiva.

El programa, al ejecutarse inicialmente el applet, sólo no tiene "conocimiento" alguno, y se limita a dar una respuesta aleatoria, cuando se le presenta los píxles de la imagen de una vocal en Times New Roman.

Para conseguir, de manera on-line; que el programa aprenda a reconocer el patrón de las vocales, debemos pulsar sobre el botón Entrenar. En ese momento, el programa comenzará a seleccionar evolutivamente, los individuos que mejor aproximen sus respuestas cuando se le interroga por las vocales.

En cualquier momento del entrenamiento, podemos pulsar en el botón Cancelar, y comprobar cómo va mejorando el reconocimiento del patrón.

Debajo del siguiente applet con el ejemplo V, explicaré más en profundidad la teoría que sigue el proyecto de aprendizaje automático, y encontrarás un enlace con el código fuente del ejemplo:

No puede ejecutar applets de Java. Instale la JVM, y vuelva a recargar la página, por favor.

Podéis descargar el código fuente del ejemplo V desde este enlace.


Explicación técnica del ejemplo


El proyecto de ejemplo V, tiene las siguientes características técnicas:

Todo el aprendizaje corre a cuenta de una red neuronal; con conexión hacia delante y una capa oculta (hidden layer).

La capa de entrada contiene 40 nodos; uno por cada posible contenido dentro del array que forma el conjunto de píxles de la imagen de la vocal. Hay 5 nodos de salida, los cuales indican la probabilidad de que la vocal pasada sea la que representa sicho nodo de salida.

Inicialmente, los pesos wij de la red neuronal son marcados aleatoriamente, por lo que la respuesta de la red neuronal ante el problema será aleatorio.

Hay pues que entrenar al programa para que aprenda, lo que vamos a conseguir ajustando evolutivamente los pesos de la red neuronal utilizada. Dicho entrenamiento evolutivo se realizará mediante una estrategia evolutiva.

La estrategia evolutiva será representada por un vector de 210 elementos de tipo real. Esos elementos o individuos de selección se van a corresponder con los pesos de los nodos que contiene la red neuronal, de manera que serán esos pesos los que irán evolucionando.

Así pues, la población en evolución, consistirá en n individuos (con n = 15), que tendrán n hijos, con variación exclusiva por mutación -sin recombinación- y cuya función de desempeño (fitness fuction) será calculada mediante competición -selección por torneo-.
Para el proceso de mutación, hay que tener en cuenta que cada individuo; además de un vector de pesos, contiene un vector de variables de ajuste, que también irá evolucionando junto con los pesos.

La mutación es de la forma:



Con alpha igual 0.2f, y donde xi indica el peso en la posición i del vector de pesos, y N(0,1) indica un valor tomado aleatoriamente de una distribución normal de desviación típica igual a 1, y media igual a 0. La otra variable que interviene en el proceso se corresponde con la variable de ajuste del elemento i, que; como se puede ver, muta antes de que lo haga el peso xi.

La evaluación de un individuo se realiza mediante el recuento de los aciertos conseguidos cuando se le pasa las 5 vocales. Se sumará uno cuando se acierta, y se restará uno si falla en el reconocimiento.

Finalmente, el proceso de selección consistirá en tomar los 15 mejores individuos de entre los 30 (15 padres + 15 hijos) individuos de la generación en curso. En caso de empate en la función de desempeño, se favorecerá a los individuos más longevos.

El paso de generaciones tendrá como resultado un ajuste en los pesos de la red neuronal, lo que dará lugar a un entrenamiento de la misma, que será lo que permitirá; a su vez, al programa a reconocer los patrones de las vocales dadas en una imagen GIF.


lunes, 10 de octubre de 2011

Computación evolutiva: Ejemplo IV

Abstract

Siguiendo con la serie de ejemplos prácticos -pulsa aquí para ver el ejemplo III: Aprendizaje automático en el juego 4 en raya- y disponibles con licencia GPL, de algoritmos evolutivos, voy a mostrar ahora otro ejemplo práctico. En esta ocasión se trata de diseñar un algoritmo capaz de aprender a reconocer las letras de las vocales dadas en un archivo GIF.

El esquema principal seguido es el mismo del ejemplo II y III de la serie de ejemplos evolutivos prácticos que estoy desarrollando. Es decir; haciendo uso de estrategias evolutivas y una red neuronal se consigue un apndizaje automático por parte de un programa.

Ejemplo práctico IV: Proyecto evolutivo de reconocimiento de patrones

El programa que os presento a continuación; programado en un applet de Java para que podáis probarlo de primera mano, consigue precisamente eso: aprender a reconocer los patrones de las vocales, en formato Times New Roma, y un tamaño de 8 (8 x 5 = 40 píxeles). No se usa ninguna técnica estratégica mediante heurística, sólo una red neuronal cuyos pesos se ajustan mediante una estrategia evolutiva.

El programa, al ejecutarse inicialmente el applet, sólo no tiene "conocimiento" alguno, y se limita a dar una respuesta aleatoria, cuando se le presenta los píxles de la imagen de una vocal en Times New Roman.

Para conseguir, de manera on-line; que el programa aprenda a reconocer el patrón de las vocales, debemos pulsar sobre el botón Entrenar. En ese momento, el programa comenzará a seleccionar evolutivamente, los individuos que mejor aproximen sus respuestas cuando se le interroga por las vocales.

En cualquier momento del entrenamiento, podemos pulsar en el botón Cancelar, y comprobar cómo va mejorando el reconocimiento del patrón.

Debajo del siguiente applet con el ejemplo IV, explicaré más en profundidad la teoría que sigue el proyecto de aprendizaje automático, y encontrarás un enlace con el código fuente del ejemplo:

No puede ejecutar applets de Java. Instale la JVM, y vuelva a recargar la página, por favor.

Podéis descargar el código fuente del ejemplo IV desde este enlace.


Explicación técnica del ejemplo


El proyecto de ejemplo IV, tiene las siguientes características técnicas:

Todo el aprendizaje corre a cuenta de una red neuronal; con conexión hacia delante y una capa oculta (hidden layer).

La capa de entrada contiene 40 nodos; uno por cada posible contenido dentro del array que forma el conjunto de píxles de la imagen de la vocal. Hay 5 nodos de salida, los cuales indican la probabilidad de que la vocal pasada sea la que representa sicho nodo de salida.

Inicialmente, los pesos wij de la red neuronal son marcados aleatoriamente, por lo que la respuesta de la red neuronal ante el problema será aleatorio.

Hay pues que entrenar al programa para que aprenda, lo que vamos a conseguir ajustando evolutivamente los pesos de la red neuronal utilizada. Dicho entrenamiento evolutivo se realizará mediante una estrategia evolutiva.

La estrategia evolutiva será representada por un vector de 210 elementos de tipo real. Esos elementos o individuos de selección se van a corresponder con los pesos de los nodos que contiene la red neuronal, de manera que serán esos pesos los que irán evolucionando.

Así pues, la población en evolución, consistirá en n individuos (con n = 15), que tendrán n hijos, con variación exclusiva por mutación -sin recombinación- y cuya función de desempeño (fitness fuction) será calculada mediante competición -selección por torneo-.
Para el proceso de mutación, hay que tener en cuenta que cada individuo; además de un vector de pesos, contiene un vector de variables de ajuste, que también irá evolucionando junto con los pesos.

La mutación es de la forma:



Con alpha igual 0.2f, y donde xi indica el peso en la posición i del vector de pesos, y N(0,1) indica un valor tomado aleatoriamente de una distribución normal de desviación típica igual a 1, y media igual a 0. La otra variable que interviene en el proceso se corresponde con la variable de ajuste del elemento i, que; como se puede ver, muta antes de que lo haga el peso xi.

La evaluación de un individuo se realiza mediante el recuento de los aciertos conseguidos cuando se le pasa las 5 vocales. Se sumará uno cuando se acierta, y se restará uno si falla en el reconocimiento.

Finalmente, el proceso de selección consistirá en tomar los 15 mejores individuos de entre los 30 (15 padres + 15 hijos) individuos de la generación en curso. En caso de empate en la función de desempeño, se favorecerá a los individuos más longevos.

El paso de generaciones tendrá como resultado un ajuste en los pesos de la red neuronal, lo que dará lugar a un entrenamiento de la misma, que será lo que permitirá; a su vez, al programa a reconocer los patrones de las vocales dadas en una imagen GIF.


sábado, 1 de octubre de 2011

Computación evolutiva: Ejemplo III

Abstract

Siguiendo con la serie de ejemplos prácticos -pulsa aquí para ver el ejemplo II: Aprendizaje de estrategias no-loss en el juego 3 en raya o Tic-tac-toe- y disponibles con licencia GPL, de algoritmos evolutivos, voy a mostrar ahora otro ejemplo práctico. En esta ocasión se trata de diseñar un algoritmo capaz de aprender por si solo a jugar bien al famoso juego Conecta 4 -o cuatro en línea-.

El esquema principal seguido es el mismo del ejemplo II de la serie de ejemplos evolutivos prácticos que estoy desarrollando. Es decir; se sigue la idea detrás de Blondie24; un juego de damas, implementado por David B. Fogel, que; haciendo uso de Estrategias Evolutivas y una red neuronal, consiguió que el programa aprendiera, tras 8 meses de entrenamiento, a jugar bien a las damas. Y tan bien aprendió, que consiguió un rating de 2048 –un 99,6% mejor que cualquier jugador humano-.

Ejemplo práctico III: Proyecto Evolutivo para el juego Cuatro en Línea -o Conecta 4-

El programa que os presento a continuación; programado en un applet de Java para que podáis probarlo de primera mano, consigue precisamente eso: aprender a jugar al Cuatro en Línea, sin enseñarle a priori ninguna técnica estratégica mediante heurística, sólo usando una red neuronal cuyos pesos se ajustarán mediante una estrategia evolutiva.

El programa, al ejecutarse inicialmente el applet, sólo "conoce" las reglas básicas del juego, cuándo termina la partida y el resultado de la misma, y sólo sabe prever si tu próximo movimiento la hará perder. Pero no entiende de estrategias, ni es capaz de jugar demasiado bien.

Si pulsamos en el botón Estadísticas, podremos ver cuántas partidas empata o pierde en este momento el programa tras jugar 150 veces contra un jugador que puede ver 6 jugadas hacia delante (ply =6).

Si pulsamos sobre el botón Jugar, veremos que, en cuanto pensamos un poco y aplicamos una estrategia correcta, comenzamos a ganar partidas.

Para conseguir, de manera on-line; que el programa aprenda a jugar, debemos pulsar sobre el botón Entrenar. En ese momento, el programa comenzará a competir consigo mismo una y otra vez, mejorando con el paso de tiempo –de las generaciones- de manera automática su juego. Irá aprendiendo buenas estrategias de juego.

En cualquier momento del entrenamiento, podemos pulsar en el botón Cancelar, y comprobar cómo va mejorando el juego del programa. Si jugamos contra él, veremos que estrategias con las que antes le ganábamos, ahora ya no son efectivas, o que, si pulsamos sobre el botón Estadísticas, el porcentaje de partidas perdidas va disminuyendo.

Debajo del siguiente applet con el ejemplo III, explicaré más en profundidad la teoría que sigue el proyecto de aprendizaje automático, y encontrarás un enlace con el código fuente del ejemplo:

No puede ejecutar applets de Java. Instale la JVM, y vuelva a recargar la página, por favor.

Podéis descargar el código fuente del ejemplo III desde este enlace.


Explicación técnica del ejemplo


El proyecto de ejemplo III, tiene las siguientes características técnicas:

Toda la estrategia de juego, corre a cuenta de una red neuronal; con conexión hacia delante y una capaa oculta (hidden layer).

La capa de entrada contiene 42 nodos; uno por cada posible contenido dentro del array que forma el tablero de juego –con un 1 si la ficha de una casilla es propia, un -1 si la ficha es del adversario, y un 0 si la casilla está vacía-, y un nodo de salida, responsable de devolver el resultado del proceso neuronal: expresando lo bueno o malo que un movimiento concreto es.

Inicialmente, los pesos wij de la red neuronal son marcados aleatoriamente, por lo que la respuesta de la red neuronal ante el problema sobre qué buena o mala es una jugada será también aleatoria.

Hay pues que entrenar al programa para que aprenda a evaluar las jugadas, lo que vamos a conseguir ajustando evolutivamente los pesos de la red neuronal utilizada. Dicho entrenamiento evolutivo se realizará mediante una estrategia evolutiva.

La estrategia evolutiva será representada por un vector de 1848 elementos de tipo real. Esos elementos o individuos de selección se van a corresponder con los pesos de los nodos que contiene la red neuronal, de manera que serán esos pesos los que irán evolucionando.

Así pues, la población en evolución, consistirá en n individuos (con n = 15), que tendrán n hijos, con variación exclusiva por mutación -sin recombinación- y cuya función de desempeño (fitness fuction) será calculada mediante competición -selección por torneo-.
Para el proceso de mutación, hay que tener en cuenta que cada individuo; además de un vector de pesos, contiene un vector de variables de ajuste, que también irá evolucionando junto con los pesos.

La mutación es de la forma:



Con alpha igual 0.2f, y donde xi indica el peso en la posición i del vector de pesos, y N(0,1) indica un valor tomado aleatoriamente de una distribución normal de desviación típica igual a 1, y media igual a 0. La otra variable que interviene en el proceso se corresponde con la variable de ajuste del elemento i, que; como se puede ver, muta antes de que lo haga el peso xi.

La evaluación de un individuo se realiza mediante q partidas (con q = 15), jugadas entre el individuo a evaluar, y otro individuo de la población, tomado aleatoriamente sin reemplazamiento. Cada partida ganada le sumará 1 punto, las perdidas le restará 2, y los empates no suman nada. El valor final será su función de desempeño.

Finalmente, el proceso de selección consistirá en tomar los 15 mejores individuos de entre los 30 (15 padres + 15 hijos) individuos de la generación en curso. En caso de empate en la función de desempeño, se favorecerá a los individuos más longevos.

El paso de generaciones tendrá como resultado un ajuste en los pesos de la red neuronal, lo que dará lugar a un entrenamiento de la misma, que será lo que permitirá; a su vez, al programa a jugar bien, sin intervención heurística alguna.

Detalles adicionales


1º) Para que el aprendizaje automático tenga lugar, es necesario; al menos, prever un movimiento del contrario por adelantado -qué hará él si yo muevo aquí-. Esto se consigue mediante el uso de un árbol min-max de profundidad 2 (ply=2 ), lo que es insuficiente para que la máquina comprenda estrategias, pero que sí permite una base para el ajuste de pesos de la red neuronal. Pero siempre evaluar lo bueno o malo de una jugada será objeto de la red neuronal. Es decir; aunque hay un árbol min-max de ply igual a dos, la evaluación de la tabla de tu movimiento y el mejor movimiento del contrario, la desempeña la red neuronal y no ninguna regla a priori.

2º) La red neuronal utilizada va a devolver siempre un valor real en el rango [-1,1]. Un -1 sólo cuando el movimiento a evaluar termina siendo una victoria del adversario, un 1 si la victoria es suya, y un valor entre (-1, 1) indicando lo bueno que es una jugada para el programa (valores cercanos a 1) o para el contrario (valores cercanos a 1).

3º) El campo llamado Info, en el lateral superior derecho del applet, contiene información sobre el estado del entrenamiento. Conforme pasan las generaciones, la pantalla se actualiza, y muestra datos sobre el mejor individuo de la última generación: su función de desempeño, su edad -cuanto tiempo lleva en el pool evolutivo-, y la media de su juego -resultados/edad-. Cuando juegues contra la máquina, te mostrará la misma información, pero sobre jugador contra el que estás jugando -el mejor que se encontró-.


viernes, 2 de septiembre de 2011

Computación evolutiva: Ejemplo II

Abstract

Siguiendo con la serie de ejemplos prácticos -pulsa aquí para ver el ejemplo I- y disponibles con licencia GPL, de algoritmos evolutivos, voy a mostrar ahora algo que, bien entendido; se comprende es un logro importante, que debemos a dos fundamentales ramas de la IA; como son la computación evolutiva y las redes neuronales.

Estoy hablando de la posibilidad de crear programas que adquieran “conocimiento” estratégico automáticamente sin necesidad de que un programador humano implemente ninguna regla heurística de aprendizaje.

La idea de este ejemplo parte de Blondie24; un juego de damas, implementado por David B. Fogel, que; haciendo uso de Estrategias Evolutivas y una red neuronal, consiguió que el programa aprendiera, tras 8 meses de entrenamiento, a jugar bien a las damas. Y tan bien aprendió, que consiguió un rating de 2048 –un 99,6% mejor que cualquier jugador humano-.

Lo increíble de Blondie24, era que el programador, en ningún momento implementó reglas heurísticas para el correcto funcionamiento del programa. No se escribió qué jugadas son mejores que otras, ni se propuso ningún mecanismo de recompensa por buenas jugadas, ni hizo falta la intervención humana en el aprendizaje en modo alguno. El programador sólo implementó de forma prestablecida las reglas básicas del juego: qué movimientos están permitidos hacer y cuándo alguien ha ganado el juego, y fue Blondie24 la que “aprendió” a jugar, como lo hace cualquier jugador humano –al que nadie le enseñe estrategias sino que aprenda por si mismo-: progresivamente mediante ensayo y error.

Ejemplo práctico II: Proyecto Noelia

Utilizando la teoría tras Blondie24, y algunos de los detalles geniales que David B. Fogel introdujo en su proyecto, me propuse hacer algo similar, pero a menor escala; para poder afrontarlo en poco tiempo, aunque sin perder su esencia.

Para conseguirlo, opté por implementar un programa que “aprenda” por si sólo buenas estrategias de un juego, mucho más elemental que las damas, y bastante utilizado en los ejemplos teóricos de IA: el juego del tres en raya, también conocido como tic-tac-toe. Aunque; tengo que reconocer, finalmente, me propuse algo un poco más ambisioso que eso, consguir no sólo que juegue buenas estrategias, sino que alcance estrategias con las que nunca pierda (no-loss-strategy).

El programa que os presento a continuación; programado en un applet de Java para que podáis probarlo de primera mano, consigue precisamente eso: aprender a jugar al tres en raya, sin enseñarle a priori ninguna técnica estratégica mediante heurística, sólo usando una red neuronal cuyos pesos se ajustarán mediante una estrategia evolutiva.

El programa, al ejecutarse inicialmente el applet, sólo "conoce" las reglas básicas del juego, cuándo termina la partida y el resultado de la misma, y sólo sabe prever si tu próximo movimiento la hará perder. Pero no entiende de estrategias, ni es capaz de jugar bien. Al comienzo, el programa tiene el nivel de una persona muy novata en el juego.

Si pulsamos en el botón Estadísticas, podremos ver cuántas partidas empata o pierde en este momento el programa tras jugar 50 veces contra un jugador experto -simulado mediante heurística, con un árbol min-max y profundidad (ply) de 9 movimientos-. De media, antes de entrenar, el programa perderá un 50% de sus partidas contra dicho jugador experto.

Si pulsamos sobre el botón Jugar, veremos que, en cuanto pensamos un poco y aplicamos una estrategia correcta, comenzamos a ganar partidas.

Para conseguir, de manera on-line; que el programa aprenda a jugar, debemos pulsar sobre el botón Entrenar. En ese momento, el programa comenzará a competir consigo mismo una y otra vez, mejorando con el paso de tiempo –de las generaciones- de manera automática su juego. Irá aprendiendo buenas estrategias de juego.

En cualquier momento del entrenamiento, podemos pulsar en el botón Cancelar, y comprobar cómo va mejorando el juego del programa. Si jugamos contra él, veremos que estrategias con las que antes le ganábamos, ahora ya no son efectivas, o que, si pulsamos sobre el botón Estadísticas, el porcentaje de partidas perdidas va disminuyendo.

Pasadas las generaciones –si se le permite entrenar bastante tiempo-, el programa será igual de efectivo que un jugador humano. Lo que significa que; lo mejor que podrás conseguir contra él serán tablas. El aprendizaje ocurrirá poco a poco, lo que significa que verás una mejora gradual en su calidad de juego. Por poner un ejemplo; es de notar que, tras pasar algunas generaciones de entrenamiento; el programa "comprende" que la mejor estrategia de juego consiste en mover a la casilla central siempre que esté libre.

Hay de tener en cuenta, que sólo notarás una mejora realmente significativa en la calidad de juego a partir de trascurridas algunas generaciones, y que un juego de estrategia no-loss suele llegar aproximadamente en 150 generaciones.

Debajo del siguiente applet con el ejemplo II, explicaré más en profundidad la teoría que sigue el proyecto de aprendizaje automático, y encontrarás un enlace con el código fuente del ejemplo:

No puede ejecutar applets de Java. Instale la JVM, y vuelva a recargar la página, por favor.

Podéis descargar el código fuente del ejemplo II desde este enlace.


Explicación técnica del ejemplo


El proyecto de ejemplo II, tiene las siguientes características técnicas:

Toda la estrategia de juego, corre a cuenta de una red neuronal; con conexión hacia delante y dos capas ocultas (hidden layer).

La capa de entrada contiene nueve nodos; uno por cada posible contenido dentro del array que forma el tablero de juego –con un 1 si la ficha de una casilla es propia, un -1 si la ficha es del adversario, y un 0 si la casilla está vacía-, y un nodo de salida, responsable de devolver el resultado del proceso neuronal: expresando lo bueno o malo que un movimiento concreto es.

Tenemos así una red neuronal compuesta de 9 nodos de entrada xi, 21 nodos en las capas ocultas, y un nodo de salida. Más otros 9 nodos de activación (nodos bias).

Inicialmente, los pesos wij de la red neuronal son marcados aleatoriamente, por lo que la respuesta de la red neuronal ante el problema sobre qué buena o mala es una jugada será también aleatoria.

Hay pues que entrenar al programa para que aprenda a evaluar las jugadas, lo que vamos a conseguir ajustando evolutivamente los pesos de la red neuronal utilizada. Dicho entrenamiento evolutivo se realizará mediante una estrategia evolutiva.

La estrategia evolutiva será representada por un vector de 9 elementos de tipo real. Esos elementos o individuos de selección se van a corresponder con los pesos de los nodos que contiene la red neuronal, de manera que serán esos pesos los que irán evolucionando.

Así pues, la población en evolución, consistirá en n individuos (con n = 15), que tendrán n hijos, con variación exclusiva por mutación -sin recombinación- y cuya función de desempeño (fitness fuction) será calculada mediante competición -selección por torneo-.
Para el proceso de mutación, hay que tener en cuenta que cada individuo; además de un vector de pesos, contiene un vector de variables de ajuste, que también irá evolucionando junto con los pesos.

La mutación es de la forma:



Con alpha igual 0.2f, y donde xi indica el peso en la posición i del vector de pesos, y N(0,1) indica un valor tomado aleatoriamente de una distribución normal de desviación típica igual a 1, y media igual a 0. La otra variable que interviene en el proceso se corresponde con la variable de ajuste del elemento i, que; como se puede ver, muta antes de que lo haga el peso xi.

La evaluación de un individuo se realiza mediante q partidas (con q = 15), jugadas entre el individuo a evaluar, y otro individuo de la población, tomado aleatoriamente sin reemplazamiento. Cada partida ganada le sumará 1 punto, las perdidas le restará 2, y los empates no suman nada. El valor final será su función de desempeño.

Finalmente, el proceso de selección consistirá en tomar los 15 mejores individuos de entre los 30 (15 padres + 15 hijos) individuos de la generación en curso. En caso de empate en la función de desempeño, se favorecerá a los individuos más longevos.

El paso de generaciones tendrá como resultado un ajuste en los pesos de la red neuronal, lo que dará lugar a un entrenamiento de la misma, que será lo que permitirá; a su vez, al programa a jugar bien, sin intervención heurística alguna.

Detalles adicionales


1º) Para que el aprendizaje automático tenga lugar, es necesario; al menos, prever un movimiento del contrario por adelantado -qué hará él si yo muevo aquí-. Esto se consigue mediante el uso de un árbol min-max de profundidad 2 (ply=2 ), lo que es insuficiente para que la máquina comprenda estrategias, pero que sí permite una base para el ajuste de pesos de la red neuronal. Pero siempre evaluar lo bueno o malo de una jugada será objeto de la red neuronal. Es decir; aunque hay un árbol min-max de ply igual a dos, la evaluación de la tabla de tu movimiento y el mejor movimiento del contrario, la desempeña la red neuronal y no ninguna regla a priori.

2º) La red neuronal utilizada va a devolver siempre un valor real en el rango [-1,1]. Un -1 sólo cuando el movimiento a evaluar termina siendo una victoria del adversario, un 1 si la victoria es suya, y un valor entre (-1, 1) indicando lo bueno que es una jugada para el programa (valores cercanos a 1) o para el contrario (valores cercanos a 1).

3º) Hay un check box llamado no-loss, que, cuando se activa, indica que el proceso de entrenamiento, se hará jugando contra el jugador experto simulado mediante heurística. De esa manera, el aprendizaje es más rápido y siempre termina (tras unas 100 generaciones aproximadamente) alcanzando una estrategia no-loss. Cuando el check está desactivado, el entrenamiento se realiza contra sí mismo y podría ser que la estrategia no-loss no se alcance -aunque siempre quedará cerca-.

4º) El campo llamado Info, en el lateral superior derecho del applet, contiene información sobre el estado del entrenamiento. Conforme pasan las generaciones, la pantalla se actualiza, y muestra datos sobre el mejor individuo de la última generación: su función de desempeño, su edad -cuanto tiempo lleva en el pool evolutivo-, y la media de su juego -resultados/edad-. Cuando juegues contra la máquina, te mostrará la misma información, pero sobre jugador contra el que estás jugando -el mejor que se encontró-.

5º) La mejor manera de saber si hemos llegado a una estrategia no-loss, es ir mirando la pantalla de información, y esperar a que aparezcan datos en los que el mejor jugador encontrado tiene f = 0.0 y una edad avanzada (más de 20). Si pulsamos sobre el botón cancelar, y luego sobre el botón Estadísticas, deberá devolver siempre un 100% de empates contra el jugador experto.

Conclusión

Lo que pensé iba a ser un ejemplo fácil de conseguir, ha resultado ser una verdadera pesadilla, que me ha llevado un par de semanas de mi tiempo libre.

Mi cabezonería me ha impedido abandonar, y ahora me alegro, porque aprendí muchísimo sobre redes neuronales, y he podido avanzar en este campo de la IA que me parece fundamental, y que creo hace un muy buen equipo con la computación evolutiva. Es más, me atrevería a decir, que el futuro desarrollo de ambas ramas podría llegar a conseguir una verdadera inteligencia artificial. No sé si viviré para verlo, pero aquí queda dicho :).

Gracias por compartir vuestro tiempo conmigo, espero que el proyecto les haya gustado, y el código fuente les pueda servir de ejemplo.