private static ScriptCsArgs ReconcileArguments(ScriptCsArgs configArgs, ScriptCsArgs commandArgs, SplitResult splitResult) { if (configArgs == null) return commandArgs; if (commandArgs == null) return configArgs; foreach (var property in typeof(ScriptCsArgs).GetProperties(BindingFlags.Instance | BindingFlags.Public)) { var configValue = property.GetValue(configArgs); var commandValue = property.GetValue(commandArgs); var defaultValue = GetPropertyDefaultValue(property); if (!object.Equals(configValue, commandValue)) { if (!object.Equals(commandValue, defaultValue)) { property.SetValue(configArgs, commandValue); } else { if (IsCommandLinePresent(splitResult.CommandArguments, property)) property.SetValue(configArgs, commandValue); } } } return configArgs; }
public static SplitResult SplitScriptArgs(string[] args) { Guard.AgainstNullArgument("args", args); var result = new SplitResult() { CommandArguments = args }; // Split the arguments list on "--". // The arguments before the "--" (or all arguments if there is no "--") are // for ScriptCs.exe, and the arguments after that are for the csx script. int separatorLocation = Array.IndexOf(args, "--"); int scriptArgsCount = separatorLocation == -1 ? 0 : args.Length - separatorLocation - 1; result.ScriptArguments = new string[scriptArgsCount]; Array.Copy(args, separatorLocation + 1, result.ScriptArguments, 0, scriptArgsCount); if (separatorLocation != -1) result.CommandArguments = args.Take(separatorLocation).ToArray(); return result; }
public void RandomSplitSearcher_FindBestSplit() { var parser = new CsvParser(() => new StringReader(Resources.AptitudeData)); var feature = parser.EnumerateRows("AptitudeTestScore").ToF64Vector(); var targets = parser.EnumerateRows("Pass").ToF64Vector(); var interval = Interval1D.Create(0, feature.Length); Array.Sort(feature, targets); var impurityCalculator = new GiniClassificationImpurityCalculator(); impurityCalculator.Init(targets.Distinct().ToArray(), targets, new double[0], interval); var impurity = impurityCalculator.NodeImpurity(); var sut = new RandomSplitSearcher(1, 42); var actual = sut.FindBestSplit(impurityCalculator, feature, targets, interval, impurity); var expected = new SplitResult(15, 3.6724258636461693, 0.037941545633853213, 0.39111111111111119, 0.49586776859504134); Assert.AreEqual(expected, actual); }
public bool Equals(SplitResult other) { return(m_Head == other.m_Head && m_Rest == other.m_Rest); }
internal Enumerator(SplitResult result) { _current = default; _state = result._state; // copy by value }
public List <SplitResult> LoadResults(Race race) { _currentRace = race; SplitResults = new List <SplitResult>(); try { var athletes = _athleteRepository.GetAll(); //FindBy(x => x.Races.Any(y => y.Id == race.Id)); var splits = _splitRepository.FindBy(x => x.RaceId == race.Id && x.AthleteId > 0); foreach (var athlete in athletes) { foreach (var split in splits.Where(x => x.AthleteId == athlete.Id && x.RaceId == race.Id)) { var splitPosition = splits.Where(x => x.SplitLapCount == split.SplitLapCount).OrderBy(x => x.DateTimeOfDay).ThenBy(x => x.RaceTime).ToList().FindIndex(x => x.AthleteId == athlete.Id) + 1; var gendorPosition = splits.Where(x => x.SplitLapCount == split.SplitLapCount && x.Athlete.Gendor == athlete.Gendor).OrderBy(x => x.DateTimeOfDay).ThenBy(x => x.RaceTime).ToList().FindIndex(x => x.AthleteId == athlete.Id) + 1; var ageCatPosition = splits.Where(x => x.SplitLapCount == split.SplitLapCount && x.Athlete.AgeCategory == athlete.AgeCategory).OrderBy(x => x.DateTimeOfDay).ThenBy(x => x.RaceTime).ToList().FindIndex(x => x.AthleteId == athlete.Id) + 1; List <double> splitTimes = new List <double>(); foreach (var s in splits.Where(x => x.AthleteId == athlete.Id && x.RaceId == race.Id && x.SplitLapCount <= split.SplitLapCount)) { splitTimes.Add(s.SplitTime); } double doubleAverageTicks = splitTimes.Any() ? splitTimes.Average(timeSpan => timeSpan) : 0; TimeSpan avgLap = TimeSpan.FromMilliseconds(doubleAverageTicks); var splitResult = new SplitResult { OveralPosition = splitPosition, GendorPosition = gendorPosition, AgeCategoryPosition = ageCatPosition, AthleteName = split.AthleteName, AgeCategory = split.Athlete.AgeCategory, Bib = split.Bib, SplitTime = TimeSpan.FromMilliseconds(split.SplitTime).ToString("hh':'mm':'ss':'ff"), TimeOfDay = split.TimeOfDay, SplitName = split.SplitName, RaceTime = TimeSpan.FromTicks(split.RaceTime).ToString("hh':'mm':'ss':'ff"), // RaceTime2 = split.RaceTime2, LapNumber = split.SplitLapCount, Epc = split.Epc, RaceName = split.Race.Name, Rssi = split.Rssi, AverLap = avgLap.ToString("hh':'mm':'ss':'ff"), EstFinish = TimeSpan.FromSeconds(avgLap.Seconds * 25).ToString("hh':'mm':'ss':'ff"), }; SplitResults.Add(splitResult); } } SplitResults = SplitResults.OrderByDescending(x => x.LapNumber).ThenBy(x => x.OveralPosition).ToList(); } catch (Exception ex) { logger.Error(ex, "Error loading results" + ex.Message); } return(SplitResults); }
public bool Equals(SplitResult other) { return this.m_Head == other.m_Head && this.m_Rest == other.m_Rest; }
/// <summary> /// 分页函数(模板) /// </summary> /// <param name="pageTotal">总记录数</param> /// <param name="pageSize">每页显示记录数</param> /// <param name="pageIndex">页面索引</param> /// <param name="pageShowLength">显示页码长度</param> /// <param name="pageName">页面名称</param> public SplitResult Split(int pageTotal, int pageSize, int pageIndex, int pageShowLength, string pageName, string pageParam = "") { //总页数 var pageCount = 0; //下一页 var nextIndex = 0; //上一页 var preIndex = 0; //开始页码 var startCount = 0; //结束页码 var endCount = 0; // 将返回的结果 var sr = new SplitResult(); var sp = new StrPlus(); if (pageIndex < 1) { pageIndex = 1; } //计算总页数 if (pageSize != 0) { pageCount = (pageTotal / pageSize); pageCount = ((pageTotal % pageSize) != 0 ? pageCount + 1 : pageCount); pageCount = (pageCount == 0 ? 1 : pageCount); } nextIndex = pageIndex + 1; preIndex = pageIndex - 1; if (preIndex < 1) { preIndex = 1; } if (nextIndex > pageCount) { nextIndex = pageCount; } //中间页起始序号 startCount = (pageIndex + pageShowLength / 2) > pageCount ? pageCount - (pageShowLength - 1) : pageIndex - pageShowLength / 2; //中间页终止序号 endCount = pageIndex < pageShowLength / 2 ? pageShowLength : pageIndex + pageShowLength / 2; if (pageShowLength % 2 == 0) { startCount = startCount + 1; } //为了避免输出的时候产生负数,设置如果小于1就从序号1开始 if (startCount < 1) { startCount = 1; } //页码+5的可能性就会产生最终输出序号大于总页码,那么就要将其控制在页码数之内 if (pageCount < endCount) { endCount = pageCount; } // 首页 sp += Template(Template_First, pageTotal, pageCount, nextIndex, preIndex, pageSize, pageIndex, pageName, pageParam); // 上一页 sp += Template(Template_Pre, pageTotal, pageCount, nextIndex, preIndex, pageSize, pageIndex, pageName, pageParam); // 页码列表 for (var i = startCount; i <= endCount; i++) { if (i != pageIndex || string.IsNullOrWhiteSpace(Template_Active)) { sp += Template(Template_Default, pageTotal, pageCount, nextIndex, preIndex, pageSize, i, pageName, pageParam); } else { sp += Template(Template_Active, pageTotal, pageCount, nextIndex, preIndex, pageSize, i, pageName, pageParam); } } // 下一页 sp += Template(Template_Next, pageTotal, pageCount, nextIndex, pageIndex, pageSize, pageIndex, pageName, pageParam); // 尾页 sp += Template(Template_Last, pageTotal, pageCount, nextIndex, pageIndex, pageSize, pageIndex, pageName, pageParam); sr.Split = sp; sr.Record = Template(Template_Record, pageTotal, pageCount, nextIndex, preIndex, pageSize, pageIndex); return sr; }
public bool Equals(SplitResult other) => Head == other.Head && Rest == other.Rest;
public bool Equals(SplitResult other) { return(head == other.head && rest == other.rest); }
public bool Equals(SplitResult other) { return(Head == other.Head && Rest == other.Rest); }
/// <summary> /// 分页函数(模板) /// </summary> /// <param name="pageTotal">总记录数</param> /// <param name="pageSize">每页显示记录数</param> /// <param name="pageIndex">页面索引</param> /// <param name="pageName">页面名称</param> public SplitResult Split(int pageTotal, int pageSize, int pageIndex, string pageName, string pageParam = "") { //总页数 var pageCount = 0; //下一页 var nextIndex = 0; //上一页 var preIndex = 0; //开始页码 var startCount = 0; //结束页码 var endCount = 0; // 将返回的结果 var sr = new SplitResult(); var sp = new StrPlus(); if (pageIndex < 1) { pageIndex = 1; } //计算总页数 if (pageSize != 0) { pageCount = (pageTotal / pageSize); pageCount = ((pageTotal % pageSize) != 0 ? pageCount + 1 : pageCount); pageCount = (pageCount == 0 ? 1 : pageCount); } nextIndex = pageIndex + 1; preIndex = pageIndex - 1; if (preIndex < 1) { preIndex = 1; } if (nextIndex > pageCount) { nextIndex = pageCount; } //中间页起始序号 startCount = (pageIndex + 5) > pageCount ? pageCount - 9 : pageIndex - 4; //中间页终止序号 endCount = pageIndex < 5 ? 10 : pageIndex + 5; //为了避免输出的时候产生负数,设置如果小于1就从序号1开始 if (startCount < 1) { startCount = 1; } //页码+5的可能性就会产生最终输出序号大于总页码,那么就要将其控制在页码数之内 if (pageCount < endCount) { endCount = pageCount; } // 首页 sp += Template(Template_First, pageTotal, pageCount, nextIndex, preIndex, pageSize, pageIndex, pageName, pageParam); // 上一页 sp += Template(Template_Pre, pageTotal, pageCount, nextIndex, preIndex, pageSize, pageIndex, pageName, pageParam); // 页码列表 for (var i = startCount; i <= endCount; i++) { if (i != pageIndex || Template_Active.IsNullOrEmpty()) { sp += Template(Template_Default, pageTotal, pageCount, nextIndex, preIndex, pageSize, i, pageName, pageParam); } else { sp += Template(Template_Active, pageTotal, pageCount, nextIndex, preIndex, pageSize, i, pageName, pageParam); } } // 下一页 sp += Template(Template_Next, pageTotal, pageCount, nextIndex, pageIndex, pageSize, pageIndex, pageName, pageParam); // 尾页 sp += Template(Template_Last, pageTotal, pageCount, nextIndex, pageIndex, pageSize, pageIndex, pageName, pageParam); sr.Split = sp; sr.Record = Template(Template_Record, pageTotal, pageCount, nextIndex, preIndex, pageSize, pageIndex); return(sr); }
private static ScriptCsArgs ReconcileArguments(ScriptCsArgs globalConfigArgs, ScriptCsArgs localConfigArgs, ScriptCsArgs commandArgs, SplitResult splitResult) { if (globalConfigArgs == null && localConfigArgs == null) { return(commandArgs); } if (globalConfigArgs == null && commandArgs == null) { return(localConfigArgs); } if (localConfigArgs == null && commandArgs == null) { return(globalConfigArgs); } var reconciledArgs = new ScriptCsArgs(); foreach (var property in typeof(ScriptCsArgs).GetProperties(BindingFlags.Instance | BindingFlags.Public)) { var defaultValue = GetPropertyDefaultValue(property); if (commandArgs != null) { var commandValue = property.GetValue(commandArgs); if (!Equals(commandValue, defaultValue)) { property.SetValue(reconciledArgs, commandValue); continue; } if (IsCommandLinePresent(splitResult.CommandArguments, property)) { property.SetValue(reconciledArgs, commandValue); continue; } } if (localConfigArgs != null) { var localConfigValue = property.GetValue(localConfigArgs); if (!Equals(localConfigValue, defaultValue)) { property.SetValue(reconciledArgs, localConfigValue); continue; } } if (globalConfigArgs != null) { var globalConfigValue = property.GetValue(globalConfigArgs); if (!Equals(globalConfigValue, defaultValue)) { property.SetValue(reconciledArgs, globalConfigValue); } } } return(reconciledArgs); }
private static bool SplitOrdered(Range <T> lower, Range <T> higher, SplitResultRange lowerRangeName, SplitResultRange higherRangeName, out SplitResult before, out SplitResult intersection, out SplitResult after) { // 7 Possible results // 1) Disjoint (a.h < b.l) => (a.l to a.h) + (b.l to b.h) -- A_X_B // // (a.l < b.l) // 2) Overlap (a.h < b.h) => (a.l to b.l - 1) + (b.l to a.l) + (a.l + 1 to b.h) -- A_AB_B // 3) SuperSet (a.h > b.h) => (a.l to b.l - 1) + (b.l to b.h) + (b.h + 1 to a.h) -- A_AB_A // 4) SuperSetToEnd (a.h = b.h) => (a.l to b.l - 1) + (b.l to b.h) -- A_AB_X // // (a.l = b.l) // 5) SubSetFromStart (a.h < b.h) => (a.l to a.h) + (a.h + 1 to b.h) -- X_AB_B // 6) SuperSetFromStart (a.h > b.h) => (a.l to b.h) + (b.h + 1 to a.h) -- X_AB_A // 7) Union (a.h = b.h) => (a.l to b.h) -- X_AB_X // [1] (a.h < b.l) | Disjoint => A_B if (lower.high.Precedes(higher.low)) { before = new SplitResult(lower, lowerRangeName); intersection = SplitResult.Neither; after = new SplitResult(lower, higherRangeName); return(false); } else { // BEFORE -> [A|X] => when a.l != b.l, (a.l to b.l - 1) if (lower.low.Equals(higher.low)) { before = SplitResult.Neither; } else { before = new SplitResult(lower.low, higher.low.Previous, lowerRangeName); } // INTERSECTION -> AB => (b.l to MIN(a.h, b.h)) T ab_high = Min(lower.high, higher.high); intersection = new SplitResult(higher.low, ab_high, SplitResultRange.AB); // AFTER -> [A|B|X] => when a.h != b.h, (ab.h + 1 to MAX(a.h, b.h)) if (lower.high.Follows(higher.high)) { after = new SplitResult(ab_high.Next, lower.high, lowerRangeName); } else if (higher.high.Follows(lower.high)) { after = new SplitResult(ab_high.Next, higher.high, higherRangeName); } else { after = SplitResult.Neither; } return(true); } }
public static bool SplitOrdered(Range <T> a, Range <T> b, out SplitResult before, out SplitResult intersection, out SplitResult after) { return(SplitOrdered(a, b, SplitResultRange.A, SplitResultRange.B, out before, out intersection, out after)); }
/// <summary> /// /// </summary> /// <param name="observations"></param> /// <param name="targets"></param> /// <param name="indices"></param> /// <param name="weights"></param> /// <returns></returns> public BinaryTree Build(F64MatrixView observations, double[] targets, int[] indices, double[] weights) { Array.Clear(m_variableImportance, 0, m_variableImportance.Length); Array.Resize(ref m_workTargets, indices.Length); Array.Resize(ref m_workFeature, indices.Length); Array.Resize(ref m_workIndices, indices.Length); var numberOfFeatures = observations.ColumnCount; if (m_featuresPrSplit == 0) { m_featuresPrSplit = numberOfFeatures; } Array.Resize(ref m_bestSplitWorkIndices, indices.Length); m_bestSplitWorkIndices.Clear(); Array.Resize(ref m_variableImportance, numberOfFeatures); Array.Resize(ref m_allFeatureIndices, numberOfFeatures); Array.Resize(ref m_featureCandidates, m_featuresPrSplit); m_featuresCandidatesSet = false; for (int i = 0; i < m_allFeatureIndices.Length; i++) { m_allFeatureIndices[i] = i; } var allInterval = Interval1D.Create(0, indices.Length); indices.CopyTo(allInterval, m_workIndices); m_workIndices.IndexedCopy(targets, allInterval, m_workTargets); if (weights.Length != 0) { Array.Resize(ref m_workWeights, indices.Length); m_workIndices.IndexedCopy(weights, allInterval, m_workWeights); } var targetNames = targets.Distinct().ToArray(); m_impurityCalculator.Init(targetNames, m_workTargets, m_workWeights, allInterval); var rootImpurity = m_impurityCalculator.NodeImpurity(); var nodes = new List <Node>(); var probabilities = new List <double[]>(); var stack = new Stack <DecisionNodeCreationItem>(100); stack.Push(new DecisionNodeCreationItem(0, NodePositionType.Root, allInterval, rootImpurity, 0)); var first = true; var currentNodeIndex = 0; var currentLeafProbabilityIndex = 0; while (stack.Count > 0) { var bestSplitResult = SplitResult.Initial(); var bestFeatureIndex = -1; var parentItem = stack.Pop(); var parentInterval = parentItem.Interval; var parentNodeDepth = parentItem.NodeDepth; Node parentNode = Node.Default(); if (nodes.Count != 0) { parentNode = nodes[parentItem.ParentIndex]; } var parentNodePositionType = parentItem.NodeType; var parentImpurity = parentItem.Impurity; if (first && parentNode.FeatureIndex != -1) { nodes[0] = new Node(parentNode.FeatureIndex, parentNode.Value, -1, -1, parentNode.NodeIndex, parentNode.LeafProbabilityIndex); first = false; } var isLeaf = (parentNodeDepth >= m_maximumTreeDepth); if (!isLeaf) { SetNextFeatures(numberOfFeatures); foreach (var featureIndex in m_featureCandidates) { m_workIndices.IndexedCopy(observations.ColumnView(featureIndex), parentInterval, m_workFeature); m_workFeature.SortWith(parentInterval, m_workIndices); m_workIndices.IndexedCopy(targets, parentInterval, m_workTargets); if (weights.Length != 0) { m_workIndices.IndexedCopy(weights, parentInterval, m_workWeights); } var splitResult = m_splitSearcher.FindBestSplit(m_impurityCalculator, m_workFeature, m_workTargets, parentInterval, parentImpurity); if (splitResult.ImpurityImprovement > bestSplitResult.ImpurityImprovement) { bestSplitResult = splitResult; m_workIndices.CopyTo(parentInterval, m_bestSplitWorkIndices); bestFeatureIndex = featureIndex; } } isLeaf = isLeaf || (bestSplitResult.SplitIndex < 0); isLeaf = isLeaf || (bestSplitResult.ImpurityImprovement < m_minimumInformationGain); m_bestSplitWorkIndices.CopyTo(parentInterval, m_workIndices); } if (isLeaf) { m_bestSplitWorkIndices.IndexedCopy(targets, parentInterval, m_workTargets); if (weights.Length != 0) { m_bestSplitWorkIndices.IndexedCopy(weights, parentInterval, m_workWeights); } m_impurityCalculator.UpdateInterval(parentInterval); var value = m_impurityCalculator.LeafValue(); var leaf = new Node(-1, value, -1, -1, currentNodeIndex++, currentLeafProbabilityIndex++); probabilities.Add(m_impurityCalculator.LeafProbabilities()); nodes.Add(leaf); nodes.UpdateParent(parentNode, leaf, parentNodePositionType); } else { m_variableImportance[bestFeatureIndex] += bestSplitResult.ImpurityImprovement * parentInterval.Length / allInterval.Length; var split = new Node(bestFeatureIndex, bestSplitResult.Threshold, -1, -1, currentNodeIndex++, -1); nodes.Add(split); nodes.UpdateParent(parentNode, split, parentNodePositionType); var nodeDepth = parentNodeDepth + 1; stack.Push(new DecisionNodeCreationItem(split.NodeIndex, NodePositionType.Right, Interval1D.Create(bestSplitResult.SplitIndex, parentInterval.ToExclusive), bestSplitResult.ImpurityRight, nodeDepth)); stack.Push(new DecisionNodeCreationItem(split.NodeIndex, NodePositionType.Left, Interval1D.Create(parentInterval.FromInclusive, bestSplitResult.SplitIndex), bestSplitResult.ImpurityLeft, nodeDepth)); } } if (first) // No valid split return single leaf result { m_impurityCalculator.UpdateInterval(allInterval); var leaf = new Node(-1, m_impurityCalculator.LeafValue(), -1, -1, currentNodeIndex++, currentLeafProbabilityIndex++); probabilities.Add(m_impurityCalculator.LeafProbabilities()); nodes.Clear(); nodes.Add(leaf); } return(new BinaryTree(nodes, probabilities, targetNames, m_variableImportance.ToArray())); }
private static ScriptCsArgs ReconcileArguments(ScriptCsArgs globalConfigArgs, ScriptCsArgs localConfigArgs, ScriptCsArgs commandArgs, SplitResult splitResult) { if (globalConfigArgs == null && localConfigArgs == null) return commandArgs; if (globalConfigArgs == null && commandArgs == null) return localConfigArgs; if (localConfigArgs == null && commandArgs == null) return globalConfigArgs; var reconciledArgs = new ScriptCsArgs(); foreach (var property in typeof(ScriptCsArgs).GetProperties(BindingFlags.Instance | BindingFlags.Public)) { var defaultValue = GetPropertyDefaultValue(property); if (commandArgs != null) { var commandValue = property.GetValue(commandArgs); if (!Equals(commandValue, defaultValue)) { property.SetValue(reconciledArgs, commandValue); continue; } if (IsCommandLinePresent(splitResult.CommandArguments, property)) { property.SetValue(reconciledArgs, commandValue); continue; } } if (localConfigArgs != null) { var localConfigValue = property.GetValue(localConfigArgs); if (!Equals(localConfigValue, defaultValue)) { property.SetValue(reconciledArgs, localConfigValue); continue; } } if (globalConfigArgs != null) { var globalConfigValue = property.GetValue(globalConfigArgs); if (!Equals(globalConfigValue, defaultValue)) { property.SetValue(reconciledArgs, globalConfigValue); } } } return reconciledArgs; }
private static ScriptCsArgs ReconcileArguments(ScriptCsArgs configArgs, ScriptCsArgs commandArgs, SplitResult splitResult) { if (configArgs == null) { return(commandArgs); } if (commandArgs == null) { return(configArgs); } foreach (var property in typeof(ScriptCsArgs).GetProperties(BindingFlags.Instance | BindingFlags.Public)) { var configValue = property.GetValue(configArgs); var commandValue = property.GetValue(commandArgs); var defaultValue = GetPropertyDefaultValue(property); if (!object.Equals(configValue, commandValue)) { if (!object.Equals(commandValue, defaultValue)) { property.SetValue(configArgs, commandValue); } else { if (IsCommandLinePresent(splitResult.CommandArguments, property)) { property.SetValue(configArgs, commandValue); } } } } return(configArgs); }
/// <summary>Initializes a new instance of the <see cref="T:System.Object" /> class.</summary> public RefTaggedResult(SplitResult splitResult, string tag) { SplitResult = splitResult; Tag = tag; }