martes, 13 de noviembre de 2012

Práctica 4 "Multiagentes"


  • Introducción
Para esta última práctica decidimos enfocarnos en la opción de subastas ya que fue el que más nos llamó la atención, como ya se había mencionado en clase una de las características principales es que funciona mediante acuerdos, aplicaremos lo que sabemos de sistemas multi-agentes, como ya sabemos un agente  puede actuar por sí mismo para cumplir con ciertos objetivos en específico y que tiene capacidades como lo son:
  • Reacción
  • Proactividad
  • Habilidad Social
  • Objetivo 
Lo principal que queremos lograr con la práctica es aprender más de este tema ya que platicando en equipo nos dimos cuenta de que no es nuestro fuerte y tenemos un área de oportunidad, como en todo caso tenemos que investigar y sabemos que al temrinar la práctica tendremos más  claro y con más información del tema.
  • Justificación
El tema lo escogimos simplemente porque en equipo fue el que más nos llamó la atención y creemos que podremos aprender  mas sobre lo visto en clase, implicando el estudio de la libreria jade para los agentes para poder asignar una diferente importancia a cada opcion que se tenga, también otro motivo es que la mayoría del equipo ya conoce la lógica de las subastas y la manera en que estaremos trabajando, para poder que los agentes de las subastas eligan la opcion mas logica.
  • Desarrollo 
  • Código
  • Resultados
  • Video
  • Conclusiones

lunes, 29 de octubre de 2012

Práctica 3 Clasificación/Reconocimiento de Patrones


- Introducción
El tema que escogimos fue "reconocimiento de patrones", el único propósito de este método es el clasificar un grupo de patrones conocido como conjunto de pruebas en dos o mas clases de categorías. Esto es logrado al calcular las categorías del conjunto en prueba comparándolo con un conjunto de entrenamiento (previo) o training set. Un clasificador dado mide la distancia entre varios puntos dados (compara), para saber cuales puntos son mas cercanos a la meta en un modelo parametizado.

- Objetivo
El objetivo es presentar las diferentes tendencias que existen en la actualidad en cuanto al reconocimiento de patrones, estos conocimientos son susceptibles de ser aplicados a un sin número de problemas, sin embargo, se enfocarán las aplicaciones a los problemas del lenguaje natural y del habla y en general a diferentes situaciones que surgen en el desarrollo de nuevas y más eficaces interfaces humano-computador.

- Justificación

Elegimos este tema debido a que queremos aprender sobre el reconocimiento de patrones, tratando de enfatizar las librerías presentes en java, para tratar de implementarlas en el sistema, mejorando nuestra experiencia en java, aprendiendo poco a poco lo que viene siendo este lenguaje tan extenso.

Para que puede ser útil:
- Puede ser utilizado para el reconocimiento de firmas en los bancos.
- En cuestiones de seguridad en ciertas instituciones.

- Investigación




- Desarrollo
La idea al principio estábamos un poco indecisos en que tema queríamos basarnos en este entregable, después de hablar nos decidimos por realizar el de Reconocimiento de Patrones, al principio que empezamos a avanzar tuvimos dificultades para realizarlo en python por falta de experiencia en ese lenguaje, y decidimos retomar nuevamente java como medio para completar el trabajo, al empezar a programar primero decidimos como iba a estar la estructura del programa decidiéndonos por medio de interfaz seccionada en matriz y utilizando las coordenadas, también necesitamos AccionListener así como MouseListener para capturar las acciones realizadas, los puntos marcados, acciones de los dos botones que hemos colocado y así como mas código utilizado, hemos terminado el programa y realiza el Reconocimiento al momento de ingresar varios ejemplos busca entre ellos cual es el mas parecido y muestra el porcentaje y el numero de ronda donde se ubico el ejemplo.

