/// <summary> /// Runs the optimiser /// </summary> public override void Optimize() { var chromosomeTypes = new StrategyChromosomeTypeFactory(Strategy).GetChromosomeTypes(); var optimiserParameters = GetParameters(chromosomeTypes); _startDateTime = DateTime.Now; _iterationNumber = 0; try { using ( _parameterWriter = new ParameterWriter(Strategy.Instrument.FullName, optimiserParameters.ExportGenes)) { Strategy.Print( string.Format( "{0}: Start time: {1} Parameters: {2} Population {3} MaximumGenerations: {4} Log results: {5} Screen threshold: {6}", Strategy.Instrument.FullName, _startDateTime, Strategy.Parameters.Count, optimiserParameters.PopulationSize, optimiserParameters.MaximumGenerations, optimiserParameters.ExportGenes, optimiserParameters.ScreeningThreshold)); _parameterWriter.WriteParameterNames(chromosomeTypes); var optimiser = new Optimiser(new FitnessEvaluator(Strategy, chromosomeTypes)); optimiser.IterationComplete += HandleIterationComplete; optimiser.GenerationComplete += HandleGenerationComplete; optimiser.ReportNoProgress += HandleNoProgress; var progressForm = new ProgressForm(); progressForm.Show(optimiser); optimiser.Run(chromosomeTypes, optimiserParameters); var endDateTime = DateTime.Now; Strategy.Print(Strategy.Instrument.FullName + ": completed: " + endDateTime + ", total iterations: " + (_iterationNumber + 1) + ", total time (minutes): " + (endDateTime - _startDateTime).TotalMinutes.ToString("N1") + ", best result:"); if (_bestResult != null) { Strategy.Print(_bestResult.Gene.ToString(chromosomeTypes)); } } } finally { _parametersForm.Close(); } }