fork download
  1. //package simulateurNeurone;
  2.  
  3. import java.util.ArrayList;
  4.  
  5. /*******************************************
  6.  * Completez le programme a partir d'ici.
  7.  *******************************************/
  8. class Position{
  9. private double x;
  10. private double y;
  11.  
  12. public Position(double axeX, double axeY){
  13. x=axeX;
  14. y=axeY;
  15. }
  16. public Position(){
  17. x=0.0;
  18. y=0.0;
  19. }
  20. public double getX(){return x;}
  21. public double getY(){return y;}
  22. public String toString(){
  23. return "(" + x + ", " + y + ")";
  24. }
  25. }
  26. //===================
  27. class Neurone{
  28. private Position position;
  29. protected double signal;
  30. private double attenuation;
  31. private ArrayList<Neurone> connexions;
  32.  
  33. public Neurone(Position pos, double att){
  34. position=pos;
  35. attenuation=att;
  36. signal=0.0;
  37. connexions=new ArrayList<Neurone>();
  38. }
  39. public void connexion(Neurone n){
  40. this.connexions.add(n);
  41. }
  42. public int getNbConnexions(){return this.connexions.size();}
  43. public Neurone getConnexion(int index){return this.connexions.get(index);}
  44. public Position getPosition(){return this.position;}
  45. public double getAttenuation(){return this.attenuation;}
  46. public double getSignal(){return this.signal;}
  47. public void recoitStimulus(double stimulus){
  48. //this.signal=this.attenuation*stimulus;
  49. /*for(Neurone n:this.connexions){
  50. n.recoitStimulus(this.signal);
  51. }*/
  52. //if (this instanceof NeuroneCumulatif){
  53. // signal = signal + stimulus * attenuation;
  54. //}
  55. //else {
  56. signal = stimulus*attenuation;
  57. //}
  58. this.propague();
  59. }
  60. protected void propague(){
  61. for(Neurone n:this.connexions){
  62. n.recoitStimulus(this.signal);
  63. }
  64. }
  65. public String toString(){
  66. String s="Le neurone en position "+position.toString()+" avec attenuation "+this.attenuation;
  67. if(this.getNbConnexions()>0){
  68. s+=" en connexion avec\n";
  69. for(Neurone n: this.connexions){
  70. s+=" - un neurone en position "+n.getPosition().toString()+"\n";
  71. }
  72. }else{
  73. s+=" sans connexion\n";
  74. }
  75. return s;
  76. }
  77. }
  78. //==========================
  79. class NeuroneCumulatif extends Neurone{
  80.  
  81. public NeuroneCumulatif(Position pos, double att) {
  82. super(pos, att);
  83. }
  84. public void recoitStimulus(double stimulus){
  85. this.signal = this.signal + stimulus * this.getAttenuation();
  86. //double monSignal=this.signal;
  87. //System.out.println("Signal du neurone cumulatif -> " + this.signal);
  88. //super.recoitStimulus(stimulus);
  89. //super.recoitStimulus(stimulus);
  90. //System.out.println("Signal du neurone cumulatif -> " + this.signal);
  91. this.propague();
  92. //this.signal=monSignal+this.signal;
  93. //System.out.println("Signal du neurone cumulatif -> " + this.signal);
  94. }
  95. }
  96. //===========================
  97. class Cerveau{
  98. private ArrayList<Neurone> neurones;
  99.  
  100. public Cerveau(){
  101. neurones=new ArrayList<Neurone>();
  102. }
  103. public int getNbNeurones(){return neurones.size();}
  104. public Neurone getNeurone(int index){return neurones.get(index);}
  105. public void ajouterNeurone(Position pos, double attenuation){
  106. neurones.add(new Neurone(pos,attenuation));
  107. }
  108. public void ajouterNeuroneCumulatif(Position pos, double attenuation){
  109. neurones.add(new NeuroneCumulatif(pos,attenuation));
  110. }
  111. public void stimuler(int index, double stimulus){
  112. neurones.get(index).recoitStimulus(stimulus);
  113. }
  114. public double sonder(int index){
  115. return neurones.get(index).getSignal();
  116. }
  117. public void creerConnexions(){
  118. if(neurones.size()>1){//al menos hay dos neuronas
  119. neurones.get(0).connexion(neurones.get(1));
  120. }
  121. if(neurones.size()>2){//al menos hay tres
  122. neurones.get(0).connexion(neurones.get(2));
  123. }
  124.  
  125. for(int i=1;i<(neurones.size()-2);i+=2){
  126. neurones.get(i).connexion(neurones.get(i+1));
  127. neurones.get(i+1).connexion(neurones.get(i+2));
  128. }
  129. }
  130. public String toString(){
  131. String s="*----------*\n\n";
  132. s+="Le cerveau contient "+this.getNbNeurones()+" neurone";
  133. //if(this.getNbNeurones()>1){
  134. s+="(s)";
  135. //}
  136. s+="\n";
  137. for(Neurone n: neurones){
  138. s+=n.toString()+"\n";
  139. }
  140. s+="*----------*\n\n";
  141. return s;
  142. }
  143. }
  144.  
  145. /*******************************************
  146.  * Ne pas modifier apres cette ligne
  147.  * pour pr'eserver les fonctionnalit'es et
  148.  * le jeu de test fourni.
  149.  * Votre programme sera test'e avec d'autres
  150.  * donn'ees.
  151.  *******************************************/
  152. class SimulateurNeurone {
  153.  
  154. public static void main(String[] args) {
  155. // TEST DE LA PARTIE 1
  156. System.out.println("Test de la partie 1:");
  157. System.out.println("--------------------");
  158.  
  159. Position position1 = new Position(0, 1);
  160. Position position2 = new Position(1, 0);
  161. Position position3 = new Position(1, 1);
  162.  
  163. Neurone neuron1 = new Neurone(position1, 0.5);
  164. Neurone neuron2 = new Neurone(position2, 1.0);
  165. Neurone neuron3 = new Neurone(position3, 2.0);
  166.  
  167. neuron1.connexion(neuron2);
  168. neuron2.connexion(neuron3);
  169. neuron1.recoitStimulus(10);
  170.  
  171. System.out.println("Signaux : ");
  172. System.out.println(neuron1.getSignal());
  173. System.out.println(neuron2.getSignal());
  174. System.out.println(neuron3.getSignal());
  175.  
  176. System.out.println();
  177. System.out.println("Premiere connexion du neurone 1");
  178. System.out.println(neuron1.getConnexion(0));
  179.  
  180.  
  181. // FIN TEST DE LA PARTIE 1
  182.  
  183. // TEST DE LA PARTIE 2
  184. System.out.println("Test de la partie 2:");
  185. System.out.println("--------------------");
  186.  
  187. Position position5 = new Position(0, 0);
  188. NeuroneCumulatif neuron5 = new NeuroneCumulatif(position5, 0.5);
  189. neuron5.recoitStimulus(10);
  190. neuron5.recoitStimulus(10);
  191. System.out.println("Signal du neurone cumulatif -> " + neuron5.getSignal());
  192.  
  193. // FIN TEST DE LA PARTIE 2
  194.  
  195. // TEST DE LA PARTIE 3
  196. System.out.println();
  197. System.out.println("Test de la partie 3:");
  198. System.out.println("--------------------");
  199. Cerveau cerveau = new Cerveau();
  200.  
  201. // parametres de construction du neurone:
  202. // la position et le facteur d'attenuation
  203. cerveau.ajouterNeurone(new Position(0,0), 0.5);
  204. cerveau.ajouterNeurone(new Position(0,1), 0.2);
  205. cerveau.ajouterNeurone(new Position(1,0), 1.0);
  206.  
  207. // parametres de construction du neurone cumulatif:
  208. // la position et le facteur d'attenuation
  209. cerveau.ajouterNeuroneCumulatif(new Position(1,1), 0.8);
  210. cerveau.creerConnexions();
  211. cerveau.stimuler(0, 10);
  212.  
  213. System.out.println("Signal du 3eme neurone -> " + cerveau.sonder(3));
  214. System.out.println(cerveau);
  215. // FIN TEST DE LA PARTIE 3
  216. NeuroneCumulatif nc1=new NeuroneCumulatif(new Position(27.0, 44.0),0.50);
  217. NeuroneCumulatif nc2=new NeuroneCumulatif(new Position(24.0, 19.0),1.0);
  218. NeuroneCumulatif nc3=new NeuroneCumulatif(new Position(24.0, 30.0),0.90);
  219. NeuroneCumulatif nc4=new NeuroneCumulatif(new Position(34.0, 12.0),0.20);
  220. Neurone nc5=new Neurone(new Position(8.0, 47.0),0.40);
  221. nc1.connexion(nc2);
  222. nc1.connexion(nc3);
  223. nc1.connexion(nc4);
  224. nc1.connexion(nc5);
  225. nc1.recoitStimulus(0.50);
  226. nc1.recoitStimulus(0.50);
  227. System.out.println("Signal du neurone cumulatif -> " + nc1.getSignal());
  228. System.out.println("Signal du neurone cumulatif -> " + nc2.getSignal());
  229. System.out.println("Signal du neurone cumulatif -> " + nc3.getSignal());
  230. System.out.println("Signal du neurone cumulatif -> " + nc4.getSignal());
  231. System.out.println("Signal du neurone -> " + nc5.getSignal());
  232. }
  233. }
  234.  
