Вы находитесь на странице: 1из 14

Heurística es la capacidad de un sistema para realizar de forma inmediata

innovaciones positivas para sus fines. La capacidad heurística es un rasgo


característico de los humanos, desde cuyo punto de vista puede describirse como
el arte y la ciencia del descubrimiento y de la invención o de resolver problemas
mediante la creatividad y el pensamiento lateral o pensamiento divergente.

La palabra heurística procede del término griego İ ȡȓıțİȚȞ,1 que significa «hallar,
inventar» (etimología que comparte con eureka2 ). La palabra heurística aparece
en más de una categoría gramatical. Cuando se usa como sustantivo, identifica el
arte o la ciencia del descubrimiento, una disciplina susceptible de ser investigada
formalmente. Cuando aparece como adjetivo, se refiere a cosas más concretas,
como estrategias heurísticas, reglas heurísticas o silogismos y conclusiones
heurísticas. Claro está que estos dos usos están íntimamente relacionados ya que
la heurística usualmente propone estrategias heurísticas que guían el
descubrimiento.

La popularización del concepto se debe al matemático George Pólya, con su libro


Cómo resolverlo (Howtosolveit). Habiendo estudiado tantas pruebas matemáticas
desde su juventud, quería saber cómo los matemáticos llegan a ellas. El libro
contiene la clase de recetas heurísticas que trataba de enseñar a sus alumnos de
matemáticas. Cuatro ejemplos extraídos de él ilustran el concepto mejor que
ninguna definición:

R Si no consigues entender un problema, dibuja un esquema.


R Si no encuentras la solución, haz como si ya la tuvieras y mira qué puedes
deducir de ella (razonando a la inversa).
R Si el problema es abstracto, prueba a examinar un ejemplo concreto.
R Intenta abordar primero un problema más general (es la ³paradoja del
inventor´: el propósito más ambicioso es el que tiene más posibilidades de
éxito).
Si consultas un diccionario mas o menos voluminoso, encontraras que el término
heurístico:

R Es el arte de inventar
R Es la parte de la historia que se ocupa de le búsqueda e investigación de
fuentes, especialmente documentos.
R Etc.

Bueno como te expongo en los siguientes renglones, verificarás que algo de estos
criterios se aplican en la conceptualización global del paradigma heurístico.

Aunque, para nosotros los sistémicos el concepto inicial de la palabra heurística,


conviene que lo interpretes como una especie de algorítmo inteligente de
búsqueda.

El paradigma heurístico nace como necesidad de encontrar programas de


capaces de resolver los típicos problemas de búsqueda de la mejor solución
cuando las alternativas son numerosas, tales como:

R Cuál es el mejor medio para transportar, desde diversos orígenes hacia


diferentes destinos..??
R Determinar los mejores postulantes para asignarles determinadas tareas
entre varias posibles.
R Detectar dentro de las múltiples posibilidades, todos los posibles casos de
cierta característica.

Para resolver este tipo de planteos se recurre a la Programación Heurística


asociada a la INTELIGENCIA ARTIFICIAL, que es la rama de la ciencia que,
simulando la operativa de su razonamiento intenta emular en el ordenador los
procesos mentales inteligentes del hombre.
Con tal fin, es necesario aplicar HUEURISTICAS, que son elementos operativos
que resultan de agregarles conocimiento a los métodos de búsqueda para
hacerlos más eficientes.

EJEMPLOS:

R Utilizando solo dos cubos sin marcas, uno de 6 litros y otro para 8 litros de
capacidad; llenar un cubo con cuatro litros de agua.
R Determinar la mejor asignación de 50 puestos de trabajo, con cada uno de
los 30 operarios de una empresa.

A priori podemos ver que no existe ningún procedimiento o algoritmo matemático


que capaz de resuelver estos problemas, por ello será necesario probar diversas
alternativas de acciones hasta hallar la solución óptima, dentro de todas las
combinaciones posibles y cuya evaluación puede requerir largos lapsos de tiempo.

Para explorar tales combinaciones, la Inteligencia Artificial desarrolló técnicas


como la búsqueda en profundidad, en amplitud, etc. de manera que algunos
problemas pueden tratarse con métodos de búsqueda convencionales.

Para restringir restringir la búsqueda a solo un subconjunto de combinaciones


posibles, conviene podar los caminos superfluos, aplicando heurísticas del tipo
atajos dependientes del problema a tratar que la búsqueda insuma menor tiempo.

