示例#1
0
        public void Optimize()
        {
            _config = JsonConvert.DeserializeObject <DynastyConfiguration>(_file.File.ReadAllText("dynasty.json"));

            var segmenter = new DynastySegmenter(_config);

            var settings = new JsonSerializerSettings {
                ContractResolver = new CamelCasePropertyNamesContractResolver()
            };

            for (var i = _config.StartDate; i <= _config.EndDate; i = segmenter.GetNext(i))
            {
                if (_current == null)
                {
                    _current = JsonConvert.DeserializeObject <OptimizerConfiguration>(_file.File.ReadAllText(_configFilename));
                }

                _current.StartDate = i;
                var endDate = segmenter.PeekNext(i);

                _current.EndDate = AdjustEndDate(endDate);

                string json = JsonConvert.SerializeObject(_current, settings);

                _file.File.WriteAllText(_configFilename, json);

                _logWrapper.Result($"For period: {_current.StartDate} {_current.EndDate}");

                var initializer = new OptimizerInitializer(_file, _managerFactory.Create());
                initializer.Initialize(new[] { _configFilename });
            }
        }
示例#2
0
 public void MergeInto(OptimizerConfiguration result)
 {
     if (EliminateStructCopies.HasValue)
     {
         result.EliminateStructCopies = EliminateStructCopies;
     }
     if (EliminateTemporaries.HasValue)
     {
         result.EliminateTemporaries = EliminateTemporaries;
     }
     if (SimplifyLoops.HasValue)
     {
         result.SimplifyLoops = SimplifyLoops;
     }
     if (SimplifyOperators.HasValue)
     {
         result.SimplifyOperators = SimplifyOperators;
     }
     if (EliminateRedundantControlFlow.HasValue)
     {
         result.EliminateRedundantControlFlow = EliminateRedundantControlFlow;
     }
     if (CacheMethodSignatures.HasValue)
     {
         result.CacheMethodSignatures = CacheMethodSignatures;
     }
 }
示例#3
0
 public RouteStopService(IDistanceService distanceService, OptimizerConfiguration configuration, IRouteStopDelayService routeStopDelayService, IJobNodeService jobNodeService)
 {
     _distanceService       = distanceService;
     _configuration         = configuration;
     _routeStopDelayService = routeStopDelayService;
     _jobNodeService        = jobNodeService;
 }
示例#4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="NodeService"/> class.
        /// </summary>
        /// <param name="nodeConnectionFactory">
        /// The node connection factory.
        /// </param>
        /// <param name="configuration">
        /// The configuration.
        /// </param>
        public NodeService(INodeConnectionFactory nodeConnectionFactory, OptimizerConfiguration configuration)
        {
            _configuration = configuration;

            _nodeConnectionFactory = nodeConnectionFactory;

            _nodeConnectionCache = new Dictionary <Tuple <INode, INode>, NodeConnection>();
            _rwLock = new ReaderWriterLockSlim();
        }
示例#5
0
 public Dynasty(IFileSystem file, ILogWrapper logWrapper, IGeneManagerFactory managerFactory)
 {
     _file           = file;
     _logWrapper     = logWrapper;
     _managerFactory = managerFactory;
     _queue          = new FixedSizeQueue <string>(2);
     _current        = null;
     _instance       = this;
 }
        public void SetUp()
        {
            _config = new OptimizerConfiguration
            {
                StartDate = new DateTime(2001, 1, 2),

                EndDate = new DateTime(2001, 1, 3)
            };
            _unit = new Wrapper(_config, Mock.Of <IFitnessFilter>());
        }
示例#7
0
 public void MergeInto(OptimizerConfiguration result)
 {
     if (EliminateStructCopies.HasValue)
         result.EliminateStructCopies = EliminateStructCopies;
     if (EliminateTemporaries.HasValue)
         result.EliminateTemporaries = EliminateTemporaries;
     if (SimplifyLoops.HasValue)
         result.SimplifyLoops = SimplifyLoops;
     if (SimplifyOperators.HasValue)
         result.SimplifyOperators = SimplifyOperators;
 }
