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:     fLogPar.AddTime(Format('GA_PLANNER_FieldCrit_PolyRoute                     : Single = %16.10f;',[ GA_PLANNER_FieldCrit_PolyRoute              ]));
      fLogPar.AddTime(Format('GA_PLANNER_FieldCrit_FlatArea                      : Single = %16.10f;',[ GA_PLANNER_FieldCrit_FlatArea               ]));
      fLogPar.AddTime(Format('GA_PLANNER_FieldCrit_Soil                          : Single = %16.10f;',[ GA_PLANNER_FieldCrit_Soil                   ]));
      fLogPar.AddTime(Format('GA_PLANNER_SnapCrit_SnapToHouse                    : Single = %16.10f;',[ GA_PLANNER_SnapCrit_SnapToHouse             ]));
      fLogPar.AddTime(Format('GA_PLANNER_SnapCrit_SnapToFields                   : Single = %16.10f;',[ GA_PLANNER_SnapCrit_SnapToFields            ]));
      fLogPar.AddTime(Format('GA_PLANNER_SnapCrit_SnapToRoads                    : Single = %16.10f;',[ GA_PLANNER_SnapCrit_SnapToRoads             ]));
      fLogPar.AddTime(Format('GA_PLANNER_SnapCrit_ObstacleInEntrance             : Single = %16.10f;',[ GA_PLANNER_SnapCrit_ObstacleInEntrance      ]));
      fLogPar.AddTime(Format('GA_PLANNER_SnapCrit_RoadInEntrance                 : Single = %16.10f;',[ GA_PLANNER_SnapCrit_RoadInEntrance          ]));
      fLogPar.AddTime(Format('GA_PLANNER_FindPlaceForHouse_SnapCrit              : Single = %16.10f;',[ GA_PLANNER_FindPlaceForHouse_SnapCrit       ]));
      fLogPar.AddTime(Format('GA_PLANNER_FindPlaceForHouse_HouseDist             : Single = %16.10f;',[ GA_PLANNER_FindPlaceForHouse_HouseDist      ]));
      fLogPar.AddTime(Format('GA_PLANNER_FindPlaceForHouse_SeedDist              : Single = %16.10f;',[ GA_PLANNER_FindPlaceForHouse_SeedDist       ]));
      fLogPar.AddTime(Format('GA_PLANNER_FindPlaceForHouse_CityCenter            : Single = %16.10f;',[ GA_PLANNER_FindPlaceForHouse_CityCenter     ]));
      fLogPar.AddTime(Format('GA_PLANNER_FindPlaceForHouse_Route                 : Single = %16.10f;',[ GA_PLANNER_FindPlaceForHouse_Route          ]));
      fLogPar.AddTime(Format('GA_PLANNER_FindPlaceForHouse_FlatArea              : Single = %16.10f;',[ GA_PLANNER_FindPlaceForHouse_FlatArea       ]));
      fLogPar.AddTime(Format('GA_PLANNER_FindPlaceForHouse_RouteFarm             : Single = %16.10f;',[ GA_PLANNER_FindPlaceForHouse_RouteFarm      ]));
      fLogPar.AddTime(Format('GA_PLANNER_FindPlaceForHouse_FlatAreaFarm          : Single = %16.10f;',[ GA_PLANNER_FindPlaceForHouse_FlatAreaFarm   ]));
      fLogPar.AddTime(Format('GA_PLANNER_FindPlaceForHouse_HouseDistFarm         : Single = %16.10f;',[ GA_PLANNER_FindPlaceForHouse_HouseDistFarm  ]));
      fLogPar.AddTime(Format('GA_PLANNER_FindPlaceForHouse_CityCenterFarm        : Single = %16.10f;',[ GA_PLANNER_FindPlaceForHouse_CityCenterFarm ]));
      fLogPar.AddTime(Format('GA_PLANNER_PlaceWoodcutter_DistFromForest          : Single = %16.10f;',[ GA_PLANNER_PlaceWoodcutter_DistFromForest   ]));
    end;
  end;
  
