Está en la página 1de 19

UNIDAD 2: FASE 2 - BÚSQUEDA EN ESPACIO DE ESTADO EN LA

INTELIGENCIA ARTIFICIAL

Elaborado por:

A.Lilian Osorio
Código: 1014239505

Tutor:
Fernando Rojas

Grupo: 190169_8

Universidad Nacional Abierta y a Distancia.


INTELIGENCIA ARTIFICIAL
Bogotá D.C. 11 Abril de 2021
DESARROLLO

BÚSQUEDA EN ESPACIOS DE ESTADO

Muchos de los problemas que pueden ser resueltos aplicando técnicas de


inteligencia artificial se modelan en forma simbólica y discreta definiendo las
configuraciones posibles del universo estudiado. El problema se plantea entonces en
términos de encontrar una configuración objetivo a partir de una configuración
inicial dada, aplicando transformaciones válidas según el modelo del universo. La
respuesta es la secuencia de transformaciones cuya aplicación sucesiva lleva a la
configuración deseada
Los ejemplos más característicos de esta categoría de problemas son los juegos (son
universos restringidos fáciles de modelar). En un juego, las configuraciones del
universo corresponden directamente a las configuraciones del tablero. Cada
configuración es un estado que puede ser esquematizado gráficamente y
representado en forma simbólica. Las transformaciones permitidas corresponden a
las reglas o movidas del juego, formalizadas como transiciones de estado.
Entonces, para plantear formalmente un problema, se requiere precisar una
representación simbólica de los estados y definir reglas del tipo
condición acción para cada una de las transiciones válidas dentro del universo
modelado. La acción de una regla indica como modificar el estado actual para
generar un nuevo estado. La condición impone restricciones sobre la aplicabilidad
de la regla según el estado actual, el estado generado o la historia completa del
proceso de solución.
El espacio de estados de un juego es un grafo cuyos nodos representan las
configuraciones alcanzables (los estados válidos) y cuyos arcos explicitan las
movidas posibles (las transiciones de estado). En principio, se puede construir
cualquier espacio de estados partiendo del estado inicial, aplicando cada una de las
reglas para generar los sucesores inmediatos, y así sucesivamente con cada uno de
los nuevos estados generados (en la práctica, los espacios de estados suelen ser
demasiado grandes para explicitarlos por completo).
Cuando un problema se puede representar mediante un espacio de estados, la
solución computacional corresponde a encontrar un camino desde el estado inicial a
un estado objetivo.
El espacio de estados de un juego es un grafo cuyos nodos representan las
configuraciones alcanzables (los estados válidos) y cuyos arcos explicitan las
movidas posibles (las transiciones de estado). En principio, se puede construir
cualquier espacio de estados partiendo del estado inicial, aplicando cada una de las
reglas para generar los sucesores inmediatos, y así sucesivamente con cada uno de
los nuevos estados generados (en la práctica, los espacios de estados suelen ser
demasiado grandes para explicitarlos por completo).
Cuando un problema se puede representar mediante un espacio de estados, la solución
computacional corresponde a encontrar un camino desde el estado inicial a un estado
objetivo.
¿QUÉ ES BÚSQUEDA EN ESPACIO DE ESTADOS?

Una de las aproximaciones más generales y sencillas de formalizar un problema y


sus posibles mecanismos de solución es por medio de lo que se denomina espacio
de estados. Antes de definir formalmente en qué consiste este espacio, observemos
que en todo momento estamos tratando con métodos en los que la resolución de los
problemas se da de forma dinámica, es decir, se supone que se produce una
evolución temporal, que pasa por etapas, que nos permite llegar de la situación
inicial en la que el problema se presenta hasta una situación final en la que se ha
encontrado la solución del mismo. Es precisamente esta dinámica, en la que
aplicamos las reglas u operaciones de las que disponemos, la que permite ir
modificando cada situación posible para llevarnos desde el inicio a la solución.
Simplemente, denominaremos estado a la representación de los elementos que
describen el problema en un momento dado, es decir, a la situación en que se
encuentra o se podría encontrar el problema en cada instante de tiempo.
Si nos imaginamos un espacio de estados como un terreno por el cual nos podemos
mover, donde partimos de un punto concreto del terreno (estado inicial) y podemos
aplicar las reglas válidas para ir saltando de un estado a otro, podemos identificar la
resolución del problema (llegar hasta un estado final válido) con el problema de
buscar un camino adecuado entre un estado inicial y un estado final. Es por ello que
muy habitualmente se habla del Problema de Búsqueda en el Espacio de Estados.
consideremos el puzle de piezas deslizantes, donde el objetivo es deslizar las piezas
usando el hueco hasta conseguir el orden deseado. El caso general consiste en un
puzzle de n×m cuadrículas, con n×m−1 piezas numeradas consecutivamente y 1
hueco. A veces podemos encontrar este puzle en una variante equivalente haciendo
uso de imágenes que han de reconstruirse situando el orden adecuado en sus piezas.

Los métodos de búsqueda se centran en explorar el espacio de estados del problema.


Estos métodos pueden ser completos, explorando todo el espacio de estados en
busca de una solución, o incompletos si solamente exploran una parte del espacio de
estados.
Los métodos que exploran todo el espacio de búsqueda garantizan encontrar una
solución, si existe, o demuestran que el problema no es resoluble. La desventaja de
estos algoritmos es que son muy costosos. Los dos métodos completos más usuales
son:
• Generar y Testear (GT): Este método genera las posibles tuplas de instanciación
de todas las variables de forma sistemática y después testea sucesivamente sobre
cada instanciación si se satisfacen todas las restricciones del problema. La primera
combinación que satisfaga todas las restricciones, será la solución al problema.
Mediante este procedimiento, el
número de combinaciones generado por este método es el Producto Cartesiano de la
cardinalidad de los dominios de las variables: i =1, n d i. Esto es un inconveniente,
ya que se realizan muchas instanciaciones erróneas de valores a variables que
después son rechazadas en la fase de testeo.
• Backtracking Cronológico (BT): Este método realiza una exploración en
profundidad del espacio de búsqueda, instanciando sucesivamente las variables y
comprobando ante cada nueva instanciación si las instanciaciones parciales ya
realizadas son localmente consistentes. Si es así, sigue con la instanciación de una
nueva variable.
En caso de conflicto, intenta asignar un nuevo valor a la última variable instanciada,
si es posible, y en caso contrario retrocede a la variable asignada inmediatamente
anterior.

El backtracking cronológico es un algoritmo muy simple pero también es muy


ineficiente. El problema es que tiene una visión local del problema, de forma que
sólo comprueba las restricciones entre las variables ya instanciadas, e ignora la
relación entre dichas variables ( x1 , x 2 , ..., x k ) y las que
quedan por instanciar ( x k +1, ..., x n ). La mejora del
algoritmo incluye dos modificaciones fundamentales:
• Mejorar la función Comprobar, tal que también compruebe la validez de la
instanciación parcial efectuada respecto a las variables pendientes de asignar. Esto
permitiría detectar cuanto antes si la solución parcial efectuada de las k variables
forma o no parte de una solución global, evitando profundizar en una secuencia de
asignaciones que no conduzca a una solución.
Esto se realiza mediante un proceso de propagación de las instanciaciones parciales
ya realizadas al resto de la red tal.

TÉCNICAS DE INFERENCIA
Los procesos inferenciales en un problema de satisfacción de restricciones tienen
como objetivo deducir nuevas restricciones, derivadas de las explícitamente
conocidas sobre el problema. Concretamente, estas técnicas borran valores
inconsistentes de los dominios de las variables o inducen restricciones implícitas
entre las variables, obteniendo un nuevo problema de satisfacción de restricciones,
equivalente a la inicial, donde se han hecho explícitas las nuevas restricciones
implícitamente contenidas en el primero. La obtención de estas nuevas restricciones
permite:
1. Obtener respuestas a preguntas sobre el problema, relativas a restricciones
implícitamente existentes entre las variables o sobre sus dominios.
2. Acotar el espacio de soluciones, al haberse eliminado valores inconsistentes,
haciendo más eficientes los procesos de búsqueda.
Ejemplo
Tenemos un problema con tres variables x, y, z, con los dominios {0, 1}, {2, 3} y
{1, 2} respectivamente. Hay dos restricciones en el problema: y < z, x =
y. Si asumimos que la búsqueda mediante backtracking trata de instanciar las
variables en el orden x, y, z, entonces probará todas las posibles 23 combinaciones
de valores para las variables antes de descubrir que no existe solución alguna.
Si miramos la restricción entre la variable y y la variable z podremos ver que no hay
ninguna combinación de valores para las dos variables que satisfagan la restricción.
Si el algoritmo pudiera identificar esta inconsistencia local antes, se evitaría un gran
esfuerzo de búsqueda.

TÉCNICAS HÍBRIDAS
Las técnicas inferenciales pueden incluirse en el propio proceso de búsqueda, dando
lugar a los algoritmos de búsqueda híbridos que analizamos en esta sección. La
complejidad exponencial para resolver un problema de satisfacción de restricciones
dado está principalmente relacionada con el tamaño de los dominios de sus
variables.
Algoritmos Look-Backward
Los algoritmos Look-Backward tratan de explotar la información del problema para
comportarse más eficientemente en las situaciones sin salida. Al igual que el
backtracking cronológico, los algoritmos Look- Backward llevan a cabo la
comprobación de la consistencia hacia atrás, es decir, entre la variable actualmente
instanciada y las pasadas ya instanciadas.
variantes de algoritmos Look-Backward.
• Backjumping (BJ) [Gaschnig, 1979] es un algoritmo parecido al backtracking
cronológico, excepto que se comporta de una manera más inteligente cuando
encuentra situaciones sin salida. En vez de retroceder a la variable anteriormente
instanciada, BJ salta a la variable x j más profunda, es decir más cerca de la
variable actual, que está en conflicto con la variable actual x i donde j < i.
Decimos que una variable instanciada
x j está en conflicto con una variable xi si la instanciación de x j evita
uno de los valores en xi , debido a la restricción entre x j y xi .
Cambiar la instanciación de x j puede hacer posible encontrar una
instanciación consistente de la variable actual.

• Conflict-directed Backjumping (CBJ) [Prosser, 1993] tiene un


comportamiento de salto hacia atrás más sofisticado que BJ. Cada variable x i
tiene un conjunto conflicto formado por las variables pasadas que están en
conflicto con x i . En el momento en el que la comprobación de la consistencia
entre la variable actual x i y una variable pasada xj falla, la variable
xj se añade al conjunto conflicto de x i . En una situación sin salida, CBJ
salta a la variable más profunda en su conjunto conflicto, por ejemplo, xk ,
donde k < i. Al mismo tiempo se incluye el conjunto conflicto de x i al
de x k , por lo que no se pierde ninguna información sobre conflictos.
Obviamente, CBJ necesita unas estructuras de datos más complicadas para
almacenar los conjuntos conflicto.
• Learning [Frost y Dechter, 1994] es un método que almacena las restricciones
implícitas que son derivadas durante la búsqueda y las usa
para podar el espacio de búsqueda. Por ejemplo, cuando se alcanza una situación sin
salida en la variable x i , entonces sabemos que la tupla de asignaciones (( x1
, a1 ) , ..., ( x i − 1, a i − 1) nos lleva a una situación
sin salida. Así, nosotros podemos aprender que una combinación de asignaciones
para las variables x 1 , x i − 1 no está permitida.

Dentro de lo técnico se puede representar como los ejecutable que se programan


dentro de un software, este proceso puede representarse con varias entradas y
salidas en un código o un producto, es una manera lógica de interpretar el intervalo
de unos y ceros que una computadora recepciona para ejecutar procedimientos
cognitivos.
Espacios de estados caracterizado cómo modelo matemático de un sistema físico
descrito mediante un conjunto de entradas, salidas y variables de estado
relacionadas por ecuaciones diferenciales de infinito orden que se combinan en una
ecuación diferencial matricial de primer orden. Para prescindir del número de
entradas, salidas y estados, las variables son expresadas como vectores y las
ecuaciones algebraicas se escriben en forma matricial (esto último solo puede
hacerse cuando el sistema dinámico es lineal e invariante en el tiempo). La
representación de espacios de estado (también conocida como aproximación en el
dominio del tiempo) provee un modo compacto y conveniente de modelar y analizar
sistemas con múltiples entradas y salidas. Con {\displaystyle p} p entradas
y
{\displaystyle q} q salidas, tendríamos que escribir {\displaystyle q\times p}
{\displaystyle q\times p} veces la transformada de Laplace para procesar toda la
información del sistema. A diferencia de la aproximación en el dominio de la
frecuencia, el uso de la representación de espacios de estado no está limitada a
sistemas con componentes lineales ni con condiciones iniciales iguales a cero. El
espacio de estado se refiere al espacio de
{\displaystyle n} n dimensiones cuyos ejes coordenados están formados por
variables de estados. El estado del sistema puede ser representado como un vector
dentro de ese espacio

RAZONAMIENTO CON INCERTIDUMBRE.

El razonamiento con incertidumbre surge porque se tiene un conocimiento


incompleto o incorrecto del mundo o por limitaciones en la forma de representar
dicho conocimiento
Es un proceso por el cual se adquiere una nueva conducta, se modifica una antigua
conducta o se extingue alguna, como resultado siempre de experiencias o prácticas.
Existen diferentes tipos de aprendizaje Partes
innatas de aprendizaje:
Instintos, reflejos, impulsos genéticos que hemos ido heredando. Nos hacen
aprender determinadas cosas. Ha de haber interacción con el medio.
Por condicionamiento:
Determinados estímulos provocan determinadas respuestas. Si los estímulos por
azar o no se condicionan provocan que esta conducta inicial se refleje y se convierta
en un habito.
Por imitación y modelaje:
Muchas de conductas son por imitación de las personas importantes y destacadas
para nosotros.
Por aprendizaje memorístico:
Aprendizaje académico: No sabe lo que está aprendiendo
Aprendizaje de memoria clásico: Por lo cual al cabo de unas horas ya no lo
recuerdas
Aprendizaje significativo: Parte de cosas importantes para ti, a partir de ahí
acumulas lo que ya sabias y lo haces tuyo.

¿QUÉ ES RAZONAMIENTO CON INCERTIDUMBRE?

Se puede definir como crear conclusiones útiles a partir de información incompleta


o incierta no es una tarea imposible, los seres humanos realizan este proceso en casi
todos los aspectos cotidianos. Los médicos realizan diagnósticos correctos y
recomiendan tratamiento a partir de síntomas ambiguos, los informáticos analizan
los problemas del manejo de información a partir de observaciones, y la mayor parte
de los seres humanos comprenden el lenguaje hablado, el corporal o el lenguaje
escrito a pesar de contar con frases incompletas, y también es posible reconocer a
otras personas a través de sus voces o gestos. De este modo para realizar el proceso
de toma de decisiones se utiliza la lógica; con la lógica algunas piezas de
conocimiento son utilizadas en el razonamiento y pueden ser parte de las
explicaciones o conclusiones.
El término incertidumbre significa razonamiento aproximado o inexacto de la
información. De manera general, sólo se conoce con certeza una pequeña parte de
un determinado dominio del mundo, la información restante puede ser incierta por
diversas causas, tales como: imprecisión, incapacidad para tomar medidas
adecuadas, falta de conocimiento, vaguedad, etc. Existe un cambio dramático en los
paradigmas de la incertidumbre durante los últimos años: hasta la década de los
sesenta, la incertidumbre se relacionó con significados negativos. Ningún científico
quería tomar decisiones vagas, pues temía que su trabajo no fuera tomado con la
debida seriedad, por lo que la incertidumbre fue considerada como algún disturbio
que debería ser evitado en modelos, teorías y enunciados.
Para muchos casos prácticos, las soluciones de los problemas se conducen en
presencia de incertidumbre en los datos o el conocimiento Para este tipo de
problemas es posible utilizar técnicas numéricas, o también, la incertidumbre puede
ser manejada con una aproximación lógica en forma de rastro. El razonamiento en
la presencia de incertidumbre sucede en ejemplos típicos de diagnóstico y análisis
de datos. Los sistemas expertos, cuya función consiste en el diagnóstico en sus
juicios de razonamiento emplean reglas de condición-conclusión que van
acompañadas de una
estimación de certidumbre, en donde se tiene un procedimiento numérico y la
necesaria revisión de la credibilidad.
El razonamiento es una operación lógica mediante la cual, partiendo de uno o más
juicios, se deriva la validez, la posibilidad o la falsedad de otro juicio distinto. Por lo
general, los juicios en que se basa un razonamiento expresan conocimientos ya
adquiridos o, por lo menos, postulados como hipótesis.
Los razonamientos pueden ser válidos (correctos) o no válidos (incorrectos). En
general, se considera válido un razonamiento cuando sus premisas ofrecen soporte
suficiente a su conclusión. Un razonamiento lógico, en definitiva, es un proceso
mental que implica la aplicación de la lógica. A partir de esta clase de
razonamiento, se puede partir de una o de varias premisas para arribar a una
conclusión que puede determinarse como verdadera, falsa o posible.
Razonamiento No Lógico.
No sólo se basa en premisas con una única alternativa correcta (razonamiento
lógico-formal, el descrito anteriormente), sino que es más amplio en cuanto a
soluciones, basándose en la experiencia y en el contexto. Los niveles educativos
más altos suelen usar el razonamiento lógico, aunque no es excluyente.
Ejemplo: clasificación de alimentos, el de tipo lógico-formal los ordenará por
verduras, carnes, pescados, fruta, etc. en cambio el tipo informal lo hará según lo
ordene en el refrigerador, según lo vaya cogiendo de la tienda, etc. Incertidumbre.
Falta de información adecuada para tomar una decisión o realizar un razonamiento.
Puede impedir llegar a una conclusión correcta.
Razonamiento con incertidumbre.
Objetivo: Ser capaz de razonar sin tener todo el conocimiento relevante en un
campo determinado utilizando lo mejor posible el conocimiento que se tiene.
Asociar a los elementos del formalismo de representación, información adicional
(normalmente valores numéricos) que indique su grado de certeza y manejar esa
información en las inferencias.
Implementación: Es difícil cumplir estos requerimientos utilizando la lógica de
primer orden deben de introducirse modelos para manejar información vaga,
incierta, incompleta y contradictoria.
Crucial para que un sistema funcione en el “mundo real”.
El propósito último de un sistema inteligente es actuar de forma óptima utilizando el
conocimiento del sistema y un conjunto de percepciones.
Para actuar se necesita decidir qué hacer.
¿Cuál es la forma correcta de decidir?
La decisión racional: cuando se tienen distintas opciones un sistema debe decidirse
por aquella acción que le proporcione el mejor resultado.
Cuando hay incertidumbre para poder decidir racionalmente se requiere:
• La importancia de los distintos resultados de una acción.
• La certidumbre de alcanzar esos resultados cuando se realiza la acción.
Inicialmente la mayoría de los investigadores en IA enfatizaban la importancia del
razonamiento simbólico y evitaban la utilización de
números. Los sistemas expertos no deben usar números puesto que los expertos
humanos no lo hacen. Los expertos no pueden suministrar los números requeridos.
Sin embargo, los ingenieros que desarrollaban las aplicaciones se dieron cuenta
pronto de la necesidad de representar la incertidumbre.
El sistema experto MYCIN (años 70) para el tratamiento de infecciones bacterianas
fue el primer éxito en este campo. Los métodos numéricos (especialmente los
basados en probabilidad) son actualmente una herramienta aceptada en IA debido a
los éxitos prácticos y a la complejidad de las teorías alternativas.
Manejo de la Incertidumbre. Se han desarrollado diversas técnicas para manejo de
incertidumbre en sistemas inteligentes, que podemos dividir en dos grandes grupos:
• Técnicas simbólicas (no numéricas).
• Técnicas numéricas

La incertidumbre se puede caracterizar por el acto de tener una información por


partes y no llegar a una verdad real, puesto que es el desconocimiento a ese parte de
un todo, el razonamiento se puede denotar como la parte lógica de las conclusiones
o hipótesis de un tema en específico
De una manera más clara el razonamiento con incertidumbre puede crear
conclusiones útiles a partir de información incompleta o incierta no es una tarea
imposible, los seres humanos realizan este proceso en casi todos los aspectos
cotidianos. Los médicos realizan diagnósticos correctos y recomiendan tratamiento
a partir de síntomas ambiguos, los informáticos analizan los problemas del manejo
de información a partir de observaciones, y la mayor parte de los seres humanos
comprenden el lenguaje hablado, el corporal o el lenguaje escrito a pesar de contar
con frases incompletas, y también es posible reconocer a otras personas a través de
sus voces o gestos. De este modo para realizar el proceso de toma de decisiones se
utiliza la lógica; con la lógica algunas piezas de conocimiento son utilizadas en el
razonamiento y pueden ser parte de las explicaciones o conclusiones.

Por su parte, en términos netamente académicos, el ser humano está familiarizado


con investigaciones empíricas, tales como exploraciones científicas e
investigaciones criminales, en las cuales los científicos deben examinar eventos
físicos y objetos para resolver problemas o ganar conocimiento acerca de algún
fenómeno. Por ejemplo, en muchos casos criminales, los científicos forenses
examinan rastros de sangre para descubrir la identificación única del ácido
desoxirribonucléico de la muestra. Este tipo de investigaciones requieren de gran
precisión, particularmente porque las muestras son frecuentemente muy pequeñas, y
particularmente por pequeñas desviaciones en la precisión de la medición de
elementos microscópicos pueden resultar en una mala identificación. De este modo,
los científicos que trabajan en estas áreas en particular, tienen que ser consistentes
en mantener un alto grado de precisión.
}

ALGORITMOS DE BÚSQUEDA

Las técnicas de búsqueda son una serie de esquemas de representación del


conocimiento, que mediante diversos algoritmos nos permite resolver ciertos
problemas desde el punto de vista de la I.A.
Elementos de la búsqueda:
• Conjunto de estados: todas las configuraciones posibles en el dominio.
• Estados iniciales: estados desde los que partimos.
• Estados finales: las soluciones del problema.
• Operadores: se aplican para pasar de un estado a otro.

BUSQUEDA CIEGA
Sólo utiliza información acerca de si un estado es o no objetivo para guiar su
proceso de búsqueda.
Expandir un nodo: obtener los posibles hijos de un nodo a partir de la aplicación
de los distintos operadores sobre él.
Nodo cerrado: Se han aplicado todos los posibles operadores sobre él,
obteniéndose todos sus posibles hijos.
TIPOS DE BÚSQUEDA CIEGA
Búsqueda en amplitud.
Búsqueda en profundidad.
Búsqueda en profundidad progresiva

BÚSQUEDA EN AMPLITUD:
Procedimientos de búsqueda nivel a nivel
Para cada uno de los nodos de un nivel se aplican todos los posibles operadores
No se expande ningún nodo de un nivel antes de haber expandido todos los del nivel
anterior
Se implementa con una estructura FIFO.

