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"); }