#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<math.h>
#define a 0.8
#define eta 0.2
float phi(float x)
{
return(1/(1+exp(-a*x)));
}
void main()
{
float x[3],u[3],z[3];
float y[3],o[3],d[3];
float err[3],del_o[3],del_h[3],sum,e;
int i,j,n;
float w[3][3];
float v[3][3];
char ch;
FILE *fp,*fp1;
fp=fopen("input.txt","r");
fp1=fopen("output.txt","w");
x[0]=z[0]=1;
clrscr();
for(i=1;i<3;i++)
{
for(j=0;j<3;j++)
v[i][j]=w[i][j]=1;
}
while(1)
{
for(i=1;i<=4;i++)
{
if(i<3)
fscanf(fp,"%f",&x[i]);
else
fscanf(fp,"%f",&d[i-2]);
}
if(x[1]==-1)break;
do
{
/******************* FORWARD PASS ********************/
sum=0.0; e=0.0;
for(i=1;i<3;i++)
u[i]=y[i]=0;
for(i=1;i<3;i++)
for(j=0;j<3;j++)
u[i]+=x[j]*v[i][j];
for(i=1;i<3;i++)
z[i]=phi(u[i]);
for(i=1;i<3;i++)
for(j=0;j<3;j++)
y[i]+=z[j]*w[i][j];
for(i=1;i<3;i++)
o[i]=phi(y[i]);
for(i=1;i<3;i++)
err[i]=d[i]-o[i];
for(i=1;i<3;i++)
e+=err[i]*err[i];
/****************** BACKWARD PASS *******************/
for(i=1;i<3;i++)
del_o[i]=err[i]*a*o[i]*(1-o[i]);
for(i=1;i<3;i++)
{
for(j=1;j<3;j++)
sum+=del_o[j]*w[j][i];
del_h[i]=sum*a*z[i]*(1-z[i]);
}
for(i=1;i<3;i++)
{
for(j=0;j<3;j++)
{
w[i][j]+=eta*del_o[i]*z[j];
v[i][j]+=eta*del_h[i]*x[j];
}
}
}while(fabs(0.5*e)>0.0001);
fprintf(fp1,"%f %f \t\t %f %f\n\n",x[1],x[2],o[1],o[2]);
/********************** TRAINING COMPLETE ****************/
}
fclose(fp);
fclose(fp1);
for(i=1;i<3;i++)
{
for(j=0;j<3;j++)
printf(" %f ",v[i][j]);
printf("\n");
}
printf("\n\n\n");
for(i=1;i<3;i++)
{
for(j=0;j<3;j++)
printf(" %f ",w[i][j]);
printf("\n");
}
do
{
printf("\n\n\t Give Inputs-->");
scanf("%f%f",&x[1],&x[2]);
for(i=1;i<3;i++)
u[i]=y[i]=0;
for(i=1;i<3;i++)
for(j=0;j<3;j++)
u[i]+=x[j]*v[i][j];
for(i=1;i<3;i++)
z[i]=phi(u[i]);
for(i=1;i<3;i++)
for(j=0;j<3;j++)
y[i]+=z[j]*w[i][j];
for(i=1;i<3;i++)
o[i]=phi(y[i]);
printf("\n\n");
for(i=1;i<3;i++)
printf("%f ",o[i]);
printf("\n\n\t Do you want to continue (y/n)-->");
ch=getche();
}while((ch=='Y')||(ch=='y'));
}