miércoles, 29 de agosto de 2012

Avance 2

Siguiente Avance
 
- Desarrollo (Parte 2)

En el avance anterior especificamos bien cual era el diseño del cruce, consta de 3 calles, NORTE, SUR, OESTE, cada calle en doble sentido. También especificamos por medio de una tabla utilizando el sistema binario, también cual sería la dinámica de los automóviles y como se comportarían los semáforos. Al final, por medio de una tabla especificamos los roles de cada uno, tomando en cuenta que algunas actividades nos podríamos turnar para realizarlas. En este segundo avance mostramos una parte de lo que llevamos, de lo que consideramos más importante.

  • Codificación: Front-End


(Prototipo de la imagen)
 
 
 
 
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; 
import javax.swing.*; 

public class ventana extends JFrame{
 private static final long serialVersionUID = 1L;
 String semaforos[]={"Imagenes//rojo.jpg","Imagenes//verde.jpg"};
 int i=0,j=0,k=0,q=0;
// int sem1,sem2, total1=10,total2=10,sale1,sale2;
// boolean x=false;
 JLabel fondo = new JLabel();
 int tiempo = 1000;
 int vida = 1000;
 int totalvida;
 int d,a,m,c;
 int t,y,u,o;
 int carros11=10,carros12=1,carros21=3,carros22=4;
 int llegada11,llegada12,llegada21,llegada22;
 int sale=1;
 int sema11,sema12,sema21,sema22;
 //carros tardaran 2 segundos en salir
 Timer iniciovida = new Timer(vida , new ActionListener()
 {
 public void actionPerformed(ActionEvent arg0)
 {
  totalvida+=vida;
  
 }
 }); 
 
 Timer semaforo11 = new Timer(vida, new ActionListener() { 
  public void actionPerformed(ActionEvent arg0) {
   d+=vida;
   if(i==0)
   {
   if(d>=6000)
   {
    llegada11=Semaforo.aleatorio(2,3);
    carros11+=llegada11;
    System.out.println("carros11:" +carros11);
    d=0;
   }
   }
   
   if(carros11>=10)
   {
    t+=vida;
    repaint();
    
    if(carros11>0)
    {
    if(t>=2000 )
    {
     carros11-=1;
     System.out.print("sale11\n");
     t=0;
    }
     
   }
   }
   }
   }
   )
   ;
   Timer semaforo12 = new Timer(vida, new ActionListener() { 
    public void actionPerformed(ActionEvent arg0) {
     if(j==0)
     {
     a+=vida;;
       if(a>=3000)
     {
      
     llegada12=Semaforo.aleatorio(1, 4);
     carros12+=llegada12;
     System.out.println("carros12:"+carros12);
     a=0;
    }
   }
     
     if(carros12>=10)
     {
      y+=vida;;
      repaint();
      if(carros12>0)
      {
      if(y>=2000 )
      {
       carros12-=1;
       System.out.print("sale12\n");
       y=0;
      }
      }
      }
     }
    }
     )
     ;
    Timer semaforo21 = new Timer(vida, new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) {
      if(k==0)
      {
       m+=vida;
      if(m>=3000)
      {
     
     llegada21=Semaforo.aleatorio(2, 4);
     carros21+=llegada21;
     System.out.println("carros21:"+carros21);
     m=0;
    }
      
     }
      if(carros21>=10)
      {
       u+=vida;
       repaint();
       if(carros21>0)
       {
       if(u>=2000)
       {
        carros21-=1;
        System.out.print("sale21\n");
        u=0;
       }
       }
       } 
      }
     }
      )
      ;
     Timer semaforo22 = new Timer(vida, new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) {
       if(q==0)
       {
        c+=vida;;
   if(c>=3000)
    
    {
     llegada22=Semaforo.aleatorio(2, 4);
     carros22+=llegada22;
     System.out.println("carros22:"+carros22); 
     c=0;
    }
    }
       if(carros22>10)
       {
        o+=vida;;
        repaint();
       
        if(carros22>0)
        {
        if(o>=2000)
        {
         carros22-=1;
         System.out.print("sale22\n");
         o=0;
        }         
        }
        
        q=0;
        k=0;
        j=0;
        i=1; }
       
       }
     }
       )
       ;
 public void paint(Graphics g){
  super.paint(g);
  add (fondo);
  g.drawImage(new ImageIcon(getClass().getResource(semaforos[i])).getImage(),300,200,50,50,this);
  g.drawImage(new ImageIcon(getClass().getResource(semaforos[j])).getImage(),600,200,50,50,this);
  g.drawImage(new ImageIcon(getClass().getResource(semaforos[q])).getImage(),300,470,50,50,this);
  g.drawImage(new ImageIcon(getClass().getResource(semaforos[k])).getImage(),600,470,50,50,this);
  
  
  /*
  if (x == true)
  {
   System.out.print("\n\n");
   System.out.print("\nCarros en el semaforo1: " + total1);
   sem1 = Semaforo.aleatorio(0,10);
   System.out.print("\nCarros que entra semaforo1:  "+sem1);
   total1+=sem1;
   System.out.print("\nTotal de carros en semaforo1 :"+total1);
   sale1= Semaforo.aleatorio(1, 10);
   System.out.print("\nCarros que salen: "+sale1);
   total1-=sale1;
   if(total1<total2)
   {
    //x= false;
   }
  }
  else if (x ==true)
  {
   System.out.print("\n\n");
   System.out.print("\nCarros en el semaforo2: "+total2);
   sem2 = Semaforo.aleatorio(0,10);
   total2+=sem2;
   System.out.print("\nCarros que entra semaforo 2: "+sem2);
   System.out.print("\nTotal de Carros en semaforo: "+total2);
   sale2= Semaforo.aleatorio(1,10);
   System.out.print("\nCarros que salen: "+sale2);
   total2-=sale2;
   if(total2<total1)
   {
   // x=true;
   }
  }
 
 */
 }
 public ventana()
    {
        this.setSize(960,720);
        this.setTitle("Semaforo");
        this.setVisible(true);
        //se cierre 
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        fondo.setIcon(new ImageIcon(getClass().getResource("Imagenes//fondo.jpg")));
        add (fondo);
        semaforo11.start();
        semaforo12.start();
        semaforo21.start();
        semaforo22.start();
        iniciovida.start();
        
        //empiece a correr el programa
    }
}
 

