Пример #1
0
        public ScalingFactorFitness(int testId, WebService webService)
        {
            _testId     = testId;
            _webService = webService;

            _engineOperator = new EngineOperator(SettingsLoader.Data.EnginePath, SettingsLoader.Data.EngineArguments);
            _engineOperator.Init();
            _engineOperator.LoadEpd(SettingsLoader.Data.PositionsDatabasePath);
        }
Пример #2
0
        public double Evaluate(IChromosome chromosome)
        {
            for (var geneIndex = 0; geneIndex < SettingsLoader.Data.Genes.Count; geneIndex++)
            {
                var geneName  = SettingsLoader.Data.Genes[geneIndex].Name;
                var geneValue = chromosome.GetGene(geneIndex).ToString();

                _engineOperator.SetOption(geneName, geneValue);
            }

            while (true)
            {
                try
                {
                    _engineOperator.ApplyOptions();
                    break;
                }
                catch
                {
                    _engineOperator.Restart();
                    _engineOperator.LoadEpd(SettingsLoader.Data.PositionsDatabasePath);
                }
            }

            var stopwatch   = Stopwatch.StartNew();
            var error       = _engineOperator.Evaluate(SettingsLoader.Data.ScalingConstant);
            var fitness     = 1.0 - error;
            var elapsedTime = (double)stopwatch.ElapsedMilliseconds / 1000;

            var chromosomeRequest = RequestsFactory.CreateChromosomeRequest(_testId, fitness, elapsedTime, chromosome);

            _webService.SendChromosomeData(chromosomeRequest).GetAwaiter().GetResult();

            Console.WriteLine($"[{DateTime.Now}] Run done! Fitness: {fitness}");
            return(fitness);
        }