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); */ }
private string GetFilenameTest(Testcase testcase, VariableCache.ConstraintMode constraintMode, PdlFilter.Filtermode filtermode) { return String.Format("C:/Users/alexander/Desktop/results/{0}.{1}.{2}.csv", testcase.id, constraintMode, filtermode); }
public override void ToSMTConstraints(Context z3Context, Solver z3Solver, int alphabetSize, VariableCache variableGenerator) { this.constraintVariable = variableGenerator.GetFreshVariableName(); ArithExpr myVariable = z3Context.MkIntConst(this.constraintVariable); z3Solver.Assert(z3Context.MkLe(z3Context.MkInt(0), myVariable)); z3Solver.Assert(z3Context.MkLe(myVariable, z3Context.MkInt(1))); }
public Measurement.MeasurementResultSet RunBenchmark(Testcase testcase, VariableCache.ConstraintMode constraintMode, PdlFilter.Filtermode filtermode, IDictionary<PDLPred, Measurement.SingleMeasurementResult> cache, IDictionary<Automaton<BDD>, Measurement.SingleMeasurementResult> automatonCache) { ICollection<PDLPred> bareResults = new LinkedList<PDLPred>(); System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch(); stopwatch.Start(); foreach(PDLPred result in ProblemGeneration.GeneratePDLWithEDn(testcase.language, testcase.alphabet, constraintMode, filtermode)) { bareResults.Add(result); } stopwatch.Stop(); return new Measurement.MeasurementResultSet(testcase.language, bareResults, stopwatch.ElapsedMilliseconds, constraintMode, filtermode, new HashSet<char>(testcase.alphabet), cache, automatonCache); }
public abstract void ToSMTConstraints(Context z3Context, Solver z3Solver, int alphabetSize, VariableCache variableGenerator);
public override void ToSMTConstraints(Context z3Context, Solver z3Solver, int alphabetSize, VariableCache variableGenerator) { // Take a constraint variable just for good measure this.constraintVariable = variableGenerator.GetFreshVariableName(); ArithExpr myVariable = z3Context.MkIntConst(this.constraintVariable); z3Solver.Assert(z3Context.MkEq(myVariable, z3Context.MkInt(0))); }
private static void GenerateConstraints(CPDLPred choicePred, HashSet<char> alphabet, VariableCache.ConstraintMode constraintMode, Context z3Context, Solver z3Solver) { VariableCache variableGenerator = VariableCache.Create(constraintMode); choicePred.ToSMTConstraints(z3Context, z3Solver, alphabet.Count, variableGenerator); variableGenerator.GenerateAdditionalConstraints(z3Context, z3Solver); }
public override void ToSMTConstraints(Context z3Context, Solver z3Solver, int alphabetSize, VariableCache variableGenerator) { this.constraintVariable = variableGenerator.GetFreshVariableName(); ArithExpr myVariable = z3Context.MkIntConst(this.constraintVariable); z3Solver.Assert(z3Context.MkEq(myVariable, z3Context.MkInt(0))); this.originalPosition.ToSMTConstraints(z3Context, z3Solver, alphabetSize, variableGenerator); this.originalSet.ToSMTConstraints(z3Context, z3Solver, alphabetSize, variableGenerator); }
private static IEnumerable<PDLPred> Concretize(CPDLPred choicePred, HashSet<char> alphabet, VariableCache.ConstraintMode constraintMode) { Context z3Context = new Context(); Solver z3Solver = z3Context.MkSolver(); GenerateConstraints(choicePred, alphabet, constraintMode, z3Context, z3Solver); List<char> alphabetList = new List<char>(alphabet); IEnumerable<string> choiceVariables = choicePred.GetChoiceVariables(); while (z3Solver.Check() == Status.SATISFIABLE) { yield return choicePred.InterpretModel(alphabetList, z3Context, z3Solver.Model); ExcludeLastModel(choiceVariables, z3Context, z3Solver); } }
public static IEnumerable<PDLPred> GeneratePDLWithEDn(PDLPred phi, IEnumerable<char> alphabet, VariableCache.ConstraintMode constConst, PdlFilter.Filtermode filtermode) { CPDLPred choiceTree = phi.GetCPDL(); HashSet<char> alphabetHashSet = new HashSet<char>(alphabet); PdlFilter filter = PdlFilter.Create(filtermode, phi, alphabetHashSet); // Concretize yields all feasible concretizations of the choiceTree foreach(PDLPred candidate in Concretize(choiceTree, alphabetHashSet, constConst)) { if (filter.KeepPredicate(candidate) == true) { yield return candidate; } } }
public void ToSMTConstraints(Context z3Context, Solver z3Solver, int alphabetSize, VariableCache variableGenerator) { this.constraintVariable = variableGenerator.GetCharChoiceVariable(this.originalValue); ArithExpr myVariable = z3Context.MkIntConst(this.constraintVariable); z3Solver.Assert(z3Context.MkLe(z3Context.MkInt(0), myVariable)); z3Solver.Assert(z3Context.MkLe(myVariable, z3Context.MkInt(alphabetSize - 1))); }
public void ToSMTConstraints(Context z3Context, Solver z3Solver, int alphabetSize, VariableCache variableGenerator) { this.constraintVariable = variableGenerator.GetIntegerChoiceVariable(this.originalValue); ArithExpr myVariable = z3Context.MkIntConst(this.constraintVariable); // For now, just concretize in the range [floor(origVal / 2), ceil(origVal * 1.5)] z3Solver.Assert(z3Context.MkLe(z3Context.MkInt((int)(this.originalValue * 0.5)), myVariable)); z3Solver.Assert(z3Context.MkLe(myVariable, z3Context.MkInt((int)(this.originalValue * 1.5)))); if (this.includeZero == false) { z3Solver.Assert(z3Context.MkNot(z3Context.MkEq(z3Context.MkInt(0), myVariable))); } }
public void ToSMTConstraints(Context z3Context, Solver z3Solver, int alphabetSize, VariableCache variableGenerator) { this.constraintVariable = variableGenerator.GetStringChoiceVariable(this.originalValue); ArithExpr myVariable = z3Context.MkIntConst(this.constraintVariable); z3Solver.Assert(z3Context.MkLe(z3Context.MkInt(0), myVariable)); /* We have |s| * |\Sigma| options for concretizing this string * Thus, since we are 0-based: originalValue.Length * alphabet - 1 */ z3Solver.Assert(z3Context.MkLe(myVariable, z3Context.MkInt(this.originalValue.Length * alphabetSize - 1))); }