Advertisement
Guest User

Koh

a guest
May 25th, 2015
264
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.97 KB | None | 0 0
  1. public class Kohonen {
  2. static int numerNeuron;
  3. static double B;
  4. static double sumaW,sumaX;
  5. public static void main(String[] args ){
  6. B = 0.9;
  7. // int licznik = 0;
  8. int krok = 0;
  9. sumaX = 0;
  10. sumaW = 0;
  11. //double w = 0;
  12. double wartosc[] = new double[10];
  13. double w1[] = new double[4];
  14. double w2[] = new double[4];
  15. double w3[] = new double[4];
  16. double w4[] = new double[4];
  17. double w5[] = new double[4];
  18. double w6[] = new double[4];
  19. double w7[] = new double[4];
  20. double w8[] = new double[4];
  21. double w9[] = new double[4];
  22. double w10[] = new double[4];
  23. double x[][] =
  24. { {5.1,3.5,1.4,0.2},
  25. {4.9,3.0,1.4,0.2},
  26. {4.7,3.2,1.3,0.2},
  27. {4.6,3.1,1.5,0.2},
  28. {5.0,3.6,1.4,0.2},
  29. {5.4,3.9,1.7,0.4},
  30. {4.6,3.4,1.4,0.3},
  31. {5.0,3.4,1.5,0.2},
  32. {4.4,2.9,1.4,0.2},
  33. {4.9,3.1,1.5,0.1},
  34. {5.4,3.7,1.5,0.2},
  35. {4.8,3.4,1.6,0.2},
  36. {4.8,3.0,1.4,0.1},
  37. {4.3,3.0,1.1,0.1},
  38. {5.8,4.0,1.2,0.2},
  39. {5.7,4.4,1.5,0.4},
  40. {5.4,3.9,1.3,0.4},
  41. {5.1,3.5,1.4,0.3},
  42. {5.7,3.8,1.7,0.3},
  43. {5.1,3.8,1.5,0.3},
  44. {5.4,3.4,1.7,0.2},
  45. {5.1,3.7,1.5,0.4},
  46. {4.6,3.6,1.0,0.2},
  47. {5.1,3.3,1.7,0.5},
  48. {4.8,3.4,1.9,0.2},
  49. {5.0,3.0,1.6,0.2},
  50. {5.0,3.4,1.6,0.4},
  51. {5.2,3.5,1.5,0.2},
  52. {5.2,3.4,1.4,0.2},
  53. {4.7,3.2,1.6,0.2},
  54. {4.8,3.1,1.6,0.2},
  55. {5.4,3.4,1.5,0.4},
  56. {5.2,4.1,1.5,0.1},
  57. {5.5,4.2,1.4,0.2},
  58. {4.9,3.1,1.5,0.1},
  59. {5.0,3.2,1.2,0.2},
  60. {5.5,3.5,1.3,0.2},
  61. {4.9,3.1,1.5,0.1},
  62. {4.4,3.0,1.3,0.2},
  63. {5.1,3.4,1.5,0.2},
  64. {5.0,3.5,1.3,0.3},
  65. {4.5,2.3,1.3,0.3},
  66. {4.4,3.2,1.3,0.2},
  67. {5.0,3.5,1.6,0.6},
  68. {5.1,3.8,1.9,0.4},
  69. {4.8,3.0,1.4,0.3},
  70. {5.1,3.8,1.6,0.2},
  71. {4.6,3.2,1.4,0.2},
  72. {5.3,3.7,1.5,0.2},
  73. {5.0,3.3,1.4,0.2}
  74. };
  75. for(int i=0;i<4;i++){
  76. w1[i] = Math.random()*1;
  77. w2[i] = Math.random()*1;
  78. w3[i] = Math.random()*1;
  79. w4[i] = Math.random()*1;
  80. w5[i] = Math.random()*1;
  81. w6[i] = Math.random()*1;
  82. w7[i] = Math.random()*1;
  83. w8[i] = Math.random()*1;
  84. w9[i] = Math.random()*1;
  85. w10[i] = Math.random()*1;
  86. }
  87.  
  88. while(krok<50){
  89. Kohonen.normalizacja(x, krok, sumaX);
  90. Kohonen.normalizacjaWag(w1, sumaW);
  91. Kohonen.normalizacjaWag(w2, sumaW);
  92. Kohonen.normalizacjaWag(w3, sumaW);
  93. Kohonen.normalizacjaWag(w4, sumaW);
  94. Kohonen.normalizacjaWag(w5, sumaW);
  95. Kohonen.normalizacjaWag(w6, sumaW);
  96. Kohonen.normalizacjaWag(w7, sumaW);
  97. Kohonen.normalizacjaWag(w8, sumaW);
  98. Kohonen.normalizacjaWag(w9, sumaW);
  99. Kohonen.normalizacjaWag(w10, sumaW);
  100. krok++;
  101. }
  102. /*for(int i=0;i<50;i++){
  103. for(int j=0;j<4;j++){
  104. System.out.println("x[" + i + "]" + "[" + j + "] = " + x[i][j]);
  105. }
  106. }*/
  107.  
  108. /* System.out.println("Suma :" + sumaX);
  109. Cohonen.normalizacja(x, sumaX);
  110. for(int j=0;j<50;j++){
  111. sumaW = Cohonen.sumaWag(w1, sumaW);
  112. System.out.println("Suma :" + sumaW);
  113. Cohonen.normalizacja(w1, sumaW);
  114. sumaW = Cohonen.sumaWag(w2, sumaW);
  115. System.out.println("Suma :" + sumaW);
  116. Cohonen.normalizacja(w2, sumaW);
  117. sumaW = Cohonen.sumaWag(w3, sumaW);
  118. System.out.println("Suma :" + sumaW);
  119. Cohonen.normalizacja(w3, sumaW);
  120. sumaW = Cohonen.sumaWag(w4, sumaW);
  121. System.out.println("Suma :" + sumaW);
  122. Cohonen.normalizacja(w4, sumaW);
  123. sumaW = Cohonen.sumaWag(w5, sumaW);
  124. System.out.println("Suma :" + sumaW);
  125. Cohonen.normalizacja(w5, sumaW);
  126. sumaW = Cohonen.sumaWag(w6, sumaW);
  127. System.out.println("Suma :" + sumaW);
  128. Cohonen.normalizacja(w6, sumaW);
  129. sumaW = Cohonen.sumaWag(w7, sumaW);
  130. System.out.println("Suma :" + sumaW);
  131. Cohonen.normalizacja(w7, sumaW);
  132. sumaW = Cohonen.sumaWag(w8, sumaW);
  133. System.out.println("Suma :" + sumaW);
  134. Cohonen.normalizacja(w8, sumaW);
  135. sumaW = Cohonen.sumaWag(w9, sumaW);
  136. System.out.println("Suma :" + sumaW);
  137. Cohonen.normalizacja(w9, sumaW);
  138. sumaW = Cohonen.sumaWag(w10, sumaW);
  139. System.out.println("Suma :" + sumaW);
  140. Cohonen.normalizacja(w10,sumaW);
  141. wartosc[0] = Cohonen.euklides(x, w1, w);
  142. wartosc[1] = Cohonen.euklides(x, w2, w);
  143. wartosc[2] = Cohonen.euklides(x, w3, w);
  144. wartosc[3] = Cohonen.euklides(x, w4, w);
  145. wartosc[4] = Cohonen.euklides(x, w5, w);
  146. wartosc[5] = Cohonen.euklides(x, w6, w);
  147. wartosc[6] = Cohonen.euklides(x, w7, w);
  148. wartosc[7] = Cohonen.euklides(x, w8, w);
  149. wartosc[8] = Cohonen.euklides(x, w9, w);
  150. wartosc[9] = Cohonen.euklides(x, w10, w);
  151. Cohonen.minimum(wartosc);
  152. for(int i=0;i<10;i++){
  153. System.out.printf("wartosc=%.3f \n", wartosc[i]);
  154. }
  155. //System.out.printf("Minimum=%.2f \n", min);
  156. //System.out.println("Numer neuronu " + numerNeuron);
  157. System.out.printf("w1=%.2f w2=%.2f w3=%.2f w4=%.2f w5=%.2f w6=%.2f w7=%.2f w8=%.2f \n", w10[0],w10[1],w10[2],w10[3],w10[4],w10[5],w10[6],w10[7]);
  158. switch(Cohonen.numerNeuron){
  159. case 1:
  160. for(int i=0;i<60;i++){
  161. w1[i] = w1[i] + B*(x[i] - w1[i]);
  162. }
  163. System.out.println("Numer neuronu " + numerNeuron);
  164. System.out.printf("w1=%.2f w2=%.2f w3=%.2f w4=%.2f w5=%.2f w6=%.2f w7=%.2f w8=%.2f \n", w1[0],w1[1],w1[2],w1[3],w1[4],w1[5],w1[6],w1[7]);
  165. break;
  166. case 2:
  167. for(int i=0;i<60;i++){
  168. w2[i] = w2[i] + B*(x[i] - w2[i]);
  169. }
  170. System.out.println("Numer neuronu " + numerNeuron);
  171. System.out.printf("w1=%.2f w2=%.2f w3=%.2f w4=%.2f w5=%.2f w6=%.2f w7=%.2f w8=%.2f \n",w2[0],w2[1],w2[2],w2[3],w2[4],w2[5],w2[6],w2[7]);
  172. break;
  173. case 3:
  174. for(int i=0;i<60;i++){
  175. w3[i] = w3[i] + B*(x[i] - w3[i]);
  176. }
  177. System.out.println("Numer neuronu " + numerNeuron);
  178. System.out.printf("w1=%.2f w2=%.2f w3=%.2f w4=%.2f w5=%.2f w6=%.2f w7=%.2f w8=%.2f \n", w3[0],w3[1],w3[2],w3[3],w3[4],w3[5],w3[6],w3[7]);
  179. break;
  180. case 4:
  181. for(int i=0;i<60;i++){
  182. w4[i] = w4[i] + B*(x[i] - w4[i]);
  183. }
  184. System.out.println("Numer neuronu " + numerNeuron);
  185. System.out.printf("w1=%.2f w2=%.2f w3=%.2f w4=%.2f w5=%.2f w6=%.2f w7=%.2f w8=%.2f \n", w4[0],w4[1],w4[2],w4[3],w4[4],w4[5],w4[6],w4[7]);
  186. break;
  187. case 5:
  188. for(int i=0;i<60;i++){
  189. w5[i] = w5[i] + B*(x[i] - w5[i]);
  190. }
  191. System.out.println("Numer neuronu " + numerNeuron);
  192. System.out.printf("w1=%.2f w2=%.2f w3=%.2f w4=%.2f w5=%.2f w6=%.2f w7=%.2f w8=%.2f \n", w5[0],w5[1],w5[2],w5[3],w5[4],w5[5],w5[6],w5[7]);
  193. break;
  194. case 6:
  195. for(int i=0;i<60;i++){
  196. w6[i] = w6[i] + B*(x[i] - w6[i]);
  197. }
  198. System.out.println("Numer neuronu " + numerNeuron);
  199. System.out.printf("w1=%.2f w2=%.2f w3=%.2f w4=%.2f w5=%.2f w6=%.2f w7=%.2f w8=%.2f \n", w6[0],w6[1],w6[2],w6[3],w6[4],w6[5],w6[6],w6[7]);
  200. break;
  201. case 7:
  202. for(int i=0;i<60;i++){
  203. w7[i] = w7[i] + B*(x[i] - w7[i]);
  204. }
  205. System.out.println("Numer neuronu " + numerNeuron);
  206. System.out.printf("w1=%.2f w2=%.2f w3=%.2f w4=%.2f w5=%.2f w6=%.2f w7=%.2f w8=%.2f \n", w7[0],w7[1],w7[2],w7[3],w7[4],w7[5],w7[6],w7[7]);
  207. break;
  208. case 8:
  209. for(int i=0;i<60;i++){
  210. w8[i] = w8[i] + B*(x[i] - w8[i]);
  211. }
  212. System.out.println("Numer neuronu " + numerNeuron);
  213. System.out.printf("w1=%.2f w2=%.2f w3=%.2f w4=%.2f w5=%.2f w6=%.2f w7=%.2f w8=%.2f \n", w8[0],w8[1],w8[2],w8[3],w8[4],w8[5],w8[6],w8[7]);
  214. break;
  215. case 9:
  216. for(int i=0;i<60;i++){
  217. w9[i] = w9[i] + B*(x[i] - w9[i]);
  218. }
  219. System.out.println("Numer neuronu " + numerNeuron);
  220. System.out.printf("w1=%.2f w2=%.2f w3=%.2f w4=%.2f w5=%.2f w6=%.2f w7=%.2f w8=%.2f \n", w9[0],w9[1],w9[2],w9[3],w9[4],w9[5],w9[6],w9[7]);
  221. break;
  222. case 10:
  223. for(int i=0;i<60;i++){
  224. w10[i] = w10[i] + B*(x[i] - w10[i]);
  225. }
  226. System.out.println("Numer neuronu " + numerNeuron);
  227. System.out.printf("w1=%.2f w2=%.2f w3=%.2f w4=%.2f w5=%.2f w6=%.2f w7=%.2f w8=%.2f \n", w10[0],w10[1],w10[2],w10[3],w10[4],w10[5],w10[6],w10[7]);
  228. break;
  229. default:
  230. break;
  231. }
  232. } */
  233. //System.out.printf("w1=%.2f w2=%.2f w3=%.2f w4=%.2f w5=%.2f w6=%.2f w7=%.2f w8=%.2f \n", x[0],x[1],x[2],x[3],x[4],x[5],x[6],x[7]);
  234. }
  235. static void normalizacja(double x[][], int krok,double suma){
  236. for(int i=0;i<4;i++){
  237. suma = suma + (x[krok][i]*x[krok][i]);
  238. }
  239. for(int i=0;i<4;i++){
  240. x[krok][i] = x[krok][i]/(Math.sqrt(suma));
  241. }
  242. }
  243. static void normalizacjaWag(double w[], double suma){
  244. for(int i=0;i<4;i++){
  245. suma = suma + (w[i]*w[i]);
  246. }
  247. for(int i=0;i<4;i++){
  248. w[i] = w[i]/(Math.sqrt(suma));
  249. }
  250. }
  251. static double euklides(double x[], double w[], double wartosc){
  252. wartosc = 0;
  253. for(int i=0;i<60;i++){
  254. wartosc = wartosc + Math.pow(x[i] - w[i], 2);
  255. }
  256. if(wartosc <= 0)
  257. return 0;
  258. wartosc = Math.sqrt(wartosc);
  259. return wartosc;
  260. }
  261. static void minimum(double wartosc[]){
  262. double min = wartosc[0];
  263. for(int i=0;i<10;i++){
  264. if(wartosc[i] < min){
  265. min = wartosc[i];
  266. //Cohonen.numerNeuron = i+1;
  267. }
  268. }
  269. }
  270. /*static double sumaWag(double w[], double sumaW){
  271. sumaW = 0;
  272. for(int i=0;i<4;i++){
  273. sumaW = sumaW + (w[i]*w[i]);
  274. }
  275. return sumaW;
  276. }*/
  277. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement