anchor.diff:      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_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_SnapCrit_HouseOrRoad                    : Single = %16.10f;',[ GA_PLANNER_SnapCrit_HouseOrRoad             ]));
  +    fLogPar.AddTime(Format('GA_PLANNER_SnapCrit_NoBuild                        : Single = %16.10f;',[ GA_PLANNER_SnapCrit_NoBuild                 ]));
  +    fLogPar.AddTime(Format('GA_PLANNER_SnapCrit_Road                           : Single = %16.10f;',[ GA_PLANNER_SnapCrit_Road                    ]));
  +    fLogPar.AddTime(Format('GA_PLANNER_SnapCrit_Field                          : Single = %16.10f;',[ GA_PLANNER_SnapCrit_Field                   ]));
       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;
  
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_Manager(): Word;
  begin
    Result := 6+1;
  end;
  
  procedure TGAParameterization.SetPar_Manager(aIdv: TGAIndividual; aLogIt: Boolean = False; K: Word = 0);
  begin
    GA_MANAGEMENT_GoldShortage                         := 10 + Round( aIdv.Gene[Incr(K)] * 15);
    GA_MANAGEMENT_CheckUnitCount_SerfLimit1            :=  0 + Round( aIdv.Gene[Incr(K)] * 20);
    GA_MANAGEMENT_CheckUnitCount_SerfLimit2            := 20 + Round( aIdv.Gene[Incr(K)] * 20);
    GA_MANAGEMENT_CheckUnitCount_SerfLimit3            := 40 + Round( aIdv.Gene[Incr(K)] * 30);
    GA_MANAGEMENT_CheckUnitCount_WorkerGoldCoef        :=  2 + aIdv.Gene[Incr(K)] * 3;
    GA_MANAGEMENT_CheckUnitCount_SerfGoldCoef          :=  1 + aIdv.Gene[Incr(K)] * 2;
  
    GA_PREDICTOR_SecondSchool_MinRequiredUnits         :=  Round(5 + aIdv.Gene[Incr(K)] * 30);
  
    if aLogIt AND (fLogPar <> nil) then
    begin
      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   ]));
      fLogPar.AddTime(Format('GA_PREDICTOR_SecondSchool_MinRequiredUnits         : Word = %4d;',[ GA_PREDICTOR_SecondSchool_MinRequiredUnits  ]));
    end;
  end;
  
  
  