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