Package GUI

Source Code of GUI.GestionReseau

package GUI;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

import javax.swing.JOptionPane;

import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;

import parser.Chargeur;

import fonctions.Heaviside;
import fonctions.Sigmoide;

import nets.Couche;
import nets.Neurone;
import nets.ReseauFF;

public class GestionReseau {
 
  private ReseauFF reseau;
  private Neurone neurone_courant;
  private ConteneurSchema conteneur_schema;
  private ConteneurNeurone conteneur_neurone;
  private StatBars conteneur_caracteristiques;
  private ConteneurReconnaissance conteneur_reconnaissance;
 
  private int largeur_images;
  private int partie; // 0 == calcul, 1 == propagation_erreur, 2 == recalcul
  private int sequence_courante;
  private int image_courante;

  private ArrayList<ArrayList<ArrayList<Double>>> vecteur_sequences;
  private ArrayList<ArrayList<Double>> vecteur_reconnaissances;
  private boolean infos;
  private Neurone neurone_visu;
  private ZFenetre zFen;
  private ConteneurLecture conteneur_lecture;
  private boolean afficher_reconnaissance;

 
  public GestionReseau(){
    vecteur_sequences =  new ArrayList<ArrayList<ArrayList<Double>>>();
    vecteur_reconnaissances =  new ArrayList<ArrayList<Double>>();
  }
 
  public Neurone getCourant() {
    return neurone_courant;
  }
 