BÚSQUEDA EN PROFUNDIDAD:
La búsqueda se realiza por una sola rama del árbol hasta encontrar una solución o
hasta que se tome la decisión de terminar la búsqueda por esa dirección.
Terminar la búsqueda por una dirección se debe a no haber posibles operadores que
aplicar sobre el nodo hoja o por haber alcanzado un nivel de profundidad muy
grande.

Si esto ocurre se produce una vuelta atrás (backtracking) y se sigue por otra rama
hasta visitar todas las ramas del árbol si es necesario.

BÚSQUEDA BIDIRECCIONAL:

Se llevan a la vez dos búsquedas: una descendente desde el nodo inicial y otra
ascendente desde el nodo meta.
Al menos una de estas dos búsquedas debe ser en anchura para que el recorrido
ascendente y descendente pueda encontrarse en algún momento

¿QUE SON ALGORITMOS DE BÚSQUEDA EN IA?

La búsqueda es una de las técnicas más utilizadas para resolver los problemas de
pathfinding o planificación que se presentan en la inteligencia artificial. En
particular, la búsqueda es utilizada para resolver el problema de la navegación.
De los distintos tipos de algoritmos de búsqueda, los algoritmos de búsqueda
heurística completa se encuentran ampliamente difundidos. Sin dudas, el algoritmo
A* es el algoritmo de búsqueda heurística más popular. Búsqueda A* El algoritmo
de búsqueda A*(pronunciado “A asterisco” o “A estrella”) se clasifica dentro de los
algoritmos de búsqueda en grafos. Presentado por primera vez en 1968 por Peter E.
Hart, Nils J. Nilsson y Bertram Raphael, el algoritmo A* encuentra, siempre y
cuando se cumplan unas determinadas condiciones, el camino de menor coste entre
un nodo origen y uno objetivo. Búsqueda por el método algorítmico A* Él método
busca el camino en un grafo de un vértice inicial hasta un vértice final. Él es la
combinación de aproximaciones heurísticas como del algoritmo Best-first Search.
Su aplicación va desde aplicativos para encontrar rutas de
desplazamiento entre localidades la resolución de problemas, como la resolución de
uno quiebra-cabezas. Él es muy usado en juegos. Motivación y descripción.
El problema de algunos algoritmos de búsqueda en grafos informados, como puede
ser el algoritmo voraz, es que se guían en exclusiva por la función heurística, la cual
puede no indicar el camino de coste más bajo, o por el coste real de desplazarse de
un nodo a otro (como los algoritmos de escalada), pudiéndose dar el caso de que sea
necesario realizar un movimiento de coste mayor para alcanzar la solución. Es por
ello bastante intuitivo el hecho de que un buen algoritmo de búsqueda informada
debería tener en cuenta ambos factores, el valor heurístico de los nodos y el coste
real del recorrido.
Una forma de resolver el problema de la profundidad límite de la búsqueda en
profundidad podría ser considerar de forma iterativa sucesivos valores de este
parámetro, y para cada uno de ellos realizar una búsqueda completa.
Esta es la estrategia denominada búsqueda en profundidad iterativa. El principal
inconveniente de este tipo de búsqueda es que para cada uno de los valores de la
profundidad límite hay que visitar de nuevo todos los visitados en la iteración
anterior.
Sin embargo, en la práctica esto no supone un inconveniente muy grave ya que, el
número de nodos nuevos es en realidad mucho mayor que los visitados en las
iteraciones anteriores. Al igual que en la búsqueda en profundidad convencional, si
la profundidad máxima alcanzada es d, el espacio de memoria es proporcional a d, y
el tiempo de búsqueda es exponencial en d. El algoritmo 8.4 muestra una versión
del algoritmo de búsqueda en profundidad iterativa que se obtiene haciendo variar la
profundidad límite a partir de 1, aplicando el algoritmo convencional de búsqueda
en profundidad para cada uno de estos valores.