- Código
Clase Tablero
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Tablero extends JPanel {
private static final long serialVersionUID = 1L;
private ImageIcon neutro, tocado;
private boolean tipoTablero;
private Casillas [][] casillas ;
private JButton grabar;
private JButton comprobar;
int ciclo=0,memoria =1, ronda,parmax=0;
int igualdades[]=new int[200];
int guardar[][][]= new int [20][20][20];
int imgfinal[][]= new int [20][20];
 public Tablero() 
    {
        iniciar();
        vaciado();    
  }
    public Tablero(boolean tipo) {
        iniciar();
        int x,y,z=10;
        setLayout(new GridLayout(z, z));
        this.tipoTablero = tipo;
        cargarImagenes();
        casillas = new Casillas[z][z];
        for (int i = 0; i < z; i++){
            for (int j = 0; j < z; j++){
                casillas[i][j] = new Casillas(this); 
                casillas[i][j].setFondo(neutro);
                x = (i * 35)+1;
                y = (j * 35)+1;
                casillas[i][j].setBounds(x, y, 34, 34);
                this.add(casillas[i][j]);
            }
        }
    }
public int[] getCoordenadas(Casillas casilla) {
        int [] coordenadas = new int[2];
        for (int i=0; i < this.casillas.length; i++) {
            for (int j=0; j < this.casillas.length; j++) {
                if (this.casillas[i][j] == casilla) {
                    coordenadas[0] = i;
                    coordenadas[1] = j;
                }
            }
        }
        return coordenadas;
    }
private void iniciar() {
        setLayout(null);
        setBackground(Color.white);
        setPreferredSize(new Dimension(500, 351));
        grabar = new JButton("Grabar");
add(grabar);
grabar.setSize(500,500);
grabar.setBounds(370, 20, 100, 50);
grabar.setVisible(true);
comprobar = new JButton("Comprobar");
add(comprobar);
comprobar.setSize(500,500);
comprobar.setBounds(370,100, 100, 50);
comprobar.setVisible(true);
HandlerClass handler = new HandlerClass();
grabar.addActionListener(handler);
ActionClass Action = new ActionClass();
comprobar.addActionListener(Action);
    }    
Clase Casillas
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Casillas extends JPanel implements MouseListener {
    private static final long serialVersionUID = 1L;
    private Tablero tablero;
    private ImageIcon fondo;
    private static int [] casillaMarcada = new int[2];
    public Casillas() {}
    public Casillas(Tablero t) {
        iniciar();        
        this.tablero = t;
        if(this.tablero.getTipoTablero() == true){// tablero responde a clics?
            this.addMouseListener(this);
        }
    }
    public void setFondo(ImageIcon fondo){
        this.fondo = fondo;
    }
    public ImageIcon getFondo(){        
        return this.fondo;
    }                    
    private void iniciar() {
        GroupLayout layout = new GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGap(0, 161, Short.MAX_VALUE));
        layout.setVerticalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGap(0, 193, Short.MAX_VALUE));
    }                         
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        g.drawImage(fondo.getImage(), 0,0,this.getWidth(),this.getHeight(),this);
    }
    public void mouseClicked(MouseEvent e){}
    public void mouseEntered(MouseEvent e){}
    public void mouseExited(MouseEvent e){}
    @SuppressWarnings("static-access")
public void mousePressed(MouseEvent e){
        this.setCasillaMarcada(tablero.getCoordenadas((Casillas)e.getComponent())); 
            this.tablero.pintar(this.getCasillaMarcada()[0],this.getCasillaMarcada()[1]);
    }
