private static void PrintDFA(PDLPred phi, string name, List <char> alph)
        {
            HashSet <char> al     = new HashSet <char>(alph);
            var            solver = new CharSetSolver(BitWidth.BV64);

            PrintDFA(phi.GetDFA(al, solver), name, al);
        }
Exemplo n.º 2
0
        public readonly long elapsedTime; // in milliseconds

        //public readonly double densityDiffAverage, densityDifferenceDeviation;
        //public readonly double editDistanceAverage, editDistanceDeviation;

        public MeasurementResultSet(PDLPred originalFormula, IEnumerable <PDLPred> generatedFormulas, long time, VariableCache.ConstraintMode constraintmode,
                                    PdlFilter.Filtermode filtermode, HashSet <char> alphabet, IDictionary <PDLPred, SingleMeasurementResult> cache,
                                    IDictionary <Automaton <BDD>, SingleMeasurementResult> automatonCache)
        {
            this.originalFormula   = originalFormula;
            this.alphabet          = alphabet;
            this.originalAutomaton = originalFormula.GetDFA(alphabet, new CharSetSolver());

            this.constraintmode = constraintmode;
            this.filtermode     = filtermode;

            this.elapsedTime = time;

            this.results = new List <SingleMeasurementResult>();

            foreach (PDLPred generatedFormula in generatedFormulas)
            {
                SingleMeasurementResult result;
                if (cache.ContainsKey(generatedFormula))
                {
                    result = cache[generatedFormula];
                }
                else
                {
                    result = SingleMeasurementResult.Create(this.originalAutomaton, generatedFormula, this.alphabet, automatonCache);
                    cache[generatedFormula] = result;
                }
                this.results.Add(result);
            }

            // Compute statistics

            /*
             * double densityDiffSum = 0;
             * int editDistanceSum = 0;
             *
             * foreach (SingleMeasurementResult result in this.results)
             * {
             *  densityDiffSum += result.densityDiff;
             *  editDistanceSum += result.editDistance;
             * }
             *
             * this.densityDiffAverage = ((double)densityDiffSum) / ((double)this.results.Count);
             * this.editDistanceAverage = ((double)editDistanceSum) / ((double)this.results.Count);
             *
             * double densityDiffDeviation = 0;
             * double editDistanceDeviation = 0;
             * foreach (SingleMeasurementResult result in this.results)
             * {
             *  densityDiffDeviation += Math.Pow(result.densityDiff - this.densityDiffAverage, 2.0);
             *  editDistanceDeviation += Math.Pow(((double)result.editDistance) - this.editDistanceAverage, 2.0);
             * }
             * densityDiffDeviation /= this.results.Count;
             * densityDiffDeviation = Math.Sqrt(densityDiffDeviation);
             *
             * editDistanceDeviation /= this.results.Count;
             * editDistanceDeviation = Math.Sqrt(editDistanceDeviation);
             */
        }
        public readonly long elapsedTime; // in milliseconds

        //public readonly double densityDiffAverage, densityDifferenceDeviation;
        //public readonly double editDistanceAverage, editDistanceDeviation;

        public MeasurementResultSet(PDLPred originalFormula, IEnumerable<PDLPred> generatedFormulas, long time, VariableCache.ConstraintMode constraintmode, 
            PdlFilter.Filtermode filtermode, HashSet<char> alphabet, IDictionary<PDLPred, SingleMeasurementResult> cache,
            IDictionary<Automaton<BDD>, SingleMeasurementResult> automatonCache)
        {
            this.originalFormula = originalFormula;
            this.alphabet = alphabet;
            this.originalAutomaton = originalFormula.GetDFA(alphabet, new CharSetSolver());

            this.constraintmode = constraintmode;
            this.filtermode = filtermode;

            this.elapsedTime = time;

            this.results = new List<SingleMeasurementResult>();

            foreach (PDLPred generatedFormula in generatedFormulas)
            {
                SingleMeasurementResult result;
                if (cache.ContainsKey(generatedFormula))
                {
                    result = cache[generatedFormula];
                }
                else
                {
                    result = SingleMeasurementResult.Create(this.originalAutomaton, generatedFormula, this.alphabet, automatonCache);
                    cache[generatedFormula] = result;
                }
                this.results.Add(result);
            }

            // Compute statistics
            /*
            double densityDiffSum = 0;
            int editDistanceSum = 0;

            foreach (SingleMeasurementResult result in this.results)
            {
                densityDiffSum += result.densityDiff;
                editDistanceSum += result.editDistance;
            }

            this.densityDiffAverage = ((double)densityDiffSum) / ((double)this.results.Count);
            this.editDistanceAverage = ((double)editDistanceSum) / ((double)this.results.Count);

            double densityDiffDeviation = 0;
            double editDistanceDeviation = 0;
            foreach (SingleMeasurementResult result in this.results)
            {
                densityDiffDeviation += Math.Pow(result.densityDiff - this.densityDiffAverage, 2.0);
                editDistanceDeviation += Math.Pow(((double)result.editDistance) - this.editDistanceAverage, 2.0);
            }
            densityDiffDeviation /= this.results.Count;
            densityDiffDeviation = Math.Sqrt(densityDiffDeviation);

            editDistanceDeviation /= this.results.Count;
            editDistanceDeviation = Math.Sqrt(editDistanceDeviation);
            */
        }
Exemplo n.º 4
0
        public static SingleMeasurementResult Create(Automaton <BDD> originalAutomaton, PDLPred generatedFormula, HashSet <char> alphabet, IDictionary <Automaton <BDD>, SingleMeasurementResult> cache)
        {
            CharSetSolver           solver             = new CharSetSolver();
            Automaton <BDD>         generatedAutomaton = generatedFormula.GetDFA(alphabet, solver);
            SingleMeasurementResult returnValue;

            if (cache.ContainsKey(generatedAutomaton))
            {
                returnValue = cache[generatedAutomaton];
                System.Diagnostics.Debug.WriteLine("Automaton Cache Hit");
            }
            else
            {
                returnValue = new SingleMeasurementResult(originalAutomaton, generatedFormula, generatedAutomaton, alphabet);
                cache[generatedAutomaton] = returnValue;
                System.Diagnostics.Debug.WriteLine("Automaton Cache Miss");
            }
            return(returnValue);
        }
        private List <Pair <PDLPred, long> > SynthTimer(PDLPred phi, HashSet <char> al, StringBuilder sb)
        {
            PDLEnumerator pdlEnumerator = new PDLEnumerator();

            var       solver = new CharSetSolver(BitWidth.BV64);
            Stopwatch sw     = new Stopwatch();
            var       dfa    = phi.GetDFA(al, solver);

            List <Pair <PDLPred, long> > predList = new List <Pair <PDLPred, long> >();
            List <PDLPred> phiList = new List <PDLPred>();

            PDLPred v;
            var     func = new Func <PDLPred>(() =>
            {
                sw.Start();
                foreach (var p in pdlEnumerator.SynthesizePDL(al, dfa, solver, new StringBuilder(), 5000))
                {
                    sw.Stop();
                    predList.Add(new Pair <PDLPred, long>(p, sw.ElapsedMilliseconds));
                    sw.Start();
                }
                return(null);
            });


            var test = TryExecute(func, timeout, out v);

            phi.ToString(sb);
            sb.AppendLine();
            sb.AppendLine("=");
            foreach (var pair in predList)
            {
                sb.AppendLine();
                pair.First.ToString(sb);
                sb.AppendLine();
                sb.AppendLine("Elapsed Time: " + pair.Second + " ms");
            }
            return(predList);
        }
        private List <Pair <int, Pair <PDLPred, long> > > SynthTimer(PDLPred phi, HashSet <char> al, StringBuilder sb)
        {
            PDLEnumerator pdlEnumerator = new PDLEnumerator();
            var           solver        = new CharSetSolver(BitWidth.BV64);
            Stopwatch     sw            = new Stopwatch();
            var           dfa           = DFAUtilities.normalizeDFA(phi.GetDFA(al, solver)).First;

            List <Pair <int, Pair <PDLPred, long> > > predList = new List <Pair <int, Pair <PDLPred, long> > >();
            List <PDLPred> phiList = new List <PDLPred>();

            PDLPred v;
            var     func = new Func <PDLPred>(() =>
            {
                foreach (var state in dfa.States)
                {
                    var dfaSt = Automaton <BDD> .Create(dfa.InitialState, new int[] { state }, dfa.GetMoves());
                    dfaSt     = dfaSt.Determinize(solver).Minimize(solver);
                    sw.Reset();
                    sw.Start();
                    foreach (var p in pdlEnumerator.SynthesizePDL(al, dfaSt, solver, new StringBuilder(), 3000))
                    {
                        sw.Stop();
                        predList.Add(new Pair <int, Pair <PDLPred, long> >(state, new Pair <PDLPred, long>(p, sw.ElapsedMilliseconds)));
                        break;
                    }
                }
                return(null);
            });


            var test = TryExecute(func, timeout, out v);

            sb.Append("Language: ");
            phi.ToString(sb);
            sb.AppendLine();
            //sb.AppendLine("States: "+dfa.StateCount);
            sb.AppendLine();
            sb.AppendLine("---------------------------");
            sb.AppendLine("STATE SUMMARY");
            sb.AppendLine("---------------------------");
            var coveredStates = new HashSet <int>();

            foreach (var pair in predList)
            {
                sb.AppendLine();
                coveredStates.Add(pair.First);
                sb.AppendLine("State " + pair.First + (((dfa.GetFinalStates()).Contains(pair.First))?(" is final"):("")));
                sb.AppendLine("Elapsed Time: " + pair.Second.Second + " ms");
                sb.AppendLine("Formula: ");
                pair.Second.First.ToString(sb);
                sb.AppendLine();
            }
            sb.AppendLine();
            foreach (var state in dfa.States)
            {
                if (!coveredStates.Contains(state))
                {
                    sb.AppendLine(string.Format("description for state {0} not found", state));
                }
            }
            return(predList);
        }
 public static SingleMeasurementResult Create(Automaton<BDD> originalAutomaton, PDLPred generatedFormula, HashSet<char> alphabet, IDictionary<Automaton<BDD>, SingleMeasurementResult> cache)
 {
     CharSetSolver solver = new CharSetSolver();
     Automaton<BDD> generatedAutomaton = generatedFormula.GetDFA(alphabet, solver);
     SingleMeasurementResult returnValue;
     if (cache.ContainsKey(generatedAutomaton))
     {
         returnValue = cache[generatedAutomaton];
         System.Diagnostics.Debug.WriteLine("Automaton Cache Hit");
     }
     else
     {
         returnValue = new SingleMeasurementResult(originalAutomaton, generatedFormula, generatedAutomaton, alphabet);
         cache[generatedAutomaton] = returnValue;
         System.Diagnostics.Debug.WriteLine("Automaton Cache Miss");
     }
     return returnValue;
 }
        public override bool KeepPredicate(PDLPred candidate)
        {
            Automaton<BDD> candidateDfa = candidate.GetDFA(this.alphabet, this.charsetSolver);

            int stateDifference = Math.Abs(numOriginalStates - candidateDfa.StateCount);
            return IsAcceptableStateDifference(stateDifference);
        }
 public DfaStateNumberFilter(PDLPred original, HashSet<char> alphabet)
 {
     this.charsetSolver = new CharSetSolver();
     this.alphabet = alphabet;
     this.numOriginalStates = original.GetDFA(alphabet, this.charsetSolver).StateCount;
 }
        private static void PrintDFA(PDLPred phi, string name, List<char> alph)
        {
            HashSet<char> al = new HashSet<char>(alph);
            var solver = new CharSetSolver(BitWidth.BV64);

            PrintDFA(phi.GetDFA(al, solver), name, al);
        }