Programación inductiva

De Wikipedia, la enciclopedia libre

La programación inductiva (IP por sus siglas en inglés) es una área específica dentro de la programación automática, cubriendo investigaciones de inteligencia artificial y programación, que encara el aprendizaje de programas típicamente declarativos (lógicos o funcionales) y frecuentemente recursivos a partir de especificaciones incompletas tales como ejemplos de pares entrada/salida y restricciones..

Dependiendo del lenguaje de programación utilizado, hay varios tipos de programación inductiva. La programación inductiva funcional, que usa lenguajes funcionales tales como Lisp o Haskell y especialmente la mayoría de la programación de lógica inductiva, que usan lenguajes como Prolog y otras representaciones lógicas como lógica descriptiva han sido los paradigmas más prominentes pero otros paradigmas también han sido usados como la programación mediante restricciones o la programación probabilística

Definición[editar]

La programación inductiva incorpora todos los enfoques relacionados con el aprendizaje de programas o algoritmos a partir de especificaciones formales incompletas. Las posibles entradas de un sistema de IP son conjuntos de entrenamiento y sus salidas correspondientes o una función de evaluación de salida que describe el comportamiento deseado del programa pretendido, trazas o secuencias de acciones que describan el proceso de cálculo de salidas específicas, restricciones para que el programa sea inducido para ser eficiente en tiempo o complejidad, varios tipos de conocimientos previos, como tipos de datos estándar, funciones predefinidas que se utilizarán, esquemas o plantillas de programas describiendo el flujo de datos del programa previsto o heurísticas para guiar la búsqueda de una solución.

La salida de un sistema de IP es un programa en algún lenguaje de programación arbitrario que contiene estructuras condicionales y bucles o estructuras de control recursivas o cualquier otro tipo de lenguaje de representación Turing completo.

En muchas aplicaciones el programa emitido debe ser correcto respecto a ejemplos y una especificación parcial y esto lleva a la consideración de la programación inductiva como un área particular dentro de la programación automática o la síntesis de programas,[1][2]​ usualmente opuesto a la síntesis "deductiva" de programas[3][4][5]​ donde la especificación es completa.

En otros casos, la programación inductiva es vista más como un área general donde cualquier lenguaje de representación o de programación declarativa puede ser usar y puede tener incluso algún grado de error en los ejemplos, como en aprendizaje automático en general y las áreas más específicas de structure mining o de la inteligencia artificial simbólica. Una característica distintiva es el número de ejemplos o especificaciones parciales necesario. Típicamente, las técnicas de programación inductiva pueden aprender de unos pocos ejemplos.

La diversidad de programación inductiva usualmente surge de las aplicaciones y los lenguajes usados: además de la programación lógica y la programación funcional, otros paradigmas y lenguajes de representación han sido usados o sugeridos en la programación inductiva, tales como la programación lógica funcional, la programación con restricciones, la programación probabilística, la programación lógica abductiva, la lógica modal, los lenguajes de acción, lenguajes de agentes y muchos tipos de lenguajes imperativos.

Historia[editar]

La investigación en la síntesis inductiva de programas funcionales recursivos comenzaron a principios de 1970 y fue puesto en firmes cimientos teóricos con el sistema seminal THESIS de Summers[6]​ y el trabajo de Biermann.[7]​ Estos enfoques fueron divididos en dos fases: primero, los ejemplos de entrada-salida son transformados en programas no recursivos (trazas) usando un pequeño conjunto de operadores básicos; segundo, se buscan las regularidades en las trazas y se usan en un programa recursivo. Los resultados principales hasta mediados de 1980 fueron encuestados por Smith y Biermann.[8]​ Debido al progreso limitado con respecto al rango de programas que podrían ser sintetizados, las actividades de investigación decrecieron significantemente en la siguiente década.

