anchor.diff:      fLogPar.AddTime(Format('GA_PLANNER_FindPlaceForWoodcutter_ABRange          : Single = %16.10f;',[ GA_PLANNER_FindPlaceForWoodcutter_ABRange      ]));
       fLogPar.AddTime(Format('GA_PLANNER_FindPlaceForWoodcutter_Radius           : Single = %16.10f;',[ GA_PLANNER_FindPlaceForWoodcutter_Radius       ]));
       fLogPar.AddTime(Format('GA_PLANNER_FindForestAround_MaxDist                : Single = %16.10f;',[ GA_PLANNER_FindForestAround_MaxDist            ]));
  -    fLogPar.AddTime(Format('GA_BUILDER_Shortage_Trunk                          : Single = %16.10f;',[ GA_BUILDER_Shortage_Trunk                      ]));
  -    fLogPar.AddTime(Format('GA_BUILDER_Shortage_Wood                           : Single = %16.10f;',[ GA_BUILDER_Shortage_Wood                       ]));
     end;
   end;
   
   
   function TGAParameterization.GetParCnt_CityPlanner(): Word;
   begin
  -  Result := 2+3+5+11;
  +  Result := 2+3+2+4+7;
   end;
   
   procedure TGAParameterization.SetPar_CityPlanner(aIdv: TGAIndividual; aLogIt: Boolean = False; K: Word = 0);
   begin
  -  GA_PLANNER_ObstaclesInHousePlan_Tree       :=   0 + aIdv.Gene[Incr(K)] * 100 * 10; // 0-3+
  +  GA_PLANNER_ObstaclesInHousePlan_Tree       := 500 + aIdv.Gene[Incr(K)] * 100 * 10; // 0-3+
     GA_PLANNER_ObstaclesInHousePlan_Road       := 200 + aIdv.Gene[Incr(K)] *  50 * 10; // 0-5+
   
     GA_PLANNER_FieldCrit_PolyRoute             :=   0 + aIdv.Gene[Incr(K)] *   1 * 5; // 0-255
     GA_PLANNER_FieldCrit_FlatArea              :=   0 + aIdv.Gene[Incr(K)] *   3 * 4; // 0-82
     GA_PLANNER_FieldCrit_Soil                  :=   0 + aIdv.Gene[Incr(K)] *   3 * 1; // 0-82
   
  -  GA_PLANNER_SnapCrit_SnapToHouse            :=   0 + aIdv.Gene[Incr(K)] *  10 * 5; // 0-5+
  -  GA_PLANNER_SnapCrit_SnapToFields           :=   0 + aIdv.Gene[Incr(K)] *  10 * 5; // 0-5+
  -  GA_PLANNER_SnapCrit_SnapToRoads            :=   0 + aIdv.Gene[Incr(K)] *  10 * 5; // 0-5+
  -  GA_PLANNER_SnapCrit_ObstacleInEntrance     :=   0 + aIdv.Gene[Incr(K)] *  10 * 50; // 0-1
  -  GA_PLANNER_SnapCrit_RoadInEntrance         :=   0 + aIdv.Gene[Incr(K)] *  10 * 50; // 0-1
  +  //GA_PLANNER_SnapCrit_SnapToHouse            :=   0 + aIdv.Gene[Incr(K)] *  10 * 5; // 0-5+
  +  //GA_PLANNER_SnapCrit_SnapToFields           :=   0 + aIdv.Gene[Incr(K)] *  10 * 3; // 0-5+
  +  //GA_PLANNER_SnapCrit_SnapToRoads            :=   0 + aIdv.Gene[Incr(K)] *  10 * 5; // 0-5+
  +  GA_PLANNER_SnapCrit_ObstacleInEntrance     :=   0 + aIdv.Gene[Incr(K)] *  10 * 100; // 0-1
  +  GA_PLANNER_SnapCrit_RoadInEntrance         :=   0 + aIdv.Gene[Incr(K)] *  10 * 30; // 0-1
  +
  +  GA_PLANNER_SnapCrit_HouseOrRoad            :=   0 + aIdv.Gene[Incr(K)] *  10 * 5;
  +  GA_PLANNER_SnapCrit_NoBuild                :=   0 + aIdv.Gene[Incr(K)] *  10 * 5;
  +  GA_PLANNER_SnapCrit_Road                   :=   0 + aIdv.Gene[Incr(K)] *  10 * 5;
  +  GA_PLANNER_SnapCrit_Field                  :=   0 + aIdv.Gene[Incr(K)] *  10 * 5;
   
     GA_PLANNER_FindPlaceForHouse_SnapCrit      :=   0 + aIdv.Gene[Incr(K)] *   3 * 1; // var
  -  GA_PLANNER_FindPlaceForHouse_HouseDist     :=   0 + aIdv.Gene[Incr(K)] *  10 * 2; // 3-100+
  +  GA_PLANNER_FindPlaceForHouse_HouseDist     :=  15 + aIdv.Gene[Incr(K)] *  10 * 2; // 3-100+
     GA_PLANNER_FindPlaceForHouse_SeedDist      :=   0 + aIdv.Gene[Incr(K)] *  10 * 5; // 3-30
     GA_PLANNER_FindPlaceForHouse_CityCenter    :=   0 + aIdv.Gene[Incr(K)] *  10 * 5; // 3-100+
     GA_PLANNER_FindPlaceForHouse_Route         :=   0 + aIdv.Gene[Incr(K)] *   1 * 4; // 0-255
  -  GA_PLANNER_FindPlaceForHouse_FlatArea      :=   0 + aIdv.Gene[Incr(K)] *   3 * 4; // 0-82
  -  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+
  -  GA_PLANNER_PlaceWoodcutter_DistFromForest  :=   0 + aIdv.Gene[Incr(K)] *  10 * 1; // 0-X
  +  GA_PLANNER_FindPlaceForHouse_FlatArea      :=   0 + aIdv.Gene[Incr(K)] *   3 * 2; // 0-82
  +  GA_PLANNER_PlaceWoodcutter_DistFromForest  :=   0 + aIdv.Gene[Incr(K)] *   2 * 1; // 0-X
   
   
     if aLogIt AND (fLogPar <> nil) then
  
