viernes, febrero 03, 2006

Juego de la Vida

Hace ya varios días que no he tenido tiempo de sentarme a ver qué es lo que ocurre en el mundo real (ver WWW en Acrónimos de 3 letras). Y menos de sentarme a actualizar este blog (que según las evidencias encontradas ya es leído por otras personas además de mí (lo cual implica que ya no es necesario que yo mismo me haga comentarios anónimos)).

Hace algunos días estaba recordando uno de los ejercicios para la materia Estructura de Datos, que cursé hace 10 años. Y recuerdo que uno de los ejercicios era fue programar el Juego de la Vida, el cual es el ejemplo clásico de un autómata celular, que se rige por ciertas leyes matemáticas y simula la vida de una célula dentro de una cuadrícula de celdas.

Fue concebido por Conway en 1970, y las reglas son básicas:

  1. Cualquier célula viva con menos de 2 vecinos muere de soledad.
  2. Cualquier célula viva con más de 3 vecinos muere por sobrepoblación.
  3. Cualquier célula muerta con exactamente 3 vecinos vuelve a la vida.
  4. Cualquier célula viva con 2 o 3 vecinos pasa viva a la siguiente generación.

Los nacimientos y las muertes ocurren simultáneamente (la regla que no tomé en cuenta cuando lo programé hace una década (y por la que los patrones se salen un poco de control, pues cada generación ocurre cuando sólo una célula nace o muere))

Diez años después, ese ejercicio se ve tan fácil, tan sencillo, que se puede programar en cuestión de minutos y no en horas como me tomó cuando era estudiante.

Sin embargo, no es eso de lo que quiero hablar, recordé el juego de la vida porque algún día de la semana pasada mientras programaba en la madrugada, me quedé pensando en cómo sería el mundo en el futuro cuando existan leyes, reglas y herramientas que nos permitan quitar (de esas ya hay muchas hoy) y dar (esas son las que nos faltan mucho) vida a las demás personas.

Estaba pensando en programar una rutina que me permitiera simular el comportamiento social de acuerdo a un conjunto de reglas un poco más complejas que las de Conway, ya que al intentar entender el comportamiento sin una herramienta adicional se vuelve un poco cansado.

Pero aún no he dicho las reglas que me llevaron hacia esta necesidad, estaba pensando en el ámbito político, social, empresarial y, por que no, cultural, en el que muchas veces hay personas que realmente les gustaría ver muerta a una persona (en el ámbito político no hay muchos problemas para cumplir con ese deseo). Pero también hay muchas personas que han muerto y que preferiríamos que estuvieran vivas. Así pues, haciendo un par de cálculos de acuerdo a lo que es, lo que debería ser y lo que será, concluí que para el año 2198 tendremos suficientes avances sociales, científicos y tecnológicos que nos van a permitir matar o evitar que muera una persona con sólo el pensamiento.

Si alguien nos cae realmente mal: ¡ting, y a la tumba!, si realmente queremos que alguien que está siendo blanco de los pensamientos de muerte de alguien más: ¡wup, arriba que aquí no pasó nada!

