Example #1
0
        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();
        }
Example #2
0
        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;
        }