anchor.diff:      fLogPar.AddTime(Format('GA_SHORTCUTS_Coal                                  : Word = %4d;',[ GA_SHORTCUTS_Coal               ]));
       fLogPar.AddTime(Format('GA_SHORTCUTS_Forest                                : Word = %4d;',[ GA_SHORTCUTS_Forest             ]));
       fLogPar.AddTime(Format('GA_SHORTCUTS_OtherCase                             : Word = %4d;',[ GA_SHORTCUTS_OtherCase          ]));
  -    fLogPar.AddTime(Format('GA_BUILDER_Shortage_StoneReserve                   : Single = %16.10f;',[ GA_BUILDER_Shortage_StoneReserve       ]));
  -    fLogPar.AddTime(Format('GA_BUILDER_Shortage_Stone                          : Single = %16.10f;',[ GA_BUILDER_Shortage_Stone              ]));
  -    fLogPar.AddTime(Format('GA_PLANNER_FindPlaceForQuary_Obstacle              : Single = %16.10f;',[ GA_PLANNER_FindPlaceForQuary_Obstacle  ]));
  -    fLogPar.AddTime(Format('GA_PLANNER_FindPlaceForQuary_DistCity              : Single = %16.10f;',[ GA_PLANNER_FindPlaceForQuary_DistCity  ]));
  -    fLogPar.AddTime(Format('GA_PLANNER_FindPlaceForQuary_DistTimer             : Single = %16.10f;',[ GA_PLANNER_FindPlaceForQuary_DistTimer ]));
  -    fLogPar.AddTime(Format('GA_PLANNER_FindPlaceForQuary_DistStone             : Single = %16.10f;',[ GA_PLANNER_FindPlaceForQuary_DistStone ]));
  -    fLogPar.AddTime(Format('GA_PLANNER_FindPlaceForQuary_SnapCrit              : Single = %16.10f;',[ GA_PLANNER_FindPlaceForQuary_SnapCrit  ]));
     end;
   end;
   
   
   function TGAParameterization.GetParCnt_Forest(): Word;
   begin
  -  Result := 6+12+2;
  +  Result := 6+12;
   end;
   
   procedure TGAParameterization.SetPar_Forest(aIdv: TGAIndividual; aLogIt: Boolean = False; K: Word = 0);
   begin
     GA_EYE_GetForests_MaxAB            :=   1 + aIdv.Gene[Incr(K)] * 200; // <0,201> Ignore trees in existing forest <0,255-AVOID_BUILDING_FOREST_MINIMUM)
  -  GA_EYE_GetForests_Radius           :=   6 + aIdv.Gene[Incr(K)] *   4; // Forest radius
  -  GA_EYE_GetForests_MinTrees         :=   3 + aIdv.Gene[Incr(K)] *   3; // Min trees in forest
  +  GA_EYE_GetForests_Radius           :=   3 + aIdv.Gene[Incr(K)] *   4; // Forest radius
  +  GA_EYE_GetForests_MinTrees         :=   1 + aIdv.Gene[Incr(K)] *   4; // Min trees in forest
     GA_EYE_GetForests_SPRndOwnLimMin   :=  55 + aIdv.Gene[Incr(K)] * 100; // Minimum influence of potential forest
     GA_EYE_GetForests_SPRndOwnLimMax   := 255 - aIdv.Gene[Incr(K)] * 100; // Maximum influence of potential forest
  -  GA_EYE_GetForests_MinRndSoil       :=  50 + aIdv.Gene[Incr(K)] *  32; // 0-82
  -
  -  GA_PLANNER_FindPlaceForWoodcutter_TreeCnt       := 0 + aIdv.Gene[Incr(K)] *  21 * 2 ; // 0-~12
  -  GA_PLANNER_FindPlaceForWoodcutter_TreeCntTimer  := 6000 + aIdv.Gene[Incr(K)] * 12000; // 6000-18000 10-30 min
  +  GA_EYE_GetForests_MinRndSoil       :=  60 + aIdv.Gene[Incr(K)] *  22; // 0-82
  +
  +  GA_PLANNER_FindPlaceForWoodcutter_TreeCnt       := 0 + aIdv.Gene[Incr(K)] *  21 * 1 ; // 0-~12
  +  GA_PLANNER_FindPlaceForWoodcutter_TreeCntTimer  := 12000 + aIdv.Gene[Incr(K)] * 12000; // 6000-18000 10-30 min
     GA_PLANNER_FindPlaceForWoodcutter_ExistForest   := 0 + aIdv.Gene[Incr(K)] * 255 * 2 ; // 0-1
     GA_PLANNER_FindPlaceForWoodcutter_Routes        :=-1 + aIdv.Gene[Incr(K)] *   2 * 1 ; // -255<->255
     GA_PLANNER_FindPlaceForWoodcutter_FlatArea      := 0 + aIdv.Gene[Incr(K)] *   3 * 2 ; // 0-81
     GA_PLANNER_FindPlaceForWoodcutter_Soil          := 0 + aIdv.Gene[Incr(K)] *   3 * 1 ; // 0-81
  -  GA_PLANNER_FindPlaceForWoodcutter_DistCrit      := 0 + aIdv.Gene[Incr(K)] *  10 * 1 ; // 0-20
  -  GA_PLANNER_FindPlaceForWoodcutter_DistTimer     := 6000 + aIdv.Gene[Incr(K)] * 12000; // 6000-18000 10-30 min
  +  GA_PLANNER_FindPlaceForWoodcutter_DistCrit      := 8 + aIdv.Gene[Incr(K)] *  10 * 1 ; // 0-20
  +  GA_PLANNER_FindPlaceForWoodcutter_DistTimer     := 6000 + aIdv.Gene[Incr(K)] * 6000; // 6000-18000 10-30 min
     GA_PLANNER_FindPlaceForWoodcutter_FreeTiles     := 0 + aIdv.Gene[Incr(K)] *   3 * 2 ; // 0-81
     GA_PLANNER_FindPlaceForWoodcutter_ABRange       := 0 + aIdv.Gene[Incr(K)] * 200; // 0-200
     GA_PLANNER_FindPlaceForWoodcutter_Radius        := 3 + aIdv.Gene[Incr(K)] *   4;
     GA_PLANNER_FindForestAround_MaxDist             := 5 + aIdv.Gene[Incr(K)] *   5; // 4-10
  -
  -  GA_BUILDER_Shortage_Trunk                       := 2 + aIdv.Gene[Incr(K)] * 3;
  -  GA_BUILDER_Shortage_Wood                        := 10 + aIdv.Gene[Incr(K)] * 10;
   
     if aLogIt AND (fLogPar <> nil) then
     begin
  