示例#8
0
        public NodeRouteService(IObjectiveFunction objectiveFunction,
                                IRouteStopService routeStopService, IRouteExitFunction routeExitFunction, ILogger logger,
                                OptimizerConfiguration configuration)
        {
            _objectiveFunction = objectiveFunction;
            _routeStopService  = routeStopService;
            _routeExitFunction = routeExitFunction;
            _configuration     = configuration;
            _logger            = logger;

            _nodeConnectionCache = new Dictionary <Tuple <INode, INode>, NodeConnection>();
        }
        public void Initialize(string[] args)
        {
            _config = LoadConfig(args);
            _file.File.Copy(_config.ConfigPath, System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "config.json"), true);

            string path = _config.AlgorithmLocation;

            if (!string.IsNullOrEmpty(path) && (path.Contains('\\') || path.Contains('/')) && !path.EndsWith("py"))
            {
                _file.File.Copy(path, System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, System.IO.Path.GetFileName(path)), true);
                string pdb = path.Replace(System.IO.Path.GetExtension(path), ".pdb");

                //due to locking issues, need to manually clean to update pdb
                if (!_file.File.Exists(pdb))
                {
                    _file.File.Copy(pdb, System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, System.IO.Path.GetFileName(pdb)), true);
                }
            }

            var fitnessTypeName = _config.FitnessTypeName.Contains(".") ? _config.FitnessTypeName : "Jtc.Optimization.LeanOptimizer." + _config.FitnessTypeName;

            OptimizerFitness fitness = (OptimizerFitness)Assembly.GetExecutingAssembly().CreateInstance(fitnessTypeName, false, BindingFlags.Default, null,
                                                                                                        new object[] { _config, new FitnessFilter() }, null, null);

            if (_manager == null)
            {
                if (new[] { typeof(SharpeMaximizer), typeof(NFoldCrossReturnMaximizer), typeof(NestedCrossSharpeMaximizer), typeof(NFoldCrossSharpeMaximizer), typeof(WalkForwardSharpeMaximizer),
                            typeof(WalkForwardWeightedMetricSharpeMaximizer) }.Contains(fitness.GetType()))
                {
                    _manager = new MaximizerManager();
                    if (fitness.GetType() == typeof(OptimizerFitness))
                    {
                        LogProvider.ErrorLogger.Info("Fitness for shared app domain was switched to the default: SharpeMaximizer.");
                        fitness = new SharpeMaximizer(_config, new FitnessFilter());
                    }
                }
                else
                {
                    _manager = new GeneManager();
                }
            }

            //todo: some constraints for running python
            if (_config.AlgorithmLanguage == "Python")
            {
                _config.UseSharedAppDomain = true;
                _config.MaxThreads         = 1;
            }

            _manager.Initialize(_config, fitness);
            _manager.Start();
        }
        public OptimizerOptions()
        {
            NoConditionalRedefinition = true;
            DeadCodeElimination       = true;
            AssemblyReferences        = new List <string> ();
            _enabled_features         = new Dictionary <MonoLinkerFeature, bool> {
                [MonoLinkerFeature.Unknown] = false,
                [MonoLinkerFeature.Martin]  = false
            };

            OptimizerConfiguration = new OptimizerConfiguration();
            OptimizerReport        = new OptimizerReport(this);
        }
示例#11
0
        public void Setup()
        {
            _config = new OptimizerConfiguration {
                Genes = new[] { new GeneConfiguration {
                                    Key = "p1", Min = 1, Max = 2
                                }, new GeneConfiguration {
                                    Key = "p2", Min = 1, Max = 2
                                } }
            };
            _list = new Dictionary <string, object> {
                { "p1", 1.0 }, { "p2", 0.1 }, { "Id", "abc123" }
            };
            IFitnessFilter filter = null;

            _unit = new WalkForwardWeightedMetricSharpeMaximizer(_config, filter);
            _unit.WalkForwardSharpeMaximizerFactory = new Factory();
        }
示例#12
0
        public async Task Given_function_code_And_configured_to_run_in_ui_thread_When_Minimizing_And_task_is_cancelled_Then_should_throw()
        {
            Setup();

            var config = new OptimizerConfiguration
            {
                Genes   = new GeneConfiguration[0],
                Fitness = new FitnessConfiguration {
                    OptimizerTypeName = Enums.OptimizerTypeOptions.Bayesian.ToString()
                }
            };

            var source = new CancellationTokenSource();

            source.Cancel();
            await Assert.ThrowsAsync <TaskCanceledException>(() => _unit.Start(config, source.Token));
        }
示例#13
0
        public void EvaluateTest(DateTime startDate, DateTime endDate, int folds, string[] expectedDates, double[] expectedValues)
        {
            var config = new OptimizerConfiguration
            {
                StartDate           = startDate,
                EndDate             = endDate,
                FitnessTypeName     = "Optimization.OptimizerFitness",
                EnableFitnessFilter = true,
                Genes   = SetupGenes(),
                Fitness = new FitnessConfiguration {
                    Folds = folds
                }
            };

            var unit = new Wrapper(config);

            GeneFactory.Initialize(config.Genes);

            var actual = unit.Evaluate(new Chromosome(true, config.Genes));

            Assert.AreEqual(1, actual);

            var actualDates  = new List <DateTime>();
            var actualValues = new List <double>();


            for (int i = 0; i < unit.ActualInSampleConfig.Count(); i++)
            {
                actualDates.Add(unit.ActualInSampleConfig[i].StartDate.Value);
                actualDates.Add(unit.ActualInSampleConfig[i].EndDate.Value);
                actualDates.Add(unit.ActualOutSampleConfig[i].StartDate.Value);
                actualDates.Add(unit.ActualOutSampleConfig[i].EndDate.Value);

                actualValues.Add((double)unit.ActualInSampleChromosome[i].ToDictionary()["Key"]);
                actualValues.Add((double)unit.ActualInSampleChromosome[i].ToDictionary()["Key2"]);
                actualValues.Add((double)unit.ActualOutSampleList[i]["Key"]);
                actualValues.Add((double)unit.ActualOutSampleList[i]["Key2"]);
            }

            expectedDates.Select(s => DateTime.Parse(s)).ShouldDeepEqual(actualDates);
            expectedValues.ShouldDeepEqual(actualValues);
        }
