home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magazyn Amiga Shareware Floppies
/
ma45.dms
/
ma45.adf
/
Listingi
/
MagazynAMIGA3
/
SieciNeuronowe.c
< prev
next >
Wrap
C/C++ Source or Header
|
2002-10-23
|
2KB
|
140 lines
#include <exec/types.h>
#include <stdio.h>
#define Xsize 10 /* rozmiar sieci neuronowej */
#define Ysize 10
#define Ilosc 10*10 /* iloôê iliteracji w kaûdym kroku */
char neuron[Xsize][Ysize], nazwa_pliku[108];
char synaps[Xsize][Ysize][Xsize][Ysize];
BOOL Wczytaj( void )
{
UBYTE x,y;
char znak;
FILE *fp;
if(!(fp=fopen(nazwa_pliku, "r")))
return FALSE;
for( y=0; y<Ysize; y++ ) /* ustawia wszystkie */
for( x=0; x<Xsize; x++ ) /* neurony jako */
neuron[x][y]=-1; /* nieaktywne */
for( y=0; y<Ysize; y++ )
for( x=0; x<=Xsize; x++ )
{
znak=getc( fp );
if( znak=='*' )
neuron[x][y]=1;
else if( znak==' ' )
neuron[x][y]=-1;
else if( znak=='\n' )
break;
else if( znak==EOF )
return TRUE;
}
fclose( fp );
}
void Ucz( void )
{
UBYTE x,y,x1,y1;
for( x=0; x<Xsize; x++ )
for( y=0; y<Ysize; y++ )
{
for( x1=0; x1<Xsize; x1++ )
for( y1=0; y1<Ysize; y1++ )
if( neuron[x][y]==neuron[x1][y1] )
synaps[x][y][x1][y1]++;
else
synaps[x][y][x1][y1]--;
synaps[x][y][x][y]=0;
}
}
void krok( void )
{
UBYTE i,x,y,x1,y1;
int suma;
srand( time( NULL ) );
for( i=0; i<Ilosc; i++ )
{
x=rand()%(Xsize*Ysize);
y=x%Ysize;
x=x/Ysize;
for( suma=0,x1=0; x1<Xsize; x1++ )
for( y1=0; y1<Ysize; y1++ )
suma+=neuron[x1][y1]*synaps[x][y][x1][y1];
if( suma>0 )
neuron[x][y]=1;
else
neuron[x][y]=-1;
}
}
void Wyswietl( void )
{
UBYTE x,y;
for( y=0; y<Ysize; y++ )
{
for( x=0; x<Xsize; x++ )
if( neuron[x][y]==1 ) putchar('*');
else putchar(' ');
putchar('\n');
}
}
void main( void )
{
UBYTE x,y,x1,y1;
for( x=0; x<Xsize; x++ )
for( y=0; y<Ysize; y++ )
for( x1=0; x1<Xsize; x1++ )
for( y1=0; y1<Ysize; y1++ )
synaps[x][y][x1][y1]=0;
while( TRUE )
{
fflush( NULL );
printf( ">>>" );
switch( getchar() )
{
case 'u':
printf("podaj nazwe pliku:" );
scanf("%s", nazwa_pliku);
if( Wczytaj( ) )
{
Ucz( );
Wyswietl( );
}
else printf("nie ma takiego pliku >%s<\n",nazwa_pliku);
break;
case 'r':
printf("podaj nazwe pliku:" );
scanf("%s", nazwa_pliku);
if( Wczytaj( ) )
Wyswietl( );
else printf("nie ma takiego pliku >%s<\n",nazwa_pliku);
break;
case 'k':
krok( );
Wyswietl( );
break;
case 'w':
exit( 0 );
default:
printf("\nu -ucz\nr -rozpoznaj\nk -krok\nw -wyjôcie\n");
}
}
}