positive.code: 
  function TGAParameterization.GetParCnt_Farm(): Word;
  begin
    Result := 2+3+4;
  end;
  
  procedure TGAParameterization.SetPar_Farm(aIdv: TGAIndividual; aLogIt: Boolean = False; K: Word = 0);
  begin
    GA_PATHFINDING_Field            :=  0 + Round( aIdv.Gene[Incr(K)] * 50 );
    GA_SHORTCUTS_Field              :=  0 + Round( aIdv.Gene[Incr(K)] * 50 );
  
    GA_PLANNER_PlanFields_CanBuild   :=  0 + Round(aIdv.Gene[Incr(K)] * 75);
    GA_PLANNER_PlanFields_Dist       :=  0 + Round(aIdv.Gene[Incr(K)] * 75);
    GA_PLANNER_PlanFields_ExistField :=  0 + Round(aIdv.Gene[Incr(K)] * 75);
  
    GA_PLANNER_FindPlaceForHouse_RouteFarm      := -2 + aIdv.Gene[Incr(K)] *   1 * 4; // 0-255
    GA_PLANNER_FindPlaceForHouse_FlatAreaFarm   := -5 + aIdv.Gene[Incr(K)] *   3 * 4; // 0-82
    GA_PLANNER_FindPlaceForHouse_HouseDistFarm  :=  0 + aIdv.Gene[Incr(K)] *  10 * 1; // 3-100+
    GA_PLANNER_FindPlaceForHouse_CityCenterFarm :=  0 + aIdv.Gene[Incr(K)] *  10 * 5; // 3-100+;
  
    if aLogIt AND (fLogPar <> nil) then
    begin
      fLogPar.AddTime(Format('GA_PATHFINDING_Field                               : Word = %4d;',[ GA_PATHFINDING_Field             ]));
      fLogPar.AddTime(Format('GA_SHORTCUTS_Field                                 : Word = %4d;',[ GA_SHORTCUTS_Field               ]));
      fLogPar.AddTime(Format('GA_PLANNER_PlanFields_CanBuild                     : Word = %4d;',[ GA_PLANNER_PlanFields_CanBuild   ]));
      fLogPar.AddTime(Format('GA_PLANNER_PlanFields_Dist                         : Word = %4d;',[ GA_PLANNER_PlanFields_Dist       ]));
      fLogPar.AddTime(Format('GA_PLANNER_PlanFields_ExistField                   : Word = %4d;',[ GA_PLANNER_PlanFields_ExistField ]));
  
