Está en la página 1de 25

FASE 2 - ESPACIOS DE ESTADO EN LA IA

Búsqueda en espacios de estado

La búsqueda en espacios de estado (también conocida como búsqueda de árboles o

búsqueda en grafos) es un enfoque utilizado en inteligencia artificial y en particular en el campo

de la resolución de problemas. La idea básica detrás de este enfoque es buscar una solución a un

problema en un espacio de estado, que se puede representar como un grafo o árbol.

En la búsqueda en espacios de estado, el problema se modela como un estado inicial y un

conjunto de posibles acciones que se pueden tomar para llegar a un estado objetivo. Cada acción

lleva a un nuevo estado y cada estado puede tener múltiples acciones posibles. El objetivo es

encontrar una secuencia de acciones que lleven desde el estado inicial al estado objetivo.

Para realizar esta búsqueda, se utilizan diferentes algoritmos, como el algoritmo de

búsqueda en profundidad (DFS), el algoritmo de búsqueda en anchura (BFS), el algoritmo de

búsqueda A* y otros. Cada uno de estos algoritmos utiliza diferentes estrategias para explorar el

espacio de estado y encontrar la solución.

Por ejemplo, en el caso de resolver un rompecabezas como el cubo de Rubik, el estado

inicial es el cubo desordenado y el estado objetivo es el cubo ordenado. Cada acción posible es

mover una de las caras del cubo, y cada estado es una configuración diferente del cubo. La

búsqueda en espacios de estado se utiliza para encontrar la secuencia de movimientos necesarios

para pasar del estado inicial al estado objetivo.

Para que sirve

Se utiliza para resolver una amplia variedad de problemas, desde juegos como el ajedrez

y el Go hasta la planificación de rutas en vehículos autónomos y la resolución de problemas de

lógica complejos.

1
FASE 2 - ESPACIOS DE ESTADO EN LA IA

En términos generales, la búsqueda en espacios de estado se utiliza para encontrar la

solución a un problema, representado como un espacio de estados, que puede ser representado

como un grafo o un árbol. Cada nodo en el grafo representa un estado posible del problema, y las

aristas del grafo representan las transiciones entre estados posibles.

Por ejemplo, en el caso del problema del cubo de Rubik, el espacio de estados se puede

representar como un grafo en el que cada nodo representa un estado posible del cubo, y cada

arista representa una transición posible entre estados.

La búsqueda en espacios de estado se utiliza para encontrar la secuencia de transiciones

necesarias para pasar de un estado inicial a un estado objetivo, y hay diferentes algoritmos que se

pueden utilizar para realizar esta búsqueda, como el algoritmo de búsqueda en profundidad, el

algoritmo de búsqueda en anchura y el algoritmo A*.

Además, la búsqueda en espacios de estado también se utiliza en otros campos de la

inteligencia artificial, como el aprendizaje por refuerzo, donde se utiliza para encontrar la mejor

política (una secuencia de acciones) para maximizar una recompensa en un entorno de juego.

Como funciona

El proceso de búsqueda en espacios de estado se realiza mediante el uso de algoritmos

específicos que exploran el espacio de estados en busca de una solución.

A continuación, explicaré cómo funciona el proceso de búsqueda en espacios de estado

utilizando el ejemplo del problema del cubo de Rubik:

1. Representación del problema como un espacio de estados: El primer paso para

realizar una búsqueda en espacios de estado es representar el problema como un espacio

de estados. En el caso del cubo de Rubik, el espacio de estados se puede representar

2
FASE 2 - ESPACIOS DE ESTADO EN LA IA

como un grafo en el que cada nodo representa un estado posible del cubo, y las aristas del

grafo representan las transiciones entre estados posibles.

2. Estado inicial y estado objetivo: El siguiente paso es definir el estado inicial y el estado

objetivo del problema. En el caso del cubo de Rubik, el estado inicial es el cubo

desordenado y el estado objetivo es el cubo ordenado.

3. Definición de acciones: A continuación, se definen las posibles acciones que se pueden

tomar para pasar de un estado a otro. En el caso del cubo de Rubik, las posibles acciones

