public class Nn1 {

   static double I0[]={0,1,0,1}, I1[]={0,1,1,0}, Y[]={0,1,0,0};

   public static void main(String[] args) {
      Neuron neuron= new Neuron();
      //training loop
      for(int count=0; count<1000; count++){
         for(int pat=0; pat<4; pat++) {
            //forward prop
            double out= neuron.getOut(I0[pat],I1[pat]);
            //backprop
            neuron.learn (out, Y[pat], I0[pat], I1[pat]);
         }
      }
      //report
      for(int pat=0; pat<4; pat++) {
         System.out.println( neuron.getOut(I0[pat],I1[pat])); 
      }
   }
}


class Neuron {

   double w0=0.7, w1=0.4, th=0.6, learn_rate=0.1;

   double getOut(double in0, double in1) {
      double output= 1.0/(1.0+ Math.exp(-w0*in0 - w1*in1 - th));  
      return output;
   }

   void learn(double out, double Y, double I0, double I1) {
      w0= w0 + learn_rate*(Y-out)*out*(1.0-out)*I0; 
      w1= w1 + learn_rate*(Y-out)*out*(1.0-out)*I1;
      th= th + learn_rate*(Y-out)*out*(1.0-out);
   }
}
