anchor.diff:      ?ANN_OUTPUT_TARGET * Score * (BoardSize-MTE+1) / (BoardSize-?ANN_OUTPUT_MTE).
   
   vector_add(OldOut, Output) ->
  -    [Old + Out || {Old, Out} <- lists:zip(OldOut, Output)].
  +    [accu_add(Old, Out) || {Old, Out} <- lists:zip(OldOut, Output)].
  +
  +accu_add(0, 0) -> 0;
  +accu_add({AccN,AccS}, {N,S}) -> {AccN+N, AccS+S}. 
  +
   
   ann_norm_input(L) -> [ann_norm_single_input(I) || I <- L].
   
  
positive.code: ann_norm_single_input(I) -> I/256.0.
  
  ann_norm_sample_output(AggregatedOutputVector, _QOS) ->
      Fac = case norm(AggregatedOutputVector) of
          0.0 ->      0.0;
          0 ->        0.0;
          Norm ->     1.0 / Norm
      end,
      Fun = fun(W) -> Fac * W end,  % Same vector length of 1 for all samples
      lists:map(Fun, AggregatedOutputVector). 
  
  % ann_norm_sample_output(AggregatedOutputVector, _QOS) ->
  %   Fac = 1.0 / norm(AggregatedOutputVector),
  
negative.code:     Output = ann:predict(Network, NormIn),
      ?Info("play_bot_ann network Output ~p",[Output]),    
      NormIdx = pick_output(Output, NormBoard, Flatten),      % 0-based index for predicted move
      NewIdx = egambo_tictac_sym:denorm_move(Width, Height, NormIdx, Sym),    
      ?Info("play_bot_ann NormIdx, NewIdx (output picked) ~p ~p", [NormIdx, NewIdx]),
      {ok, Idx, NewBoard} = egambo_tictac:put(Gravity, Board, Width, NewIdx, Player),
      ?Info("play_bot_ann Idx, NewBoard ~p ~p", [Idx, binary_to_list(NewBoard)]),
  