示例#1
0
        public Dictionary <string, decimal> Run(Dictionary <string, object> items, IOptimizerConfiguration config)
        {
            _config = config;


            var id = (items.ContainsKey("Id") ? items["Id"] : Guid.NewGuid().ToString("N")).ToString();

            if (_config.StartDate.HasValue && _config.EndDate.HasValue)
            {
                if (!items.ContainsKey("startDate"))
                {
                    items.Add("startDate", _config.StartDate);
                }
                if (!items.ContainsKey("endDate"))
                {
                    items.Add("endDate", _config.EndDate);
                }
            }

            string jsonKey = JsonConvert.SerializeObject(items.Where(i => i.Key != "Id"));

            if (!_config.EnableRunningDuplicateParameters && GetResults().ContainsKey(jsonKey))
            {
                return(GetResults()[jsonKey]);
            }

            var filteredConfig = new Dictionary <string, object>();

            //just ignore id gene
            foreach (var pair in items.Where(i => i.Key != "Id"))
            {
                if (pair.Value is DateTime?)
                {
                    var cast = ((DateTime?)pair.Value);
                    if (cast.HasValue)
                    {
                        filteredConfig.Add(pair.Key, cast.Value.ToString("O"));
                    }
                }
                else
                {
                    filteredConfig.Add(pair.Key, pair.Value.ToString());
                }
            }

            //store uniquely keyed config in app domain for each algorithm instance
            //todo: cleanup
            SingleAppDomainManager.SetData(AppDomain.CurrentDomain, id, filteredConfig);

            LaunchLean(id);

            AddToResults(config, jsonKey);

            return(_resultsHandler.FullResults);
        }
 public virtual Dictionary <string, decimal> RunAlgorithm(Dictionary <string, object> list, IOptimizerConfiguration config)
 {
     if (config.UseSharedAppDomain)
     {
         return(SingleAppDomainManager.RunAlgorithm(list, config));
     }
     else
     {
         return(OptimizerAppDomainManager.RunAlgorithm(list, config));
     }
 }
        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('/')))
            {
                _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);
                }
            }

            if (_config.UseSharedAppDomain)
            {
                SingleAppDomainManager.Initialize();
            }
            else
            {
                OptimizerAppDomainManager.Initialize();
            }

            OptimizerFitness fitness = (OptimizerFitness)Assembly.GetExecutingAssembly().CreateInstance(_config.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) }.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();
                }
            }

            _manager.Initialize(_config, fitness);
            _manager.Start();
        }
        public virtual double Evaluate(IChromosome chromosome)
        {
            Name = "Sharpe";

            try
            {
                string output = "";
                var    list   = ((Chromosome)chromosome).ToDictionary();

                list.Add("Id", ((Chromosome)chromosome).Id);

                foreach (var item in list)
                {
                    output += item.Key + ": " + item.Value.ToString() + ", ";
                }

                if (Config.StartDate.HasValue && Config.EndDate.HasValue)
                {
                    output += string.Format("Start: {0}, End: {1}, ", Config.StartDate, Config.EndDate);
                }

                Dictionary <string, decimal> result = null;

                if (Config.UseSharedAppDomain)
                {
                    result = SingleAppDomainManager.RunAlgorithm(list, Config);
                }
                else
                {
                    result = OptimizerAppDomainManager.RunAlgorithm(list, Config);
                }

                if (result == null)
                {
                    return(0);
                }

                var fitness = CalculateFitness(result);

                output += string.Format("{0}: {1}", Name, fitness.Value);
                Program.Logger.Info(output);

                return(fitness.Fitness);
            }
            catch (Exception ex)
            {
                Program.Logger.Error(ex);
                return(0);
            }
        }
 public new static Dictionary <string, Dictionary <string, decimal> > GetResults()
 {
     return(SingleAppDomainManager.GetData <Dictionary <string, Dictionary <string, decimal> > >(_ad, "Results"));
 }
 private Dictionary<string, Dictionary<string, decimal>> GetResults()
 {
     return SingleAppDomainManager.GetData<Dictionary<string, Dictionary<string, decimal>>>(AppDomain.CurrentDomain, "Results");
 }