public double runNet (double expectedOutput) {

        double inputDelta = 2.0; //NeuralNets.generator.nextInt(100); //Start at a random int, so the net doesn't evolve to just spit out the "right" answer for a given seed, rather than actually thinking it through.
        double workingInput = expectedOutput;
        for (InputNode input : _inputs) {
            workingInput -= 2.0;
            input.recieveTrigger(workingInput);
        }
        
        // Store the nodes that are ready so we don't get confused later
        ArrayList<OutputNode> readyNodes = new ArrayList<OutputNode>();
        for (OutputNode node : _outputs) {
            if (node.getReady()) {
                readyNodes.add(node);
            }
        }
        while (readyNodes.size() == 0) {

            readyNodes.clear();
            for (OutputNode node : _outputs) {
                if (node.getReady()) {
                    readyNodes.add(node);
                }
            }

            runStep(); // Run the step AFTER we update the list, so we get a chance to trigger the last layer (the outputs).

        }
        
        // get and print the output
        double output = _outputs.get(0).getOutput();
        //System.out.println("Output from net: " + output);
        return output;

    }