negative.code: 
  procedure TGAParameterization.SetPar_CityBuilder(aIdv: TGAIndividual; aLogIt: Boolean = False; K: Word = 0);
  begin
    GA_BUILDER_BuildHouse_FieldMaxWork    := Max(1, 0 + aIdv.Gene[Incr(K)] * 2);
    GA_BUILDER_BuildHouse_RTPMaxWork      := Max(1, 0 + aIdv.Gene[Incr(K)] * 15);
    GA_BUILDER_BuildHouse_RoadMaxWork     := Max(1, 5 + aIdv.Gene[Incr(K)] * 20);
    GA_BUILDER_CreateShortcuts_MaxWork    := Max(1, 0 + aIdv.Gene[Incr(K)] * 10);
  
    GA_BUILDER_ChHTB_FractionCoef         := Max(1, 5 + aIdv.Gene[Incr(K)] * 25);
    GA_BUILDER_ChHTB_TrunkFactor          := Max(1, 8 + aIdv.Gene[Incr(K)] * 12);
    GA_BUILDER_ChHTB_TrunkBalance         := Max(0, 0 + aIdv.Gene[Incr(K)] * 5);
    GA_BUILDER_ChHTB_AllWorkerCoef        := Max(1, 8 + aIdv.Gene[Incr(K)] * 10);
    GA_BUILDER_ChHTB_FreeWorkerCoef       := Max(1, 8 + aIdv.Gene[Incr(K)] * 10);
  
    GA_BUILDER_Shortage_Stone             := Max(1, 5 + aIdv.Gene[Incr(K)] * 20);
    GA_BUILDER_Shortage_StoneReserve      := Max(1, 10 + aIdv.Gene[Incr(K)] * 40);
    GA_BUILDER_Shortage_Gold              := Max(1, 0 + aIdv.Gene[Incr(K)] * 20 + 20);
    GA_BUILDER_Shortage_Trunk             := Max(0.1, 1 + aIdv.Gene[Incr(K)] * 3);
    GA_BUILDER_Shortage_Wood              := Max(1, 13 + aIdv.Gene[Incr(K)] * 10);
  
    GA_PREDICTOR_WareNeedPerAWorker_Stone       := 0.50 + aIdv.Gene[Incr(K)] * 0.5;
    GA_PREDICTOR_WareNeedPerAWorker_StoneOffset := Round(1    + aIdv.Gene[Incr(K)] * 15);
    GA_PREDICTOR_WareNeedPerAWorker_Wood        := 0.25 + aIdv.Gene[Incr(K)] * 0.5;
  
    if aLogIt AND (fLogPar <> nil) then
    begin
      fLogPar.AddTime(Format('GA_BUILDER_BuildHouse_FieldMaxWork                 : Single = %16.10f;',[ GA_BUILDER_BuildHouse_FieldMaxWork          ]));
      fLogPar.AddTime(Format('GA_BUILDER_BuildHouse_RTPMaxWork                   : Single = %16.10f;',[ GA_BUILDER_BuildHouse_RTPMaxWork            ]));
      fLogPar.AddTime(Format('GA_BUILDER_BuildHouse_RoadMaxWork                  : Single = %16.10f;',[ GA_BUILDER_BuildHouse_RoadMaxWork           ]));
      fLogPar.AddTime(Format('GA_BUILDER_CreateShortcuts_MaxWork                 : Single = %16.10f;',[ GA_BUILDER_CreateShortcuts_MaxWork          ]));
      fLogPar.AddTime(Format('GA_BUILDER_ChHTB_FractionCoef                      : Single = %16.10f;',[ GA_BUILDER_ChHTB_FractionCoef               ]));
      fLogPar.AddTime(Format('GA_BUILDER_ChHTB_TrunkFactor                       : Single = %16.10f;',[ GA_BUILDER_ChHTB_TrunkFactor                ]));
      fLogPar.AddTime(Format('GA_BUILDER_ChHTB_TrunkBalance                      : Single = %16.10f;',[ GA_BUILDER_ChHTB_TrunkBalance               ]));
      fLogPar.AddTime(Format('GA_BUILDER_ChHTB_AllWorkerCoef                     : Single = %16.10f;',[ GA_BUILDER_ChHTB_AllWorkerCoef              ]));
      fLogPar.AddTime(Format('GA_BUILDER_ChHTB_FreeWorkerCoef                    : Single = %16.10f;',[ GA_BUILDER_ChHTB_FreeWorkerCoef             ]));
      fLogPar.AddTime(Format('GA_BUILDER_Shortage_Stone                          : Single = %16.10f;',[ GA_BUILDER_Shortage_Stone                   ]));
      fLogPar.AddTime(Format('GA_BUILDER_Shortage_StoneReserve                   : Single = %16.10f;',[ GA_BUILDER_Shortage_StoneReserve            ]));
      fLogPar.AddTime(Format('GA_BUILDER_Shortage_Gold                           : Single = %16.10f;',[ GA_BUILDER_Shortage_Gold                    ]));
      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                    ]));
      fLogPar.AddTime(Format('GA_PREDICTOR_WareNeedPerAWorker_Stone              : Single = %16.10f;',[ GA_PREDICTOR_WareNeedPerAWorker_Stone       ]));
      fLogPar.AddTime(Format('GA_PREDICTOR_WareNeedPerAWorker_StoneOffset        : Word = %4d;',      [ GA_PREDICTOR_WareNeedPerAWorker_StoneOffset ]));
      fLogPar.AddTime(Format('GA_PREDICTOR_WareNeedPerAWorker_Wood               : Single = %16.10f;',[ GA_PREDICTOR_WareNeedPerAWorker_Wood        ]));
    end;
  
  end;
  