La Programación Heurística ha venido a significar el uso del conocimiento específico del dominio para cubrir esta explosión de posibilidades guiando la búsqueda por las direcciones más prometedoras. Se puede definir como "aquel tipo de programación computacional que aplica para la resolución de problemas reglas de buena lógica (reglas del pulgar). denominadas heurísticas, las cuales proporcionan entre varios cursos de acción uno que presenta visos de ser el más prometedor, pero no garantiza necesariamente el curso de acción más efectivo.
El Paradigma Heurístico define pues, un modelo de resolución de problemas en el que se incorpora alguna componente heurística sobre la base de:
- Una representación más apropiada de la estructura del problema para su resolución con técnicas heurísticas
- La utilización de métodos de resolución de problemas aplicando funciones de evaluación con procedimientos específicos de búsqueda heurística para la consecución de las metas.
Por otra parte, la Programación Heurística se presenta y utiliza desde diferentes puntos de vista:
- Como técnica de búsqueda para la obtención de metas en problemas no algorítmicos, o con algoritmos que generan explosión combinatoria (ej. damas. ajedrez, etc.).
Como un método aproximado de resolución de problemas utilizando funciones de evaluación de tipo heurístico (ej. algoritmos A*, AO*)
Como método de poda para estrategias de programas que juegan, aunque estos métodos no son realmente heurísticos (ej. poda alfa-beta).
Se aconseja utilizar un modelo heurístico cuando:
- Los datos, limitados e inexactos, utilizados para estimar los parámetros modelo pueden contener errores inherentes muy superiores a los proporcionados con la solución de una buena heurística.
Se utiliza un modelo simplificado, que por sí es una representación imprecisa de un problema real, por lo que la solución "óptima" es puramente académica.
No se dispone de un método exacto que sea fiable para ser aplicado en un modelo del problema; o si existe, es intratable computacionalmente.
Se desea mejorar la eficacia de un algoritmo optimizador aplicado al modem por ejemplo, proporcionando buenas soluciones de inicio, guiando la búsqueda y reduciendo el número de soluciones candidatas
Se tiene la necesidad de resolver el mismo problema frecuentemente, o una base de tiempo real, y el tratamiento heurístico significa un ahorro computacional
Las especificaciones más relevantes del tratamiento heurístico deben tener en cuenta las características de la heurística, de la información y de las especificaciones del problema de acuerdo con las siguientes condiciones,
o Una buena heurística debe ser simple, con requerimientos razonables de memoria, con velocidad de búsqueda que no produzca incrementos poligonales, ni exponenciales, precisa, robusta, que proporcione soluciones múltiples, y que disponga de un buen criterio de parada que incorpore el conocimiento obtenido durante la búsqueda.
La información a tratar es fundamentalmente simbólica, inexacta o limitada, "incremental" y basada en el conocimiento.
o
o Las especificaciones del problema pueden ser: de optimización o de satisfacción; que produzcan una o múltiples soluciones; con tratamiento en tiempo real o no; con decisión interactiva o no, etc.
No obstante, si se tuviera que definir un lenguaje heurístico las características más destacables que debería incorporar son:
Ser un lenguaje conversacional, que permitiera una interacción directa con el programador para la definición e implementación del problema.
Tratamiento de estructuras "incrementales, que implementen programas que vayan ampliando el cuerpo de conocimiento que, en base a la experiencia, configure y refine el modelo heurístico.
Tratamiento fundamentalmente simbólico, dado que la mayor parte de los problemas que precisan tratamiento heurístico tienen estructura simbólica.
Unidades funcionales autónomas que posibiliten modelar una heurística y su mecanismo de ejecución, definiendo módulos independientes.
Estructuras de datos que permitan describir estados de problemas y relaciones entre estados.
Estructuras procedimentales de control y de proceso (o de definición) que permitan la ejecución coherente del modelo heurístico, y posibiliten la adquisición y utilización del conocimiento adquirido en el proceso de resolución del problema

|