¿Existe algún algoritmo que pueda hacer que el comportamiento de la APN sea como tener memoria?

Hay tres aspectos en esta pregunta:

  1. ¿Puede un NPC tener memoria?
  2. ¿se puede reducir esa memoria a un algoritmo uniforme?
  3. ¿Cómo se debe usar la memoria?

La respuesta a la primera es bastante obvia: almacene datos para cada interacción que tenga el NPC y luego haga uso de eso durante las futuras interacciones del NPC. Obviamente, hay muchos detalles aquí en los que querrá pensar, como si hay una diferencia entre la memoria a corto y largo plazo, en qué medida desea que la memoria se vuelva borrosa con el tiempo, cuánto conocimiento debería ser realmente incorporado en cualquier memoria particular, y lo que cuenta como un identificador para activar una memoria.

Una tabla hash o una matriz asociativa es probablemente la forma más fácil de administrar esto si está buscando un mecanismo de propósito general, y si anticipa grandes memorias con muchas entradas individuales, la tabla hash también será una solución bastante eficiente.

Una tabla hash ocultará los detalles de cualquier algoritmo que se use para buscar en la memoria en función de un identificador primario, pero si desea realizar búsquedas más difusas, tiene un par de opciones.

  1. usar una base de datos con múltiples índices;
  2. almacenar la memoria como una codificación estadística, como una red neuronal.

Una base de datos en memoria como SQLite puede ser una herramienta muy poderosa y la latencia de las consultas tiende a ser baja. También es fácil duplicar a un archivo de disco si la persistencia es importante. El principal inconveniente sería la huella de recursos que podría requerir que todas las memorias se almacenen en una sola base de datos, lo que complicaría más el esquema individual, aunque no creo que eso sea un problema con SQLite.

Una codificación estadística como una red neuronal proporcionaría una interfaz muy uniforme para realizar consultas y cada NPC podría tener su propia estructura de datos ANN, pero las ANN son bestias difíciles (¿Cuáles son los pros y los contras de las redes neuronales desde una perspectiva práctica?) se desperdiciará un gran esfuerzo por poco beneficio práctico.

Cualquiera sea la forma que tome la memoria, debe permitir tanto la consulta activa como la activación pasiva. Este último sugiere un sistema sensorial de algún tipo impulsado por eventos que tiene implicaciones más allá del alcance de esta pregunta 🙂

Haga que la estructura de datos del NPC registre pares o para todo lo que le sucede. Venza los elementos de registro eventualmente para que no termine con datos infinitos. Es posible que desee que algunas acciones permanezcan en el registro más tiempo que otras, por ejemplo, a través de una cola de prioridad mediante la transferencia de elementos de registro importantes a una tienda permanente.

Luego puedes construir una IA que busque en el registro del NPC entradas relevantes cuando se acerque un personaje jugador. Por ejemplo, si hay muchos verbos en el registro de ese jugador, el NPC puede decir: “¡AH! Mi cliente favorito”. Si hay verbos en el registro, el NPC puede cerrar la tienda y salir corriendo.

creo que deberías hacer una pila asociada con una acción

Cuando NPC1 es asesinado por NPC2, la pila “Asesinado por” debe ingresar el nombre de NPC2 (porque NPC2 mató a NPC1)

puedes hacer lo mismo con el problema de venta.

Si NPC A vende algo a NPC B,
NPC A NPC B

Pila comprada Pila vendida
NPC B NPC A

mantenga un límite en la pila como desee, los humanos normales deberían olvidar a quién vendieron un material si fue hace mucho tiempo

la próxima vez que NPC A inicie la acción de venta con NPC B , debes iniciar una verificación en las pilas respectivas para encontrar la entrada de NPC A desde el respeto de NPC B.

cuando NPC A venda un artículo x a NPC B , su programa debe registrar en la pila de NPC B para encontrar el nombre de NPC A y el artículo x