Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Kohonen {
- static int numerNeuron;
- static double B;
- static double sumaW,sumaX;
- public static void main(String[] args ){
- B = 0.9;
- // int licznik = 0;
- int krok = 0;
- sumaX = 0;
- sumaW = 0;
- //double w = 0;
- double wartosc[] = new double[10];
- double w1[] = new double[4];
- double w2[] = new double[4];
- double w3[] = new double[4];
- double w4[] = new double[4];
- double w5[] = new double[4];
- double w6[] = new double[4];
- double w7[] = new double[4];
- double w8[] = new double[4];
- double w9[] = new double[4];
- double w10[] = new double[4];
- double x[][] =
- { {5.1,3.5,1.4,0.2},
- {4.9,3.0,1.4,0.2},
- {4.7,3.2,1.3,0.2},
- {4.6,3.1,1.5,0.2},
- {5.0,3.6,1.4,0.2},
- {5.4,3.9,1.7,0.4},
- {4.6,3.4,1.4,0.3},
- {5.0,3.4,1.5,0.2},
- {4.4,2.9,1.4,0.2},
- {4.9,3.1,1.5,0.1},
- {5.4,3.7,1.5,0.2},
- {4.8,3.4,1.6,0.2},
- {4.8,3.0,1.4,0.1},
- {4.3,3.0,1.1,0.1},
- {5.8,4.0,1.2,0.2},
- {5.7,4.4,1.5,0.4},
- {5.4,3.9,1.3,0.4},
- {5.1,3.5,1.4,0.3},
- {5.7,3.8,1.7,0.3},
- {5.1,3.8,1.5,0.3},
- {5.4,3.4,1.7,0.2},
- {5.1,3.7,1.5,0.4},
- {4.6,3.6,1.0,0.2},
- {5.1,3.3,1.7,0.5},
- {4.8,3.4,1.9,0.2},
- {5.0,3.0,1.6,0.2},
- {5.0,3.4,1.6,0.4},
- {5.2,3.5,1.5,0.2},
- {5.2,3.4,1.4,0.2},
- {4.7,3.2,1.6,0.2},
- {4.8,3.1,1.6,0.2},
- {5.4,3.4,1.5,0.4},
- {5.2,4.1,1.5,0.1},
- {5.5,4.2,1.4,0.2},
- {4.9,3.1,1.5,0.1},
- {5.0,3.2,1.2,0.2},
- {5.5,3.5,1.3,0.2},
- {4.9,3.1,1.5,0.1},
- {4.4,3.0,1.3,0.2},
- {5.1,3.4,1.5,0.2},
- {5.0,3.5,1.3,0.3},
- {4.5,2.3,1.3,0.3},
- {4.4,3.2,1.3,0.2},
- {5.0,3.5,1.6,0.6},
- {5.1,3.8,1.9,0.4},
- {4.8,3.0,1.4,0.3},
- {5.1,3.8,1.6,0.2},
- {4.6,3.2,1.4,0.2},
- {5.3,3.7,1.5,0.2},
- {5.0,3.3,1.4,0.2}
- };
- for(int i=0;i<4;i++){
- w1[i] = Math.random()*1;
- w2[i] = Math.random()*1;
- w3[i] = Math.random()*1;
- w4[i] = Math.random()*1;
- w5[i] = Math.random()*1;
- w6[i] = Math.random()*1;
- w7[i] = Math.random()*1;
- w8[i] = Math.random()*1;
- w9[i] = Math.random()*1;
- w10[i] = Math.random()*1;
- }
- while(krok<50){
- Kohonen.normalizacja(x, krok, sumaX);
- Kohonen.normalizacjaWag(w1, sumaW);
- Kohonen.normalizacjaWag(w2, sumaW);
- Kohonen.normalizacjaWag(w3, sumaW);
- Kohonen.normalizacjaWag(w4, sumaW);
- Kohonen.normalizacjaWag(w5, sumaW);
- Kohonen.normalizacjaWag(w6, sumaW);
- Kohonen.normalizacjaWag(w7, sumaW);
- Kohonen.normalizacjaWag(w8, sumaW);
- Kohonen.normalizacjaWag(w9, sumaW);
- Kohonen.normalizacjaWag(w10, sumaW);
- krok++;
- }
- /*for(int i=0;i<50;i++){
- for(int j=0;j<4;j++){
- System.out.println("x[" + i + "]" + "[" + j + "] = " + x[i][j]);
- }
- }*/
- /* System.out.println("Suma :" + sumaX);
- Cohonen.normalizacja(x, sumaX);
- for(int j=0;j<50;j++){
- sumaW = Cohonen.sumaWag(w1, sumaW);
- System.out.println("Suma :" + sumaW);
- Cohonen.normalizacja(w1, sumaW);
- sumaW = Cohonen.sumaWag(w2, sumaW);
- System.out.println("Suma :" + sumaW);
- Cohonen.normalizacja(w2, sumaW);
- sumaW = Cohonen.sumaWag(w3, sumaW);
- System.out.println("Suma :" + sumaW);
- Cohonen.normalizacja(w3, sumaW);
- sumaW = Cohonen.sumaWag(w4, sumaW);
- System.out.println("Suma :" + sumaW);
- Cohonen.normalizacja(w4, sumaW);
- sumaW = Cohonen.sumaWag(w5, sumaW);
- System.out.println("Suma :" + sumaW);
- Cohonen.normalizacja(w5, sumaW);
- sumaW = Cohonen.sumaWag(w6, sumaW);
- System.out.println("Suma :" + sumaW);
- Cohonen.normalizacja(w6, sumaW);
- sumaW = Cohonen.sumaWag(w7, sumaW);
- System.out.println("Suma :" + sumaW);
- Cohonen.normalizacja(w7, sumaW);
- sumaW = Cohonen.sumaWag(w8, sumaW);
- System.out.println("Suma :" + sumaW);
- Cohonen.normalizacja(w8, sumaW);
- sumaW = Cohonen.sumaWag(w9, sumaW);
- System.out.println("Suma :" + sumaW);
- Cohonen.normalizacja(w9, sumaW);
- sumaW = Cohonen.sumaWag(w10, sumaW);
- System.out.println("Suma :" + sumaW);
- Cohonen.normalizacja(w10,sumaW);
- wartosc[0] = Cohonen.euklides(x, w1, w);
- wartosc[1] = Cohonen.euklides(x, w2, w);
- wartosc[2] = Cohonen.euklides(x, w3, w);
- wartosc[3] = Cohonen.euklides(x, w4, w);
- wartosc[4] = Cohonen.euklides(x, w5, w);
- wartosc[5] = Cohonen.euklides(x, w6, w);
- wartosc[6] = Cohonen.euklides(x, w7, w);
- wartosc[7] = Cohonen.euklides(x, w8, w);
- wartosc[8] = Cohonen.euklides(x, w9, w);
- wartosc[9] = Cohonen.euklides(x, w10, w);
- Cohonen.minimum(wartosc);
- for(int i=0;i<10;i++){
- System.out.printf("wartosc=%.3f \n", wartosc[i]);
- }
- //System.out.printf("Minimum=%.2f \n", min);
- //System.out.println("Numer neuronu " + numerNeuron);
- 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]);
- switch(Cohonen.numerNeuron){
- case 1:
- for(int i=0;i<60;i++){
- w1[i] = w1[i] + B*(x[i] - w1[i]);
- }
- System.out.println("Numer neuronu " + numerNeuron);
- 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]);
- break;
- case 2:
- for(int i=0;i<60;i++){
- w2[i] = w2[i] + B*(x[i] - w2[i]);
- }
- System.out.println("Numer neuronu " + numerNeuron);
- 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]);
- break;
- case 3:
- for(int i=0;i<60;i++){
- w3[i] = w3[i] + B*(x[i] - w3[i]);
- }
- System.out.println("Numer neuronu " + numerNeuron);
- 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]);
- break;
- case 4:
- for(int i=0;i<60;i++){
- w4[i] = w4[i] + B*(x[i] - w4[i]);
- }
- System.out.println("Numer neuronu " + numerNeuron);
- 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]);
- break;
- case 5:
- for(int i=0;i<60;i++){
- w5[i] = w5[i] + B*(x[i] - w5[i]);
- }
- System.out.println("Numer neuronu " + numerNeuron);
- 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]);
- break;
- case 6:
- for(int i=0;i<60;i++){
- w6[i] = w6[i] + B*(x[i] - w6[i]);
- }
- System.out.println("Numer neuronu " + numerNeuron);
- 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]);
- break;
- case 7:
- for(int i=0;i<60;i++){
- w7[i] = w7[i] + B*(x[i] - w7[i]);
- }
- System.out.println("Numer neuronu " + numerNeuron);
- 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]);
- break;
- case 8:
- for(int i=0;i<60;i++){
- w8[i] = w8[i] + B*(x[i] - w8[i]);
- }
- System.out.println("Numer neuronu " + numerNeuron);
- 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]);
- break;
- case 9:
- for(int i=0;i<60;i++){
- w9[i] = w9[i] + B*(x[i] - w9[i]);
- }
- System.out.println("Numer neuronu " + numerNeuron);
- 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]);
- break;
- case 10:
- for(int i=0;i<60;i++){
- w10[i] = w10[i] + B*(x[i] - w10[i]);
- }
- System.out.println("Numer neuronu " + numerNeuron);
- 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]);
- break;
- default:
- break;
- }
- } */
- //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]);
- }
- static void normalizacja(double x[][], int krok,double suma){
- for(int i=0;i<4;i++){
- suma = suma + (x[krok][i]*x[krok][i]);
- }
- for(int i=0;i<4;i++){
- x[krok][i] = x[krok][i]/(Math.sqrt(suma));
- }
- }
- static void normalizacjaWag(double w[], double suma){
- for(int i=0;i<4;i++){
- suma = suma + (w[i]*w[i]);
- }
- for(int i=0;i<4;i++){
- w[i] = w[i]/(Math.sqrt(suma));
- }
- }
- static double euklides(double x[], double w[], double wartosc){
- wartosc = 0;
- for(int i=0;i<60;i++){
- wartosc = wartosc + Math.pow(x[i] - w[i], 2);
- }
- if(wartosc <= 0)
- return 0;
- wartosc = Math.sqrt(wartosc);
- return wartosc;
- }
- static void minimum(double wartosc[]){
- double min = wartosc[0];
- for(int i=0;i<10;i++){
- if(wartosc[i] < min){
- min = wartosc[i];
- //Cohonen.numerNeuron = i+1;
- }
- }
- }
- /*static double sumaWag(double w[], double sumaW){
- sumaW = 0;
- for(int i=0;i<4;i++){
- sumaW = sumaW + (w[i]*w[i]);
- }
- return sumaW;
- }*/
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement