anchor.diff:  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_Terrain, KM_Units, KM_Units_Warrior, KM_Campaigns;
  +  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
  
positive.code:     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');
    Inc(Runs);
    gMySpectator.Hand.FogOfWar.RevealEverything;
    gGameApp.Game.GamePlayInterface.Viewport.PanTo(KMPointF(136, 25), 0);
  
negative.code: end;
  
  initialization
    RegisterRunner(TKMRunnerGA_TestManager);
    RegisterRunner(TKMRunnerGA_CityRoadPlanner);
    RegisterRunner(TKMRunnerGA_CityPlannerForest);
    RegisterRunner(TKMRunnerGA_CityBuilder);
    RegisterRunner(TKMRunnerGA_CityPlanner);
    RegisterRunner(TKMRunnerGA_CityPredictor);
    RegisterRunner(TKMRunnerStone);
    RegisterRunner(TKMRunnerFight95);
    RegisterRunner(TKMRunnerAIBuild);
  