Ingenier´ıa en Informática

Anuncio
Ingenierı́a en
Informática
Inteligencia Artificial
Enero 2007
Departamento de Informática
Universidad Carlos III de Madrid
Soluciones a la Hoja de Ejercicios 3:
Representación
Comentarios generales sobre los ejercicios
• Asumiendo que se conocen los contenidos teóricos, el tiempo estimado
para realizar los ejercicios es de 2 horas
• Describir las soluciones a los ejercicios de una manera lo más formal
posible
Ejercicio 1
Modelo del dominio
Predicados
origen(Pasajero,Piso)
destino(Pasajero,Piso)
encima(Piso1,Piso2)
a-bordo(Pasajero, Ascensor)
atendido(Pasajero)
en(Ascensor,Piso)
Operador
entrar(Pasajero,Ascensor,Piso)
salir(Pasajero,Ascensor,Piso)
subir(Ascensor,Pini,Pfin)
bajar(Ascensor,Pini,Pfin)
Precondiciones
origen(Pasajero,Piso),
en(Ascensor,Piso)
destino(Pasajero,Piso),
a-bordo(Pasajero,Ascensor),
en(Ascensor,Piso)
en(Ascensor,Pini),
encima(Pfin,Pini)
en(Ascensor,Pini),
encima(Pini,Pfin)
Efectos
a-bordo(Pasajero,Ascensor)
¬a-bordo(Pasajero,Ascensor),
atendido(Pasajero)
¬en(Ascensor,Pini),
en(Ascensor,Pfin)
¬en(Ascensor,Pini),
en(Ascensor,Pfin)
Definición del problema
Estado Inicial
encima(piso9,piso8), encima(piso8,piso7), encima(piso7,piso6), encima(piso6,piso5), encima(piso5,piso4),
encima(piso4,piso3), encima(piso3,piso2), encima(piso2,piso1), encima(piso1,piso0),
origen(pasajero0,piso1), destino(pasajero0,piso0),
origen(pasajero1,piso3), destino(pasajero1,piso7),
en(ascensor0,piso0), en(ascensor1,piso0)
Metas
atendido(pasajero0), atendido(pasajero1)
Secuencia implicaciones lógicas que resuelven el problema
atendido(pasajero0), ¬a-bordo(pasajero0,ascensor0) ← salir(pasajero0,ascensor0,piso0)
a-bordo(pasajero0,ascensor0) ← entrar(pasajero0,ascensor0,piso1)
en(ascensor0,piso1), ¬en(ascensor0,piso0) ← subir(ascensor0,piso0,piso1)
en(ascensor0, piso0), ¬en(ascensor0,piso1) ← bajar(ascensor0,piso1,piso0)
atendido(pasajero1), ¬a-bodo(pasajero1,ascensor0) ← salir(pasajero1,ascensor0,piso7)
a-bordo(pasajero1,ascensor0) ← entrar(pasajero1,ascensor0,piso3)
en(ascensor0,piso3), ¬en(ascensor0,piso0) ← subir(ascensor0,piso0,piso3)
en(ascensor0, piso7), ¬en(ascensor0,piso3) ← subir(ascensor0,piso3,piso7)
Ejercicio 2
El conjunto de reglas serı́a:
REGLA 1: Comprueba si los quemadores de la cocina estan rotos
IF problema(quemadores),quemador(X,roto)
THEN (print ’El quemador ’ X ’ no funcionan. Debe ser remplazado’),
¬problema(quemadores)
REGLA 2: Comprueba los reguladores de los quemadores
IF problema(quemadores),¬quemador(X,roto),regulador(X,averiado)
THEN (print ’Sustituya el regulador del quemador ’ X
’probablemente, el agua ha penetrado en el causando un cortocircuito.’),
¬problema(quemadores)
REGLA 3: Comprueba la unidad de electrodos del quemador
IF problema(quemadores),¬quemador(X,roto),¬regulador(X,averiado),electrodo(X,mal)
THEN (print ’el electrodo del quemador’ X ’funciona mal y debe ser reemplazado’)
¬problema(quemadores)
REGLA 4: Comprueba si el problema es mas apropiado para un profesional
IF problema(quemadores),¬quemador(X,roto),¬regulador(X,averiado),¬electrodo(X,mal)
THEN (print ’El problema deberı́a ser tratado por un profesional’
’ya que es peligroso trabajar con las partes restantes de la cocina.’)
REGLA 5: Comprueba si el encendedor del horno averiado
IF problema(horno),encendedor(averiado),¬salida(limpia)
THEN (print ’Reemplace el encendedor del horno.’
’** ATENCION - no toque la bobina durante la instalación’
’ ya que el aceite de sus dedos la estropearı́a ***’)
¬problema(horno)
REGLA 6: Comprueba orificio del encendedor
IF problema(horno),¬encendedor(averiado),¬salida(limpia)
THEN (print ’Las salpicaduras pueden haber obstruido la salida del gas.’
’Desenrosque el quemador y lı́mpielo. Extienda jabón detergente’
’y agua alrededor de la salida del quemador, y conecte de nuevo el gas.’)
¬problema(horno)
REGLA 7: Regla por si el problema es mas apropiado para un profesional
IF problema(horno),¬encendedor(averiado),salida(limpia)
THEN (print ’El problema deberı́a ser tratado por un profesional’
’ya que es peligroso trabajar con las partes restantes’
’relacionadas con gas.’
El realizar encadenamiento hacia adelante con la Base de Hechos dada se dispararı́a únicamente la regla 7:
Base de Hechos
problema(horno)
¬encendedor(averiado)
salida(limpia)
REGLA 7:
IF problema(horno),¬encendedor(averiado),salida(limpia)
THEN (print ’El problema deberı́a ser tratado por un profesional’
’ya que es peligroso trabajar con las partes restantes’
’relacionadas con gas.’
Ejercicio 3
Representación de un modelo del dominio con marcos:
Cliente
es-un:
Atributo Valor
nombre - cadena
tarjeta - instancia de Tarjeta
Tarjeta
es-un:
Atributo Valor
numero - número
caducidad - fecha
Compañı́a
es-un:
Atributo Valor
nombre - cadena
vuelos - lista de instancias de Vuelo
Vuelo
es-un:
Atributo Valor
id - número
origen - cadena
destino - cadena
fecha-salida - fecha
fecha-llegada - fecha
plazas - lista de instancias de Plaza
Plaza
es-un:
Atributo Valor
id - número
precio - número
estado - número
Reserva
es-un:
Atributo Valor
pasajero - cadena
vuelo - instancia de Vuelo
plaza - instancia de Plaza
cliente - instancia de Cliente
Billete
es-un:
Atributo Valor
pasajero - cadena
vuelo - instancia de Vuelo
plaza - instancia de Plaza
cliente - instancia de Cliente
Los métodos necesarios serı́an:
consultar-vuelos.Compa~
nı́a(self, origen, destino, fecha-salida, fecha-llegada){
FOR vuelo in get(self,vuelos)
IF get(vuelo,origen) = origen and
get(vuelo,destino) = destino and
get(vuelo,fecha-salida) = fecha-salida and
get(vuelo,fecha-llegada) = fecha-llegada
THEN IF consultar-plazas-disponibles.Vuelo(vuelo)
THEN mostrar(vuelo)
}
consultar-plazas-disponibles.Vuelo(self){
consultar-plazas-disponibles = false
FOR plaza in get(self,plazas)
IF get(plaza,estado) = DISPONIBLE
THEN consultar-plazas-disponibles = true
BREAK
}
crear.Reserva(self, pasajero, vuelo, cliente){
FOR plaza in get(vuelo,plazas)
IF get(plaza,estado) = DISPONIBLE
THEN set(plaza,estado,RESERVADA)
set(self,pasajero,pasajero)
set(self,vuelo,vuelo)
set(self,plaza,plaza)
set(self,cliente,cliente)
BREAK
}
anular.Reserva(self){
set(get(self,plaza),estado,DISPONIBLE)
set(self,pasajero,NULL)
set(self,vuelo,NULL)
set(self,plaza,NULL)
set(self,cliente,NULL)
}
comprar.Billete(self,reserva){
IF get(get(reserva,cliente),tarjeta).valida()
THEN set(self,pasajero,get(reserva,pasajero))
set(get(reserva,plaza),estado,COMPRADA)
set(plaza,plaza,get(reserva,plaza))
set(self,cliente,get(reserva,cliente))
set(self,vuelo,get(reserva,vuelo))
self.cobrar-cargo(get(get(reserva,cliente),tarjeta),get(get(self,plaza),precio))
}
Ejercicio 4
Representación del dominio con marcos
Producto
es-un:
Atributo Valor
nombre - cadena
unidades-stock - número
precio - número
componentes - lista de instancias de Componente
distribuidores - lista de instancias de Distribuidor
Componente
es-un:
Atributo Valor
unidades - número
producto - instancia de Producto
Distribuidor
es-un:
Atributo Valor
nombre - cadena
direccion - cadena
telefono - número
Compra
es-un:
Atributo Valor
fecha - fecha
producto - instancia de Producto
distribuidor - instancia de Distribuidor
precio - número
unidades - número
Venta
es-un:
Atributo Valor
fecha - fecha
producto - instancia de Producto
unidades - número
Demonio para que la orden de pedidos se realice de forma automática cuando queden menos de 10 unidades
de un producto en stock
if-set.unidades-stock.Producto(self){
IF get(self,unidades-stock) < 10
THEN IF get(self,componentes) = NULL
THEN ordenar-pedido.Producto(self)
ELSE ordenar-montaje.Producto(self)
}
No, para este dominio una representación basada en Marcos es más apropiada porque:
1. No es necesario realizar inferencia sobre los datos
2. La információn relativa a los atributos de los objetos es más importante que las relaciones que haya
entre ellos
3. Es necesario definir funciones que vigilan las operaciones que se hacen sobre atributos de los objetos
Descargar