¿Cuál es la diferencia entre Prolog y Python con respecto a la codificación de problemas de inteligencia artificial?

Prolog permite al desarrollador realizar búsquedas complejas en una base de datos de hechos y realizar inferencias sobre esos hechos. Lo hace a través de la coincidencia de patrones y el retroceso implícito. Si su programa implica búsqueda o manipulación simbólica, Prolog es una excelente opción. Las operaciones matemáticas, sin embargo, son débiles.

Python es un lenguaje de secuencias de comandos utilizado principalmente como front-end para varias bibliotecas de inteligencia artificial escritas en C. También puede realizar procesamiento numérico por sí solo y puede ingerir fuentes de datos sin procesar para el preprocesamiento en el nivel de Python antes de pasar la información a la inteligencia artificial. bibliotecas

La IA tradicional implica una búsqueda determinista, y ahí es donde brilla Prolog. Dependiendo de la “pureza” de su enfoque, puede hacer cosas como actualizar la base de datos global con nuevos hechos ( asserta/1 ) e implementar fácilmente cosas tales como ramificar y vincular. Las extensiones le permiten refinar iterativamente las variables hasta que converjan en una solución y que esos cambios se propaguen a través de su modelo.

La IA más moderna es de naturaleza probabilística: hay un algoritmo de aprendizaje que determina los parámetros para un modelo dado, y un algoritmo de tiempo de ejecución que toma el modelo y los parámetros para determinar un resultado. Como esto generalmente implica cálculos pesados ​​de coma flotante y poco o nada de retroceso, Python (o R, o Perl, o C …) es el entorno preferido para la experimentación.

Prolog es uno de los dos lenguajes clásicos para la programación simbólica de inteligencia artificial (el otro lenguaje clásico es Lisp). Prolog sobresale en la implementación de sistemas simbólicos basados ​​en reglas en los que el conocimiento declarativo está codificado en lógica de primer orden. El lenguaje está optimizado para expresividad y eficiencia para este tipo de aplicaciones, a veces a expensas de la pureza lógica. Por ejemplo, de forma predeterminada, Prolog no utiliza la “verificación de ocurrencia” en la unificación. Desde el punto de vista matemático / lógico, esta versión de la unificación es incorrecta. Sin embargo, la verificación de ocurrencia es costosa y, en la mayoría de los casos, la falta de verificación de ocurrencia no es un problema. Esta es una decisión de diseño muy pragmática, como lo es el uso de Prolog de búsqueda en profundidad y el uso de corte (!) Para controlar el retroceso. Estoy seguro de que estas decisiones fueron absolutamente necesarias cuando se ejecutaba en el hardware de la década de 1970, y hoy son muy útiles cuando se trabaja en problemas grandes y cuando se trata de espacios de búsqueda enormes (¡a menudo infinitos!) .Prolog admite muchos “extra lógicos” o características “no lógicas”, incluyendo cortar, afirmar y retraer, proyección de variables para uso aritmético es, y así sucesivamente. Muchas de estas características hacen que sea más fácil expresar un flujo de control complejo y manipular la base de datos global de hechos de Prolog. Una característica muy interesante de Prolog es que el código de Prolog se almacena en la base de datos global de hechos y se puede consultar en tiempo de ejecución. Esto hace que sea trivial escribir metainterpretadores que modifiquen el comportamiento del código Prolog bajo interpretación. Por ejemplo, es posible codificar la búsqueda de amplitud en Prolog utilizando un metainterpretador que cambia el orden de búsqueda. Esta es una técnica extremadamente poderosa que no es muy conocida fuera del mundo de Prolog. ‘The Art of Prolog’ describe esta técnica en detalle. Se han realizado grandes esfuerzos para mejorar las implementaciones de Prolog, la mayoría de las cuales se basan en Warren Abstract Machine (WAM). El WAM utiliza un modelo de efectos secundarios en el que los valores se asignan de forma destructiva a las variables lógicas, y estos efectos secundarios se deshacen al retroceder. Se pueden agregar muchas características a Prolog extendiendo las instrucciones de WAM. Una desventaja de este enfoque es que los documentos de implementación de Prolog pueden ser difíciles de leer sin una comprensión sólida del WAM. Por otro lado, el implementador de Prolog tiene un modelo común para discutir problemas de implementación. Ha habido una gran cantidad de investigación en paralelo Prolog, que culminó en Andorra Prolog en la década de 1990. Al menos algunas de estas ideas viven en Ciao Prolog. (Ciao Prolog está lleno de ideas interesantes, muchas de las cuales van mucho más allá del estándar Prolog.) Prolog tiene una hermosa sintaxis de estilo de “coincidencia de patrones” basada en unificación que da como resultado programas muy concisos. Los prologers aman su sintaxis, al igual que los Lispers aman sus expresiones s. Prolog también tiene una gran biblioteca de predicados estándar. Debido a toda la ingeniería que se ha dedicado a hacer que el WAM sea rápido, existen implementaciones de Prolog muy capaces y maduras. Como resultado, muchos grandes sistemas basados ​​en el conocimiento se han escrito completamente en Prolog.

Pitón. Es rápido escribir código, es fácil de depurar y leer, tiene muchas bibliotecas útiles, incluidas inteligencia artificial + estadísticas + bibliotecas de aprendizaje automático, y también se ejecuta bastante rápido. Python ya es prácticamente un seudocódigo, tiene un montón de bibliotecas de IA de fácil acceso y se usa ampliamente para el trabajo de IA en la academia, que solo fomenta su uso en esa área. Buenos marcos. Python tiene scikit-learn: aprendizaje automático en Python, que satisface casi todas las necesidades en este campo. También hay D3.js: documentos basados ​​en datos en JS, que es una de las herramientas más potentes y fáciles de usar para la visualización. Creación de prototipos rápida. La inteligencia artificial es un 80% de investigación, por lo que si necesita un código repetitivo de 500 KB en Java para probar una nueva hipótesis, nunca terminará el proyecto. En Python, casi todas las ideas se pueden validar rápidamente a través de 20-30 líneas de código (lo mismo para JS con libs).