En el primer módulo de este curso, vimos que podemos crear tres tipos de sistemas creativos: herramientas de soporte creativo, agentes creativos autónomos o colegas creativos artificiales. En este curso nos concentraremos en el segundo tipo, es decir, en la creación de un agente creativo autónomo. Para esto, nos seguiremos basando en el artículo de Dan Ventura titulado "Cómo construir un sistema creativo". Para él, un agente es creativo si éste es capaz de producir intencionalmente artefactos novedosos y valiosos en un cierto dominio. Y, por intencionalidad, se refiere a "el hecho de ser deliberativo o de actuar con un propósito, es decir, que la salida del sistema debe de ser el resultado de que el agente tenga una meta u objetivo y que el producto creado esté correlacionado con tal meta". De esta manera, el objetivo de un agente creativo autónomo es el producir intencionalmente artefactos que sean tanto novedosos como valiosos en un dominio dado. Este autor identifica nueve pasos a seguir para la construcción de agentes creativos. Sin embargo, es importante que tengas en mente que estos pasos no necesariamente tienen que realizarse en el orden presentado y que, en la práctica, suele ser más bien un proceso iterativo de refinamiento de éstos. Una vez dicho lo anterior, comencemos a definir los nueve pasos generales para construir un agente creativo autónomo. Lo primero que tenemos que hacer es elegir el dominio en el cual queremos que sea creativo nuestro agente. Por ejemplo, en música, en arquitectura, en poesía, etcétera. Una vez dado el dominio, necesitamos definir tres representaciones apropiadas para los artefactos a crear. Primero, el fenotipo, al que llamaremos "f", es una representación externa, la cual define la forma en la que veremos los artefactos creados por el agente. Segundo, el genotipo llamado "g" es una representación interna, la cual define la forma en la que el agente representará internamente sus artefactos en creación. Esta representación debe de facilitarnos el razonamiento y su manipulación. Y, tercero, una representación de la base de conocimiento del agente, la cual puede ser la misma del fenotipo, del genotipo o ambas. El tercer paso consiste en decidir cómo crearemos la base de conocimiento de nuestro agente, a la cual le llamaremos "k". Esta servirá como la experiencia del sistema y provee la conexión del agente con el dominio. Lo más común es llenar la base de conocimiento a través del uso de información que se obtiene de Internet. También se puede crear usando expertos que nos ayuden a construir reglas, prototipos, redes semánticas, etcétera. El cuarto paso consiste en definir una medida abstracta a la que llamaremos "A", que le permita al agente asignarle un valor de calidad a los artefactos en el dominio que trabaja. Como queremos generar artefactos novedosos y valiosos, esta medida debe de estar de alguna manera relacionada con estos dos aspectos. Por ejemplo, la medida en el dominio de recetas de cocina podría ayudarle al agente computacional a determinar si su propuesta es sabrosa, si es nutritiva, si es costosa, si tiene sabores sorpresivos o que se complementan, etcétera. Para lograr esto, podemos consultar la literatura del dominio y, después, tenemos dos opciones. La primera consiste en que nosotros se la programemos directamente, como parte de sus procesos conocidos. Y, la segunda, consiste en proporcionarle al agente mecanismos de aprendizaje que le permitan crear su propia medida a partir de la base de conocimiento "k" con la que cuenta y que fue creada en el paso anterior. Es decir, dada la información "k" en donde haya presumiblemente artefactos del dominio, tanto valiosos como no valiosos, el sistema hará uso de alguna función de aprendizaje llamada "lambda a" que nosotros le programamos a priori para inferir alguna medida de valor. Esta opción tiene la ventaja de darle más autonomía al agente, pero los resultados podrían no ser interpretables. Es decir, uno no podría saber cuáles son los criterios que aprendió para asignarle valor a sus artefactos, a diferencia de la primera opción, en la que sí podríamos verbalizar las características que el agente considera para decir si algo es valioso o no lo es. El quinto paso consiste en tomar los datos de la base de conocimiento "k" y, con estos, crear un modelo del conocimiento del dominio que le facilite al agente el entendimiento de este. Es decir, no vamos a trabajar directamente con los datos en "k", sino con un modelo de estos. Y a esto le llamamos conceptualización y la denotaremos con la letra "C". Este modelo se construye a través de una especie de proceso de aprendizaje al que llamaremos "lambda c". De esta manera, la función de conceptualización "lambda c" va del dominio de la base de conocimiento "K" al conjunto de todos los posibles modelos conceptuales. O, dicho de otra manera, la conceptualización "C" es el resultado de un proceso de aprendizaje que toma como entrada la base de conocimiento recabada en el paso tres. En este punto, es importante que notes que puede haber muchísimas conceptualizaciones posibles para una misma base de conocimiento, pero, idealmente, esta debería de incluir algún método de razonamiento y debería de facilitar la creación de genotipos. Por ejemplo, una base de conocimiento en el dominio de la música se puede conceptualizar a través de cadenas ocultas de Márkov, de transiciones probabilísticas entre tonos, duraciones o acordes. Y una base de conocimiento en el dominio del arte visual puede conceptualizarse a través de una librería de imágenes agrupadas semánticamente o una red neuronal generativa adversaria. Una base de conocimiento en el dominio de las recetas de cocina puede conceptualizarse a través de una lista de ingredientes y de sus estadísticas o de un modelo de propiedades químicas de los ingredientes. Y una base de conocimiento en el dominio de la poesía puede conceptualizarse a través de plantillas o reglas. En el paso seis, la conceptualización realizada en el paso anterior debe de permitirle al agente generar genotipos de los artefactos, vía una función generativa a la que llamaremos "gamma". Esta función generativa, además de recibir la conceptualización de la base de conocimiento denotada por "C", puede recibir información adicional denotada por "S" que pudiera ser útil para la generación de los artefactos, como fuentes de inspiración o funciones de aleatoriedad. A veces, el paso generativo es una extensión natural del proceso de conceptualización como, por ejemplo, cuando usamos redes neuronales generativas. Pero también, el proceso de generación puede ser muy diferente del proceso de conceptualización, por ejemplo, cuando se realiza a través de encadenamientos de precondiciones y postcondiciones, de programas lógicos, algoritmos genéticos y llenado de plantillas. Ya que el agente tiene los mecanismos para poder generar artefactos en el dominio de elección, necesitamos proveerlo de alguna manera para poder evaluarlos. Y este es, justamente, el séptimo paso. La idea es que aquellos que considere valiosos los convierta en fenotipos, los cuales serán evaluados nuevamente en un paso posterior y estos pudieran ser liberados al dominio como creaciones exitosas. Por el contrario, aquellos que considere que no son muy valiosos, los puede descartar o modificar para incrementar su calidad. Esta evaluación suele estar en términos del valor del artefacto determinado por la medida de la estética que se definió en el paso cuatro y de la novedad del artefacto, a través del uso de alguna medida de similitud entre los artefactos de "k" y aquellos que ha creado previamente. Por lo tanto, lo que se requiere es definir una función de evaluación a la que llamaremos "E g", que le asigne un número real entre cero y uno al artefacto en creación llamado "G", tomando en cuenta el valor y la novedad de este. Lo más sencillo que podemos hacer para construir "E g" es hacer una combinación lineal de la novedad y el valor de "G", de tal forma que le asignemos cierto peso "alfa" a la novedad denotada por "u g", y cierto peso uno menos "alfa" al valor de la calidad denotada por "v g", en donde alpha es un valor entre cero y uno. Esto quiere decir que si queremos que para el agente tenga la misma importancia tanto la novedad como la calidad del artefacto, entonces, debemos de asignarle a "alfa" un valor de 0.5. Un aspecto importante para notar aquí es que la función de evaluación de genotipos pueda realizarse de manera parcial o total, tanto durante el proceso de generación como después del proceso de generación, en el sentido de que podemos restringir el proceso generativo de tal forma que sólo pueda crear artefactos que cumplan algunos o todos los aspectos considerados para decir que son novedosos y valiosos. Pero, cuidado, si implementamos un proceso generativo con restricciones, vamos a provocar que algunas partes del espacio conceptual no se puedan explorar, por lo cual, el usar restricciones en la generación debe de usarse con precaución. Ya que nuestro agente es capaz de generar y evaluar artefactos, necesitamos proporcionarle de un método para traducir los artefactos representados por un genotipo a su correspondiente fenotipo. Por ejemplo, para traducir un esquema de una historia a su forma literaria, una cadena de Márkov a una partitura, o una secuencia de filtros en una imagen. Finalmente, el noveno y último paso consiste en proveerle al agente de un evaluador del fenotipo. Esta evaluación debe de ser cualitativamente diferente a la evaluación del fenotipo, ya que, primero, es una representación diferente y, segundo, no se gana nada si se "reusan" los mismos criterios de evaluación del genotipo. Por ejemplo, no es lo mismo evaluar una partitura, que sería la representación del genotipo, al revisar que esta cumpla con los principios teóricos de la música, que evaluar cómo suena un archivo de audio de la melodía generada. Algo importante es que esta función también debería de estar en términos de la novedad y el valor. Con esto, finalizamos los nueve pasos para crear un sistema creativo.