private EvaluatedEpisode EvaluateEpisode(Episode episode, ContinuousAxis axis) { var key = Tuple.Create(episode, axis); double value; if (!_evaluateCache.TryGetValue(key, out value)) { value = ContinuousAxisEvaluator.Evaluate(axis, episode.World, episode.Hero); _evaluateCache[key] = value; } return(new EvaluatedEpisode { Episode = episode, Value = value, }); }
private static List <DataPoint> EpisodesToDataPoints(List <Episode> episodes) { return(episodes.AsParallel().Select(episode => new DataPoint { Episode = episode, Class = (byte)episode.Tactic, Weight = (float)episode.Weight, Attributes = EnumUtils.GetEnumValues <ContinuousAxis>() .Select(axis => (float)ContinuousAxisEvaluator.Evaluate(axis, episode.World, episode.Hero)) .ToArray(), Categories = EnumUtils.GetEnumValues <CategoricalAxis>() .Select(axis => PolicyHelper.CategoriesToBits(CategoricalAxisEvaluator.Evaluate(axis, episode.World, episode.Hero))) .ToArray(), }).ToList()); }