;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; GRUPO DE REGLAS QUE DEFINEN EL COMPORTAMIENTO DE LA PARADA DEL ASCENSOR ;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defrule evalua-parada1 ;Para si alguien quiere subir aqui. (evaluar-parada) (elevador (id ?e) (piso-actual ?piso) (direccion 0) (estado 1)) ;subiendo (persona (id ?p) (origen ?piso) (destino ?piso2&:(> ?piso2 ?piso)) ;quiere subir (estado 0)) ;dentro del ascensor y origen este piso (not (lleva-a (id-asc ?e) (id-per ?p))) => (printout t "Parada para coger usuario en subida: " ?p crlf) (store dirp 0) (store parar ?e)) (printout t "Definiendo regla 'evalua-parada1'" crlf) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defrule evalua-parada1b ;Para si alguien quiere subir aqui. (evaluar-parada) (elevador (id ?e) (piso-actual ?piso) (direccion 1) (estado 1)) ;bajando (persona (id ?p) (origen ?piso) (destino ?piso2&:(< ?piso2 ?piso)) ;quiere bajar (estado 0)) ;dentro del ascensor y origen este piso (not (lleva-a (id-asc ?e) (id-per ?p))) => (printout t "Parada para coger usuario en bajada: " ?p crlf) (store dirp 1) (store parar ?e)) (printout t "Definiendo regla 'evalua-parada1b'" crlf) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defrule evalua-parada2 ;Para si alguien quiere bajar aqui. (evaluar-parada) (elevador (id ?e) (piso-actual ?piso) (estado 1)) ;moviendo (persona (id ?p) (destino ?piso) (estado 1)) ;dentro del ascensor y destino este piso ?ll <- (lleva-a (id-asc ?e) (id-per ?p)) ;ascensor esta llevando a persona => (printout t "Parada para dejar usuario " ?p crlf) (retract ?ll) (store parar ?e)) (printout t "Definiendo regla 'evalua-parada2'" crlf) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defrule evalua-parada3 ;Para si he llegado al piso maximo. (evaluar-parada) (ultimo-piso ?piso) (elevador (id ?e) (piso-actual ?piso) (estado 1)) ;moviendo => (printout t "Cambio de direccion, por que he llegado al maximo " crlf) (store parar ?e) (store "dirp"?e 1)) (printout t "Definiendo regla 'evalua-parada3'" crlf) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defrule evalua-parada4 ;Para si he llegado al piso minimo. (evaluar-parada) (elevador (id ?e) (piso-actual 1) (estado 1)) ;moviendo => (printout t "Cambio de direccion, por que he llegado al minimo " crlf) (store parar ?e) (store "dirp"?e 0)) (printout t "Definiendo regla 'evalua-parada4'" crlf) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; GRUPO DE REGLAS QUE DEFINEN EL COMPORTAMIENTO DE LA DIRECCION DEL ASCENSOR ;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defrule evalua-direccion1 ;No hay nadie dentro del ascensor, no hay nadie por abajo del ascensor, ; hay pasajero esperando por encima. Direccion ARRIBA. (evaluar-direccion) (elevador (id ?e) (piso-actual ?piso) (estado 0)) ;moviendo (persona (id ?p) (origen ?piso2&:(< ?piso ?piso2)) (estado 0)) (not (persona (id ?p2) (estado 1))) (not (persona (id ?p3) (origen ?piso2&:(> ?piso ?piso2)) (estado 0))) => (printout t "Nadie en ascensor, pasajeros esperando arriba: hacia arriba " crlf) (store dir 0) ;(store dirp 0) ) (printout t "Definiendo regla 'evalua-direccion1'" crlf) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defrule evalua-direccion2 ;No hay nadie dentro del ascensor, no hay nadie por encima del ascensor, ; hay pasajero esperando por debajo. Direccion ABAJO. (evaluar-direccion) (elevador (id ?e) (piso-actual ?piso) (estado 0)) ;moviendo (persona (id ?p) (origen ?piso2&:(> ?piso ?piso2)) (estado 0)) (not (persona (id ?p2) (estado 1))) (not (persona (id ?p3) (origen ?piso2&:(< ?piso ?piso2)) (estado 0))) => (printout t "Nadie en ascensor, pasajeros esperando abajo: hacia abajo " crlf) (store dir 1) ;(store dirp 1) ) (printout t "Definiendo regla 'evalua-direccion2'" crlf) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defrule evalua-direccion3 ;No hay nadie dentro del ascensor, hay pasajeros esperando ariba y abajo, ; hay pasajero con menor id por arriba. Direccion ARRIBA. (evaluar-direccion) (elevador (id ?e) (piso-actual ?piso) (estado 0)) ;parado (persona (id ?p) (origen ?piso2&:(> ?piso ?piso2)) (estado 0)) (not (persona (id ?p2) (estado 1))) (persona (id ?p3&:(< ?p3 ?p)) (origen ?piso3&:(< ?piso ?piso3)) (estado 0)) => (printout t "Nadie en ascensor, pasajero prioritario esperando arriba: hacia arriba" crlf) (store dir 0) ;(store dirp 0) ) (printout t "Definiendo regla 'evalua-direccion3'" crlf) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defrule evalua-direccion4 ;No hay nadie dentro del ascensor, hay pasajeros esperando ariba y abajo, ; hay pasajero con menor id por abajo. Direccion ABAJO. (evaluar-direccion) (elevador (id ?e) (piso-actual ?piso) (estado 0)) ;parado (persona (id ?p) (origen ?piso2&:(> ?piso ?piso2)) (estado 0)) (not (persona (id ?p2) (estado 1))) (persona (id ?p3&:(> ?p3 ?p)) (origen ?piso3&:(< ?piso ?piso3)) (estado 0)) => (printout t "Nadie en ascensor, pasajeros prioritario esperando abajo: hacia abajo" crlf) (store dir 1) ;(store dirp 1) ) (printout t "Definiendo regla 'evalua-direccion4'" crlf) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defrule evalua-direccion5 ;Sirvo al unico pasajero que hay en el ascensor, que va hacia abajo. ; (evaluar-direccion) (elevador (id ?e) (piso-actual ?piso) (estado 0)) ;moviendo (persona (id ?p) (destino ?piso2&:(> ?piso ?piso2)) (estado 1)) (not (persona (id ?p2&~?p) (estado 1))) => (printout t "Unico pasajero en ascensor: hacia abajo" crlf) (store dir 1) ;(store dirp 1) ) (printout t "Definiendo regla 'evalua-direccion5'" crlf) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defrule evalua-direccion6 ;Sirvo al unico pasajero que hay en el ascensor, que va hacia arriba. ; (evaluar-direccion) (elevador (id ?e) (piso-actual ?piso) (estado 0)) ;moviendo (persona (id ?p) (destino ?piso2&:(< ?piso ?piso2)) (estado 1)) (not (persona (id ?p2&~?p) (estado 1))) => (printout t "Unico pasajero en ascensor, hacia abajo" crlf) (store dir 0) ;(store dirp 0) ) (printout t "Definiendo regla 'evalua-direccion6'" crlf) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defrule evalua-direccion7 ;Sirvo al pasajero con menor id del ascensor, que va hacia abajo ; (evaluar-direccion) (elevador (id ?e) (piso-actual ?piso) (estado 0)) ;moviendo (persona (id ?p) (destino ?piso2&:(< ?piso ?piso2)) (estado 1)) (persona (id ?p2&:(> ?p2 ?p)) (destino ?piso3&:(> ?piso ?piso3)) (estado 1)) => (printout t "Pasajero prioritario en ascensor, hacia abajo" crlf) (store dir 1) ;(store dirp 1) ) (printout t "Definiendo regla 'evalua-direccion7'" crlf) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defrule evalua-direccion8 ;Sirvo al pasajero con menor id del ascensor, que va hacia arriba ; (evaluar-direccion) (elevador (id ?e) (piso-actual ?piso) (estado 0)) ;moviendo (persona (id ?p) (destino ?piso2&:(< ?piso ?piso2)) (estado 1)) (persona (id ?p2&:(< ?p2 ?p)) (destino ?piso3&:(> ?piso ?piso3)) (estado 1)) => (printout t "Pasajero prioritario en ascensor, hacia arriba" crlf) (store dir 0) ;(store dirp 0 ) (printout t "Definiendo regla 'evalua-direccion8'" crlf) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defrule evalua-direccion9 ;Sirvo al pasajero con menor id del ascensor, que va hacia arriba ; el resto de los pasajeros del ascensor tambien van arriba. (evaluar-direccion) (elevador (id ?e) (piso-actual ?piso) (estado 0)) ;moviendo (persona (id ?p) (destino ?piso2&:(< ?piso ?piso2)) (estado 1)) (not (persona (id ?p2) (destino ?piso3&:(> ?piso ?piso3)) (estado 1))) => (printout t "Todos los pasajeros del ascensor quieren arriba: hacia arriba" crlf) (store dir 0) ;(store dirp 0) ) (printout t "Definiendo regla 'evalua-direccion9'" crlf) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defrule evalua-direccion10 ;Sirvo al pasajero con menor id del ascensor, que va hacia abajo ; el resto de los pasajeros del ascensor tambien van abajo. (evaluar-direccion) (elevador (id ?e) (piso-actual ?piso) (estado 0)) ;moviendo (persona (id ?p) (destino ?piso2&:(> ?piso ?piso2)) (estado 1)) (not (persona (id ?p2) (destino ?piso3&:(< ?piso ?piso3)) (estado 1))) => (printout t "Todos los pasajeros del ascensor quieren abajo: hacia abajo" crlf) (store dir 1) ;(store dirp 1) ) (printout t "Definiendo regla 'evalua-direccion10'" crlf)