public double Run( double[] input, double[] output )
{
// compute the network's output
network.Compute( input );
// calculate network error
double error = CalculateError( output );
// calculate weights updates
CalculateUpdates( input );
// update the network
UpdateNetwork( );
return error;
}