martes, 4 de septiembre de 2012

Practica 1


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

Código Completo:
EnsendidoDeSemaforos.java          Semaforo.java    

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





1 comentario:

  1. 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).

    Diseñ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"...

    ResponderEliminar