anchor.diff:      HRun, HRunT, WRun, WRunT, WFRun, WFRunT, GRun, GRunT: Cardinal;
       StartT: Cardinal;
   begin
  -  gGameApp.NewSingleMap(ExtractFilePath(ParamStr(0)) + '..\..\MapsMP\Cursed Ravine\Cursed Ravine.dat', 'Cursed Ravine');
  +  //gGameApp.NewSingleMap(ExtractFilePath(ParamStr(0)) + '..\..\MapsMP\Cursed Ravine\Cursed Ravine.dat', 'Cursed Ravine');
  +  gGameApp.NewSingleMap(ExtractFilePath(ParamStr(0)) + '..\..\Maps\GA_'+IntToStr(aRun+1)+'\GA_'+IntToStr(aRun+1)+'.dat', 'GA');
     Inc(Runs);
     gMySpectator.Hand.FogOfWar.RevealEverything;
     gGameApp.Game.GamePlayInterface.Viewport.PanTo(KMPointF(136, 25), 0);
  
positive.code:   inherited;
    if gLog = nil then
      gLog := TKMLog.Create(ExeDir + 'Utils\Runner\Runner_Log.log');
      
    fResults.ValueCount := 6;
  //  fResults.TimesCount := 60*60*10;
    HTotal := 0;
    HAver := 0;
    WTotal := 0;
  
negative.code: uses
    Forms, Unit_Runner, Windows, SysUtils, Classes, KromUtils, Math,
    KM_CommonClasses, KM_Defaults, KM_Points, KM_CommonUtils,
    KM_GameApp, KM_ResLocales, KM_Log, KM_HandsCollection, KM_ResTexts, KM_Resource,
    KM_Terrain, KM_Units, KM_Units_Warrior, KM_Campaigns, KM_AIFields, KM_Houses,
    GeneticAlgorithm, KM_AICityPlanner,
    KM_CityManagement, KM_CityPredictor, KM_CityBuilder, KM_CityPlanner, KM_Eye,
    ComInterface;
  
  
  type
    //Typical usage:
    //SetUp, Execute(1), Execute(2) .. Execute(N), TearDown
  
    TKMRunnerGA_Common = class(TKMRunnerCommon)
    private
      fAlgorithm: TGAAlgorithm;
      OldPopulation, NewPopulation: TGAPopulation;
      //fFitnessCalc: TGAFitnessCalc;
      fLog, fLogPar: TKMLog;
  
      f_GA_SIMULATION_TIME_IN_MIN: Single; // Time of each simulation (GA doest not take simulation from game menu because it is only in minutes)
      f_GA_POPULATION_CNT: Word; // Population count
      f_GA_INDIVIDUALS_IN_TOURNAMENT: Word; // Count of individuals in tournament
      f_GA_GENE_CNT: Word; // Count of genes
      f_GA_MAPS_CNT: Word; // Count of simulated maps for each invididual
      f_GA_START_MUTATION: Single; // Initial mutation (first generation)
      f_GA_FINAL_MUTATION: Single; // Final mutation (last generation)
      f_GA_CROSSOVER_COEF: Single; // Crossover coefficient <0,1> = how many individuals will be taken from previous generation and how many will be randomly generated as a first generation
  
      procedure DefaultValues(); virtual;
    protected
      procedure SetUp(); override;
      procedure TearDown(); override;
      procedure InitGAParameters(); virtual;
      procedure SetParameters(aIdv: TGAIndividual; aLogIt: Boolean = False); virtual; abstract;
      procedure SimulateMap(aRun, aIdx, Seed: Integer; aSinglePLMapName: String; aSaveGame: Boolean = False); virtual;
      function Incr(var Idx: Integer): Integer;
      function CostFunction(): Single; virtual;
      procedure Execute(aRun: Integer); override;
    public
      SimSetup: TRunnerSetup;
      IOData: TGASetup;
    end;
  
    TKMRunnerGA_TestManager = class(TKMRunnerGA_Common)
    protected
      procedure Execute(aRun: Integer); override;
    end;
  
    TKMRunnerGA_CityBuilder = class(TKMRunnerGA_Common)
    protected
      procedure InitGAParameters(); override;
      procedure SetParameters(aIdv: TGAIndividual; aLogIt: Boolean = False); override;
    end;
  
    TKMRunnerGA_CityRoadPlanner = class(TKMRunnerGA_Common)
    protected
      procedure InitGAParameters(); override;
      procedure SetParameters(aIdv: TGAIndividual; aLogIt: Boolean = False); override;
    end;
  
    TKMRunnerGA_CityPlannerForest = class(TKMRunnerGA_Common)
    protected
      procedure InitGAParameters(); override;
      procedure SetParameters(aIdv: TGAIndividual; aLogIt: Boolean = False); override;
    end;
  
    TKMRunnerGA_CityPlanner = class(TKMRunnerGA_Common)
    protected
      procedure InitGAParameters(); override;
      procedure SetParameters(aIdv: TGAIndividual; aLogIt: Boolean = False); override;
      //function CostFunction(): Single; override;
    end;
  
    TKMRunnerGA_CityPredictor = class(TKMRunnerGA_Common)
    protected
      procedure InitGAParameters(); override;
      procedure SetParameters(aIdv: TGAIndividual; aLogIt: Boolean = False); override;
      //function CostFunction(): Single; override;
    end;
  
    TKMRunnerStone = class(TKMRunnerCommon)
    protected
  