son rotar una de las caras del cubo en el sentido de las agujas del reloj o en el sentido

contrario.

4. Algoritmo de búsqueda: Una vez definido el problema, se utiliza un algoritmo de

búsqueda para encontrar la secuencia de acciones necesarias para pasar del estado inicial

al estado objetivo. Hay varios algoritmos de búsqueda que se pueden utilizar, como el

algoritmo de búsqueda en profundidad, el algoritmo de búsqueda en anchura, el algoritmo

A* y otros.

El algoritmo de búsqueda en profundidad (DFS) comienza explorando desde el estado

inicial y continúa moviéndose hacia abajo en el árbol de estados hasta que encuentra el

estado objetivo. El algoritmo de búsqueda en anchura (BFS) comienza explorando todos

los estados a la misma profundidad antes de pasar a la siguiente profundidad.

El algoritmo A* es un enfoque de búsqueda heurística que utiliza una función de

evaluación para seleccionar el siguiente estado a explorar en función de la distancia al

estado objetivo y el costo de alcanzar ese estado.

5. Evaluación de estados: Durante la búsqueda, se evalúan los estados para determinar si

son viables o no. Por ejemplo, en el caso del cubo de Rubik, un estado no viable sería

3
FASE 2 - ESPACIOS DE ESTADO EN LA IA

aquel en el que el cubo tiene piezas en posiciones incorrectas o donde las caras no están

alineadas correctamente.

6. Almacenamiento de soluciones: Una vez que se encuentra una solución, se almacena en

memoria y se devuelve al usuario. En el caso del cubo de Rubik, la solución sería la

secuencia de movimientos necesarios para pasar del estado inicial al estado objetivo.

En resumen, la búsqueda en espacios de estado es un proceso que se utiliza para

encontrar la solución a un problema modelado como un espacio de estados. El proceso de

búsqueda implica la representación del problema como un espacio de estados, la definición de un

estado inicial y un estado objetivo, la definición de las posibles acciones, la utilización de un

algoritmo de búsqueda para encontrar la solución y la evaluación de los estados para determinar

si son viable

4
FASE 2 - ESPACIOS DE ESTADO EN LA IA

Razonamiento con incertidumbre

El razonamiento con incertidumbre es una rama de la inteligencia artificial que se ocupa

de la representación, el modelado y la resolución de problemas en situaciones donde no se tiene

información completa o precisa. Se utiliza cuando existe una falta de certeza o conocimiento

acerca de las variables o eventos relevantes de un problema.

En muchas situaciones, es difícil o imposible obtener información completa y precisa

sobre todos los aspectos de un problema. Por ejemplo, en la toma de decisiones empresariales, no

siempre se dispone de información completa sobre los costos, ingresos, preferencias de los

clientes y otros factores. En la medicina, no siempre se dispone de información completa sobre

los síntomas, las causas y los efectos de una enfermedad.

Para abordar estos problemas, se utilizan técnicas de razonamiento con incertidumbre,

como la teoría de la probabilidad y la lógica difusa. Estas técnicas permiten modelar y manejar la

incertidumbre en la información, lo que permite tomar decisiones más informadas y reducir el

riesgo de errores.

La teoría de la probabilidad es la técnica más comúnmente utilizada en el razonamiento

con incertidumbre. Permite modelar la incertidumbre en la información mediante el uso de

distribuciones de probabilidad. Estas distribuciones permiten asignar una probabilidad a cada

posible resultado de un evento, lo que permite calcular la probabilidad de cualquier combinación

de resultados.

La lógica difusa, por otro lado, se utiliza para modelar la incertidumbre en las relaciones

entre las variables. Permite modelar el grado de certeza o incertidumbre en una afirmación

mediante el uso de términos difusos, como "muy probable", "poco probable", "posiblemente",

etc.

5
FASE 2 - ESPACIOS DE ESTADO EN LA IA

Para que sirve

El razonamiento con incertidumbre es útil en una amplia variedad de aplicaciones donde

la información es incompleta o incierta. A continuación, se presentan algunos ejemplos de

aplicaciones donde se utiliza el razonamiento con incertidumbre:

1. Sistemas de recomendación: Los sistemas de recomendación utilizan la información del

historial de un usuario para predecir qué productos o servicios pueden ser de su interés.

Debido a la gran cantidad de información y la diversidad de preferencias de los usuarios,

es difícil hacer recomendaciones precisas sin tener en cuenta la incertidumbre.

2. Diagnóstico médico: Los médicos a menudo deben tomar decisiones basadas en

información incompleta o incierta. Por ejemplo, en el caso de un paciente con síntomas

vagos, puede ser difícil determinar con precisión la causa subyacente de la enfermedad.

El razonamiento con incertidumbre se puede utilizar para modelar la incertidumbre en la

información de los pacientes y ayudar a los médicos a tomar decisiones informadas.

3. Control de robots: Los robots autónomos a menudo tienen que tomar decisiones en

situaciones inciertas. Por ejemplo, un robot de limpieza puede tener que navegar en una

habitación llena de obstáculos. El razonamiento con incertidumbre se puede utilizar para

modelar la incertidumbre en la posición y la velocidad del robot y ayudarlo a tomar

decisiones informadas.

4. Sistemas de detección de fraudes: Los sistemas de detección de fraudes en línea deben

examinar grandes cantidades de datos para identificar transacciones sospechosas. Debido

a la gran cantidad de información y la complejidad de las transacciones, es difícil

identificar fraudes sin tener en cuenta la incertidumbre.

6
FASE 2 - ESPACIOS DE ESTADO EN LA IA

En resumen, el razonamiento con incertidumbre es una herramienta esencial en muchas

aplicaciones donde la información es incompleta o incierta. Permite modelar y manejar la

incertidumbre en la información, lo que permite tomar decisiones más informadas y reducir el

riesgo de errores.

7
FASE 2 - ESPACIOS DE ESTADO EN LA IA

Algoritmos de búsqueda

Los algoritmos de búsqueda son una herramienta fundamental en la resolución de

problemas en inteligencia artificial y ciencias de la computación. Estos algoritmos son utilizados

para encontrar soluciones a problemas mediante la exploración sistemática de un espacio de

búsqueda, que representa todas las posibles soluciones al problema.

Un algoritmo de búsqueda típicamente recibe una descripción del problema a resolver y

un conjunto de reglas para generar nuevos estados a partir de estados existentes. Estos estados se

representan como nodos en un grafo y las reglas de generación de nuevos estados se representan

como arcos que conectan los nodos.

El objetivo del algoritmo de búsqueda es encontrar un camino de un nodo de inicio a un

nodo de destino que represente una solución al problema. En muchos casos, el algoritmo debe

buscar una solución óptima, es decir, una solución que minimice o maximice una función de

costo o utilidad.

Existen varios tipos de algoritmos de búsqueda, cada uno con sus propias características y

ventajas. A continuación, se describen algunos de los más comunes:

1. Búsqueda en profundidad (DFS): Este algoritmo comienza en el nodo de inicio y

explora cada rama del árbol de búsqueda hasta encontrar un nodo de destino o hasta que

se agoten todas las ramas. DFS es simple de implementar y utiliza menos memoria que

otros algoritmos, pero no siempre encuentra la solución óptima.

2. Búsqueda en amplitud (BFS): Este algoritmo explora todos los nodos a una

profundidad dada antes de pasar a la siguiente profundidad. BFS encuentra siempre la

solución óptima si existe, pero puede requerir una gran cantidad de memoria.

8
FASE 2 - ESPACIOS DE ESTADO EN LA IA

3. Búsqueda en costo uniforme: Este algoritmo explora el grafo mediante la expansión de

los nodos con menor costo de camino. Encuentra siempre la solución óptima si los costos

de los arcos son no negativos.

4. Búsqueda A*: Este algoritmo combina la búsqueda en costo uniforme con una heurística

que estima el costo del camino restante hasta la solución. La heurística guía la búsqueda

hacia los nodos más prometedores y puede reducir significativamente el número de nodos

expandidos.

Para que sirven

Son fundamentales para la resolución de problemas en diversas áreas de la informática,

como la inteligencia artificial, la robótica, la optimización, entre otras. A continuación, se

describen algunas de las principales aplicaciones de los algoritmos de búsqueda:

1. Resolución de problemas: Los algoritmos de búsqueda se utilizan para encontrar

soluciones a problemas complejos en áreas como la planificación, la toma de decisiones,

el diagnóstico y el control. Por ejemplo, en la planificación de rutas para vehículos

autónomos, se puede utilizar un algoritmo de búsqueda para encontrar la ruta más

eficiente desde el punto de partida hasta el destino.

2. Optimización: Los algoritmos de búsqueda se utilizan para encontrar la solución óptima

a problemas de optimización. Por ejemplo, en la optimización de redes de transporte, se

puede utilizar un algoritmo de búsqueda para encontrar la ruta más rápida o económica

para transportar bienes desde un punto a otro.

3. Juegos: Los algoritmos de búsqueda se utilizan para encontrar la mejor jugada en juegos

como el ajedrez, el go y el póquer. Por ejemplo, en el ajedrez, se puede utilizar un

algoritmo de búsqueda para encontrar la jugada óptima en un momento dado del juego.

9
FASE 2 - ESPACIOS DE ESTADO EN LA IA

4. Reconocimiento de patrones: Los algoritmos de búsqueda se utilizan para encontrar

patrones en grandes conjuntos de datos. Por ejemplo, en el reconocimiento de voz, se

puede utilizar un algoritmo de búsqueda para encontrar la mejor correspondencia entre el

habla del usuario y las palabras en un vocabulario.

5. Sistemas de recomendación: Los algoritmos de búsqueda se utilizan para recomendar

productos, servicios y contenidos a los usuarios. Por ejemplo, en un sitio de comercio

electrónico, se puede utilizar un algoritmo de búsqueda para recomendar productos que

sean relevantes para los intereses y necesidades del usuario.

En pocas palabras los algoritmos de búsqueda permiten encontrar soluciones a problemas

complejos, optimizar procesos, encontrar patrones en grandes conjuntos de datos, entre otras

aplicaciones.

10
FASE 2 - ESPACIOS DE ESTADO EN LA IA

Como se aplican los temas anteriores en el prototipo

Para el desarrollo de un prototipo de salud que ayude a diagnosticar enfermedades

basándose en los síntomas, se pueden aplicar técnicas de búsqueda en espacios de estado,

razonamiento con incertidumbre y algoritmos de búsqueda heurística para mejorar la precisión y

eficiencia del diagnóstico.

Búsqueda en espacios de estado: Una forma de abordar el problema del diagnóstico es

considerarlo como un problema de búsqueda en un espacio de posibles enfermedades. En este

espacio de búsqueda, cada estado representa una posible enfermedad y cada transición representa

una posible causa o relación entre los síntomas y la enfermedad. Una estrategia de búsqueda

efectiva podría ser la búsqueda en profundidad limitada (LDFS), que explora las posibles

enfermedades a partir de un conjunto de síntomas, examinando primero los síntomas más

probables y descartando las enfermedades menos probables.

Razonamiento con incertidumbre: dado que los síntomas pueden tener diferentes

niveles de relevancia para diferentes enfermedades, se debe considerar la incertidumbre al

momento de realizar el diagnóstico. Para abordar este problema, se puede utilizar la teoría de la

probabilidad y la lógica difusa para modelar la incertidumbre en los datos y las relaciones entre

los síntomas y las enfermedades. Se puede utilizar un sistema de inferencia basado en reglas que

combine la información de los síntomas con la probabilidad de que cada enfermedad sea la causa

subyacente de los síntomas.

Algoritmos de búsqueda: para hacer que el proceso de diagnóstico sea más eficiente, se

pueden utilizar algoritmos de búsqueda heurística que guíen la búsqueda hacia las enfermedades

más probables en lugar de explorar todo el espacio de búsqueda. Por ejemplo, el algoritmo de

búsqueda A* podría ser utilizado para encontrar la enfermedad más probable dadas las

11
FASE 2 - ESPACIOS DE ESTADO EN LA IA

observaciones de los síntomas. Además, se pueden utilizar técnicas de aprendizaje automático

para mejorar la precisión del diagnóstico, utilizando conjuntos de datos de casos pasados de

pacientes y enfermedades conocidas.

Prototipo de algoritmo

Preparación de datos: Antes de comenzar a diseñar el algoritmo, es necesario obtener y

preparar los datos. Se necesitan dos conjuntos de datos: uno que contenga los síntomas

observados del paciente y otro que contenga las relaciones entre los síntomas y las

enfermedades. Este último conjunto de datos puede ser obtenido a partir de una base de datos

médica o utilizando técnicas de extracción de conocimiento de datos médicos.

Búsqueda en espacios de estado: Una vez que se tienen los datos, se puede comenzar a

utilizar la técnica de búsqueda en espacios de estado para encontrar la enfermedad más probable

dadas las observaciones de los síntomas. El algoritmo de búsqueda en profundidad limitada

(LDFS) se puede utilizar para explorar el espacio de búsqueda de las enfermedades posibles. El

algoritmo LDFS explorará primero los síntomas más probables y descartará las enfermedades

menos probables.

Código:

def LDFS(sintomas, enfermedades, profundidad):

visitados = set()

stack = [(enfermedad, 1) for enfermedad in enfermedades]

while stack:

enfermedad, profundidad_actual = stack.pop()

if profundidad_actual > profundidad:

continue

12
FASE 2 - ESPACIOS DE ESTADO EN LA IA

if enfermedad in visitados:

continue

visitados.add(enfermedad)

probabilidad = calcular_probabilidad(enfermedad, sintomas)

if probabilidad > 0.5:

return enfermedad

relacionados = obtener_relacionados(enfermedad)

for relacionado in relacionados:

if relacionado not in visitados:

stack.append((relacionado, profundidad_actual + 1))

return None

Razonamiento con incertidumbre: Una vez que se ha encontrado una enfermedad

probable, se puede utilizar la teoría de la probabilidad y la lógica difusa para modelar la

incertidumbre en los datos y las relaciones entre los síntomas y las enfermedades. Se puede

utilizar un sistema de inferencia basado en reglas que combine la información de los síntomas

con la probabilidad de que cada enfermedad sea la causa subyacente de los síntomas.

Código:

def inferencia_basada_en_reglas(sintomas, enfermedad):

probabilidad = calcular_probabilidad(enfermedad, sintomas)

if probabilidad < 0.5:

return None

if sintomas['fiebre'] and sintomas['tos']:

if enfermedad == 'gripe':

13
FASE 2 - ESPACIOS DE ESTADO EN LA IA

return 0.9

elif enfermedad == 'resfriado':

return 0.1

if sintomas['dolor_de_garganta'] and sintomas['dolor_de_cabeza']:

if enfermedad == 'amigdalitis':

return 0.8

elif enfermedad == 'migraña':

return 0.2

return None

Aprendizaje automático: Finalmente es importante contar con una base de datos de

síntomas y enfermedades para poder realizar la búsqueda en el espacio de estado. Esta base de

datos puede ser obtenida de fuentes médicas confiables y debe ser preprocesada para su uso en el

algoritmo.

Una vez que se tienen los datos necesarios, se puede comenzar la implementación del

algoritmo de búsqueda en espacios de estado. A continuación, se presenta un ejemplo de

implementación en Python:

Código

# Definir la base de datos de síntomas y enfermedades

sintomas = {

'fiebre': ['Gripe', 'Neumonía', 'Infección urinaria'],

'tos': ['Gripe', 'Neumonía', 'Bronquitis'],

'dolor de cabeza': ['Gripe', 'Migraña'],

'dolor de garganta': ['Gripe', 'Amigdalitis'],

14
FASE 2 - ESPACIOS DE ESTADO EN LA IA

'dolor muscular': ['Gripe', 'Influenza'],

'vómito': ['Gripe', 'Intoxicación alimentaria'],

'diarrea': ['Gripe', 'Intoxicación alimentaria']

# Definir la función de búsqueda en espacios de estado

def busqueda_estado(sintomas, enfermedades):

sintomas_pendientes = sintomas.copy()

enfermedades_posibles = enfermedades.copy()

while len(enfermedades_posibles) > 1 and len(sintomas_pendientes) > 0:

sintoma_actual = list(sintomas_pendientes.keys())[0]

enfermedades_filtradas = []

for enfermedad in enfermedades_posibles:

if sintoma_actual in sintomas[enfermedad]:

enfermedades_filtradas.append(enfermedad)

if len(enfermedades_filtradas) == 1:

return enfermedades_filtradas[0]

elif len(enfermedades_filtradas) > 1:

enfermedades_posibles = enfermedades_filtradas

sintomas_pendientes.pop(sintoma_actual)

15
FASE 2 - ESPACIOS DE ESTADO EN LA IA

if len(enfermedades_posibles) == 1:

return enfermedades_posibles[0]

else:

return "No se pudo determinar la enfermedad"

# Ejemplo de uso

sintomas_paciente = ['fiebre', 'dolor de cabeza', 'dolor muscular']

enfermedades_posibles = list(set(sum(sintomas.values(), [])))

enfermedad_diagnosticada = busqueda_estado(dict.fromkeys(sintomas_paciente),

enfermedades_posibles)

print(f"El paciente podría tener {enfermedad_diagnosticada}")

Este algoritmo recibe como entrada la base de datos de síntomas y enfermedades, así

como los síntomas del paciente. En la función `busqueda_estado`, se realiza la búsqueda en

espacios de estado para determinar la enfermedad más probable a partir de los síntomas del

paciente. El algoritmo recorre los síntomas del paciente y filtra las enfermedades posibles de

acuerdo con la base de datos. Si hay más de una enfermedad posible, se continúa filtrando por

los siguientes síntomas hasta que se determina una enfermedad o se agotan los síntomas.

Para aplicar los conceptos de búsqueda en espacios de estado y razonamiento con

incertidumbre en el desarrollo del prototipo de salud, se podría utilizar una red bayesiana para

modelar la probabilidad de una enfermedad dado un conjunto de síntomas observados. La red

bayesiana es un modelo probabilístico que representa las relaciones entre las variables y sus

distribuciones de probabilidad condicional.

16
FASE 2 - ESPACIOS DE ESTADO EN LA IA

En este caso, se pueden modelar los síntomas como variables aleatorias y las

enfermedades como nodos hijos que dependen de los síntomas. El modelo se entrena con datos

históricos de pacientes diagnosticados con diversas enfermedades y sus síntomas

correspondientes. Una vez entrenado el modelo, se puede utilizar para diagnosticar una

enfermedad dada una serie de síntomas observados.

A continuación, se presenta un ejemplo de un algoritmo en Python para la clasificación

de enfermedades basado en una red bayesiana:

Código

import numpy as np

import pandas as pd

import pgmpy

from pgmpy.models import BayesianModel

from pgmpy.factors.discrete import TabularCPD

# Define los nodos de la red bayesiana

symptoms = ['Fiebre', 'Tos', 'Dolor de cabeza']

diseases = ['Gripe', 'Resfriado']

# Define la estructura de la red bayesiana

model = BayesianModel([('Fiebre', 'Gripe'), ('Tos', 'Gripe'), ('Dolor de cabeza',

'Resfriado')])

# Define las distribuciones de probabilidad condicional (CPDs) de los nodos

17
FASE 2 - ESPACIOS DE ESTADO EN LA IA

cpd_fiebre = TabularCPD(variable='Fiebre', variable_card=2, values=[[0.2, 0.8]])

cpd_tos = TabularCPD(variable='Tos', variable_card=2, values=[[0.3, 0.7]])

cpd_dolor = TabularCPD(variable='Dolor de cabeza', variable_card=2, values=[[0.4,

0.6]])

cpd_gripe = TabularCPD(variable='Gripe', variable_card=2,

evidence=['Fiebre', 'Tos'],

evidence_card=[2, 2],

values=[[0.9, 0.6, 0.4, 0.1],

[0.1, 0.4, 0.6, 0.9]])

cpd_resfriado = TabularCPD(variable='Resfriado', variable_card=2,

evidence=['Dolor de cabeza'],

evidence_card=[2],

values=[[0.7, 0.3],

[0.3, 0.7]])

# Agrega los CPDs al modelo

model.add_cpds(cpd_fiebre, cpd_tos, cpd_dolor, cpd_gripe, cpd_resfriado)

# Verifica si el modelo es válido

model.check_model()

# Diagnostica la enfermedad dada una serie de síntomas observados

def diagnose(symptoms):

18
FASE 2 - ESPACIOS DE ESTADO EN LA IA

evidence = {symptom: True for symptom in symptoms}

prob_gripe = model.query(variables=['Gripe'], evidence=evidence)['Gripe'].values[1]

prob_resfriado = model.query(variables=['Resfriado'],

evidence=evidence)['Resfriado'].values[1]

if prob_gripe > prob_resfriado:

return 'Gripe'

else:

return 'Res

Continuando con el código, una vez que tenemos el grafo de síntomas y enfermedades,

podemos implementar un algoritmo de búsqueda para encontrar la enfermedad más probable

dadas las observaciones del paciente.

A continuación, se presenta una posible implementación del algoritmo de búsqueda en

profundidad limitada (depth-limited search) para encontrar la enfermedad más probable dado un

conjunto de síntomas:

Código

def depth_limited_search(problem, limit=10):

explored = set()

frontier = [(problem.get_start_state(), 0)]

while frontier:

state, depth = frontier.pop()

if problem.is_goal_state(state):

return state

if depth < limit and state not in explored:

19
FASE 2 - ESPACIOS DE ESTADO EN LA IA

explored.add(state)

for action in problem.get_successors(state):

successor, cost = action

frontier.append((successor, depth+1))

return None

class DiseaseDiagnosisProblem:

def __init__(self, graph, observations):

self.graph = graph

self.observations = observations

def get_start_state(self):

return ('START', 1.0)

def is_goal_state(self, state):

return state[0] != 'START'

def get_successors(self, state):

successors = []

if state[0] == 'START':

for node in self.graph.nodes:

if node.startswith('D_'):

successors.append((node, 1.0/len(self.graph.nodes)))

20
FASE 2 - ESPACIOS DE ESTADO EN LA IA

else:

disease, belief = state

for neighbor in self.graph.neighbors(disease):

if neighbor.startswith('S_'):

evidence = self.observations.get(neighbor, 0.5)

belief *= self.graph[disease][neighbor]['weight'][evidence]

else:

successors.append((neighbor, 1.0))

successors = [(disease, belief*weight) for disease, weight in successors]

total_weight = sum(weight for _, weight in successors)

successors = [(disease, weight/total_weight) for disease, weight in successors]

return successors

En este ejemplo, `depth_limited_search` es una función que implementa el algoritmo de

búsqueda en profundidad limitada, que toma como entrada un problema y un límite de

profundidad y devuelve el estado objetivo si se encuentra dentro del límite de profundidad o

`None` en caso contrario.

La clase `DiseaseDiagnosisProblem` define el problema de diagnóstico de enfermedades,

donde el grafo es la representación del conocimiento previo del experto y las observaciones son

los síntomas del paciente. El método `get_start_state` devuelve el estado inicial, que en este caso

es el estado especial 'START' con probabilidad 1.0. El método `is_goal_state` devuelve True si

el estado es diferente de 'START'. El método `get_successors` devuelve los sucesores del estado

dado, que en este caso son las enfermedades que pueden ser causadas por los síntomas

observados.

21
FASE 2 - ESPACIOS DE ESTADO EN LA IA

Con esta implementación, se puede llamar a la función `depth_limited_search` con una

instancia del problema `DiseaseDiagnosisProblem` para encontrar la enfermedad más probable

dadas las observaciones del paciente:

Código

observations = {'S_Fiebre': 0.9, 'S_Tos': 0.7}

problem = DiseaseDiagnosisProblem(graph, observations)

solution = depth_limited_search(problem)

print(solution)

Este código imprimirá el nombre de la enfermedad más probable dadas las observaciones

del paciente.

Se puede definir una función `diagnose` que reciba como argumentos los síntomas del

paciente y la base de conocimientos. Esta función llamará a la función `find_matching_disease`

para encontrar las enfermedades que coinciden con los síntomas, y luego devolverá una lista con

los nombres de las enfermedades encontradas:

Código

def diagnose(symptoms, knowledge_base):

matching_diseases = find_matching_disease(symptoms, knowledge_base)

return [disease['name'] for disease in matching_diseases]

Finalmente, podemos probar nuestra función `diagnose` con una base de conocimientos

que incluya varias enfermedades y sus síntomas correspondientes:

Código

knowledge_base = [

{'name': 'Gripe', 'symptoms': ['fiebre', 'tos', 'dolor de cabeza']},

22
FASE 2 - ESPACIOS DE ESTADO EN LA IA

{'name': 'Resfriado', 'symptoms': ['fiebre baja', 'congestión nasal', 'dolor de garganta']},

{'name': 'Infección de oído', 'symptoms': ['dolor de oído', 'dificultad para escuchar',

'fiebre baja']},

symptoms = ['fiebre', 'tos', 'dolor de cabeza']

diseases = diagnose(symptoms, knowledge_base)

print(diseases)

resultado = ['Gripe']

Indicando que el paciente probablemente tiene gripe, ya que los síntomas que presenta

coinciden con los síntomas de la enfermedad "Gripe" en la base de conocimientos.

23
FASE 2 - ESPACIOS DE ESTADO EN LA IA

Bibliografía

ACM Transactions on Intelligent Systems and Technology (TIST). (n.d.). Retrieved March 25,

2023, from https://dl.acm.org/journal/tist

Artificial Intelligence A Modern Approach Third Edition. (n.d.).

https://people.engr.tamu.edu/guni/csce421/files/AI_Russell_Norvig.pdf

de, C. (2004, December 2). algoritmo diseñado para localizar un elemento con ciertas

propiedades dentro de una estructura de datos. Wikipedia.org; Wikimedia Foundation,

Inc. https://es.wikipedia.org/wiki/Algoritmo_de_b%C3%BAsqueda

de, C. (2012, December 29). Búsqueda en el espacio de estados. Wikipedia.org; Wikimedia

Foundation, Inc.

https://es.wikipedia.org/wiki/B%C3%BAsqueda_en_el_espacio_de_estados

Iagua. (28 de 11 de 2022). Tendencias de la Inteligencia Artificial. Obtenido de

https://www.iagua.es/noticias/idrica/tendencias-inteligencia-artificial-2022-incorporando-

aprendizaje-procesos

IEEE Transactions on Neural Networks and Learning Systems. (n.d.). Retrieved March 25, 2023,

from https://ieeexplore.ieee.org/xpl/RecentIssue.jsp?punumber=5962385

Journal of Artificial Intelligence Research (JAIR). (n.d.). Retrieved March 25, 2023, from

https://www.jair.org/index.php/jair

López de Mántaras Badia, R., & Meseguer gonzález , P. (2017). Inteligencia Artificial. CSIC

Consejo Superior de Investigaciones Científicas. Pag.35-54. Obtenido de https://elibro-

net.bibliotecavirtual.unad.edu.co/es/ereader/unad/42319

24
FASE 2 - ESPACIOS DE ESTADO EN LA IA

Nilsson, N. J. (1998). Artificial Intelligence. Morgan Kaufmann.

https://www.elsevier.com/books/artificial-intelligence-a-new-synthesis/nilsson/978-1-

55860-535-0

Olier, E. (1 de 2022). Inteligencia Artificial: Aplicaciones a la defensa. Obtenido de

https://www.ieee.es/Galerias/fichero/docs_investig/2022/DIEEEINV01_2022_EDUOLI_

Inteligencia.pdf

Razonamiento con Incertidumbre. (2023, March 26). Blogspot.com.

http://menteerrabunda.blogspot.com/2008/07/razonamiento-con-incertidumbre.html

25

También podría gustarte