positive.code: 
  function TGAParameterization.GetParCnt_Manager(): Word;
  begin
    Result := 2+6;
  end;
  
  procedure TGAParameterization.SetPar_Manager(aIdv: TGAIndividual; aLogIt: Boolean = False; K: Word = 0);
  begin
    GA_PREDICTOR_WareNeedPerAWorker_Stone              := aIdv.Gene[Incr(K)];
    GA_PREDICTOR_WareNeedPerAWorker_Wood               := aIdv.Gene[Incr(K)];
  
    GA_MANAGEMENT_GoldShortage                         :=  0 + Round( aIdv.Gene[Incr(K)] * 25);
    GA_MANAGEMENT_CheckUnitCount_SerfLimit1            :=  0 + Round( aIdv.Gene[Incr(K)] * 30);
    GA_MANAGEMENT_CheckUnitCount_SerfLimit2            := 20 + Round( aIdv.Gene[Incr(K)] * 30);
    GA_MANAGEMENT_CheckUnitCount_SerfLimit3            := 40 + Round( aIdv.Gene[Incr(K)] * 30);
    GA_MANAGEMENT_CheckUnitCount_WorkerGoldCoef        := aIdv.Gene[Incr(K)] * 5;
    GA_MANAGEMENT_CheckUnitCount_SerfGoldCoef          := aIdv.Gene[Incr(K)] * 3;
  
    if aLogIt AND (fLogPar <> nil) then
    begin
      fLogPar.AddTime(Format('GA_PREDICTOR_WareNeedPerAWorker_Stone              : Single = %16.10f;',[ GA_PREDICTOR_WareNeedPerAWorker_Stone       ]));
      fLogPar.AddTime(Format('GA_PREDICTOR_WareNeedPerAWorker_Wood               : Single = %16.10f;',[ GA_PREDICTOR_WareNeedPerAWorker_Wood        ]));
      fLogPar.AddTime(Format('GA_MANAGEMENT_GoldShortage                         : Word = %4d;',[ GA_MANAGEMENT_GoldShortage                  ]));
      fLogPar.AddTime(Format('GA_MANAGEMENT_CheckUnitCount_SerfLimit1            : Word = %4d;',[ GA_MANAGEMENT_CheckUnitCount_SerfLimit1     ]));
      fLogPar.AddTime(Format('GA_MANAGEMENT_CheckUnitCount_SerfLimit2            : Word = %4d;',[ GA_MANAGEMENT_CheckUnitCount_SerfLimit2     ]));
      fLogPar.AddTime(Format('GA_MANAGEMENT_CheckUnitCount_SerfLimit3            : Word = %4d;',[ GA_MANAGEMENT_CheckUnitCount_SerfLimit3     ]));
      fLogPar.AddTime(Format('GA_MANAGEMENT_CheckUnitCount_WorkerGoldCoef        : Single = %16.10f;',[ GA_MANAGEMENT_CheckUnitCount_WorkerGoldCoef ]));
      fLogPar.AddTime(Format('GA_MANAGEMENT_CheckUnitCount_SerfGoldCoef          : Single = %16.10f;',[ GA_MANAGEMENT_CheckUnitCount_SerfGoldCoef   ]));
    end;
  
  end;
  
  
  
negative.code: 
  function TGAParameterization.GetParCnt_Farm(): Word;
  begin
    Result := 3+4;
  end;
  
  procedure TGAParameterization.SetPar_Farm(aIdv: TGAIndividual; aLogIt: Boolean = False; K: Word = 0);
  begin
    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 := 25 + Round(aIdv.Gene[Incr(K)] * 75);
  
    GA_PLANNER_FindPlaceForHouse_RouteFarm      := -2 + aIdv.Gene[Incr(K)] *   1 * 4; // 0-255
    GA_PLANNER_FindPlaceForHouse_FlatAreaFarm   :=  0 + aIdv.Gene[Incr(K)] *   3 * 4; // 0-82
    GA_PLANNER_FindPlaceForHouse_HouseDistFarm  :=  5 + aIdv.Gene[Incr(K)] *  10 * 1; // 3-100+
    GA_PLANNER_FindPlaceForHouse_CityCenterFarm :=  0 + aIdv.Gene[Incr(K)] *  10 * 1; // 3-100+;
  
    if aLogIt AND (fLogPar <> nil) then
    begin
      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 ]));
  