private SortedDictionary<double, SubGraphsInfo> AnalyzeExtendedHierarchic(Int16 currentLevel) { SortedDictionary<double, SubGraphsInfo> result = new SortedDictionary<double, SubGraphsInfo>(); Int16 p = Int16.Parse(this.branchIndexCmb.Text); Int16 maxLevel = Int16.Parse(this.maxLevelCmb.Text); double muLow = Double.Parse(this.muRangeLowExtendedTxt.Text); double muHigh = Double.Parse(this.muRangeHighExtendedTxt.Text); double muDelta = Double.Parse(this.deltaExtendedTxt.Text); int realizationCount = (Int32)this.realizationCountNum.Value; HierarchicGenerator hGenerator = new HierarchicGenerator(); HierarchicAnalyzer hAnalyzer; double muTemp = muLow; SubGraphsInfo tempInfo = new SubGraphsInfo(); while (muTemp <= muHigh) { double avgOrder = 0; for (int r = 0; r < realizationCount; ++r) { hGenerator.GenerateTreeWithProbability(p, maxLevel, 0, currentLevel, muTemp, new ProbabilityCounter(ProbabilityFunctions.Classical)); hAnalyzer = new HierarchicAnalyzer((HierarchicContainer)hGenerator.Container); avgOrder += hAnalyzer.GetConnSubGraph().Last().Key; } double avgValue = avgOrder / (double)realizationCount; tempInfo.avgOrder = avgValue / Math.Pow(p, currentLevel); result.Add(muTemp, tempInfo); muTemp += muDelta; } return result; }
private void startGlobal_Click(object sender, EventArgs e) { Int16 p = Int16.Parse(this.branchIndexCmb.Text); Int16 maxLevel = Int16.Parse(this.maxLevelCmb.Text); int realizationCount = (Int32)this.realizationCountNum.Value; double muLow = Double.Parse(this.muRangeLowExtendedTxt.Text); double muHigh = Double.Parse(this.muRangeHighExtendedTxt.Text); double muDelta = Double.Parse(this.deltaExtendedTxt.Text); ResultResearch result = new ResultResearch(); result.Name = this.jobName; result.ModelType = typeof(HierarchicModel); result.Delta = muDelta; result.RealizationCount = realizationCount; result.Function = this.probabilityFunctionCmb.Text; result.GenerationParams[GenerationParam.BranchIndex] = p; result.GenerationParams[GenerationParam.Level] = maxLevel; result.Size = (int)Math.Pow(p, maxLevel); result.Result.Add(maxLevel, new SortedDictionary<double, SubGraphsInfo>()); Dictionary<GenerationParam, object> genParameters = new Dictionary<GenerationParam, object>(); genParameters.Add(GenerationParam.BranchIndex, p); genParameters.Add(GenerationParam.Level, maxLevel); HierarchicGenerator hGenerator = new HierarchicGenerator(); HierarchicAnalyzer hAnalyzer; double muTemp = muLow; SortedDictionary<int, int> subGraphInfo = new SortedDictionary<int,int>(); while (muTemp <= muHigh) { SubGraphsInfo tempInfo = new SubGraphsInfo(); for (int r = 0; r < realizationCount; ++r) { genParameters[GenerationParam.Mu] = muTemp; hGenerator.Generation(genParameters); hAnalyzer = new HierarchicAnalyzer((HierarchicContainer)hGenerator.Container); subGraphInfo = hAnalyzer.GetConnSubGraph(); tempInfo.avgOrder += subGraphInfo.Last().Key; tempInfo.avgOrderCount += subGraphInfo.Last().Value; if (subGraphInfo.Count > 1) { subGraphInfo.Remove(subGraphInfo.Last().Key); tempInfo.secondMax += subGraphInfo.Last().Key; tempInfo.secondMaxCount += subGraphInfo.Last().Value; } if (subGraphInfo.Count > 2) { subGraphInfo.Remove(subGraphInfo.Last().Key); tempInfo.avgOrderRest += subGraphInfo.Average(x => x.Key); } } tempInfo.avgOrder /= (double)realizationCount; tempInfo.avgOrder /= result.Size; tempInfo.avgOrderCount /= (double)realizationCount; tempInfo.secondMax /= (double)realizationCount; tempInfo.secondMax /= result.Size; tempInfo.secondMaxCount /= (double)realizationCount; tempInfo.avgOrderRest /= (double)realizationCount; tempInfo.avgOrderRest /= result.Size; result.Result[maxLevel].Add(muTemp, tempInfo); muTemp += muDelta; } XMLResultStorage storage = new XMLResultStorage(Options.StorageDirectory); storage.SaveResearch(result); MessageBox.Show("Results are saved succesfully!"); }