  public Neurone getVisu() {
    return neurone_visu;
 
  public Neurone setVisu(Neurone n) {
    return neurone_visu = n;
 
 
  public void avancerSequence(){

    sequence_courante++;
    image_courante = -1;
    avancerImage();
  }

  private void avancerImage() {
    partie = 0;
    image_courante++;
    reseau.input(vecteur_sequences.get(sequence_courante).get(image_courante));
    reseau.ini_iterateur_neurone();
    conteneur_schema.setImage(vecteur_sequences.get(sequence_courante).get(image_courante));
  }
 
  public boolean suivant() {
    Neurone ancien;
    conteneur_caracteristiques.repaint();

    if(partie == 0) {
     
      if(neurone_courant == null)
        avancerSequence();
     
      if(!reseau.hasNext_neurone()) {

        if(reseau.apprendre_forme(sequence_courante)) {   

          if(infos)
            JOptionPane.showMessageDialog(null,"Il n'y a pas besoin de correction !","",JOptionPane.INFORMATION_MESSAGE);
         
          if(vecteur_sequences.get(sequence_courante).size()-1 != image_courante)
            avancerImage();
          else if(vecteur_sequences.size()-1 != sequence_courante)
            avancerSequence();
          else {
            return false;
          }

          suivant();

        }
        else {
          if(infos)
            JOptionPane.showMessageDialog(null,"Il y a besoin d'une correction !","",JOptionPane.WARNING_MESSAGE);
         
          reseau.ini_iterateurInv_neurone();
          partie = 1;

          suivant();

        }
      }
      else
      {
        ancien = neurone_courant;
        neurone_courant = reseau.update_neurone();
        conteneur_schema.suivant(ancien, neurone_courant);
      }
    }
   
    else if(partie == 1) {

      if(!reseau.hasNext_neurone()) {
       
        if(infos)
          JOptionPane.showMessageDialog(null,"Recalcul des poids","",JOptionPane.INFORMATION_MESSAGE);
       
        partie = 2;
        reseau.ini_iterateur_neurone();
        suivant();

      }
      else {
        ancien = neurone_courant;
        neurone_courant = reseau.propagation_neurone();
        conteneur_schema.suivant(ancien, neurone_courant);
      }
    }
   
    else if(partie == 2) {

      if(!reseau.hasNext_neurone()) {

        if(infos)
          JOptionPane.showMessageDialog(null,"Image suivante","",JOptionPane.INFORMATION_MESSAGE);
       
        if(vecteur_sequences.get(sequence_courante).size()-1 != image_courante)
          avancerImage();
        else if(vecteur_sequences.size()-1 != sequence_courante)
          avancerSequence();
        else {
          return false;

        }       
        suivant();

      }
      else{
        ancien = neurone_courant;
        neurone_courant = reseau.correctionPoids_neurone();;
        conteneur_schema.suivant(ancien, neurone_courant);
      }
    }
    return true;
  }
   
  public boolean fin(){
    if(vecteur_sequences.size()-1 == sequence_courante
        && vecteur_sequences.get(sequence_courante).size()-1 == image_courante
        && !reseau.hasNext_neurone()
        && (partie==2 || partie==0 && reseau.apprendre_forme(sequence_courante)))
    {
      conteneur_reconnaissance.set();
      afficher_reconnaissance = true;

      //      conteneur_reconnaissance.repaint();
      return true;
    }
    return false;
  }
 
  public boolean changementSequence(){
    return   changementImage() && image_courante == 0;
  }

 
  public boolean changementImage() {

    return   neurone_courant != null
    && neurone_courant.getIndiceCouche() == 1
    && neurone_courant.getIndiceNeurone()== 0
    && partie == 0;
  }
 

  public ReseauFF getReseau() {
    return reseau;
  }
 
  public void chargerFichierXML() {
    /* recup�re le fichier */
   
   
    File jf = zFen.chargerFileChooser();
    if(jf != null) {
   
      XMLReader xr = null;
      try {
        xr = XMLReaderFactory.createXMLReader();
      } catch (SAXException e) {
        e.printStackTrace();
      }
      Chargeur handler = new Chargeur();
      xr.setContentHandler(handler);
      xr.setErrorHandler(handler);
     
      FileReader r;
      try {
        r = new FileReader(jf);
        try {
          xr.parse(new InputSource(r));
        } catch (IOException e) {
          e.printStackTrace();
        } catch (SAXException e) {
          e.printStackTrace();
        }
      } catch (FileNotFoundException e1) {
        e1.printStackTrace();
      }
     
 
     
      /* initialise le reseau */
     
      reseau = handler.getReseau();
      /*
      for(int i=0;i<reseau.getNbCouchesCachees()+2;i++) {
        System.out.println(i+" : "+reseau.getTaillecouche(i));
        for(int j=0;j<reseau.getTaillecouche(i);j++) {
          System.out.println("  "+j+" : "+reseau.get(i).get(j).getIndiceNeurone()+" - "+reseau.get(i).get(j).getIndiceCouche());

        }
      }*/
           
      largeur_images = handler.getColonne();
      //System.out.println(largeur_images);

      vecteur_sequences = handler.getVecteur_sequences_appr();
      vecteur_reconnaissances = handler.getVecteur_sequences_reco();
      /*
      for(int i=0; i<vecteur_sequences.size();i++) {
        System.out.println(i+" : "+vecteur_sequences.get(i).size());
        for(int j=0; j<vecteur_sequences.get(i).size();j++) {
          System.out.println("  "+ j +" : "+vecteur_sequences.get(i).get(j).size());
          for(int k=0; k<vecteur_sequences.get(i).get(j).size();k++) {
            System.out.println("    "+ k +" : "+vecteur_sequences.get(i).get(j).get(k));

          }
        }
      }*/
     
      init();
    }
  }

  public void init(){

    afficher_reconnaissance = false;
    image_courante = -1;
    sequence_courante = -1;
    neurone_courant = null;
    neurone_visu = null;
    partie = 0

    conteneur_schema.set();
    conteneur_lecture.set();
    conteneur_neurone.set();

    conteneur_neurone.repaint();
    conteneur_schema.repaint();
    conteneur_lecture.repaint();
    conteneur_reconnaissance.repaint();
    conteneur_caracteristiques.repaint();
   
    suivant();
  }
 
  @SuppressWarnings("serial")
  public void chargerReseauDefaut() {

    zFen.charger();
   
    reseau = new ReseauFF(15);
   
    reseau.add(new Couche (15,new Sigmoide()));
    reseau.add(new Couche (18,new Sigmoide()));
    reseau.add(new Couche (9,new Sigmoide()));
   
    largeur_images = 3;
   
    vecteur_sequences.clear();
   
    ArrayList<ArrayList<Double>> vecteur_images1 = new ArrayList<ArrayList<Double>>();
    vecteur_images1.add(new ArrayList<Double> () {{ add(1.0); add(1.0); add(1.0); add(1.0); add(-1.0); add(1.0); add(1.0); add(-1.0); add(1.0); add(1.0); add(-1.0); add(1.0); add(1.0); add(1.0); add(1.0);;};});
    vecteur_images1.add(new ArrayList<Double> () {{ add(1.0); add(1.0); add(1.0); add(1.0); add(-1.0); add(1.0); add(1.0); add(-1.0); add(1.0); add(1.0); add(-1.0); add(1.0); add(1.0); add(1.0); add(1.0);;};});
    vecteur_images1.add(new ArrayList<Double> () {{ add(1.0); add(1.0); add(1.0); add(1.0); add(-1.0); add(1.0); add(1.0); add(-1.0); add(1.0); add(1.0); add(-1.0); add(1.0); add(1.0); add(1.0); add(1.0);;};});
    vecteur_images1.add(new ArrayList<Double> () {{ add(1.0); add(1.0); add(1.0); add(1.0); add(-1.0); add(1.0); add(1.0); add(-1.0); add(1.0); add(1.0); add(-1.0); add(1.0); add(1.0); add(1.0); add(1.0);;};});
    vecteur_images1.add(new ArrayList<Double> () {{ add(1.0); add(1.0); add(1.0); add(1.0); add(-1.0); add(1.0); add(1.0); add(-1.0); add(1.0); add(1.0); add(-1.0); add(1.0); add(1.0); add(1.0); add(1.0);;};});
    vecteur_images1.add(new ArrayList<Double> () {{ add(1.0); add(1.0); add(1.0); add(1.0); add(-1.0); add(1.0); add(1.0); add(-1.0); add(1.0); add(1.0); add(-1.0); add(1.0); add(1.0); add(1.0); add(1.0);;};});
    vecteur_images1.add(new ArrayList<Double> () {{ add(1.0); add(1.0); add(1.0); add(1.0); add(-1.0); add(1.0); add(1.0); add(-1.0); add(1.0); add(1.0); add(-1.0); add(1.0); add(1.0); add(1.0); add(1.0);;};});
    vecteur_images1.add(new ArrayList<Double> () {{ add(1.0); add(1.0); add(1.0); add(1.0); add(-1.0); add(1.0); add(1.0); add(-1.0); add(1.0); add(1.0); add(-1.0); add(1.0); add(1.0); add(1.0); add(1.0);;};});
    vecteur_images1.add(new ArrayList<Double> () {{ add(1.0); add(1.0); add(1.0); add(1.0); add(-1.0); add(1.0); add(1.0); add(-1.0); add(1.0); add(1.0); add(-1.0); add(1.0); add(1.0); add(1.0); add(1.0);;};});
    vecteur_sequences.add(vecteur_images1);

    ArrayList<ArrayList<Double>> vecteur_images2 = new ArrayList<ArrayList<Double>>();
    vecteur_images2.add(new ArrayList<Double> () {{ add(1.0); add(1.0); add(1.0); add(-1.0); add(-1.0); add(1.0); add(1.0); add(1.0); add(1.0); add(1.0); add(-1.0); add(-1.0); add(1.0); add(1.0); add(1.0);;};});
    vecteur_images2.add(new ArrayList<Double> () {{ add(-1.0); add(1.0); add(1.0); add(-1.0); add(-1.0); add(1.0); add(1.0); add(1.0); add(1.0); add(1.0); add(-1.0); add(-1.0); add(1.0); add(1.0); add(1.0);;};});
    vecteur_images2.add(new ArrayList<Double> () {{ add(-1.0); add(1.0); add(1.0); add(-1.0); add(-1.0); add(1.0); add(-1.0); add(1.0); add(1.0); add(-1.0); add(1.0); add(-1.0); add(-1.0); add(1.0); add(1.0);;};});
    vecteur_sequences.add(vecteur_images2);

   
    vecteur_reconnaissances.clear();
   
    vecteur_reconnaissances.add(new ArrayList<Double> () {{ add(1.0); add(1.0); add(1.0); add(-1.0); add(-1.0); add(1.0); add(1.0); add(1.0); add(1.0); add(1.0); add(-1.0); add(-1.0); add(1.0); add(1.0); add(1.0);;};});
    vecteur_reconnaissances.add(new ArrayList<Double> () {{ add(1.0); add(1.0); add(1.0); add(1.0); add(-1.0); add(1.0); add(-1.0); add(-1.0); add(1.0); add(1.0); add(-1.0); add(1.0); add(1.0); add(1.0); add(1.0);;};});
   
    reseau.add(new Couche (vecteur_sequences.size(),new Heaviside(-1,1)))
/*
    for(int i=0;i<reseau.getNbCouchesCachees()+2;i++) {
      System.out.println(i+" : "+reseau.getTaillecouche(i));
    }*/
/*
    for(int i=0;i<reseau.getNbCouchesCachees()+2;i++) {
      System.out.println(i+" : "+reseau.getTaillecouche(i));
      for(int j=0;j<reseau.getTaillecouche(i);j++) {
        System.out.println("  "+j+" : "+reseau.get(i).get(j));

      }

    }
  */     
    init();

  }

  public int getLargeurImage() {
    return largeur_images;
  }
  public void setPanSchema(ConteneurSchema panSchema) {
    conteneur_schema = panSchema;
   
  }
  public void setPanNeurone(ConteneurNeurone panNeurone) {
    conteneur_neurone = panNeurone;
  }
 
  public void setPanCaracteristiques(StatBars panCarac) {
    conteneur_caracteristiques = panCarac;
  }
 
  public void setPanReconnaissance(ConteneurReconnaissance panReconnaissance) {
    conteneur_reconnaissance = panReconnaissance;
  }
 
  public void setPanLecture(ConteneurLecture panLecture) {
    conteneur_lecture = panLecture;
  }
 
  public void setPanFenetre(ZFenetre panFenetre) {
    zFen = panFenetre;
  }

  public void setInfos(boolean b) {
    infos = b;
  }
 
  public void invInfos() {
    infos = !infos;
  }
 
  public int getPartie(){
    return partie;
  }

  public ArrayList<ArrayList<Double>> getReconnaissance() {
    return vecteur_reconnaissances;
  }

  public boolean getInfos() {
    return infos;
  }
 
 
  public void golast() {
    boolean temp = getInfos();
    setInfos(false);
   
    suivant();
    while(!fin() && suivant());
   
    setInfos(temp);
  }
 
  public void nextseq() {
    boolean temp = getInfos();
    setInfos(false);

    suivant();
    while(!fin() && !changementSequence())
      suivant();
   
    setInfos(temp);
  }
 
  public void nextimg() {
    boolean temp = getInfos();
    setInfos(false);

    suivant();
    while(!fin() && !changementImage())
      suivant();
   
    setInfos(temp);
  }

  public ArrayList<ArrayList<ArrayList<Double>>> getVecteurSequence() {
    return vecteur_sequences;
  }

  public int getSequenceCourante() {
    return sequence_courante;
  }
 
  public int getImageCourante() {
    return image_courante;
  }

  public boolean getAfficherReconnaissance() {
    return afficher_reconnaissance;
  }
 
}
TOP

Related Classes of GUI.GestionReseau

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.