El éxito de una heurística dependerá de su calidad, pues en tarea de minimizar el


tiempo de respuesta, puede ocurrir que determinadas heurísticas aplicadas no
sean eficientes, que no lleven la solución del problema, por haber desechado
caminos potencialmente válidos y por evaluar alternativas inútiles.

Por todo lo anterior, podemos deducir que en este paradigma, promueve aquel
tipo de programación que aplica para la resolución de problemas reglas de buena
lógica o heurísticas, proporcionando entre varios cursos de acción uno que
presenta características de ser el más eficiente, pero que aún así, no garantiza
necesariamente la solución cierta.
La Programación Heurística implica la aplicación del conocimiento específico
integral de la naturaleza del problema a resolver, que comprende además de su
operatoria, la manera cómo se genera y que efectos produce. Solo así podrá
minimizarse el tiempo de búsqueda de las alternativas más eficaces.

Ahora bien, si una búsqueda heurística exhaustiva maximiza la posibilidad de


alcanzar la solución óptima del problema, es necesario prever que el insumo de
tiempo de esta tarea, puede ser demasiado extenso, con guarismos en años que
superan una vida y aún así queda la posibilidad de no arribar a una solución final.

Las creaciones heurísticas por ser reglas de sentido común, pueden codificarse en
cualquier lenguaje de programación, por ello el paradigma heurístico al contrario
que otros, no deviene en un lenguaje de programación específico. Aunque sus
conceptos están soportados en entornos de Inteligencia Artificial como KC, KEE o
ART y encuentran su mayor campo de aplicación dentro de esta disciplina.

En la siguiente nómina que es incompleta, la idea es solo proporcionar formatos


de problemas donde la programación heurística puede dar mejores resultados que
la programación clásica.

R Cuando exista un problema sin solución algorítmica, o cuando la cantidad


de alternativas de solución sea muy importante.-
R Cuando exista más de una solución válida para un problema dado, donde la
calidad de estas soluciones sea medida en términos de tiempo de
respuesta del sistema.
R Cuando exista la alternativa de minimizar las opciones tratadas como
algoritmo clásico, dotándolo de un subconjunto potencialmente destacado
entre todas las alternativas posibles.

Además de la Inteligencia Artificial la INGENIERIA DEL CONOCIMIENTO,


también se apoya puntual y genéricamente del paradigma heurístico, porque
utiliza sus conceptos de forma instrumental cuando resuelve los problemas de
naturaleza completa no algorítmica.
En rigor, la programación heurística más que un modo de programación, es un
método de guía para búscar soluciones a problemas computacionalmente
complejos y aunque su ingente cantidad de alternativas factibles no aseguran el
encontrar una solución óptima, sino solo una adecuada a determinadas
circunstancias.

PROGRAMACION HEURÍSTICA

La Programación Heurística es el tipo de programación computarizada que


resuelve problemas, aplicando reglas de buena lógica, denominadas heurísticas,
que proporcionan entre varias alternativas de acción, la más optimista a pesar de
no garantizar necesariamente la más efectiva.

La Programación Heurística constituye una forma de modelizar la representación


de la estructura, estrategias de búsqueda y métodos de resolución de problemas.

La Programación Heurística es aplicada frecuentemente en el campo de la


Inteligencia Artificial, especialmente en la Ingeniería del Conocimiento, dado que el
hombre opera generalmente aplicando heurísticas, que constituyen conclusiones
del razonamiento humano sobre un tema específico, apoyado en la experiencia,
utilizando reglas de buena lógica.

La programación heurística permite procesar..

... por computadora los siguientes tipos de problemas:

R a) ¿Cuál es el mejor camino?


R b) Listar todos los casos posibles.
R c) ¿Existe una asignación de elementos que satisfaga ?.

El común denominador de estos problemas es la necesidad de buscar


exhaustivamente entre las posibles, un conjunto finito de alternativas, cuya
cantidad de elementos esté controlada, de manera de evitar un crecimiento
exponencial del espacio de búsqueda, que sería imposible de procesar.

El algoritmo heurístico

Usa procedimientos de búsqueda de soluciones casi óptimas a razonables costos


operativos, sin garantizar la optimización de las soluciones generadas ni
determinar la distancia a la solución óptima. Así, el Paradigma Heurístico definirá
modelos de resolución de problemas que incorporan alguna componente basada
en:

R a.- Apropiada representación de la estructura para resolver el problema con


