/// <summary>
 /// Create a reporter hook that reports the maximisation back to a given panel.
 /// </summary>
 /// <param name="panel">The panel this hook reports back to.</param>
 /// <param name="desiredTargets">The desired target of the maximisation.</param>
 /// <param name="timestep">The timestep this hook executes on.</param>
 public VisualTargetMaximisationReporter(BitmapHookPanel panel, INDArray desiredTargets, ITimeStep timestep) : this(panel, desiredTargets, 0.05, timestep)
 {
 }
 /// <summary>
 /// Set the panel this hook reports back.
 /// </summary>
 /// <param name="panel">The new target panel.</param>
 public void SetPanel(BitmapHookPanel panel)
 {
     ParameterRegistry[TargetPanel] = panel;
 }
            /// <summary>
            /// Handle a successful maximisation.
            /// </summary>
            /// <param name="handler">The computation handler.</param>
            /// <param name="inputs">The inputs.</param>
            /// <param name="desiredTargets">The desired targets.</param>
            protected override void OnTargetMaximisationSuccess(IComputationHandler handler, INDArray inputs, INDArray desiredTargets)
            {
                BitmapHookPanel panel = (BitmapHookPanel)ParameterRegistry[TargetPanel];

                panel.Update(ParameterRegistry, handler, inputs, desiredTargets);
            }
 /// <summary>
 /// Create a reporter hook that reports the maximisation back to a given panel.
 /// </summary>
 /// <param name="panel">The panel this hook reports back to.</param>
 /// <param name="desiredTargets">The desired target of the maximisation.</param>
 /// <param name="desiredCost">The desired cost.</param>
 /// <param name="timestep">The timestep this hook executes on.</param>
 public VisualTargetMaximisationReporter(BitmapHookPanel panel, INDArray desiredTargets, double desiredCost, ITimeStep timestep) : this(desiredTargets, desiredCost, timestep)
 {
     SetPanel(panel);
 }