Practica
1
Control
de semáforos
La
siguiente práctica involucra temas de la Unidad 1 de Programación
de Sistemas Adaptativos.
Descripción
de la práctica
Introducción
En
esta práctica, se implementa un sistema que simule calles
congestionadas y regula automáticamente la duración de las
luces verdes en los semáforos de los cruces.
Consta
de una avenida importante Av.
Lincoln y
se intercepta con una calle Aguaturma donde
salen y entran carros a una colonia ubicada en dicha av.
Se
necesitarón 3 semáforos que controlan la fluidez del cruce.
Semáforo
A y Semáforo B controlan el paso vehicular de la av.
Semáforo
b. Accede el paso a los carros que entran a la Calle.
Y
Finalmente el Semáforo C que permite a los carros salir de la
calle para integrarse a la av.
Desarrollo
Son
más carros en espera del paso en LINCOLN, que los que esperan
salir y entrar a AGUATURMA.
Se
necesitaba controlar la duración del semáforo para evitar el
congestionamiento entre la Av. y la calle.
Definitivamente
se le tenía que dar prioridad a la Av. Pero sin descuidar el paso de
carros en espera de la calle y para entrar en esta.
Diseño
del cruce
Los
posibles caminos que podían tomar los carros son los siguientes.
Para
evitar Colisiones entre autos.
Se
toma en cuenta la matriz de conflictos
A
|
B
|
b
|
C
|
ESTADO
DEL SEMAFORO
|
0
|
0
|
0
|
0
|
SEMAFOROS
APAGADOS
|
0
|
0
|
0
|
1
|
SEMAFORO
C
|
0
|
0
|
1
|
0
|
SEMAFORO
b
|
0
|
0
|
1
|
1
|
COLISION
|
0
|
1
|
0
|
0
|
COLISION
|
0
|
1
|
0
|
1
|
COLISION
|
0
|
1
|
1
|
0
|
COLISION
|
0
|
1
|
1
|
1
|
COLISION
|
1
|
0
|
0
|
0
|
COLISION
|
1
|
0
|
0
|
1
|
COLISION
|
1
|
0
|
1
|
0
|
COLISION
|
1
|
0
|
1
|
1
|
COLISION
|
1
|
1
|
0
|
0
|
SEMAFORO
A Y B
|
1
|
1
|
0
|
1
|
COLISION
|
1
|
1
|
1
|
0
|
COLISION
|
1
|
1
|
1
|
1
|
COLISION
|
Diseño
de la solución:
Lenguaje
de Programación utilizado Java
Simulación
de carros en espera.
¿Cuántos
automóviles desean pasar?
Los
carros son generados con la ayuda de la función random*, para
adaptarlo a la realidad, el rango del numero de carros en espera en
la av. Es mayor que el número de carros que desean entrar y salir de
la calle.
Carros
en espera de la luz verde del semáforo A: 0-100 carros.
Carros
en espera de la luz verde del semáforo B: 0-100 carros.
Carros
en espera de la luz verde del semáforo b: 0-100 carros.
Carros
en espera de la luz verde del semáforo C: 0 a 40 carros.
Basándose
en que: en la Av. y la calle pasan 1 automóvil/s. Se establece el
estado de los semáforos
Simulación
de la duración en las luces.
¿Cuánto
tiempo dura la luz del semáforo?
La
luz verde del semáforo se le asigna a el número mayor de
carros que están en espera para que todos obtengan su servicio.
Ejemplo:
Carros
en espera en el semáforo A: 40
Carros
en espera en el semáforo B: 35
Carros
en espera en el semáforo b: 7
Carros
en espera en el semáforo C: 6
La
Luz verde del semáforo se encenderá automáticamente en el
semáforo A en la misma razón de 1/s , en decir, 40 segundos,
para que pasen los 40 carros.
Código
Elementos de Código más Relevantes:
trafico.java :
package SemaforoGUI; import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JLabel; public class trafico extends Thread { public static final int Trafico = 0; public int semaforoB, semaforob, semaforoC, opcion=0; public int semaforoA; public int random () { double valor; Double resultado; int limSup=10; int limInf = 0; valor = Math.floor(Math.random()*(limSup-limInf+1)) + limInf; resultado = new Double(valor); return resultado.intValue(); } public trafico() { semaforoA=random(); semaforoB=random(); semaforoC=random(); semaforob=random(); while(semaforoC>40){ semaforoC=random(); } } public void run(){ int Trafico; try{ while(true){ semaforoA=random(); semaforoB=random(); semaforob=random(); semaforoC=random(); Trafico=0; while(semaforoC>40){ semaforoC=random(); } System.out.println("el numero de carros semaforo A es:" +semaforoA); System.out.println("el numero de carros semaforo B es:" +semaforoB); System.out.println("el numero de carros semaforo b es:" +semaforob); System.out.println("el numero de carros semaforo C es:" +semaforoC); if(Trafico<semaforoA){ Trafico=semaforoA; } else{ Trafico=Trafico; } if(Trafico<semaforoB){ Trafico=semaforoB; } else Trafico=Trafico; if(Trafico<semaforob){ Trafico=semaforob; } else Trafico=Trafico; if(Trafico<semaforoC){ Trafico=semaforoC; } new EnsendidoDeSemaforos(Trafico, semaforoA, semaforoB, semaforob, semaforoC, opcion); sleep(Trafico*1000); } }catch(InterruptedException e){ System.out.println(":0!!! Excepcion! -- " + e.getMessage()); } } }
EnsendidoDeSemaforos.java :
package SemaforoGUI; public class EnsendidoDeSemaforos extends trafico { public EnsendidoDeSemaforos(int Trafico, int semaforoA, int semaforoB, int semaforob, int semaforoC, int opcion) { if(Trafico==semaforoA) { opcion=1; System.out.println("Donde hay mas carros es en el semaforo A con :" +Trafico+" carros \n"); } if(Trafico==semaforoB) { opcion=2; System.out.println("Donde hay mas carros es en el semaforo B con :" +Trafico+" carros \n"); } if(Trafico==semaforob) { opcion=3; System.out.println("Donde hay mas carros es en el semaforo b con :" +Trafico+" carros \n"); } if(Trafico==semaforoC) { opcion=4; System.out.println("Donde hay mas carros es en el semaforo C con :" +Trafico+" carros \n"); } orden_semaforos(opcion, Trafico); } public void orden_semaforos(int opcion, int Trafico) { Semaforo Valor = new Semaforo(); switch(opcion) { case 1: System.out.println("El semaforo A en verde dura :" +Trafico+" segundos "); System.out.println("El semaforo B en verde dura :" +Trafico+" segundos "); System.out.println("El semaforo b apagado "); System.out.println("El semaforo C en rojo "); Valor.semaforoV.setVisible(true); Valor.semaforoR.setVisible(false); Valor.semaforo2V.setVisible(true); Valor.semaforo2.setVisible(false); Valor.semaforo2R.setVisible(false); Valor.semaforo3R.setVisible(true); Valor.semaforo3V.setVisible(false); Valor.CarroA.setVisible(true); ; break; case 2: System.out.println("El semaforo B en verde dura:" +Trafico+" segundos"); System.out.println("El semaforo A en verde dura :" +Trafico+" segundos "); System.out.println("El semaforo b apagado "); System.out.println("El semaforo C en rojo"); Valor.semaforoV.setVisible(true); Valor.semaforoR.setVisible(false); Valor.semaforo2V.setVisible(true); Valor.semaforo2.setVisible(false); Valor.semaforo2R.setVisible(false); Valor.semaforo3R.setVisible(true); Valor.semaforo3V.setVisible(false); ; break; case 3: System.out.println("El semaforo b dura:" +Trafico+" segundos"); System.out.println("El semaforo A en rojo"); System.out.println("El semaforo B en rojo"); System.out.println("El semaforo C en rojo"); Valor.semaforoV.setVisible(false); Valor.semaforoR.setVisible(true); Valor.semaforo2V.setVisible(false); Valor.semaforo2.setVisible(true); Valor.semaforo2R.setVisible(false); Valor.semaforo3R.setVisible(true); Valor.semaforo3V.setVisible(false); ; break; case 4: System.out.println("El semaforo C dura:" +Trafico+" segundos"); System.out.println("El semaforo A en rojo"); System.out.println("El semaforo B en rojo"); System.out.println("El semaforo b apagado"); Valor.semaforoV.setVisible(false); Valor.semaforoR.setVisible(true); Valor.semaforo2V.setVisible(false); Valor.semaforo2.setVisible(false); Valor.semaforo2R.setVisible(true); Valor.semaforo3R.setVisible(false); Valor.semaforo3V.setVisible(true); ; break; default:; }; } }Video en youtube
Conclusiones
Durante
la elaboración de la práctica, se obtuvo un panorama más amplio
referente a la programación de sistemas Adaptativos.
Desde
el análisis de la simulación a realizar, el continuo monitoreo del
programa, el ajuste de parámetros necesarios, y la ejecución con
ayuda de Threads
Mejoras
futuras: Hacer el programa mucho más apegado a la realidad con el
monitoreo previamente del ambiente, las horas pico, el día, valor
más aproximado de carros en espera dependiendo, de otros factores
como el clima y establecerlo para la disminución de tráfico entre
calles.
Referencias
Libro
Java para estudiantes.
Autor
Douglas Bell
Bien; ya habíamos comentado algunos detalles en clase. Nada más faltó pulir un poquito más la interfaz y el demo (correrlo un poco más de tiempo y hacer algún acercamiento a la consola).
ResponderEliminarDiseño del cruce--5
Diseño de solución--25
Backend--40
GUI--7
Demo--12
Redacción--5
============
Total: 94 (23.5 de 25)
P.D. Se escribe "Encendido"...