Success #stdin #stdout 0.07s 380224KB
stdin
Standard input is empty
stdout
Test de la partie 1:
--------------------
Signaux : 
5.0
5.0
10.0

Premiere connexion du neurone 1
Le neurone en position (1.0, 0.0) avec attenuation 1.0 en connexion avec
  - un neurone en position (1.0, 1.0)

Test de la partie 2:
--------------------
Signal du neurone cumulatif  -> 10.0

Test de la partie 3:
--------------------
Signal du 3eme neurone -> 4.8
*----------*

Le cerveau contient 4 neurone(s)
Le neurone en position (0.0, 0.0) avec attenuation 0.5 en connexion avec
  - un neurone en position (0.0, 1.0)
  - un neurone en position (1.0, 0.0)

Le neurone en position (0.0, 1.0) avec attenuation 0.2 en connexion avec
  - un neurone en position (1.0, 0.0)

Le neurone en position (1.0, 0.0) avec attenuation 1.0 en connexion avec
  - un neurone en position (1.0, 1.0)

Le neurone en position (1.0, 1.0) avec attenuation 0.8 sans connexion

*----------*


Signal du neurone cumulatif  -> 0.5
Signal du neurone cumulatif  -> 0.75
Signal du neurone cumulatif  -> 0.675
Signal du neurone cumulatif  -> 0.15000000000000002
Signal du neurone  -> 0.2