📄 reseau.java
字号:
package neuronespack;
/**
* Package Neurones
* Fonctionalit閟 de base des r閟eaux neuronaux.
* R閟eaux Neauronaux, Vuibert 2006.
* Jean-Philippe Rennard
* version 1.0, 17/3/2006
*/
import java.util.*;
/**
* <p>Title: R閟eau</p>
* <p>Description: Gestion des fonctions de base d'un r閟eau.</p>
*/
public abstract class Reseau {
public static int CNX_ENTREE = 0;
public static int CNX_SORTIE = 1;
public static int CNX_COUCHE = 2;
public static int CNX_BIAIS = 3;
/** Nombre de couches */
private int nbCouches;
/** Liste des couches */
private Vector lesCouches;
/** Liste des connexions */
private Vector lesConnexions;
/** Donn閑s courantes */
private DonneesEntree donneesCourantes;
/** Donn閑s de r閟ultats */
private Resultats lesResultats;
/** Biais */
private Biais leBiais;
/**
* Constructeur du r閟eau
* @param nbC int : nombre de couches
*/
public Reseau(int nbC) {
nbCouches = nbC;
lesCouches = new Vector(nbCouches);
lesConnexions = new Vector();
}
/** Ajout d'une couche */
public void addCouche(Couche c) {
lesCouches.addElement(c);
}
/** Getter d'une couche */
public Couche getCouche(int c) {
return (Couche) lesCouches.elementAt(c);
}
/**
* Construction des connexions d'entr閑s
* @param mc boolean[][] : Matrice des connexions
* @return Connexions : Objet Connexions cr殚
*/
public Connexions construitConnexionsEntrees(boolean mc[][]) {
Connexions connexion = ajouteConnexionsEntrees(donneesCourantes,
(GroupeUnites) getCouche(0), mc);
connexion.setPoidsFixes(1.0D);
return connexion;
}
/**
* Construction des connexions directes d'entr閑s
* @return Connexions : Objet Connexions cr殚
*/
public Connexions construitConnexionsEntreesDirectes() {
int nbe; // Nombre d'unit閟 閙ettrices
int nbr; // Nombre d'unit閟 r閏eptrices
boolean mc[][]; // Matrice de connexion
nbe = donneesCourantes.getTailleVecteurEntree();
nbr = getCouche(0).getNbUnites();
mc = new boolean[nbe][nbr];
Connexions.construitConnexionsDirectes(nbe, mc);
return construitConnexionsEntrees(mc);
}
/**
* Ajout des connexions d'entr閑
* @param dataE GroupeUnites : Ensemble des unit閟 d'origine
* @param c GroupeUnites : Ensemble des unit閟 de destination
* @param mc boolean[][] : Matrice des connexions
* @return Connexions : Objet Connexions cr殚
*/
public Connexions ajouteConnexionsEntrees(GroupeUnites dataE, GroupeUnites c,
boolean mc[][]) {
Connexions connexion = new Connexions(Reseau.CNX_ENTREE, dataE, c, mc);
lesConnexions.addElement(connexion);
return connexion;
}
/**
* Construction des connexions de sorties
* @param mc boolean[][] : Matrice des connexions
* @return Connexions : Objet Connexions cr殚
*/
public Connexions construitConnexionsSorties(boolean mc[][]) {
Connexions connexion = ajouteConnexionsSorties(
(GroupeUnites) getCouche(nbCouches-1), lesResultats, mc);
connexion.setPoidsFixes(1.0D);
return connexion;
}
/**
* Construction des connexions directes de sorties
* @return Connexions : Objet Connexions cr殚
*/
public Connexions construitConnexionsSortiesDirectes() {
int nbe; // Nombre d'unit閟 閙ettrices
int nbr; // Nombre d'unit閟 r閏eptrices
nbe = getCouche(nbCouches-1).getNbUnites();
nbr = lesResultats.getNbUnites();
boolean mc[][] = new boolean[nbe][nbr];
Connexions.construitConnexionsDirectes(nbe, mc);
return construitConnexionsSorties(mc);
}
/**
* Ajoute des connexions de sortie
* @param c GroupeUnites : Ensemble des unit閟 d'origine
* @param dataR GroupeUnites : Ensemble des unit閟 de destination
* @param mc boolean[][] : Matrice des connexions
* @return Connexions : Objet Connexions cr殚
*/
public Connexions ajouteConnexionsSorties(GroupeUnites c, GroupeUnites dataR,
boolean mc[][]) {
Connexions connexion = new Connexions(Reseau.CNX_SORTIE, c, dataR, mc);
lesConnexions.addElement(connexion);
return connexion;
}
/**
* Construction des connexions entre deux couches
* @param c1 GroupeUnites : Ensemble des unit閟 d'origine
* @param c2 GroupeUnites : Ensemble des unit閟 de destination
* @param mc boolean[][] : Matrice des connexions
* @return Connexions : Objet Connexions cr殚
*/
public Connexions construitConnexionsCouches(
GroupeUnites c1, GroupeUnites c2, boolean mc[][]) {
Connexions connexion = ajouteConnexionsCouches(c1, c2, mc);
connexion.setPoidsAleat(0.0D, 1.0D);
return connexion;
}
/**
* Construction de connexions compl鑤es entre deux couches
* @param c1 GroupeUnites : Ensemble des unit閟 d'origine
* @param c2 GroupeUnites : Ensemble des unit閟 de destination
* @return Connexions : Objet Connexions cr殚
*/
public Connexions construitConnexionsCouchesComplete(GroupeUnites c1, GroupeUnites c2) {
int nbe; // Nombre d'unit閟 閙ettrices
int nbr; // Nombre d'unit閟 r閏eptrices
boolean mc[][]; // Matrice des connexions
nbe = c1.getNbUnites();
nbr = c2.getNbUnites();
mc = new boolean[nbe][nbr];
Connexions.construitConnexionsCompletes(nbe, nbr, mc);
return construitConnexionsCouches(c1, c2, mc);
}
/**
* Connexion de 2 couches
* @param c1 CoucheBase : Couche d'origine
* @param c2 CoucheBase : Couche de destination
* @param mc boolean[][] : Matrice de connexions
* @return ConnexionsCouches : Connexion cr殚e
*/
public Connexions ajouteConnexionsCouches(GroupeUnites c1,
GroupeUnites c2, boolean mc[][]) {
Connexions connexion = new Connexions(Reseau.CNX_COUCHE, c1, c2, mc);
lesConnexions.addElement(connexion);
return connexion;
}
/**
* Construction des connexions au biais
* @param vb double[][] : Valeurs des biais (seuils) par couche et par neurone
*/
public void construitConnexionsBiais(double vb[][]) {
leBiais = new Biais(0);
for(int i=0; i<nbCouches; i++) {
ajouteConnexionsBiais(getCouche(i), vb[i]);
}
}
/**
* Ajoute les connexions de biais
* @param couche CoucheMP : Couche concern閑
* @param val double[] : Valeurs des biais (seuils) par neurone
*/
public void ajouteConnexionsBiais(Couche couche, double val[]) {
boolean mc[][] = new boolean[1][couche.getNbUnites()];
double biais[][] = new double[1][couche.getNbUnites()];
for(int i=0; i<couche.getNbUnites(); i++) {
mc[0][i] = true;
biais[0][i] = val[i];
}
Connexions connexion = new Connexions(Reseau.CNX_BIAIS, leBiais, couche, mc);
connexion.setMatricePoids(biais);
lesConnexions.addElement(connexion);
}
/**
* Fixe les poids des connexions selon matrice poids
* @param c int : Couche d'origine des connexions
* @param pc int : Type de connexion de la couche
* @param p double[][] : Matrice des poids
*/
public void setPoidsConnexions(Connexions cnx, double p[][]) {
cnx.setMatricePoids(p);
}
/** Getter du nombre couches */
public int getNbCouches() {
return nbCouches;
}
/** Getter des couches */
public Vector getLesCouches() {
return lesCouches;
}
/** Getter d'une connexion */
public Connexions getConnexions(int c) {
return (Connexions) lesConnexions.elementAt(c);
}
/** Getter des Connexions */
public Vector getLesConnexions() {
return lesConnexions;
}
/** Getter du biais */
public Biais getLeBiais() {
return leBiais;
}
/**
* Construit l'objet donn閑s courantes
* @param tve int : Taille du vecteur d'entr閑
* @param tvs int : Taille du vecteur de sortie d閟ir閑s
*/
public void setDonneesCourantes(int tve, int tvs) {
donneesCourantes = new DonneesEntree(tve, tvs);
}
/** Getter des donn閑s courantes */
public DonneesEntree getDonneesCourantes() {
return donneesCourantes;
}
/**
* Construit l'objet r閟ultat
* @param tvr int : Taille du vecteur r閟ultat (sortie)
*/
public void setResultat(int tvr) {
lesResultats = new Resultats(tvr);
}
/** Getter des r閟ultats */
public Resultats getResultats() {
return lesResultats;
}
/**
* Connecte un fichier d'entr閑
* @param pat Patterns : Objet Patterns concern
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -