//package simulateurNeurone;
import java.util.ArrayList;
/*******************************************
* Completez le programme a partir d'ici.
*******************************************/
private double x;
private double y;
public Position(double axeX,
double axeY
){ x=axeX;
y=axeY;
}
x=0.0;
y=0.0;
}
public double getX(){return x;}
public double getY(){return y;}
return "(" + x + ", " + y + ")";
}
}
//===================
class Neurone{
protected double signal;
private double attenuation;
private ArrayList<Neurone> connexions;
public Neurone
(Position pos,
double att
){ position=pos;
attenuation=att;
signal=0.0;
connexions=new ArrayList<Neurone>();
}
public void connexion(Neurone n){
this.connexions.add(n);
}
public int getNbConnexions(){return this.connexions.size();}
public Neurone getConnexion(int index){return this.connexions.get(index);}
public Position getPosition
(){return this.
position;} public double getAttenuation(){return this.attenuation;}
public double getSignal(){return this.signal;}
public void recoitStimulus(double stimulus){
//this.signal=this.attenuation*stimulus;
/*for(Neurone n:this.connexions){
n.recoitStimulus(this.signal);
}*/
//if (this instanceof NeuroneCumulatif){
// signal = signal + stimulus * attenuation;
//}
//else {
signal = stimulus*attenuation;
//}
this.propague();
}
protected void propague(){
for(Neurone n:this.connexions){
n.recoitStimulus(this.signal);
}
}
String s
="Le neurone en position "+position.
toString()+" avec attenuation "+this.
attenuation; if(this.getNbConnexions()>0){
s+=" en connexion avec\n";
for(Neurone n: this.connexions){
s+=" - un neurone en position "+n.getPosition().toString()+"\n";
}
}else{
s+=" sans connexion\n";
}
return s;
}
}
//==========================
class NeuroneCumulatif extends Neurone{
public NeuroneCumulatif
(Position pos,
double att
) { super(pos, att);
}
public void recoitStimulus(double stimulus){
this.signal = this.signal + stimulus * this.getAttenuation();
//double monSignal=this.signal;
//System.out.println("Signal du neurone cumulatif -> " + this.signal);
//super.recoitStimulus(stimulus);
//super.recoitStimulus(stimulus);
//System.out.println("Signal du neurone cumulatif -> " + this.signal);
this.propague();
//this.signal=monSignal+this.signal;
//System.out.println("Signal du neurone cumulatif -> " + this.signal);
}
}
//===========================
class Cerveau{
private ArrayList<Neurone> neurones;
public Cerveau(){
neurones=new ArrayList<Neurone>();
}
public int getNbNeurones(){return neurones.size();}
public Neurone getNeurone(int index){return neurones.get(index);}
public void ajouterNeurone
(Position pos,
double attenuation
){ neurones.add(new Neurone(pos,attenuation));
}
public void ajouterNeuroneCumulatif
(Position pos,
double attenuation
){ neurones.add(new NeuroneCumulatif(pos,attenuation));
}
public void stimuler(int index, double stimulus){
neurones.get(index).recoitStimulus(stimulus);
}
public double sonder(int index){
return neurones.get(index).getSignal();
}
public void creerConnexions(){
if(neurones.size()>1){//al menos hay dos neuronas
neurones.get(0).connexion(neurones.get(1));
}
if(neurones.size()>2){//al menos hay tres
neurones.get(0).connexion(neurones.get(2));
}
for(int i=1;i<(neurones.size()-2);i+=2){
neurones.get(i).connexion(neurones.get(i+1));
neurones.get(i+1).connexion(neurones.get(i+2));
}
}
s+="Le cerveau contient "+this.getNbNeurones()+" neurone";
//if(this.getNbNeurones()>1){
s+="(s)";
//}
s+="\n";
for(Neurone n: neurones){
s+=n.toString()+"\n";
}
s+="*----------*\n\n";
return s;
}
}
/*******************************************
* Ne pas modifier apres cette ligne
* pour pr'eserver les fonctionnalit'es et
* le jeu de test fourni.
* Votre programme sera test'e avec d'autres
* donn'ees.
*******************************************/
class SimulateurNeurone {
public static void main
(String[] args
) { // TEST DE LA PARTIE 1
System.
out.
println("Test de la partie 1:"); System.
out.
println("--------------------");
Neurone neuron1 = new Neurone(position1, 0.5);
Neurone neuron2 = new Neurone(position2, 1.0);
Neurone neuron3 = new Neurone(position3, 2.0);
neuron1.connexion(neuron2);
neuron2.connexion(neuron3);
neuron1.recoitStimulus(10);
System.
out.
println("Signaux : "); System.
out.
println(neuron1.
getSignal()); System.
out.
println(neuron2.
getSignal()); System.
out.
println(neuron3.
getSignal());
System.
out.
println("Premiere connexion du neurone 1"); System.
out.
println(neuron1.
getConnexion(0));
// FIN TEST DE LA PARTIE 1
// TEST DE LA PARTIE 2
System.
out.
println("Test de la partie 2:"); System.
out.
println("--------------------");
NeuroneCumulatif neuron5 = new NeuroneCumulatif(position5, 0.5);
neuron5.recoitStimulus(10);
neuron5.recoitStimulus(10);
System.
out.
println("Signal du neurone cumulatif -> " + neuron5.
getSignal());
// FIN TEST DE LA PARTIE 2
// TEST DE LA PARTIE 3
System.
out.
println("Test de la partie 3:"); System.
out.
println("--------------------"); Cerveau cerveau = new Cerveau();
// parametres de construction du neurone:
// la position et le facteur d'attenuation
cerveau.
ajouterNeurone(new Position(0,
0),
0.5); cerveau.
ajouterNeurone(new Position(0,
1),
0.2); cerveau.
ajouterNeurone(new Position(1,
0),
1.0);
// parametres de construction du neurone cumulatif:
// la position et le facteur d'attenuation
cerveau.
ajouterNeuroneCumulatif(new Position(1,
1),
0.8); cerveau.creerConnexions();
cerveau.stimuler(0, 10);
System.
out.
println("Signal du 3eme neurone -> " + cerveau.
sonder(3)); // FIN TEST DE LA PARTIE 3
NeuroneCumulatif nc1
=new NeuroneCumulatif
(new Position(27.0,
44.0),
0.50); NeuroneCumulatif nc2
=new NeuroneCumulatif
(new Position(24.0,
19.0),
1.0); NeuroneCumulatif nc3
=new NeuroneCumulatif
(new Position(24.0,
30.0),
0.90); NeuroneCumulatif nc4
=new NeuroneCumulatif
(new Position(34.0,
12.0),
0.20); Neurone nc5
=new Neurone
(new Position(8.0,
47.0),
0.40); nc1.connexion(nc2);
nc1.connexion(nc3);
nc1.connexion(nc4);
nc1.connexion(nc5);
nc1.recoitStimulus(0.50);
nc1.recoitStimulus(0.50);
System.
out.
println("Signal du neurone cumulatif -> " + nc1.
getSignal()); System.
out.
println("Signal du neurone cumulatif -> " + nc2.
getSignal()); System.
out.
println("Signal du neurone cumulatif -> " + nc3.
getSignal()); System.
out.
println("Signal du neurone cumulatif -> " + nc4.
getSignal()); System.
out.
println("Signal du neurone -> " + nc5.
getSignal()); }
}