TEST SISTEMA EXPERTO REGLAS CONDUCCION
Table of Contents
1. Descripción del Sistema de Reglas para el Tráfico
Este sistema utiliza un enfoque basado en reglas para simular y gestionar infracciones y comportamientos de conductores en diferentes tipos de zonas de tráfico. A continuación, se describe cómo se aplica este sistema y cuál es su utilidad desde una perspectiva gerencial.
1.1. Objetivo General
El sistema tiene como objetivo evaluar automáticamente el cumplimiento de las normativas de tráfico en función de las condiciones específicas de la carretera, el vehículo y el conductor. De esta manera, se puede identificar y sancionar infracciones de manera eficiente y uniforme.
1.2. Componentes Principales
- Hechos Iniciales:
- Los hechos representan el estado actual del entorno: características del conductor, el vehículo y la zona en la que circula.
- Ejemplo: Un vehículo de tipo "camioneta" circulando en una "calle urbana" a una velocidad de 90 km/h.
- Plantillas (Templates):
- Definen las estructuras de datos para representar información sobre el conductor, el vehículo, las zonas y las infracciones.
- Por ejemplo, la plantilla `zona` especifica el tipo de zona, el tipo de vehículo y la velocidad máxima permitida.
- Reglas (Rules):
- Cada regla evalúa condiciones específicas y toma acciones basadas en los hechos actuales.
- Ejemplo: Si un vehículo excede el límite de velocidad en una zona, se registra una infracción y se descuentan puntos del conductor.
- Procesamiento de Infracciones:
- Las infracciones detectadas se procesan automáticamente, descontando puntos de la puntuación del conductor y mostrando mensajes informativos.
1.3. Ejemplo de Aplicación
El sistema evalúa el caso de un conductor manejando una camioneta a 90 km/h en una "calle urbana". Según las reglas:
- El sistema verifica que el límite de velocidad para una camioneta en una calle urbana es de 50 km/h.
- Detecta que el vehículo está excediendo el límite y registra una infracción por "Exceso de velocidad".
- Descuenta puntos del conductor por esta infracción y muestra un mensaje indicando el tipo de infracción, los puntos descontados y los puntos restantes.
1.4. Ventajas del Sistema
- Automatización:
- Reduce la necesidad de supervisión manual al evaluar automáticamente las infracciones.
- Consistencia:
- Aplica las mismas reglas uniformemente para todos los casos, garantizando un trato justo.
- Adaptabilidad:
- Puede ajustarse fácilmente para incluir nuevas zonas, tipos de vehículos o normas de tráfico.
- Reportabilidad:
- Genera un historial claro de infracciones para análisis y toma de decisiones.
1.5. Uso en la Gestión
Desde una perspectiva gerencial, este sistema permite:
- Identificar patrones de comportamiento de conductores para implementar campañas de concienciación.
- Evaluar el cumplimiento de las normas de tráfico en diferentes zonas.
- Optimizar la asignación de recursos para monitoreo y control del tráfico.
1.6. Conclusión
El sistema basado en reglas proporciona una solución eficiente y escalable para gestionar normativas de tráfico. Su implementación contribuye a mejorar la seguridad vial, reducir infracciones y fomentar un manejo responsable.
2. DATOS ( HECHOS )
2.1. Simulacion para un solo hecho
| HECHO | |
|---|---|
| Tipo vehiculo | Camioneta |
| Velocidad | 90 |
| Luces | Encendidas |
| Zona | Calle urbana |
| Cinturon | NO |
| Celular | NO |
| Suenio | NO |
| clima | Niebla leve |
| Puntuacion Inicial | 100 |
3. EJECUCION SIMULACION
LISA-TRAFFIC-RULES> (simulate-traffic) Regla: El vehículo tipo camioneta excede el límite de velocidad en zona calle urbana. Infracción: Exceso de velocidad. Se descontaron 15 puntos. Puntos restantes: 85. Infracción: Es obligatorio usar el cinturón de seguridad. Se descontaron 10 puntos. Puntos restantes: 75.
4. Traza activacion de reglas y factos
LISA-TRAFFIC-RULES> (simulate-traffic) ==> F-0 (INITIAL-FACT) ==> F-1 (ZONA (VELMAX 50) (VEHICULO-TIPO "camioneta") (TIPO "calle urbana")) ==> F-2 (ZONA (VELMAX 30) (VEHICULO-TIPO "camion") (TIPO "calle urbana")) ==> F-3 (ZONA (VELMAX 110) (VEHICULO-TIPO "camioneta") (TIPO "ruta urbana")) ==> F-4 (ZONA (VELMAX 90) (VEHICULO-TIPO "camion") (TIPO "ruta urbana")) ==> F-5 (ZONA (VELMAX 120) (VEHICULO-TIPO "camioneta") (TIPO "autopista")) ==> F-6 (ZONA (VELMAX 80) (VEHICULO-TIPO "camion") (TIPO "autopista")) ==> F-7 (ZONA (VELMAX 30) (VEHICULO-TIPO "camioneta") (TIPO "escolar")) ==> F-8 (ZONA (VELMAX 20) (VEHICULO-TIPO "camion") (TIPO "escolar")) ==> F-9 (VEHICULO (ZONA "calle urbana") (LUCES "encendidas") (VELOCIDAD 90) (TIPO "camioneta")) ==> Activation: VELOCIDAD-EN-ZONA : (F-1 F-9) ==> F-10 (CONDUCTOR (PUNTUACION 100) (SUENIO "no") (USO-CELULAR "no") (USO-CINTURON "no")) ==> Activation: USO-OBLIGATORIO-DE-CINTURON : (F-10) ==> F-11 (CLIMA (INTENSIDAD "leve") (TIPO "niebla")) FIRE 1: VELOCIDAD-EN-ZONA (F-1 F-9) ==> F-12 (INFRACCION (DESCUENTO 15) (TIPO "Exceso de velocidad")) ==> Activation: PROCESAR-INFRACCION : (F-12 F-10) Regla: El vehículo tipo camioneta excede el límite de velocidad en zona calle urbana. FIRE 2: USO-OBLIGATORIO-DE-CINTURON (F-10) <== F-10 (CONDUCTOR (PUNTUACION 100) (SUENIO "no") (USO-CELULAR "no") (USO-CINTURON "no")) <== Activation: PROCESAR-INFRACCION : (F-12 F-10) ==> F-13 (CONDUCTOR (PUNTUACION 100) (SUENIO "no") (USO-CELULAR "no") (USO-CINTURON "procesado")) ==> Activation: PROCESAR-INFRACCION : (F-12 F-13) ==> F-14 (INFRACCION (DESCUENTO 10) (TIPO "Es obligatorio usar el cinturón de seguridad")) ==> Activation: PROCESAR-INFRACCION : (F-14 F-13) FIRE 3: PROCESAR-INFRACCION (F-12 F-13) <== F-13 (CONDUCTOR (PUNTUACION 100) (SUENIO "no") (USO-CELULAR "no") (USO-CINTURON "procesado")) <== Activation: PROCESAR-INFRACCION : (F-14 F-13) ==> F-15 (CONDUCTOR (PUNTUACION 85) (SUENIO "no") (USO-CELULAR "no") (USO-CINTURON "procesado")) ==> Activation: PROCESAR-INFRACCION : (F-12 F-15) ==> Activation: PROCESAR-INFRACCION : (F-14 F-15) Infracción: Exceso de velocidad. Se descontaron 15 puntos. Puntos restantes: 85. <== F-12 (INFRACCION (DESCUENTO 15) (TIPO "Exceso de velocidad")) <== Activation: PROCESAR-INFRACCION : (F-12 F-15) FIRE 4: PROCESAR-INFRACCION (F-14 F-15) <== F-15 (CONDUCTOR (PUNTUACION 85) (SUENIO "no") (USO-CELULAR "no") (USO-CINTURON "procesado")) ==> F-16 (CONDUCTOR (PUNTUACION 75) (SUENIO "no") (USO-CELULAR "no") (USO-CINTURON "procesado")) ==> Activation: PROCESAR-INFRACCION : (F-14 F-16) Infracción: Es obligatorio usar el cinturón de seguridad. Se descontaron 10 puntos. Puntos restantes: 75. <== F-14 (INFRACCION (DESCUENTO 10) (TIPO "Es obligatorio usar el cinturón de seguridad")) <== Activation: PROCESAR-INFRACCION : (F-14 F-16)
5. Codigo Fuente
(eval-when (:compile-toplevel :load-toplevel :execute)
(when (not (find-package "LISA-TRAFFIC-RULES"))
(defpackage "LISA-TRAFFIC-RULES"
(:use "LISA-LISP")
(:export "LISA-TRAFFIC-RULES-SIMULATION"))))
(in-package "LISA-TRAFFIC-RULES")
(make-inference-engine)
;; Templates
(defun load-templates()
(deftemplate vehiculo ()
(slot tipo) ; Tipo de vehículo: "camion", ""camioneta, "bus", "peligroso"
(slot velocidad) ; Velocidad actual en km/h
(slot luces) ; Estado de luces: "encendidas", "apagadas"
(slot zona)) ;zona actual donde el vechiulo circula (subcuadrante)
(deftemplate conductor ()
(slot uso-cinturon) ; Uso de cinturón: "si", "no"
(slot uso-celular) ; Uso de celular: "si", "no"
(slot suenio) ; Estado de suenio "si","no"
(slot puntuacion)) ; Puntuación del conductor
(deftemplate interseccion ()
(slot tipo) ; Tipo de intersección: "semaforo", "sin-senales", "rotonda"
(slot prioridad)) ; Regla de prioridad: "derecha", "ya-circulando"
;; Tipo de zona: "urbana", "escolar", "ruta", "autopista", "rural", "petrolera", "interseccion", "paso-nivel"
(deftemplate zona ()
(slot tipo)
(slot vehiculo-tipo)
(slot velmax))
;; Definición de condiciones climáticas
(deftemplate clima ()
(slot tipo) ; Tipo de clima: "lluvia", "niebla"
(slot intensidad)) ; Intensidad: "leve", "moderada", "severa"
(deftemplate infraccion ()
(slot tipo) ;; Tipo de infracción
(slot descuento))) ;; Puntos a descontar
(defun load-rules()
;; procesar infracciones
(defrule procesar-infraccion ()
(?i (infraccion (tipo ?tipo) (descuento ?descuento)))
(?c (conductor (puntuacion ?p)))
=>
(modify ?c (puntuacion (- ?p ?descuento)))
(format t "Infracción: ~A. Se descontaron ~A puntos. Puntos restantes: ~A.~%" ?tipo ?descuento (- ?p ?descuento))
(retract ?i))
;; Reglas generales
(defrule uso-obligatorio-de-cinturon ()
(?c (conductor (uso-cinturon "no")(puntuacion ?p)))
=>
(modify ?c (uso-cinturon "procesado"))
(assert (infraccion (tipo "Es obligatorio usar el cinturón de seguridad") (descuento 10))))
(defrule prohibicion-de-uso-de-celular ()
(?c (conductor (uso-celular "si") (puntuacion ?p)))
=>
(modify ?c (uso-celular "procesado"))
(assert (infraccion (tipo "Está prohibido el uso de celular mientras conduce") (descuento 10))))
(defrule luces-obligatorias ()
(?c (conductor (puntuacion ?p)))
(?v (vehiculo (luces "apagadas")))
=>
(modify ?v (luces "procesado")) ;; Resta 1 puntos
(assert (infraccion (tipo "Debe encender las luces bajas durante el día al circular") (descuento 1))))
;; Detiene la simulación para reflejar la suspensión.
(defrule suspender-conductor ()
(?c (conductor (puntuacion ?p)))
(test (< ?p 50))
=>
(format t "Regla: El conductor ha acumulado demasiadas infracciones. Puntos: ~A. Licencia suspendida.~%" ?p)
(clear)
(Halt))
;; Reglas por tipo de vehículo
(defrule velocidad-en-zona ()
(zona (tipo ?z-tipo) (velmax ?vmax) (vehiculo-tipo ?veh-tipo))
(vehiculo (tipo ?vehiculo-tipo) (velocidad ?v) (zona ?v-zona))
(test (and (string= ?z-tipo ?v-zona) (string= ?vehiculo-tipo ?veh-tipo) (> ?v ?vmax)))
=>
(assert (infraccion (tipo "Exceso de velocidad") (descuento 15)))
(format t "Regla: El vehículo tipo ~A excede el límite de velocidad en zona ~A.~%" ?vehiculo-tipo ?z-tipo))
;;reglas para condiciones climáticas
(defrule reducir-velocidad-por-lluvia ()
(clima (tipo "lluvia") (intensidad ?int))
(test (member ?int '("moderada" "severa")))
(vehiculo (velocidad ?v ))
=>
(format t "Regla: Debe reducir la velocidad un 20% por condiciones de lluvia.~%" ))
(defrule reducir-velocidad-por-niebla ()
(clima (tipo "niebla") (intensidad ?int))
(test (member ?int '("moderada" "severa")))
(zona (velocidad-maxima ?max))
(vehiculo (velocidad ?v))
(test (> ?v (* ?max 0.6))) ;; Verificar que la velocidad sea mayor al 60% del máximo
=>
(format t "Regla: Debe reducir la velocidad un 40% por condiciones de niebla.~%"))
(defrule prohibicion-de-adelantamiento-en-niebla ()
(clima (tipo "niebla") (intensidad ?int))
(test (member ?int '("moderada" "severa")))
=>
(format t "Regla: Está prohibido realizar adelantamientos en condiciones de niebla.~%"))
(defrule precaucion-extrema-en-niebla-densa ()
(clima (tipo "niebla") (intensidad "severa"))
=>
(format t "Regla: Circule a velocidad mínima y máxima precaución por niebla densa.~%"))
;; Reglas relacionadas con el estado de sueño
(defrule alerta-suenio ()
(conductor (suenio "si"))
=>
(format t "Regla: El conductor está somnoliento. Se recomienda detenerse y descansar.~%"))
(defrule detener-circulacion-por-suenio ()
(conductor (suenio "si"))
(vehiculo (velocidad ?v (> ?v 0)))
=>
(format t "Regla: Está prohibido circular si el conductor está somnoliento. Detenga el vehículo de inmediato.~%")))
(defun set-default-zones()
(deffacts zonas-y-vehiculos()
;; Urbana
(zona (tipo "calle urbana") (vehiculo-tipo "camioneta") (velmax 50))
(zona (tipo "calle urbana") (vehiculo-tipo "camion") (velmax 30))
;; Ruta
(zona (tipo "ruta urbana") (vehiculo-tipo "camioneta") (velmax 110))
(zona (tipo "ruta urbana") (vehiculo-tipo "camion") (velmax 90))
;; Autopista
(zona (tipo "autopista") (vehiculo-tipo "camioneta") (velmax 120))
(zona (tipo "autopista") (vehiculo-tipo "camion") (velmax 80))
;; Escolar
(zona (tipo "escolar") (vehiculo-tipo "camioneta") (velmax 30))
(zona (tipo "escolar") (vehiculo-tipo "camion") (velmax 20))))
(defun simulate-traffic ()
(reset)
(set-default-zones)
(assert (vehiculo (tipo "camioneta") (velocidad 90) (luces "encendidas") (zona "calle urbana")))
(assert (conductor (uso-cinturon "no") (uso-celular "no") (suenio "no") (puntuacion 100)))
(assert (clima (tipo "niebla") (intensidad "leve")))
(run))
(watch :all)
(defun setup()
(clear)
(reset)
(load-templates)
(load-rules)
(set-default-zones))