Ilustración 1 Tomado de: Inteligencia artificial: métodos, técnicas y aplicaciones,


McGraw-Hill España, 2008.
De forma similar, se puede diseñar un algoritmo de búsqueda en anchura iterativa.
En este caso el parámetro AnchuraLimite permite controlar el número máximo de
sucesores de cada estado. El algoritmo 8.5 muestra una versión de este método. La
operación Sucesores (n, AnchuraLimite) selecciona el número de sucesores que se
consideran en cada iteración, de acuerdo con el parámetro AnchuraLimite. La
iteración puede continuar mientras esta
operación haya dejado fuera a alguno de los sucesores de algún nodo expandido.
Como en el caso de la búsqueda en anchura convencional este algoritmo requiere un
espacio y un tiempo que son exponenciales en la profundidad del árbol de búsqueda.
Sin embargo, la búsqueda primero en anchura iterativa puede encontrar una
solución que no sea la más próxima al estado
inicial.

Ilustración 2 Tomado de: Inteligencia artificial: métodos, técnicas y aplicaciones, McGraw-Hill


España, 2008.

Un algoritmo de búsqueda es aquel que está diseñado para localizar un elemento con
ciertas propiedades dentro de una estructura de datos.
Las bases de datos en algunos casos representan una cierta complejida en la
prograación brindada, es por ello que la lógica con la que se ejecuta debe ser apropieda
y con elementos que se puedan proporcionar con facilidad, los algoritmos de búsqueda
proporcionan una herramienta importante al diseño de las bases de datos para que los
comandos que se proporcionen puedan localizar con facilidad los elementos que se
necesitan en el momento BUSQUEDA QUE EXISTEN.
BÚSQUEDA LINEAL (SECUENCIAL)
Consiste en recorrer y examinar cada uno de los elementos del array hasta encontrar el
o los elementos buscados, o hasta que se han mirado todos los elementos del array.
Este es el método de búsqueda más lento, pero si nuestra información se encuentra
completamente desordenada es el único que nos podrá ayudar a encontrar el dato que
buscamos. El siguiente algoritmo ilustra un esquema de implementación del algoritmo
de búsqueda secuencial:

for(i=j=0;i<N;i++)
if(array[i]==elemento)
{
solucion[j]=i;
j++;

Este algoritmo se puede optimizar cuando el array está ordenado, en cuyo caso la
condición de salida cambiaría a:

for(i=j=0;array[i]<=elemento;i++)

o cuando sólo interesa conocer la primera ocurrencia del elemento en el array:

for(i=0;i<N;i++)
if(array[i]==elemento)
break;

En este último caso, cuando sólo interesa la primera posición, se puede utilizar un
centinela, esto es, dar a la posición siguiente al último elemento de array el valor del
elemento, para estar seguro de que se encuentra el elemento, y no tener que comprobar
a cada paso si seguimos buscando dentro de los límites del array:

array[N]=elemento; for(i=0;;i++)
if(array[i]==elemento)
break;
Si al acabar el bucle, i vale N esto indica que no se encontró el elemento. El número
medio de comparaciones que hay que hacer antes de encontrar el elemento buscado es
de (N+1)/2.

Búsqueda binaria (dicotómica)

Si los elementos sobre los que se realiza la búsqueda están ordenados, entonces
podemos utilizar un algoritmo de búsqueda mucho más rápido que el secuencial, la
búsqueda binaria. El algoritmo consiste en reducir paulatinamente el ámbito de
búsqueda a la mitad de los elementos, basándose en comparar el elemento a buscar con
el elemento que se encuentra en la mitad del intervalo y en base a esta comparación:
Si el elemento buscado es menor que el elemento medio, entonces sabemos que el
elemento está en la mitad inferior de la tabla.
Si es mayor es porque el elemento está en la mitad superior.
Si es igual se finaliza con éxito la búsqueda ya que se ha encontrado el elemento.
Se puede aplicar tanto a datos en listas lineales (Vectores, Matrices, etc.) como en
árboles binarios de búsqueda. Los prerrequisitos principales para la búsqueda binaria
son:
La lista debe estar ordenada en un orden especifíco de acuerdo al valor de la llave.
Debe conocerse el número de registros.
La búsqueda binaria consiste en dividir el array por su elemento medio en dos
subarrays más pequeños, y comparar el elemento con el del centro. Si coinciden, la
búsqueda se termina. Si el elemento es menor, debe estar (si está) en el primer subarray,
y si es mayor está en el segundo. Por ejemplo, para buscar el elemento 3 en el array
{1,2,3,4,5,6,7,8,9} se realizarían los siguientes pasos:
Se toma el elemento central y se divide el array en dos:
{1,2,3,4}-5-{6,7,8,9}
Como el elemento buscado (3) es menor que el central (5), debe estar en el primer
subarray: {1,2,3,4}
Se vuelve a dividir el array en dos:
{1}-2-{3,4}

Como el elemento buscado es mayor que el central, debe estar en el segundo subarray:
{3,4}
Se vuelve a dividir en dos:
{}-3-{4}
Como el elemento buscado coincide con el central, lo hemos encontrado.
Si al final de la búsqueda todavía no lo hemos encontrado, y el subarray a dividir está
vacio {}, el elemento no se encuentra en el array. La implementación sería:
int desde,hasta,medio,elemento,posicion; // desde y hasta indican los límites del array
que se está mirando.
int array[N];
// Dar valor a elemento.
for(desde=0,hasta=N-1;desde<=hasta;)
{
if(desde==hasta) // si el array sólo tiene un elemento:
{
if(array[desde]==elemento) // si es la solución: posicion=desde; //
darle el valor.
else // si no es el valor:
posicion=-1; // no está en el array. break; //
Salir del bucle.
}
medio=(desde+hasta)/2; // Divide el array en dos. if(array[medio]==elemento) // Si
coincide con el central:
{
posicion=medio; // ese es la solución break; //
y sale del bucle.
}
else
if(array[medio]>elemento) // si es menor:
hasta=medio-1; // elige el array de la izquierda.
else // y si es mayor:
desde=medio+1; // elige el array de la derecha.
}

BÚSQUEDA MEDIANTE TRANSFORMACIÓN DE CLAVES (HASH)


HASTA AHORA LAS TÉCNICAS DE LOCALIZACIÓN DE REGISTROS
VISTAS, EMPLEAN UN PROCESO DE BÚSQUEDA QUE IMPLICA CIERTO
TIEMPO Y ESFUERZO. EL MÉTODO DE TRANSFORMACIÓN DE
CLAVES NOS PERMITE ENCONTRAR DIRECTAMENTE EL REGISTRO
BUSCADO EN TABLAS O ARCHIVOS QUE NO SE ENCUENTRAN
NECESARIAMENTE ORDENADOS, EN UN TIEMPO INDEPENDIENTE DE LA
CANTIDAD DE DATOS.
En los párrafos siguientes se hará referencia a tablas, en lugar de arreglos, como las
estructuras de almacenamiento de la información, pues en general el método de
Hashing se aplica en situaciones que implican el manejo de una considerable cantidad
de información, organizada .
A diferencia de una búsqueda indexada por claves ordinaria, donde usamos el valor de
las claves como índices de un arreglo y necesitamos indispensablemente que los
mismos sean enteros distintos dentro de un rango equivalente al rango de la tabla,
utilizar el método de Hashing nos permite manejar aplicaciones de búsqueda donde no
tenemos claves con características tan limitadas. El resultado es un método de búsqueda
completamente diferente a los métodos basados en comparaciones, ahora en vez de
navegar por las estructuras comparando palabras clave con las claves en los items,
tratamos de referenciar items en una tabla directamente haciendo operaciones
aritméticas para transformar claves en direcciones de la tabla. Esto último se logra
implementando una Función Hash, que se va a encargar de dicha transformación.

Idealmente, todas las claves deberían corresponder con direcciones diferentes, pero es
muy frecuente que dos o mas claves diferentes sean transformadas a la misma
dirección, cuando esto pasa, se dice que se presenta una Colisión. Es por eso que
también se debe implementar algún proceso de resolución de Colisiones, que se va a
encargar de tratar tales situaciones. Uno de los métodos de resolución de colisiones que
existen usa Listas enlazadas y se lo denomina “encadenamiento directo” o “Hashing
abierto” el cual es muy útil en situaciones dinámicas, donde el numero de elementos es
difícil de predecir por adelantado.
El Hashing es un buen ejemplo de balance entre tiempo y espacio. Si no hubiera
limitaciones de memoria, entonces podríamos hacer cualquier búsqueda en un solo
acceso simplemente utilizando la clave como una dirección de memoria. Este ideal no
puede ser llevado a cabo, porque la cantidad de memoria requerida es prohibitiva
cuando la cantidad de registros es considerable. De la misma manera, si no hubiese
limitación de tiempo, podríamos usar un menor espacio en memoria usando un método
secuencial. Hashing provee una manera de usar una razonable cantidad de memoria y
tiempo y lograr un balance entre los dos extremos mencionados. En particular, podemos
lograr el balance deseado simplemente ajustando el tamaño de la tabla, sin necesidad de
re-escribir código o cambiar algoritmos.
En líneas generales podemos decir, que es razonable esperar búsquedas (Search),
borrados (Delete) e inserciones (Insert) en tiempo constante , independientemente del
tamaño de la tabla. O sea que es ideal para aplicaciones que realicen mayoritariamente
este tipo de operaciones, por el
otro lado, Hashing no provee implementaciones eficientes para otras
operaciones como por ejemplo Ordenamiento (Sort) o Selección (Select).
REFERENCIAS

Apuntes de Inteligencia Artificial. (s.f.). Recuperado 23 octubre, 2018, de


https://users.dcc.uchile.cl/%7Eabassi/Cursos/IA/Apuntes/c5.html

Palma Méndez, J. T., & Marín Morales, R. (2008). Inteligencia artificial: Métodos,
técnicas y aplicaciones.España: McGraw-Hill. Pag.392-412. Obtenido
dehttps://bibliotecavirtual.unad.edu.co:2538/lib/unadsp/reader.action?
docID=3194970&query=sistemas+basados+en+el+conocimiento

Palma Méndez, J. T., & Marín Morales, R. (2008). Inteligencia artificial: Métodos,
técnicas y aplicaciones.España: McGraw-Hill. Pag.309-347. Obtenido
dehttps://bibliotecavirtual.unad.edu.co:2538/lib/unadsp/reader.action?
docID=3194970&query=sistemas+basados+en+el+conocimiento

Palma Méndez, J. T., & Marín Morales, R. (2008). Inteligencia artificial: Métodos,
técnicas y aplicaciones.España: McGraw-Hill. Pag.209-249. Obtenido
dehttps://bibliotecavirtual.unad.edu.co:2538/lib/unadsp/reader.action?
docID=3194970&query=sistemas+basados+en+el+conocimiento

3.5 Razonamiento con incertidumbre. (2015, 23 mayo). Recuperado 24 octubre, 2018, de


http://basiliocalixto.blogspot.com/2015/05/35- razonamiento-con-incertidumbre.html

Algoritmo de Busqueda - Inteligencia Artificial. (s.f.). Recuperado 24 octubre, 2018, de


https://sites.google.com/site/inteligenciascarol/algoritmo-de-busqueda

Palma Méndez, J. T., & Marín Morales, R. (2008). Inteligencia artificial: Métodos, técnicas
y aplicaciones. España: McGraw-Hill. Pag.309-347. Obtenido de
https://bibliotecavirtual.unad.edu.co:2538/lib/unadsp/reader.action?
docID=3194970&query=sistemas+basados+en+el+conocimiento
Palma Méndez, J. T., & Marín Morales, R. (2008). Inteligencia artificial:
Métodos, técnicas y aplicaciones. España: McGraw-Hill. Pag.209-249.
Obtenido de
https://bibliotecavirtual.unad.edu.co:2538/lib/unadsp/reader.action?
docID=3194970&query=sistemas+basados+en+el+conocimiento
Espacios de estados Magazine Theme for PivotX by Windmill Web
Work in 2009, released under the Simple Public License
http://www.cs.us.es/~fsancho/?e=33

Métodos de inteligencia artificial instituto nacional de astrofísica y


electrónica https://ccc.inaoep.mx/~esucar/Clases-MetIA/MetIA-03.pdf
«Algoritmos de Búsqueda». Accedido 30 de octubre de 2018.
http://artemisa.unicauca.edu.co/~nediaz/EDDI/cap02.htm.

Aspiazu, Guillermo Choque. «Mente Errabunda: Razonamiento con


Incertidumbre». Mente Errabunda (blog), 5 de julio de 2008.
http://menteerrabunda.blogspot.com/2008/07/razonamiento-con-
incertidumbre.html.

«Espacio de estados». Wikipedia, la enciclopedia libre, 18 de mayo de


2018. https://es.wikipedia.org/w/index.php?
title=Espacio_de_estados&oldid=107908135.

También podría gustarte