anchor.diff:                  , winmod     :: egWinId()       % win function module
                   , players    :: integer()       % number of players 
                   , status     :: egBotStatus()   % current bot status (e.g. learning / playing)
  -                , explore=0.999 :: float()      % rate for exploration (0..1.0)
  -                , flatten=0.0 :: float()        % 
  +                , explore=0.1 :: float()         % rate for exploration (0..1.0)
  +                , flatten=0  :: float()         % flat peak randomisation
  +                , lrate=0.5  :: float()         % learning rate
  +                , discount=0.95  :: float()      % Q-discount per move
                   , table      :: atom()          % table name for Q-A-aggregation
                   }).
   
  
positive.code: 
  code_change(_OldVsn, State, _Extra) -> {ok, State}.
  
  explore(GameTypeId) ->
      gen_server:call(?BOT_GID(?MODULE, GameTypeId), {explore}).
  
  explore(GameTypeId, Fraction) when is_number(Fraction)->
      gen_server:call(?BOT_GID(?MODULE, GameTypeId), {explore, Fraction}).
  
  flatten(GameTypeId) ->
      gen_server:call(?BOT_GID(?MODULE, GameTypeId), {flatten}).
  
  flatten(GameTypeId, Fraction)  when is_number(Fraction) ->
      gen_server:call(?BOT_GID(?MODULE, GameTypeId), {flatten, Fraction}).
  
  
  handle_cast({play_bot_req, GameId, _, [Player|_]}, #state{status=Status} = State) when Status /= playing ->
      play_bot_resp(GameId, Player, ?BOT_NOT_PLAYING),
  
negative.code: -define(QL_TRAIN, "egTicTacQl_").           % Q-table name prefix (egGameTypeId to be appended)
  -define(QL_TRAIN_OPTS, [{record_name, egTicTacQlSample}, {type, set}]).        
  -define(QL_OUTPUT_UNSAMPLED, 0.001).        % Value emitted as output for unsampled move in Export
  
  -define(UCB1_BONUS(__N, __Na, _, __Exp), 2*__Exp*math:sqrt(math:log(__N)/__Na)).   % from "A Survey of Monte Carlo Tree Search Methods"
  -define(ALFAGO_BONUS(_, __Na, __P, __Exp), __Exp*__P/(1+__Na)).         % from "Alfa Go Nature Paper"
  -define(ALFAGOZERO_BONUS(__N, __P, __Na, __Exp), __Exp*__P*sqrt(__N)/(1+__Na)).  % from "Alfa Go Zero"
  
  -record(egTicTacQlSample,   { input= <<>> :: binary()  % binstr key of normalized position (Board)
                              , nos=1       :: integer() % number of board samples (1...)
  