anchor.diff:  % egambo_tictac_ann:train(GameTypeId           , Epochs, ResErr, Rate, QosMin, QosMax, BatchSize) 
   % egambo_tictac_ann:save(<<"tic_tac_toe_443">> , <<"V0.1">>,<<"First Attempt for Learning">>). 
   % egambo_tictac_ann:stop(<<"tic_tac_toe_443">>).
  -% egambo_tictac_ann:predict(<<"tic_tac_toe_443">>, ).
  +% egambo_tictac_ann:predict(<<"tic_tac_toe_443">>,"XXO  OO   XO   X").
   
   -define(BOT_IS_BUSY, {error, bot_is_busy}).
   
  --safe([state, start, stop, resume, save, start_learning, start_playing, ann_sample, ann_samples, train, test]).
  +-safe([state, start, stop, resume, save, start_learning, start_playing, ann_sample, ann_samples, train, test, ann_norm_input, ann_norm_sample_output]).
   
   game_types(egambo_tictac) -> all;
   game_types(_) -> [].
  
positive.code: -define(ANN_MODEL_OPTS, [{record_name, egTicTacAnnModel}]).        
  -define(ANN_TRAIN_OPTS, [{record_name, egTicTacAnnSample}, {type, ordered_set}]).        
  -define(ANN_TEST_OPTS,  [{record_name, egTicTacAnnSample}, {type, ordered_set}]).        
  
  -define(ANN_NO_TEST_SAMPLES, {error, <<"No test samples found">>}).
  -define(ANN_BAD_OUTPUT, {error, <<"Bad Network Output">>}).
  -define(ANN_NOT_LEARNING, {error, <<"Network is not in learning mode">>}).
  -define(ANN_NOT_PLAYING, {error, <<"Network is not in playing mode">>}).
  -define(ANN_BAD_RATE, {error, <<"Invalid learning rate for training">>}).
  
  -record(egTicTacAnnModel,   { tid               :: egGameTypeId()
                              , version = <<>>    :: binary()    % network version name
  
negative.code: 
  -export([ play_bot_immediate_win/9
          , play_bot_defend_immediate/9
          , ann_norm_input/1
          , ann_norm_sample_output/2
          ]).
  
  % egambo_tictac_ann:resume(<<"tic_tac_toe_443">>).
  