Lo malo de eso es que esto nos puede llevar a varios dead locks, es decir, cosas que se pueden quedar sin resolver, X político no se muere porque aún cuando su contrincante Y quiere que se muera, el lambiscón de al lado quiere que X viva por lo que lo protege con su pensamiento. Pero en este caso, uno de los lambiscones de Y podría enfocar su pensamiento a X o su lambiscón para que colgaran los tenis. Y así se puede formar una cadena que podría no resolverse nunca (pues no nada más hay que tomar en cuenta a los contrincantes políticos, sino a los familiares y a las enfermedades o accidentes que muchas veces también toman sus decisiones.

Pero, sin entrar en tantos detalles, con una persona que quisiera proteger a sus conocidos y uno de estos conocidos protegiera a el filántropo en cuestión, estaríamos en peligro de descubrir la inmortalidad, y ese no era el objetivo de este ejercicio mental. Además, no sería muy agradable que las personas nunca murieran. Dejaríamos a los mártires y a los suicidas sin los medios para ganarse la vida o la muerte, o algo así.

Entonces para evitar problemas de inmortalidad y de eventos que no se resuelven por restricciones mutuas (dead locks). Fue necesario pensar en las siguientes reglas:

  1. Cada persona tiene sólo un deseo de muerte.
  2. Cada persona tiene sólo un deseo de vida.
  3. Los deseos de vida o muerte se pueden aplicar a cualquier persona conocida por quien tiene el deseo, incluyéndose a sí misma.
  4. Los deseos de vida o muerte sólo son efectivos si la persona es consciente de sus actos (no está dormida, drogada, inconsciente, en coma,muerta, etc.(no son válidos los deseos que se tienen en sueños)), sin embargo, la persona objetivo puede estar en cualquier estado.
  5. La muerte natural puede ser contrarrestada por un deseo de vida, y la persona en cuestión no volverá a morir de la misma causa natural, sin embargo, puede morir de otras causas naturales o artificiales.
  6. Cuando una persona está por morir (sea por muerte natural, accidental, o deseo de muerte), se avisa a todas las personas que conocen al difunto en stand-by, en orden decreciente por grado de afecto entre las dos personas, y que aún tienen su deseo de vida disponible. Si nadie utiliza su deseo de vida, el difunto pierde su estatus de stand-by. Si alguien utiliza su deseo de vida, el difunto deja de serlo, y el grado de afecto entre las 2 personas aumenta.
  7. Un deseo de muerte aplicado a una persona sólo puede revertirse con un deseo de vida, es decir, no se puede salvar a la persona objetivo por otros medios.
  8. Aún cuando un deseo de muerte no sea efectivo, porque alguien más salvó al objetivo, el grado de afecto entre las 2 personas disminuye. El grado de afecto puede ser negativo.
  9. Nada evita que las personas intenten hacer daño o curar a sus semejantes por otros medios (con sus respectivos castigos y/o recompensas sociales por sus actos). Los deseos de vida o muerte son sólo una herramienta que automatiza la tarea para hacerla más eficiente.

El primer ejercicio consiste en simular una red de X números de personas con grados de afecto variante entre sí, pero no todas las personas conocidas entre sí. Dentro de la simulación se deben incluir nacimientos, muertes naturales y accidentales. Situaciones externas que afecten las interacciones de las personas de manera que su grado de afecto se modifique. Simular en distintas personas distintos niveles de tolerancia a variaciones en grado de afecto de manera que no todos los deseos de muerte se lancen al mismo valor de grado de afecto. Para poder analizar los resultados de una corrida de la simulación, se debe llenar una bitácora con todos los nacimientos y muertes de las personas con sus respectivas causas, además se deben registrar todos los deseos de vida y muerte que han sido utilizados, independientemente de que sean efectivos o no.

Una vez que eso esté funcionando, hay que ver los resultados para incluir otras variables que ayuden a que la simulación sea más realista. De manera que si se quitan los deseos de vida y muerte, la simulación se comporte lo más parecido posible a una sociedad. En este punto hay que incluir eventos en los cuales una persona atenta contra otra(s) por medios normales. Planear más allá de este punto es en vano, pues muchas cosas cambiarán para cuando llegue a este punto.

Pensando en todo esto fue cuando recordé el Juego de la Vida de Conway, que es lo más parecido que he programado a lo que ahora necesito. De hecho, esta simulación que propongo al no ser un autómata celular, tiene pocas similitudes con la propuesta de Conway. Supongo que aún no sé como le voy a llamar a esto, ya que el título Juego de la Vida ya me lo ganaron. De todas formas, es probable que esta simulación lleve más tiempo de lo planeado (y eso que aún no planeo cuánto tomará), pero ya iré publicando los resultados que obtenga.

No hay comentarios.: