1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
#include <stdio.h>
#include<math.h>
#include <time.h>
#include <stdlib.h>
#include<conio.h>
int N=25 ; /*taille de la couche de sortie */
int M =23; /*taille de la couche d'entrée */
float Eg;
float Ef; /*étiquette de réference */
float a;
float dmin =0.1;
float W1 [25] ;
float W2 [25] ;
float Wg [25] ;
float dist [25] ; /*tableau contient les différentes distances*/
float X [23]={0.4,0.3,0.2,0.1,0.6,0.1,0.5,0.8,0.7,0.4,0.9,0.2,0.3,0.6,0.5,0.4,0.6,0.4,0.7,0.9,0.3,0.2,0.5}; ;/*vecteur d'entrée*/
double W[23][25]= {{0.1,0.4,0.2,0.3,0.5,0.1,0.4,0.3,0.6,0.4,0.7,0.4,0.5,0.8,0.7,0.2,0.5,0.1,0.4,0.1,0.9,0.3,0.2,0.5,0.1},{0.4,0.9,0.2,0.3,0.5,0.1,0.4,0.3,0.6,0.4,0.7,0.4,0.5,0.8,0.7,0.7,0.2,0.5,0.1,0.4,0.4,0.1,0.7,0.6,0.3},{0.1,0.4,0.2,0.3,0.5,0.1,0.4,0.3,0.6,0.4,0.1,0.7,0.4,0.5,0.8,0.9,0.7,0.4,0.5,0.8,0.7,0.6,0.2,0.3,0.5},{0.4,0.9,0.2,0.3,0.5,0.3,0.7,0.4,0.5,0.8,0.4,0.5,0.8,0.7,0.6,0.2,0.5,0.1,0.4,0.1,0.6,0.7,0.5,0.3,0.2},{0.4,0.9,0.9,0.1,0.3,0.3,0.7,0.4,0.5,0.8,0.4,0.1,0.3,0.6,0.3,0.7,0.2,0.5,0.1,0.4,0.3,0.6,0.1,0.5,0.2},{0.1,0.4,0.5,0.8,0.7,0.6,0.4,0.2,0.5,0.1,0.1,0.7,0.4,0.5,0.8,0.9,0.7,0.4,0.5,0.8,0.3,0.8,0.4,0.9,0.5},{0.1,0.4,0.2,0.3,0.5,0.3,0.7,0.4,0.5,0.8,0.4,0.5,0.8,0.7,0.6,0.2,0.5,0.1,0.4,0.1,0.5,0.8,0.6,0.1,0.3},{0.4,0.9,0.1,0.4,0.2,0.1,0.4,0.1,0.3,0.6,0.4,0.5,0.8,0.7,0.4,0.7,0.2,0.5,0.1,0.4,0.2,0.7,0.4,0.1,0.3},{0.1,0.4,0.2,0.3,0.5,0.1,0.4,0.1,0.3,0.6,0.4,0.5,0.8,0.7,0.4,0.9,0.7,0.4,0.5,0.8,0.6,0.5,0.3,0.2,0.1},{0.1,0.4,0.4,0.9,0.2,0.5,0.1,0.4,0.1,0.3,0.4,0.1,0.3,0.6,0.3,0.2,0.5,0.1,0.4,0.1,0.9,0.6,0.3,0.5,0.2},{0.4,0.9,0.9,0.2,0.3,0.2,0.5,0.1,0.4,0.1,0.4,0.1,0.3,0.6,0.3,0.7,0.2,0.5,0.1,0.4},{0.4,0.9,0.2,0.3,0.5,0.5,0.1,0.4,0.1,0.3,0.4,0.5,0.8,0.7,0.4,0.9,0.7,0.4,0.5,0.8,0.3,0.5,0.1,0.2,0.7},{0.1,0.4,0.2,0.3,0.5,0.2,0.5,0.1,0.4,0.1,0.7,0.4,0.5,0.8,0.7,0.2,0.5,0.1,0.4,0.1,0.6,0.8,0.4,0.5,0.3},{0.4,0.2,0.3,0.5,0.9,0.6,0.4,0.2,0.5,0.1,0.7,0.4,0.5,0.8,0.7,0.7,0.2,0.5,0.1,0.4},{0.1,0.4,0.3,0.6,0.4,0.7,0.4,0.5,0.8,0.7,0.1,0.7,0.4,0.5,0.8,0.9,0.7,0.4,0.5,0.8,0.5,0.3,0.9,0.6,0.2},{0.1,0.4,0.1,0.3,0.6,0.7,0.4,0.5,0.8,0.7,0.4,0.5,0.8,0.7,0.6,0.2,0.5,0.1,0.4,0.1,0.5,0.2,0.3,0.7,0.1},{0.4,0.9,0.1,0.3,0.6,0.7,0.4,0.5,0.8,0.7,0.4,0.5,0.8,0.7,0.4,0.7,0.2,0.5,0.1,0.4},{0.4,0.9,0.5,0.8,0.7,0.4,0.5,0.8,0.7,0.6,0.4,0.5,0.8,0.7,0.6,0.9,0.7,0.4,0.5,0.8,0.9,0.4,0.8,0.2,0.1},{0.1,0.4,0.9,0.1,0.3,0.7,0.4,0.5,0.8,0.7,0.4,0.5,0.8,0.7,0.4,0.2,0.5,0.1,0.4,0.1,0.4,0.3,0.2,0.6,0.9},{0.4,0.9,0.1,0.3,0.6,0.3,0.7,0.4,0.5,0.8,0.4,0.5,0.8,0.7,0.4,0.7,0.2,0.5,0.1,0.4},{0.1,0.4,0.1,0.3,0.6,0.3,0.7,0.4,0.5,0.8,0.4,0.1,0.3,0.6,0.3,0.9,0.7,0.4,0.5,0.8,0.5,0.6,0.9,0.4,0.1},{0.1,0.4,0.3,0.6,0.4,0.2,0.5,0.1,0.4,0.1,0.7,0.4,0.5,0.8,0.7,0.2,0.5,0.1,0.4,0.1,0.3,0.8,0.2,0.5,0.7},{0.4,0.9,0.2,0.3,0.5,0.6,0.4,0.2,0.5,0.1,0.7,0.4,0.5,0.8,0.7,0.7,0.2,0.5,0.1,0.4,0.1,0.6,0.4,0.8,0.5}}; /*matrice de poids*/
int Ep[25]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25}; /*les etiquettes fixées de la couche de sorite*/
float coeffapp(){
float f ;
srand(time(NULL)); // initialise le generateur de maniere aleatoire
f= rand()/(RAND_MAX+1.0);
return f;
}
int main(){
for (int j = 1 ; j <= N; j++)
{
for (int i = 1; i <= M; i++)
{
float a = coeffapp();
dist[j] += pow((X[j] - W[i][j]),2);
W1[j] = W[i][j] + a*(X[j] - W[i][j]);
W2[j] = W[i][j] - a*(X[j] - W[i][j]);
}
if(dist[j]<dmin) {
Eg = Ep[j];
dmin = dist[j];
}
if(Ep[j] == Ef) {
Wg[j] = W1[j];}
else
Wg[j] = W2[j];
printf("distance[%d]= %f\n",j, dist[j]);
printf("distance minimale correspondante au neurone gagnant:%f\n",dmin);
printf("l'étiquette de neuronne gagnant:%f\n",Eg);
printf(" wg[%d]== %f\n",j, Wg[j]);
}
getch();
return 0;
} |
Partager