técnicas heurísticas.
R b.- Uso de métodos de resolución de problemas aplicando funciones de
evaluación con procedimientos específicos de búsqueda heurística para
alcanzar las metas.

Programación Heurística se presenta

Como:

a. Técnica de búsqueda para obtener metas en problemas no algorítmicos, o


con algoritmos que generan como en el caso del juego damas ó ajedrez,
múltiples alternativas de acción.
b. Método aproximado de resolución de problemas usando funciones de
evaluación heurísticas.
c. Método de poda para estrategias de programas que juegan.

Conviene aplicar Programación Heurística, cuando . .

I. Existen datos limitados e inexactos, que serán usados para estimar


parámetros, de modo que pueden contener errores superiores a los
proporcionados con la solución de una buena heurística.
II. El modelo se simplifica, hasta transformarla en una representación teórica y
aproximada del problema real, de manera que la solución óptima lograda
solo tendrá valor de referencia académica.
III. No existe un método exacto confiable para ser aplicado al modelo del
problema; y si existe, no es procesable en computadora.
IV. Se quiere optimizar el algoritmo, dotándole buenas soluciones de inicio,
guiando la búsqueda y reduciendo el número de soluciones posibles,
aplicadas al modelo.
V. Frecuentemente se debe resolver el mismo problema y el tratamiento
heurístico significa un ahorro operativo.
VI. Si puede generar resultados superiores a los del modelo actual.

Especificaciones del tratamiento heurístico

Las principales especificaciones del tratamiento heurístico tienen en cuenta sus


características de información y de las especificaciones del problema, destacando
los siguientes aspectos:

a. Heurística simple, de consumo razonable de memoria, con velocidad de


búsqueda sin saltos exponenciales de alternativas, precisa, robusta, que
proporcione soluciones múltiples, y provista de buen criterio de parada que
incorpore el conocimiento obtenido durante la búsqueda.
b. La información a tratar es simbólica, inexacta o limitada, incremental y
basada en el conocimiento.
c. Las especificaciones del problema pueden ser de optimización o de
satisfacción; que generan una o múltiples soluciones; con tratamiento en
tiempo real o no; con decisión interactiva o no.
d. Las heurísticas como reglas de sentido común, pueden codificarse con
cualquiera de los lenguajes de programación, pues la programación
heurística no ha producido su propio lenguaje específico.

Si hubiera un lenguaje heurístico


Si definiéramos un lenguaje heurístico, dado que la programación heurística
aplicada al campo de la I.A, y que posee heurísticas diseñadas con herramientas
de esta área, sus características más destacables serían:

I. Sería un lenguaje conversacional, que permitiera la interacción directa con


el programador para la definición y procesamiento del problema.
II. Tratamiento de estructuras crecientes, con programas que vayan ampliando
el volumen de conocimiento, que en base a la experiencia configure el
modelo heurístico.
III. Tratamiento simbólico, para ser compatibles con problemas que precisan
tratamiento heurístico y que tienen estructura simbólica.
IV. Autonomía de sus funciones para modelar la heurística y su mecanismo de
ejecución, definiendo módulos independientes.
V. Estructuras de datos para describir estados de problemas y relaciones entre
estados.
VI. Estructuras de procedimientos de control y proceso para ejecutar
coherentemente el modelo heurístico, y permitir lograr y utilizar el
conocimiento adquirido en el proceso de resolución del problema.

EJEMPLO

Se desea optimizar la provisión de la caña de azúcar, usada como materia prima


en los ingenios azucareros.

En este problema, entre muchos otros, intervienen como factores de decisión


aspectos, como la distancia y estado de los caminos que unen los cargaderos de
caña con los ingenios; el costo unitario del medio de transporte; el precio de venta
de la caña de cada proveedor; el precio de compra que paga cada ingenio, etc. La
cantidad de alternativas de solución a evaluar serían:

1 alternativa para 1 ingenio y 1 cargadero


2 alternativas para 2 ingenios y 2 cargaderos
6 alternativas para 3 ingenios y 3 cargaderos
24 alternativas para 4 ingenios y 4 cargaderos
120 alternativas para 5 ingenios y 5 cargaderos
720 alternativas para 6 ingenios y 6 cargaderos

Y si la cantidad correspondiera a la Provincia de Tucumán que tiene 14 ingenios


azucareros,
la cantidad, suponiendo solo 14 cargaderos sería el factorial de 14,
que es un número demasiado grande..!!! que prácticamente no podríamos evaluar
uno a uno.

En la realidad el problema se agrava, porque la provincia tiene cientos de


cargaderos y si no contamos con una buena heurística estamos fritos..!!!, pero por
suerte podemos probar con alguno de los algoritmos heurísticos siguientes:

A. Recocido simulado
B. Búsqueda Tabú
C. Algoritmos evolutivos:
a. Algoritmos Genéticos
b. Programación evolutiva
c. Estrategias evolutivas
d. Programación genética
D. Redes Neuronales Artificiales
E. Relajación lagrangiana

CARACTERISTICAS del PARADIGMA HEURISTICO

Como se ha señalado inicialmente, un paradigma de programación es un modelo


básico de diseño e implementación de programas. Un modelo que permite
producir programas de acuerdo con una metodología específica. Así, el paradigma
de programación estructurada se basa en estructuras modulares, con fuerte
cohesión en el módulo y bajo acoplamiento entre ellos, desarrollo "top-down",
utilización de diagramas privilegiados, etc.
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:

R Una representación más apropiada de la estructura del problema para su


resolución con técnicas heurísticas
R 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.

PROGRAMACION HEURISTICA

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."

Muchas de las más interesantes y difíciles tareas de programación implican utilizar


el ordenador para resolver problemas del tipo: "¿Cuál es el camino más corto ?"
"Listar todos los casos posibles ", "¿Existe una disposición de elementos que
satisfaga ?. Las características de tales problemas implica potencialmente una
búsqueda exhaustiva de todas las posibles combinaciones de algún conjunto
finito, que si no está controlado puede producir una "explosión combinatoria"
(incremento exponencial del espacio de búsqueda con la dimensión del problema)
imposible de tratar.

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.

La Programación Heurística implica una forma de modelizar el problema en lo que


respecta a la representación de su estructura, estrategias de búsqueda y métodos
de resolución, que configuran el Paradigma Heurístico.
Este tipo de programación se aplica con mayor intensidad en el campo de la
Inteligencia Artificial (I.A.), y en especial, en el de la Ingeniería del Conocimiento,
dado que el ser humano opera la mayor parte de las veces utilizando heurísticas,
un hecho cierto que una heurística es la conclusión del razonamiento humano en
un dominio específico, por lo que es normal que este tipo de programación que
encuadrado en el área de la I.A, ya que implementa el conocimiento humano,
dado por la experiencia, utilizando reglas de buena lógica.

Por otra parte, la Programación Heurística se presenta y utiliza desde diferentes


puntos de vista:

R 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.)
R Como un método aproximado de resolución de problemas utilizando
funciones de evaluación de tipo heurístico (ej. algoritmos A*, AO*)
R Como método de poda para estrategias de programas que juegan, aunque
estos métodos no son realmente heurísticos (ej. poda alfa-beta).

En general, un modelo heurístico es aconsejable si puede proporcionar resultados


superiores a los del modelo actual.

Un paradigma que corresponde a los lenguajes de cuarta generación es la


inteligencia artificial, que se ha resuelto con lenguajes de programación como
PROLOG y LISP; el primero, desarrollado en 1956-1962 por J. McArthy y el
segundo por A. Colmerauer en 1972, para el desarrollo de inteligencia artificial,
que corresponden ambos a la definición de lenguajes funcionales o aplicativos.

Ejemplo: Problema de las jarras de agua:

Se tienen dos jarras de agua, una de 4l y otra de 3l sin escala de medición.

Se desea tener 2l de agua en la jarra de 4l. Las siguientes operaciones son


válidas: llenar las jarras, tirar agua de las jarras, pasar agua de una jarra a otra.
Solución:

R El espacio de estados se define como { (X,Y)/ X son los litros en la jarra de


4l con 0<=X<=4 AND Y son los litros de la jarra de 3l con 0<=Y<=3 }
R El estado inicial es (0,0)
R El estado final es (2,0). El estado final podría ser (2,N) en caso de que no
importen los litros de la segunda jarra.
R Las reglas que se pueden aplicar son:
o 1- Llenar la jarra de 4l: Si (X,Y) AND X<4 => (4,Y)
o 2- Llenar la jarra de 3l: Si (X,Y) AND Y<3 => (X,3)
o 3- Vaciar la jarra de 4l: Si (X,Y) AND X>0 => (0, Y)
o 4- Vaciar la jarra de 3l: Si (X,Y) AND Y>0 => (X, 0)
o 5- Pasar agua de la jarra de 4l a la jarra de 3l hasta llenarla: Si (X,Y)
AND X>0 AND X+Y>=3 => (X-(3-Y),3)
o 6- Pasar agua de la jarra de 3l a la jarra de 4l hasta llenarla: Si (X,Y)
AND Y>0 AND X+Y>=4 => (4, Y-(4-X))
o 7- Pasar toda el agua de la jarra de 4l a la jarra de 3l: Si (X,Y) AND
X>0 AND X+Y<3 => (0,X+Y)
o 8- Pasar toda el agua de la jarra de 3l a la jarra de 4l: Si (X,Y) AND
Y>0 AND X+Y<4 => (X+Y,0)

El programa debería encontrar un pasaje de estados para ir del estado (0,0) al


estado (2,0). Puede existir más de un pasaje de estados hacia la solución, por
ejemplo:

(0,0) => (0,3) => (3,0) => (3,3) => (4,2) => (0,2) => (2,0)

en la cual, a partir del estado inicial, se aplicaron las reglas 2, 8, 2, 6, 3 y 8, hasta


conseguir el estado objetivo.

Otro pasaje de estados hacia la solución es la siguiente

(0,0) => (4,0) => (1,3) => (1,0) => (0,1) => (4,1) => (2,3) => (2,0)
en la cual se aplicaron las reglas 1, 5, 4, 7, 1, 5 y 4

Con respecto a las reglas se puede concluir que:

R Las condiciones que se establecen en la parte izquierda a veces no son


altamente necesarias pero restringen la aplicación de la regla a estados
más adecuados. Esto incrementa la eficiencia del programa que utiliza las
reglas. En el ejemplo anterior, la regla

Llenar la jarra de 4l: Si (X,Y) AND X<4 => (4,Y)


contiene la condición (X<4), especificando que la jarra no se encuentra
llena. Si esta condición no se incluye, se puede aplicar la regla aún cuando
la jarra está llena. Dado que en este caso el estado del problema no cambia
la aplicación de la regla se considera inútil

R Las reglas no sólo deben describir el problema sino también algún tipo de
conocimiento sobre su solución. Si en el ejemplo anterior se considera la
siguiente nueva regla:

Vaciar "un poco" la jarra de 4l: Si (X,Y) AND X>0 => (X-Q, Y)
es decir, tirar agua sin cuantificar, intuitivamente se concluye que la
aplicación de esta regla nunca nos acercará a la solución del problema.

R A veces, cuando se alcanzan algunos estados resulta obvio cómo se debe


continuar hacia la solución. Es posible agregar reglas de propósito especial
que capturen el conocimiento sobre casos especiales que conducen a la
resolución del problema. En el ejemplo anterior, se pueden agregar las
siguientes reglas de propósito especial:

Si (X,2) => (2,0)

Si (2,Y) AND Y>0 => (2,0)


Estas reglas no añaden más potencia al sistema ya que las operaciones
que describen las proporcionan otras reglas más generales. En el ejemplo,
la primera regla agregada es equivalente a la aplicación de las reglas
generales 3 y 8; y la segunda regla agregada es equivalente a la aplicación
de la regla general 4. Dependiendo de la estrategia de control que se utilice
para seleccionar reglas durante la resolución del problema se puede
mejorar el rendimiento si se les da preferencia a las reglas de casos
especiales.

METODOS DE BUSQUEDA

Búsqueda Breadth-FirstSearch (primero en ancho)

Este algoritmo de búsqueda visita cada nodo del árbol por niveles, es decir, visita
todos los nodos de un nivel antes de visitar los del siguiente. A continuación se
detalla un pseudo-código de este algoritmo:

Lista_nodos = [estado_inicial];
Mientras NotVacia(lista_nodos)
estado_actual = lista_nodos.primero;
Si EstadoFinal(estado_actual) entonces
Terminar;
Sino
lista_reglas = ReglasAplicables (estado_actual);
Mientras NOT Vacia(lista_reglas)
estado_sucesor = AplicarRegla (lista_reglas);
lista_nodos = lista_nodos + [estado_sucesor];
Fin Mientras;
Fin Sino;
Fin Mientras;

Con la búsqueda a lo ancho se asegura que una vez alcanzada una solución no
existe otra ruta hacia la solución que tenga menor cantidad de pasos.

Вам также может понравиться