import insane.NeuralNetwork;
import insane.training.TrainingInformation;

/**
 * Provides common useful operations used by examples
 * 
 * @author ncottin
 */
public abstract class GenericExample {

    public static final double evaluateError(NeuralNetwork nnet, TrainingInformation info) {
        double[] eval = nnet.evaluate(info.getInputValues());
        double[] expected = info.getExpectedOutputValues();
        double error = 0.0;
        double err;
        for (int i=0; i<eval.length; i++) {
            err = Math.abs(expected[i] - eval[i]);
            error += err;
        }

        return error / eval.length;
    }

    public static final void print(double... values) {
        int max = values.length - 1;
        for (int i=0; i<max; i++) {
            System.out.print(values[i]);
            System.out.print(' ');
        }

        System.out.print(values[max]);
    }

    public static final void println(double... values) {
        print(values);
        System.out.println();
    }
}