Clase Main
import javax.swing.*;
import java.awt.EventQueue;
public class Main extends JFrame {
private static final long serialVersionUID = 1L;
public Main() {
        iniciar();     
    }
        private void iniciar() {
        tablero1 = new Tablero(true);//numeros de cuadros
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        GroupLayout tablero1Layout = new GroupLayout(tablero1);
        tablero1.setLayout(tablero1Layout);
        tablero1Layout.setHorizontalGroup(
            tablero1Layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGap(0, 349, Short.MAX_VALUE));      tablero1Layout.setVerticalGroup(tablero1Layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGap(0, 349, Short.MAX_VALUE));
        GroupLayout layout = new GroupLayout(getContentPane());
        getContentPane().setLayout(layout);   layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap()
                .addComponent(tablero1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                .addContainerGap(176, Short.MAX_VALUE)));   layout.setVerticalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addComponent
        (tablero1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                .addContainerGap(13, Short.MAX_VALUE)));
        pack();      
    }
    public static void main(String args[]) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Main().setVisible(true);
            }
        });
    }
- Resultados
Imágenes tomadas del programa funcionando





- Video de Youtube


- Conclusiones
Hemos Obtenido mucha experiencia al realizar este programa puesto que nos habilito y enseño nuevos métodos o formas de hacerlo, aprendimos también un poco mas de java al encontrar que se pueden meter clases adentro de una clase, así como el modelamiento del área para asignar a las matrices, fue muy buena experiencia.

miércoles, 17 de octubre de 2012

Avance Práctica 3 (Borrador)

  ''Clasificación/ Reconocimiento de Patrones''

- Introducción

El tema que escogimos fue "reconocimiento de patrones", el único propósito de este método es el clasificar un grupo de patrones conocido como conjunto de pruebas en dos o mas clases de categorías. Esto es logrado al calcular las categorías del conjunto en prueba comparándolo con un conjunto de entrenamiento (previo) o training set. Un clasificador dado mide la distancia entre varios puntos dados (compara), para saber cuales puntos son mas cercanos a la meta en un modelo parametizado.

- Objetivo

El objetivo es presentar las diferentes tendencias que existen en la actualidad en cuanto al reconocimiento de patrones, estos conocimientos son susceptibles de ser aplicados a un sin número de problemas, sin embargo, se enfocarán las aplicaciones a los problemas del lenguaje natural y del habla y en general a diferentes situaciones que surgen en el desarrollo de nuevas y más eficaces interfaces humano-computador.


- Justificación
Elegimos este tema debido a que queremos aprender sobre el reconocimiento de patrones, tratando de enfatizar las librerias presentes en java, para tratar de implementarlas en el sistema, mejorando nuestra experiencia en java, aprendiendo poco a poco lo que viene siendo este lenguaje tan extenso.

Para que puede ser útil:
- Puede ser utilizado para el reconocimiento de firmas en los bancos.
- En cuestiones de seguridad en ciertas instituciones.

- Investigación





viernes, 21 de septiembre de 2012

"Autómatas Celulares"

Segunda Práctica " Autómatas Celulares"








  • Introducción

Para esta segunda práctica  como ya se mostró al inicio de la presentación escogimos el tema de “Autómatas Celulares” y como se indica la idea es mostrar al menos 4 reglas, pero estamos pensando en poner 10 reglas si no tenemos algún problema con el tiempo u otras cosas que se nos puedan presentar. 

  • Objetivo
El objetivo es representar las generaciones del conjunto de células mostrando 10 reglas de los autómatas celulares, como ya sabemos también el objetivo al realizar esta práctica es el fenómeno de auto-reproducción donde los trabajos con autómatas celulares son un ejemplo del intento de alcanzar la simulación de este fenómeno.


  • Justificación
El principal motivo por el que nos decidimos por el tema de autómatas celulares fue por el tiempo que teníamos para investigar algunas cosas de los otros temas, este tema que escogimos fue el que entendimos mejor y el que se nos hizo más práctico de programar a parte de que teníamos una idea de como hacerlo.


  • Desarrollo
La idea al principio era hacer como se indica 4 reglas al menos, pero conforme estuvimos avanzando consideramos que también podríamos agregar más, en este caso 10 reglas.
Como fuimos progresando con el código nos pusimos de acuerdo y le codificamos las otras 6 reglas mas para que fueran las 10, no había mucho problema puesto que solo se agregaron las funciones de las otras 6 reglas y se agregaron los botones restantes.
Llegamos a tener fallas al momento de imprimir por que no salia de acuerdo a la regla o solo salia una linea en diagonal, eso nos llevo tiempo en arreglarlo.
Hemos terminado el programa funciona correctamente, imprime las reglas como deben de ser y no hay falla alguna.


  • Código
import javax.swing.*;

      public class principal extends JFrame{

              public static final int SIZE_X = 1270;
                public static final int SIZE_Y = 760;
                  public Boolean patron_automata;
                    public int nRegla;
                      
                        public principal(){
                           setTitle("Automata Celulares ");
                             setSize(SIZE_X+1,SIZE_Y);
                               setResizable(false);
                                 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                                   setLocationRelativeTo(null);
                                    }
                                      public void mostrar(){
                                         add( new dibujo(SIZE_X+123,SIZE_Y,patron_automata,nRegla));
                                           setVisible(true);
                                            }
                                          }
                                          Reglas: 

                                              public static final Boolean[] regla45 = {false,false,true,false,true,true,false,true};
                                              public static final Boolean[] regla57 = {false,false,true,true,true,false,false,false};
                                              public static final Boolean[] regla73 = {false,true,false,false,true,false,false,true};
                                              public static final Boolean[] regla75 = {false,true,false,false,true,false,true,true};
                                              public static final Boolean[] regla89 = {false,true,false,true,true,false,false,true};
                                              public static final Boolean[] regla246 = {true,true,true,true,false,true,true,false};
                                              public static final Boolean[] regla214 = {true,true,false,true,false,true,true,false};
                                              public static final Boolean[] regla125 = {false,true,true,true,true,true,false,true};
                                              public static final Boolean[] regla105 = {false,true,true,false,true,false,false,true};
                                              public static final Boolean[] regla109 = {false,true,true,false,true,true,false,true};

                                          public void mostrar(){
                                              setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                                              setLocationRelativeTo(null);
                                              setVisible(true);
                                          }
                                          public static void main(String[] args){
                                          new interfaz().mostrar();

                                          }
                                          public interfaz(){
                                          setTitle("Automata celular");
                                              setSize(600,400);
                                              setResizable(false);
                                              setLayout(null);
                                              intro = new JLabel("Programa interactivo de automatas celulares");
                                              intro.setBounds(150,10,400,100);
                                              add(intro);
                                              Botones = new JButton[10];

                                              handler = new botones(this);
                                              preparaacion(); 
                                          • Resultados
                                          Como implementamos 10 reglas obtuvimos resultados algo interesantes, las imágenes que se muestran son algunas de las pantallas que obtuvimos:

                                          Regla 45:




                                          Regla 57:


                                          Regla 246:


                                          • Video Youtube


                                          • Conclusiones
                                          La práctica nos resultó más interesante de lo que esperábamos ya que investigando nos dimos cuenta que hay patrones interesantes que se pueden formar. En esta práctica el principal problema que tuvimos fue el tiempo ya que entre otras materias teníamos que estar investigando por día un poco de todo, también aprendimos o mejoramos nuestro conocimiento sobre imprimir gráficas 2d así como la implementación de autómatas celulares.


                                          jueves, 6 de septiembre de 2012

                                          Práctica #1 ''Semáforo''


                                          Practica #1 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




                                          - 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
                                              }
                                          }
                                          

                                          - Desarrollo (Parte 3)

                                          • Codificación Back-End

                                          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"};
                                          String movimiento[]={"Imagenes//carroizq.png","Imagenes//carroder.png","Imagenes//carroup.png","Imagenes//carroabajo.png"};
                                          int i=0,j=0,k=0,q=0,w,l;
                                          JLabel fondo = new JLabel();
                                          int tiempo = 1000;
                                          int maximo=10;
                                          int vida = 1000;
                                          int totalvida;
                                          int ence1=1,ence2,ence3,ence4;
                                          int d,a,m,c;
                                          int t,y,u,o;
                                          int carros11=9,carros12=1,carros21=3,carros22=4;
                                          int llegada11,llegada12,llegada21,llegada22;
                                          Timer iniciovida = new Timer(vida , new ActionListener()
                                          {
                                          public void actionPerformed(ActionEvent arg0)
                                          {
                                          totalvida+=vida;
                                          }
                                          });
                                          Timer apertura = new Timer(vida , new ActionListener()
                                          {
                                          public void actionPerformed(ActionEvent arg0)
                                          {
                                          if(carros11>=maximo)
                                          {
                                          i=1;
                                          j=0;
                                          ence1=1;
                                          q=0;
                                          k=0;
                                          }
                                          else if(carros12>=maximo)
                                          {
                                          j=1;ence2=1;
                                          k=0;
                                          i=0;
                                          q=0;
                                          }
                                          else if(carros21>=maximo)
                                          {
                                          k=1;
                                          j=0;
                                          q=0;ence3=1;
                                          i=0;
                                          }
                                          else if(carros22>=maximo)
                                          {
                                          q=1;
                                          i=0;
                                          k=0;ence4=1;
                                          j=0;
                                          }
                                          }
                                          });
                                          Timer semaforo11 = new Timer(vida, new ActionListener() {
                                          public void actionPerformed(ActionEvent arg0) {
                                          d+=vida;
                                          if(i==0)
                                          {ence1=0;
                                          if(d>=6000)
                                          {
                                          llegada11=Semaforo.aleatorio(2,3);
                                          carros11+=llegada11;
                                          System.out.println("carros11:" +carros11);
                                          d=0;
                                          }
                                          }
                                          if(i==1)
                                          {
                                          ence1=1;
                                          do
                                          {
                                          repaint();
                                          if(carros11>0)
                                          {
                                          carros11-=1;
                                          System.out.print("sale11\n");
                                          w=350;
                                          for(l=0;l>=720;l++)
                                          {
                                          repaint();
                                          }
                                          try {
                                          Thread.sleep(1000);
                                          } catch (InterruptedException e) {}
                                          }
                                          }while(carros11>1);
                                          }ence1=0;
                                          }
                                          }
                                          )
                                          ;
                                          Timer semaforo12 = new Timer(vida, new ActionListener() {
                                          public void actionPerformed(ActionEvent arg0) {
                                          if(j==0)
                                          {ence2=0;
                                          a+=vida;;
                                          if(a>=3000)
                                          {
                                          llegada12=Semaforo.aleatorio(1, 4);
                                          carros12+=llegada12;
                                          System.out.println("carros12:"+carros12);
                                          a=0;
                                          }
                                          }
                                          if(j==1)
                                          {
                                          do
                                          {
                                          if(carros12>0)
                                          {
                                          carros12-=1;
                                          System.out.print("sale12\n");
                                          ence2=1;
                                          repaint();
                                          y=0;
                                          try {
                                          Thread.sleep(1000);
                                          } catch (InterruptedException e) {
                                          }
                                          }
                                          }while(carros12>1);
                                          }ence2=0;
                                          }
                                          }
                                          )
                                          ;
                                          Timer semaforo21 = new Timer(vida, new ActionListener() {
                                          public void actionPerformed(ActionEvent arg0) {
                                          if(k==0)
                                          {ence3=0;
                                          m+=vida;
                                          if(m>=3000)
                                          {
                                          llegada21=Semaforo.aleatorio(2, 4);
                                          carros21+=llegada21;
                                          System.out.println("carros21:"+carros21);
                                          m=0;
                                          }
                                          }
                                          if(k==1)
                                          {
                                          do
                                          {
                                          if(carros21>0)
                                          {
                                          carros21-=1;
                                          System.out.print("sale21\n");
                                          ence3=1;
                                          repaint();
                                          u=0;
                                          try {
                                          Thread.sleep(1000);
                                          } catch (InterruptedException e) {
                                          }
                                          }
                                          }while(carros21>1);
                                          }ence3=0;
                                          }
                                          }
                                          )
                                          ;
                                          Timer semaforo22 = new Timer(vida, new ActionListener() {
                                          public void actionPerformed(ActionEvent arg0) {
                                          if(q==0)
                                          {ence4=0;
                                          c+=vida;;
                                          if(c>=3000)
                                          {
                                          llegada22=Semaforo.aleatorio(2, 4);
                                          carros22+=llegada22;
                                          System.out.println("carros22:"+carros22);
                                          c=0;
                                          }
                                          }
                                          if(q==1)
                                          {
                                          do{
                                          if(carros22>0)
                                          {
                                          carros22-=1;
                                          System.out.print("sale22\n");
                                          ence4=1;
                                          repaint();
                                          o=0;
                                          try {
                                          Thread.sleep(1000);
                                          } catch (InterruptedException e) {
                                          }
                                          }
                                          }while(carros22>1);
                                          }ence4=0;
                                          }
                                          }
                                          )
                                          ;
                                          public void paint(Graphics g)
                                          {
                                          super.paint(g);
                                          add (fondo);
                                          g.drawImage(new ImageIcon(getClass().getResource(semaforos[ence1])).getImage(),300,200,50,50,this);
                                          g.drawImage(new ImageIcon(getClass().getResource(semaforos[ence2])).getImage(),600,200,50,50,this);
                                          g.drawImage(new ImageIcon(getClass().getResource(semaforos[ence3])).getImage(),300,470,50,50,this);
                                          g.drawImage(new ImageIcon(getClass().getResource(semaforos[ence4])).getImage(),600,470,50,50,this);
                                          g.drawImage(new ImageIcon(getClass().getResource(movimiento[0])).getImage(),0,300,100,70,this);
                                          g.drawImage(new ImageIcon(getClass().getResource(movimiento[1])).getImage(),860,390,100,70,this);
                                          g.drawImage(new ImageIcon(getClass().getResource(movimiento[3])).getImage(),500,30,70,100,this);
                                          g.drawImage(new ImageIcon(getClass().getResource(movimiento[2])).getImage(),400,600,70,100,this);
                                          }
                                          public ventana()
                                              {
                                                  this.setSize(960,720);
                                                  this.setTitle("Semaforo");
                                                  this.setVisible(true);
                                                  setDefaultCloseOperation(EXIT_ON_CLOSE);
                                                  fondo.setIcon(new ImageIcon(getClass().getResource("Imagenes//fondo.jpg")));
                                                  this.add (fondo);
                                                  this.setVisible(true);
                                                  semaforo11.start();
                                                  semaforo12.start();
                                                  semaforo21.start();
                                                  semaforo22.start();
                                                  apertura.start();
                                                  iniciovida.start();
                                              }
                                          }

                                          • Demo (Video)


                                          - Conclusión

                                          Una de las enseñanzas como experiencia que nos deja ésta práctica es que no debemos enfocarnos tanto en la interfaz ya que lo principal es la lógica y el funcionamiento en el caso del semáforo. Los principales problemas a la hora de realizar esta práctica no fueron solamente sobre lo que viene siendo la lógica del funcionamiento de los semáforos si no también, la correcta creación de la interfaz del programa.

                                          Entre las cosas con las que estuvimos batallando fue la manera de alternar los semáforos ya que no lográbamos encontrar bien la lógica funcional del sistema para poder coordinarlo como la implementacion de  un crucero real.

                                          Con esto llegamos a la conclusión que debemos adentrarnos mas al estudio de la programación en el  lenguaje java al igual que aprender mas sobre los que viene siendo los Threads (hilos).

                                          - Referencias
                                            - Libro "Java para Estudiantes"   ------> Autor: Douglas Bell
                                            - Disco Interactivo en Videos     ------> Desconocido
                                            - "Java a fondo"                         ------> Autor: Osiris LMS