miércoles, 22 de agosto de 2012

Avance


Practica #1 de laboratorio de sistemas adaptativos
 
 
- Introducción
 
En esta práctica se simulara un crucero de tráfico controlado como en el mundo real por semáforos. La función principal es evitar que los semáforos le den vía libre en una coordinación que pueda ocasionar un accidente.
 
La idea que tenemos es hacer un crucero con 3 calles como se muestra en la imagen de abajo, el diseño aún no esta definido ya que iremos haciendo cambios conforme vayamos avanzando y viendo que dificultades se nos presentan.

 
 
- Desarrollo (Parte 1)
  • Diseño del Cruce

CRUCERO


Se puede apreciar en el dibujo que los vehículos que vienen en la circulación de av. tauro hacia Ruiz Cortines tienen la posibilidad de dar vuelta a la izquierda siempre y cuando los semáforos de Ruiz Cortines estén deshabilitados para avanzar y dirigirse hacia el norte por Ruiz Cortines, o dar vuelta a la derecha con precaución y dirigirse hacia el sur.


Los vehículos que vienen por Ruiz Cortines hacia el sur tienen la posibilidad de dar vuelta hacia la derecha en av. tauro o continuar derecho por Ruiz Cortines siempre y cuando el semáforo en ese sentido este habilitado para avanzar en ese sentido.
Al igual los vehículos que vienen por Ruiz Cortines hacia el norte tienen la posibilidad de dar vuelta hacia la izquierda en av. tauro o continuar derecho por Ruiz Cortines siempre y cuando el semáforo en ese sentido este habilitado para avanzar en ese sentido.


  • Diseño de la Solución


1
A
B
C
D
SALIDAS
2
0
0
0
0
DESABILITADOS
3
0
0
0
1
HABILITADO    D
4
0
0
1
0
HABILITADO    C
5
0
0
1
1
CHOQUE
6
0
1
0
0
HABILITADO    B
7
0
1
0
1
HABILITADO    B y D
8
0
1
1
0
CHOQUE
9
0
1
1
1
CHOQUE
10
1
0
0
0
HABILITADO    A
11
1
0
0
1
HABILITADO A y D
12
1
0
1
0
CHOQUE
13
1
0
1
1
CHOQUE
14
1
1
0
0
CHOQUE
15
1
1
0
1
CHOQUE
16
1
1
1
0
CHOQUE
17
1
1
1
1
CHOQUE

Por medio de los métodos obtenidos de matemáticas discretas, es decir la algebra booleana se hizo una investigación de las combinaciones en las que pueden estar encendidos los semáforos sin ocasionar un choque.
Con lo cual llegamos a la conclusión que solo tenemos 6 opciones para que los semáforos enciendan
Habilitado A
Habilitado B
Habilitado C
Habilitado D
Habilitado B y D
Habilitado A y D