negative.code: 
  function TGAParameterization.GetParCnt_RoadPlanner(): Word;
  begin
    Result := 8+8;
  end;
  
  procedure TGAParameterization.SetPar_RoadPlanner(aIdv: TGAIndividual; aLogIt: Boolean = False; K: Word = 0);
  begin
    GA_PATHFINDING_BasePrice        := 25 + Round( aIdv.Gene[Incr(K)] * 30 );
    GA_PATHFINDING_TurnPenalization :=  0 + Round( aIdv.Gene[Incr(K)] * 50 );
    GA_PATHFINDING_Road             := Min(GA_PATHFINDING_BasePrice, Round( aIdv.Gene[Incr(K)] * 50 ));
    GA_PATHFINDING_noBuildArea      := 15 + Round( aIdv.Gene[Incr(K)] * 35 );
    GA_PATHFINDING_Field            := 20 + Round( aIdv.Gene[Incr(K)] * 40 );
    GA_PATHFINDING_Coal             :=  0 + Round( aIdv.Gene[Incr(K)] * 50 );
    GA_PATHFINDING_Forest           := 30 + Round( aIdv.Gene[Incr(K)] * 50 );
    GA_PATHFINDING_OtherCase        :=  0 + Round( aIdv.Gene[Incr(K)] * 50 );
  
    GA_SHORTCUTS_BasePrice          := 50 + Round( aIdv.Gene[Incr(K)] * 40 );
    GA_SHORTCUTS_TurnPenalization   := 35 + Round( aIdv.Gene[Incr(K)] * 50 );
    GA_SHORTCUTS_Road               := Min(GA_SHORTCUTS_BasePrice,Round( aIdv.Gene[Incr(K)] * 50 ));
    GA_SHORTCUTS_noBuildArea        := 20 + Round( aIdv.Gene[Incr(K)] * 50 );
    GA_SHORTCUTS_Field              :=  0 + Round( aIdv.Gene[Incr(K)] * 50 );
    GA_SHORTCUTS_Coal               := 20 + Round( aIdv.Gene[Incr(K)] * 50 );
    GA_SHORTCUTS_Forest             := 10 + Round( aIdv.Gene[Incr(K)] * 40 );
    GA_SHORTCUTS_OtherCase          :=  0 + Round( aIdv.Gene[Incr(K)] * 50 );
  
    if aLogIt AND (fLogPar <> nil) then
    begin
  