public ReportForm(ExperimentResult experimentResult) { InitializeComponent(); lbVariableCount.Text = experimentResult.VariableCount.ToString(); lbKonyncCount.Text = experimentResult.KonyncCount.ToString(); lbFreeMembers.Text = experimentResult.FreeMembers.ToString(); lbExperimentRepeat.Text = experimentResult.ExperimentRepeat.ToString(); lbTeoreticSatisfiability.Text = experimentResult.TeoreticSatisfiability.ToString(); float meanPracticSatisf = experimentResult.PercentageSatisfiability.Sum() / experimentResult.PercentageSatisfiability.Count; lbPracticSatisfiability.Text = meanPracticSatisf.ToString(); lbRelation.Text = ((Math.Abs(meanPracticSatisf - experimentResult.TeoreticSatisfiability) * 100) / meanPracticSatisf).ToString(); GraphPane graphPane = this.zedGraphControl1.GraphPane; graphPane.CurveList.Clear(); graphPane.Title.Text = "Demonstration of experiment by calculation of realizability of function"; graphPane.XAxis.Title.Text = "Experiment Number"; graphPane.YAxis.Title.Text = "Probability"; PointPairList points = new PointPairList(); PointPairList list3 = new PointPairList(); Random random = new Random(); for (int i = 0; i < experimentResult.ExperimentRepeat; i++) { double x = i + 1.0; double z = 5.0; points.Add(x, (double)experimentResult.TeoreticSatisfiability, z); list3.Add(x, (double)experimentResult.PercentageSatisfiability[i], z); } BarItem item = graphPane.AddBar("Teoretic value", points, Color.Blue); BarItem item2 = graphPane.AddBar("Practic value", list3, Color.Red); graphPane.BarSettings.MinBarGap = 0f; graphPane.XAxis.Scale.Max = experimentResult.ExperimentRepeat + 1; this.zedGraphControl1.AxisChange(); this.zedGraphControl1.Invalidate(); }
void BackgroundWorkerDoWork(object sender, DoWorkEventArgs e) { var experimentResult = new ExperimentResult { VariableCount = variableCount, KonyncCount = iKonyncCount, FreeMembers = iFreeMembers, ExperimentRepeat = iExperimentRepeat }; if (bIsAlternative) { experimentResult.TeoreticSatisfiability = TeoreticFunctions.TeoreticFunctions.TeoreticProbabilityWithLogariphm(variableCount, iKonyncCount, iFreeMembers); } else { experimentResult.TeoreticSatisfiability = TeoreticFunctions.TeoreticFunctions.FindTeoreticProbabilityWithRepeatAlternative(variableCount, iKonyncCount, iFreeMembers); } Log.Debug("-------------------------New checking at " + DateTime.Now); Log.Debug("Count minterms - " + iKonyncCount); Log.Debug("Count free members - " + iFreeMembers); Log.Debug("Count parameters - " + variableCount); for (int experimentIndex = 0; experimentIndex < iExperimentRepeat; experimentIndex++) { Log.Debug("------------------Next generation"); int num = iKonyncCount; int countParams = variableCount; int countFreeMembers = iFreeMembers; uint countUniqueConjunction = 0; var buffer = new byte[BinaryCounter.BinaryCounter.FindSizeBitMapForCountParams(countParams)]; Log.DebugFormat("Size of mass = {0}", buffer.Length); int[] freeMembersIndex = BinaryCounter.BinaryCounter.FindFreeMembersIndex(countParams, countFreeMembers); uint mask = BinaryCounter.BinaryCounter.GetMask(freeMembersIndex); uint rotatedMask = BinaryCounter.BinaryCounter.GetRotateMask(mask); Log.DebugFormat("Mask = {0}", mask); Log.DebugFormat("RotateMask = {0}", rotatedMask); for (int i = 0; (i < num) && (!e.Cancel); i++) { uint generatedConjunction = BinaryCounter.BinaryCounter.GetRandomСonjunction(countParams); Log.DebugFormat("Generate Digit = {0}", generatedConjunction); foreach (var recoveredConjunction in BinaryCounter.BinaryCounter.RecoveredConjunction(mask, rotatedMask, generatedConjunction, countFreeMembers)) { uint byteIndex = recoveredConjunction / 8; Log.Debug(" PereborDigit = " + recoveredConjunction); Log.Debug(" Index = " + byteIndex); byte conjunctionByte = BinaryCounter.BinaryCounter.GetCheckedBitrForConjunction(recoveredConjunction); if ((buffer[byteIndex] & conjunctionByte) == 0) countUniqueConjunction++; Log.Debug(" Count = " + countUniqueConjunction); buffer[byteIndex] |= conjunctionByte; } } float num18 = Convert.ToSingle(countUniqueConjunction) / (1 << variableCount); Log.Debug("Total = " + num18); // записываем результаты и отображаемся experimentResult.PercentageSatisfiability.Add(num18); backgroundWorker.ReportProgress(experimentIndex); if (backgroundWorker.CancellationPending) { e.Cancel = true; break; } } e.Result = experimentResult; }