El advenimiento de la programación lógica trajo una nueva dirección a principios de los 1980, especialmente debido al sistema MIS de Shapiro[9]​ finalmente engendrando el campo nuevo de la programación lógica inductiva (ILP por sus siglas en inglés).[10]​ Los primeros trabajos de Plotkin[11][12]​ y su "relativa generalización menos general (rigg)", tuvieron un enorme impacto en la programación lógica inductiva. La mayor parte del trabajo en ILP maneja una amplia clase de problemas, ya que el foco no está solo en los programas lógicos recursivos sino también en el aprendizaje automático de hipótesis simbólicas desde representaciones lógicas. Sin embargo, hubieros algunos resultados prometedores en el aprendizaje de programas Prolog recursivos tales como quicksort desde ejemplos junto a un conocimiento preexistente adecuado, por ejemplo con GOLEM.[13]

Referencias[editar]

  1. Mahadevan, Sridhar; Connell, Jonathan (1992-06). «Automatic programming of behavior-based robots using reinforcement learning». Artificial Intelligence 55 (2-3): 311-365. ISSN 0004-3702. doi:10.1016/0004-3702(92)90058-6. Consultado el 10 de julio de 2020. 
  2. Rich, Charles; Waters, Richard C. (1 de enero de 1993). Yovits, Marshall C., ed. Advances in Computers (en inglés) 37. Elsevier. pp. 1-57. doi:10.1016/s0065-2458(08)60402-7. Consultado el 10 de julio de 2020. 
  3. McCarthy, Patrick A.; Bareham, Tony; Vice, Sue (1991-09). «Malcolm Lowry». South Atlantic Review 56 (3): 137. ISSN 0277-335X. doi:10.2307/3200047. Consultado el 10 de julio de 2020. 
  4. Manna, Z.; Waldinger, R. (1992-08). «Fundamentals of deductive program synthesis». IEEE Transactions on Software Engineering 18 (8): 674-704. ISSN 1939-3520. doi:10.1109/32.153379. Consultado el 10 de julio de 2020. 
  5. Flener, Pierre (2002). Computational Logic: Logic Programming and Beyond. Springer Berlin Heidelberg. pp. 310-346. ISBN 978-3-540-43959-2. Consultado el 10 de julio de 2020. 
  6. D, SummersPhillip (1 de enero de 1977). «A Methodology for LISP Program Construction from Examples». Journal of the ACM (JACM) (en inglés). doi:10.1145/321992.322002. Consultado el 4 de agosto de 2020. 
  7. Biermann, Alan W. (1978-08). «The Inference of Regular LISP Programs from Examples». IEEE Transactions on Systems, Man, and Cybernetics 8 (8): 585-600. ISSN 2168-2909. doi:10.1109/TSMC.1978.4310035. Consultado el 4 de agosto de 2020. 
  8. Biermann, Alan W. (1978). «The Inference of Regular LISP Programs from Examples». IEEE Transactions on Systems, Man, and Cybernetics 8 (8): 585-600. ISSN 0018-9472. doi:10.1109/tsmc.1978.4310035. Consultado el 4 de agosto de 2020. 
  9. Shapiro, E.Y. (1983). Algorithmic program debugging. The MIT Press
  10. Muggleton, Stephen (1 de febrero de 1991). «Inductive logic programming». New Generation Computing (en inglés) 8 (4): 295-318. ISSN 1882-7055. doi:10.1007/BF03037089. Consultado el 4 de agosto de 2020. 
  11. Plotkin, Gordon D. (1970). «A Note on Inductive Generalization». Edinburgh University Press. Consultado el 4 de agosto de 2020. 
  12. Plotkin, Gord D. (1971). Meltzer, B.; Michie, D. (eds.). "A Further Note on Inductive Generalization". Machine Intelligence. 6: 101-124
  13. Muggleton, S.H. «Efficient Induction of Logic Programs». Proceedings of the Workshop on Algorithmic Learning Theory. Consultado el 4 de agosto de 2020.