示例#14
0
 public void MergeInto(OptimizerConfiguration result)
 {
     if (EliminateStructCopies.HasValue)
     {
         result.EliminateStructCopies = EliminateStructCopies;
     }
     if (EliminateTemporaries.HasValue)
     {
         result.EliminateTemporaries = EliminateTemporaries;
     }
     if (SimplifyLoops.HasValue)
     {
         result.SimplifyLoops = SimplifyLoops;
     }
     if (SimplifyOperators.HasValue)
     {
         result.SimplifyOperators = SimplifyOperators;
     }
     if (EliminateRedundantControlFlow.HasValue)
     {
         result.EliminateRedundantControlFlow = EliminateRedundantControlFlow;
     }
     if (CacheMethodSignatures.HasValue)
     {
         result.CacheMethodSignatures = CacheMethodSignatures;
     }
     if (EliminatePointlessFinallyBlocks.HasValue)
     {
         result.EliminatePointlessFinallyBlocks = EliminatePointlessFinallyBlocks;
     }
     if (CacheTypeExpressions.HasValue)
     {
         result.CacheTypeExpressions = CacheTypeExpressions;
     }
     if (PreferAccessorMethods.HasValue)
     {
         result.PreferAccessorMethods = PreferAccessorMethods;
     }
 }
示例#15
0
 public CompareWithReportStep(OptimizerContext context)
     : base(context)
 {
     Configuration = new OptimizerConfiguration();
     context.Options.OptimizerReport.SizeComparision = Result = new SizeComparision();
 }
        public void MinimizeTest()
        {
            var genes = new[]
            {
                new GeneConfiguration
                {
                    Key    = "1",
                    Actual = 1.23
                },
                new GeneConfiguration
                {
                    Key    = "2",
                    Actual = 123,
                    Min    = 1,
                    Max    = 123
                },
                new GeneConfiguration
                {
                    Key = "3",
                    Min = 1,
                    Max = 2
                }
            };

            var config = new OptimizerConfiguration
            {
                Genes               = genes,
                FitnessTypeName     = "Optimization.OptimizerFitness",
                EnableFitnessFilter = true,
            };

            var unit = new Mock <SharpeMaximizer>(config, new FitnessFilter())
            {
                CallBase = true
            };

            unit.Setup(x => x.RunAlgorithm(It.IsAny <Dictionary <string, object> >(), It.IsAny <IOptimizerConfiguration>())).Returns <Dictionary <string, object>, IOptimizerConfiguration>((l, c) =>
            {
                return(new Dictionary <string, decimal> {
                    { "SharpeRatio", 1 }, { "CompoundingAnnualReturn", 1 }, { "TotalNumberOfTrades", 1 },
                    { "LossRate", 0.1m }
                });
            });

            GeneFactory.Initialize(config.Genes);
            RandomizationProvider.Current = new BasicRandomization();
            var chromosome = new Chromosome(true, genes, false);

            var actual = unit.Object.Minimize(new[] { 3.21, 321, 456 }, chromosome);

            Assert.AreEqual(0.999, actual.Error);
            Assert.AreEqual(1.23, actual.ParameterSet[0]);
            Assert.AreEqual(123, actual.ParameterSet[1]);
            Assert.AreEqual(456, actual.ParameterSet[2]);

            var nextActual = unit.Object.Minimize(new[] { 3.21, 321, 789 }, chromosome);

            Assert.AreEqual(0.999, nextActual.Error);
            Assert.AreEqual(3.21, nextActual.ParameterSet[0]);
            Assert.AreEqual(321, nextActual.ParameterSet[1]);
            Assert.AreEqual(789, nextActual.ParameterSet[2]);
        }
示例#17
0
 public void MergeInto(OptimizerConfiguration result)
 {
     if (EliminateStructCopies.HasValue)
         result.EliminateStructCopies = EliminateStructCopies;
     if (EliminateTemporaries.HasValue)
         result.EliminateTemporaries = EliminateTemporaries;
     if (SimplifyLoops.HasValue)
         result.SimplifyLoops = SimplifyLoops;
     if (SimplifyOperators.HasValue)
         result.SimplifyOperators = SimplifyOperators;
     if (EliminateRedundantControlFlow.HasValue)
         result.EliminateRedundantControlFlow = EliminateRedundantControlFlow;
     if (CacheMethodSignatures.HasValue)
         result.CacheMethodSignatures = CacheMethodSignatures;
 }
示例#18
0
 public NodeService(IRouteStopService routeStopService, OptimizerConfiguration configuration)
 {
     _configuration = configuration;
     _routeStopService = routeStopService;
 }
示例#19
0
        public void Optimize()
        {
            var config = JsonConvert.DeserializeObject <DynastyConfiguration>(_file.File.ReadAllText("dynasty.json"));

            OptimizerConfiguration current = null;
            var settings = new JsonSerializerSettings {
                ContractResolver = new CamelCasePropertyNamesContractResolver()
            };

            for (var i = config.StartDate; i <= config.EndDate; i = i.AddDays(config.DurationDays).AddHours(config.DurationHours))
            {
                if (current == null)
                {
                    current = JsonConvert.DeserializeObject <OptimizerConfiguration>(_file.File.ReadAllText(_configFilename));
                }

                current.StartDate = i;
                current.EndDate   = i.AddDays(config.DurationDays).AddHours(config.DurationHours);

                string json = JsonConvert.SerializeObject(current, settings);

                _file.File.WriteAllText(_configFilename, json);

                var info = new ProcessStartInfo("Optimization.exe", _configFilename)
                {
                    RedirectStandardOutput = true,
                    UseShellExecute        = false
                };

                _process.Start(info);
                string output;
                FixedSizeQueue <string> queue = new FixedSizeQueue <string>(2);
                while ((output = _process.ReadLine()) != null)
                {
                    queue.Enqueue(output);
                    //Console.WriteLine(output);

                    if (queue.First() == GeneManager.Termination)
                    {
                        _logWrapper.Info($"For period: {current.StartDate} {current.EndDate}");
                        _logWrapper.Info(queue.Dequeue());
                        _logWrapper.Info(queue.Dequeue());
                        string optimal = queue.Dequeue();
                        _logWrapper.Info(optimal);

                        if (config.WalkForward)
                        {
                            var split = optimal.Split(',');

                            for (int ii = 0; ii < split.Length; ii++)
                            {
                                string[] pair = split[ii].Split(':');
                                var      gene = current.Genes.SingleOrDefault(g => g.Key == pair[0].Trim());

                                decimal parsedDecimal;
                                int     parsedInt;
                                if (int.TryParse(pair[1].Trim(), out parsedInt))
                                {
                                    gene.ActualInt = parsedInt;
                                }
                                else if (decimal.TryParse(pair[1].Trim(), out parsedDecimal))
                                {
                                    gene.ActualDecimal = parsedDecimal;
                                }
                                else
                                {
                                    throw new Exception($"Unable to parse optimal gene from range {current.StartDate} {current.EndDate}");
                                }
                            }
                        }
                        _process.Kill();
                    }
                }
            }
        }
示例#20
0
 public void MergeInto(OptimizerConfiguration result)
 {
     if (EliminateStructCopies.HasValue)
         result.EliminateStructCopies = EliminateStructCopies;
     if (EliminateTemporaries.HasValue)
         result.EliminateTemporaries = EliminateTemporaries;
     if (SimplifyLoops.HasValue)
         result.SimplifyLoops = SimplifyLoops;
     if (SimplifyOperators.HasValue)
         result.SimplifyOperators = SimplifyOperators;
     if (EliminateRedundantControlFlow.HasValue)
         result.EliminateRedundantControlFlow = EliminateRedundantControlFlow;
     if (CacheMethodSignatures.HasValue)
         result.CacheMethodSignatures = CacheMethodSignatures;
     if (EliminatePointlessFinallyBlocks.HasValue)
         result.EliminatePointlessFinallyBlocks = EliminatePointlessFinallyBlocks;
     if (CacheTypeExpressions.HasValue)
         result.CacheTypeExpressions = CacheTypeExpressions;
     if (PreferAccessorMethods.HasValue)
         result.PreferAccessorMethods = PreferAccessorMethods;
 }
示例#21
0
 public RouteStopDelayService(OptimizerConfiguration optimizerConfiguration)
 {
     _optimizerConfiguration = optimizerConfiguration;
 }
 public RouteStatisticsService(IRouteStopService routeStopService, INodeService nodeService, OptimizerConfiguration configuration)
 {
     _routeStopService = routeStopService;
     _nodeService      = nodeService;
     _configuration    = configuration;
 }
 private double CurrentHours(OptimizerConfiguration config)
 {
     return(config.EndDate.Value.AddDays(1).AddTicks(-1).Subtract(config.StartDate.Value).TotalHours);
 }