anchor.diff:      case ets:lookup(Ets, block) of
           [#block{size=S, y=0, x=_}] ->
               if S >= ?TRACKER_SIZE ->
  -                    {avoid, not lists:any(fun(X) -> X =:= 1 end, Sensed)};
  +                    {avoid, lists:sum(Sensed) =:= 0};
                  S < ?TRACKER_SIZE ->
  -                    {capture, lists:all(fun(X) -> X =:= 1 end, Sensed)}
  +                    {capture, lists:sum(Sensed) =:= S}
               end
       end.
   
  
positive.code: -module(cognitive).
  -import(genetica_utils, [clamp/3, rand_between/2, zip/2]).
  -export([random_genotype_fn/1, phenotype_to_genotype_fn/1,
           genotype_to_phenotype_fn/1, fitness_fn/1, crossover_fn/1,
           mutation_fn/1, analyze_fn/2]).
  -compile(export_all).
  
  -record(ptype, {ref, gtype}).
  -record(vertex, {name, tau, sigma, gain}).
  
negative.code:     end.
  
  
  fit_value(X, List) ->
      F = fun ({_, Y}, {Fit, Acc}) when Y =:= X ->
                  {Fit + Acc, Acc + 1};
              ({_, Y}, {Fit, _Acc}) when Y =/= X ->
                  {Fit, 1}
          end,
      {Tot, _} = lists:foldr(F, {0, 1}, List),
      Tot.
  
  %%% Fitness function stuff
  gen_fit(G) ->
      Res = simulate_run(G),
      Avoids = lists:filter(fun ({X, _}) -> X =:= avoid end, Res),
      Captures = lists:filter(fun ({X, _}) -> X =:= capture end, Res),
      Avs = fit_value(true, Avoids),
      Capts = fit_value(true, Captures),
  %    io:format("~p -- ~p~n", [Avs, Capts]),
      math:sqrt(Avs) + Capts.
  
  
  new_block(Ets) ->
      ets:insert(Ets, #block{size = random:uniform(?BLOCK_MAX_SIZE),
  