27 noviembre, 2008

¿Programación genética en el cliente?

Hace unos años estuve leyendo sobre programación genética. Al igual que Gaudí y sus estructuras que imitan la naturaleza, se trata de aprovechar los problemas que la naturaleza ya ha resuelto y aplicar su metodología a las ciencias humanas para intentar alcanzar un óptimo. Aplicado a un algoritmo, se trataría de identificar una serie de variables de entrada y una serie de indicadores que puedan utilizarse para calcular la idoneidad de unas variables de entrada en concreto. Es decir, un algoritmo genético se basa en hacer pruebas con un primer conjunto de variables de entrada aleatorias y evaluar numéricamente la salida, de forma que aquellos conjuntos de entrada que tengan mejores resultados tendrán más valores de entrada respetados para la siguiente iteración de pruebas. Con una cantidad suficiente de iteraciones, los valores de entrada idóneos empezarán a perfilarse hasta que se alcancen óptimos.

Un último ajuste de estos algoritmos es evitar los óptimos relativos (es decir, que por el conjunto de valores de entrada inicial no se descubra que con cierta combinación hay un óptimo mejor que el que se conseguiría si sólo se utilizase el mecanismo de la adaptación) así que, siguiendo a la naturaleza de nuevo, incorporaríamos el mecanismo de la mutación que espontáneamente introduciría un conjunto de valores de entrada con fuertes variaciones respecto al resto.

John Resig mencionó hace poco la existencia de una librería Javascript llamada Genetify con la finalidad de utilizar la programación genética en el cliente para, mediante CSS, mostrar disposiciones distintas de los elementos según la visita. Aunque menciona como finalidad la de averiguar la posición idónea para ubicar publicidad en una página, existen multitud de usos en los que una tecnología como ésta puede resultar útil: resultados de un buscador, recomendadores, etc.

Un ejemplo de página que utilice Genetify sería el siguiente:

<html>

<head>

<script src="genetify.js"></script>
<style>
  .v { display: none; }
  .genetify_disabled { display: none !important; }
  .genetify_enabled { display: block !important; }
</style> 

</head>
<body>


<div class="sentence">One way of saying something</div>           
<div class="sentence v anotherway">Another way of saying something</div>

<input type="button" onclick="continuar()" value="continuar..." />

<script>
// cuando el usuario haya realizado las acciones que
// comporten suficiente información como para evaluar "esta variación"
// se utiliza 
function continuar() {
  genetify.record.goal('signup', 100); // donde 100 es la valoración de esta variación
  location.href="pantallasiguiente.html";
}
</script>

<script>
// la siguiente línea genera la variación "genética" de la página
// basada en datos de idoneidad anteriores y en mutaciones aleatorias
genetify.vary();
</script>

</body>
</html>

Publicar un comentario en la entrada

Últimos links en indiza.com