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); }
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); */ }
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); }