public void TextP48() { var solver = new CharSetSolver(CharacterEncoding.Unicode); var alph = new List <char> { 'a', 'b' }; var al = new HashSet <char>(alph); var moves = new List <Move <CharSet> >(); var a = solver.MkCharConstraint(false, 'a'); var b = solver.MkCharConstraint(false, 'b'); moves.Add(new Move <CharSet>(0, 1, a)); moves.Add(new Move <CharSet>(0, 4, b)); moves.Add(new Move <CharSet>(1, 4, a)); moves.Add(new Move <CharSet>(1, 2, b)); moves.Add(new Move <CharSet>(2, 3, a)); moves.Add(new Move <CharSet>(2, 3, b)); moves.Add(new Move <CharSet>(3, 2, a)); moves.Add(new Move <CharSet>(3, 2, b)); moves.Add(new Move <CharSet>(4, 4, a)); moves.Add(new Move <CharSet>(4, 4, b)); var dfa = Automaton <CharSet> .Create(0, new int[] { 2 }, moves).Determinize(solver).Minimize(solver); var sb = new StringBuilder(); DFAUtilities.printDFA(dfa, al, sb); System.Console.WriteLine(sb); }
private static void GradeMetric(int probId, long timeout) { string dir = "C:/Users/Dileep/Desktop/Attempts/" + probId + "/"; string ansFile = "C:/Users/Dileep/Desktop/Answers/ans-" + probId + ".xml"; List <char> alph = new List <char> { 'a', 'b' }; HashSet <char> al = new HashSet <char>(alph); CharSetSolver solver = new CharSetSolver(BitWidth.BV64); var dfa_correct = DFAUtilities.parseDFAfromTutor(ansFile, solver); using (StreamReader reader = new StreamReader(dir + "clean.txt")) using (StreamWriter writer = new StreamWriter(dir + "Tool-Ind-" + probId + ".txt", false)) { string id; string[] file; while ((id = reader.ReadLine()) != null) { //CharSetSolver solver = new CharSetSolver(BitWidth.BV64); file = Directory.GetFiles(dir, id + ".xml", System.IO.SearchOption.AllDirectories); Console.WriteLine(file[0]); var dfa = DFAUtilities.parseDFAfromEvent(file[0], solver); var g1 = Grading.GetGrade(dfa_correct.Second, dfa.Second, al, solver, timeout, 10, FeedbackLevel.Minimal, true, false, false); var g2 = Grading.GetGrade(dfa_correct.Second, dfa.Second, al, solver, timeout, 10, FeedbackLevel.Minimal, false, false, true); var g3 = Grading.GetGrade(dfa_correct.Second, dfa.Second, al, solver, timeout, 10, FeedbackLevel.Minimal, false, true, false); Console.WriteLine("---- {0},{1},{2},{3}", id, g1.First, g2.First, g3.First); writer.WriteLine("{0},{1},{2},{3}", id, g1.First, g2.First, g3.First); } } }
//create dotfiles for all attempts private static void CreateDotFiles(int probId) { string fromDir = "C:/Users/Dileep/Desktop/Attempts/" + probId + "/"; string toDir = "C:/Users/Dileep/Desktop/Graded/" + probId + "/"; Directory.CreateDirectory(toDir); var files = Directory.GetFiles(fromDir, "*.xml", System.IO.SearchOption.AllDirectories); string outputFile; foreach (string inputFile in files) { outputFile = toDir + Path.GetFileNameWithoutExtension(inputFile); var solver = new CharSetSolver(BitWidth.BV64); try { var aut = DFAUtilities.parseDFAfromEvent(inputFile, solver); solver.SaveAsDot(aut.Second, "second", outputFile); } catch (System.FormatException e) { Console.WriteLine("EXCEPTION: {0}", e); Console.WriteLine("Failed: {0}", Path.GetFileNameWithoutExtension(inputFile)); } } }
public XElement ComputeFeedbackRegexp(XElement regexCorrectDesc, XElement regexAttemptDesc, XElement alphabet, XElement feedbackLevel, XElement enabledFeedbacks, XElement maxGrade) { CharSetSolver solver = new CharSetSolver(BitWidth.BV64); try { var dfaCorrectPair = DFAUtilities.parseRegexFromXML(regexCorrectDesc, alphabet, solver); var dfaAttemptPair = DFAUtilities.parseRegexFromXML(regexAttemptDesc, alphabet, solver); var level = (FeedbackLevel)Enum.Parse(typeof(FeedbackLevel), feedbackLevel.Value, true); var enabList = (enabledFeedbacks.Value).Split(',').ToList <String>(); bool dfaedit = false, moseledit = false, density = true; int maxG = int.Parse(maxGrade.Value); var feedbackGrade = DFAGrading.GetGrade(dfaCorrectPair.Second, dfaAttemptPair.Second, dfaCorrectPair.First, solver, 1500, maxG, level, dfaedit, moseledit, density); var feedString = "<ul>"; foreach (var feed in feedbackGrade.Second) { feedString += string.Format("<li>{0}</li>", feed); } feedString += "</ul>"; return(XElement.Parse(string.Format("<div><grade>{0}</grade><feedback>{1}</feedback></div>", feedbackGrade.First, feedString))); } catch (PDLException pdlex) { return(XElement.Parse(string.Format("<div>Error: {0} </div>", pdlex.Message))); } }
//lookup clean.txt, random grade, print private static void RandomGrade(int probId) { string dir = "C:/Users/Dileep/Desktop/Attempts/" + probId + "/"; string ansFile = "C:/Users/Dileep/Desktop/Answers/ans-" + probId + ".xml"; List <char> alph = new List <char> { 'a', 'b' }; HashSet <char> al = new HashSet <char>(alph); CharSetSolver solver = new CharSetSolver(BitWidth.BV64); var dfa_correct = DFAUtilities.parseDFAfromTutor(ansFile, solver); RandomGen.SetSeedFromSystemTime(); using (StreamReader reader = new StreamReader(dir + "clean.txt")) using (StreamWriter writer = new StreamWriter(dir + "Random-" + probId + ".txt")) { string id; while ((id = reader.ReadLine()) != null) { //CharSetSolver solver = new CharSetSolver(BitWidth.BV64); //file = Directory.GetFiles(dir, id + ".xml", System.IO.SearchOption.AllDirectories); //Console.WriteLine(file[0]); //var dfa = DFAUtilities.parseDFAfromEvent(file[0], solver); //var g = DFAGrading.GetGrade(dfa_correct.Second, dfa.Second, al, solver, timeout, 10); var g = RandomGen.GetNormal(6.85, 3.00); g = Math.Max(Math.Min(g, 10.00), 0.00); g = Math.Round(g); Console.WriteLine("---- {0},{1}", id, g); writer.WriteLine("{0},{1}", id, g); } } }
public XElement ComputeFeedbackNFAXML(XElement nfaCorrectDesc, XElement nfaAttemptDesc, XElement maxGrade, XElement feedbackLevel, XElement enabledFeedbacks, XElement userId) { #region Check if item is in cache StringBuilder key = new StringBuilder(); key.Append("feed"); key.Append(nfaCorrectDesc.ToString()); key.Append(nfaAttemptDesc.ToString()); key.Append(feedbackLevel.ToString()); key.Append(enabledFeedbacks.ToString()); string keystr = key.ToString(); var cachedValue = HttpContext.Current.Cache.Get(key.ToString()); if (cachedValue != null) { HttpContext.Current.Cache.Remove(keystr); HttpContext.Current.Cache.Add(keystr, cachedValue, null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromDays(30), System.Web.Caching.CacheItemPriority.Normal, null); return((XElement)cachedValue); } #endregion CharSetSolver solver = new CharSetSolver(BitWidth.BV64); //Read input var nfaCorrectPair = DFAUtilities.parseNFAFromXML(nfaCorrectDesc, solver); var nfaAttemptPair = DFAUtilities.parseNFAFromXML(nfaAttemptDesc, solver); var level = (FeedbackLevel)Enum.Parse(typeof(FeedbackLevel), feedbackLevel.Value, true); var enabList = (enabledFeedbacks.Value).Split(',').ToList <String>(); var maxG = int.Parse(maxGrade.Value); //Use this for generating 2 classes of feedback for reyjkiavik study var studentIdModule = int.Parse(userId.Value) % 2; //if (studentIdModule == 0) // level = FeedbackLevel.Minimal; //else // level = FeedbackLevel.Hint; //Give hints to everyone level = FeedbackLevel.Hint; //Compute feedback var feedbackGrade = NFAGrading.GetGrade(nfaCorrectPair.Second, nfaAttemptPair.Second, nfaCorrectPair.First, solver, 1500, maxG, level); //Pretty print feedback var feedString = "<ul>"; foreach (var feed in feedbackGrade.Second) { feedString += string.Format("<li>{0}</li>", feed); } feedString += "</ul>"; var output = string.Format("<div><grade>{0}</grade><feedString>{1}</feedString></div>", feedbackGrade.First, feedString); XElement outXML = XElement.Parse(output); //Add this element to chace and return it HttpContext.Current.Cache.Add(key.ToString(), outXML, null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromDays(30), System.Web.Caching.CacheItemPriority.Normal, null); return(outXML); }
private static Pair <HashSet <char>, Automaton <BDD> > ReadDFA(string name, CharSetSolver solver) { System.IO.StreamReader file = new System.IO.StreamReader(@"../../../TestPDL/DFAs/" + name + ".txt"); string res = file.ReadToEnd(); file.Close(); return(DFAUtilities.parseDFAFromString(res, solver)); }
private static void PrintDFA(Automaton <BDD> dfa, string name, HashSet <char> al) { var sb = new StringBuilder(); DFAUtilities.printDFA(dfa, al, sb); System.IO.StreamWriter file = new System.IO.StreamWriter(@"../../../TestPDL/DFAs/" + name + ".txt"); file.WriteLine(sb); file.Close(); }
public XElement ComputeFeedbackXML(XElement dfaCorrectDesc, XElement dfaAttemptDesc, XElement maxGrade, XElement feedbackLevel, XElement enabledFeedbacks) { #region Check if item is in cache StringBuilder key = new StringBuilder(); key.Append("feed"); key.Append(dfaCorrectDesc.ToString()); key.Append(dfaAttemptDesc.ToString()); key.Append(feedbackLevel.ToString()); key.Append(enabledFeedbacks.ToString()); string keystr = key.ToString(); var cachedValue = HttpContext.Current.Cache.Get(key.ToString()); if (cachedValue != null) { HttpContext.Current.Cache.Remove(keystr); HttpContext.Current.Cache.Add(keystr, cachedValue, null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromDays(30), System.Web.Caching.CacheItemPriority.Normal, null); return((XElement)cachedValue); } #endregion CharSetSolver solver = new CharSetSolver(BitWidth.BV64); //Read input var dfaCorrectPair = DFAUtilities.parseDFAFromXML(dfaCorrectDesc, solver); var dfaAttemptPair = DFAUtilities.parseDFAFromXML(dfaAttemptDesc, solver); var level = (FeedbackLevel)Enum.Parse(typeof(FeedbackLevel), feedbackLevel.Value, true); var enabList = (enabledFeedbacks.Value).Split(',').ToList <String>(); //bool dfaedit = enabList.Contains("dfaedit"), moseledit = enabList.Contains("moseledit"), density = enabList.Contains("density"); bool dfaedit = true, moseledit = true, density = true; var maxG = int.Parse(maxGrade.Value); //Compute feedback var feedbackGrade = DFAGrading.GetGrade(dfaCorrectPair.Second, dfaAttemptPair.Second, dfaCorrectPair.First, solver, 1500, maxG, level, dfaedit, density, moseledit); //Pretty print feedback var feedString = "<ul>"; foreach (var feed in feedbackGrade.Second) { feedString += string.Format("<li>{0}</li>", feed); break; } feedString += "</ul>"; //var output = string.Format("<result><grade>{0}</grade><feedString>{1}</feedString></result>", feedbackGrade.First, feedString); var outXML = new XElement("result", new XElement("grade", feedbackGrade.First), new XElement("feedString", XElement.Parse(feedString))); //XElement outXML = XElement.Parse(output); //Add this element to chace and return it HttpContext.Current.Cache.Add(key.ToString(), outXML, null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromDays(30), System.Web.Caching.CacheItemPriority.Normal, null); return(outXML); }
//private static void Grade private static int GradeSingle(string file1, string file2) { List <char> alph = new List <char> { 'a', 'b' }; HashSet <char> al = new HashSet <char>(alph); CharSetSolver solver = new CharSetSolver(BitWidth.BV64); var aut1 = DFAUtilities.parseDFAfromTutor(file1, solver); var aut2 = DFAUtilities.parseDFAfromEvent(file2, solver); var dfa1 = aut1.Second; var dfa2 = aut2.Second; return(Grading.GetGrade(dfa1, dfa2, al, solver, 20000, 10).First); }
public void ParseRegex() { try { CharSetSolver solver = new CharSetSolver(BitWidth.BV64); var al = new HashSet <char>(new char[] { 'a', 'b' }); DFAUtilities.parseRegexFromXML(XElement.Parse("<reg>-?</reg>"), XElement.Parse("<alphabet><symbol>a</symbol><symbol>b</symbol></alphabet>"), solver); } catch (PDLException e) { Console.WriteLine(e.Message); } }
//Cleaning Attempts of isomorphic consecutive submission //for each user if consecutively numbered mappedevents are IsEventEqual then keep a running max, when no next print private static int Clean() { // for each problem // for each user // look at file names in ascending int order // (if the current != last ( save last) ) update last int count = 0; string dir = "C:/Users/Dileep/Desktop/Attempts"; foreach (string p in Directory.GetDirectories(dir)) { var cleanWriter = new StreamWriter(p + "/clean.txt", false); foreach (string u in Directory.GetDirectories(p)) { string[] att = Directory.GetFiles(u); int[] attInt = att.Select(path => Convert.ToInt32(Path.GetFileNameWithoutExtension(path))).ToArray(); Array.Sort(attInt); int?last = null; foreach (int current in attInt) { if (last != null) { if (current == last + 1 && DFAUtilities.IsEventEqual(u + "/" + current + ".xml", u + "/" + last + ".xml")) { //dont save last } else { //save last cleanWriter.WriteLine(last); count++; } } last = current; } if (last != null) { cleanWriter.WriteLine(last); count++; } } cleanWriter.Close(); } return(count); }
public XElement CheckRegexp(XElement regexDesc, XElement alphabet) { CharSetSolver solver = new CharSetSolver(BitWidth.BV64); try { var dfaCorrectPair = DFAUtilities.parseRegexFromXML(regexDesc, alphabet, solver); return(XElement.Parse(string.Format("<div>CorrectRegex</div>"))); } catch (PDLException pdlex) { return(XElement.Parse(string.Format("<div>Error: {0} </div>", pdlex.Message))); } }
public XElement ComputeFeedbackNfaToDfa(XElement nfaCorrectDesc, XElement dfaAttemptDesc, XElement maxGrade) { #region Check if item is in cache StringBuilder key = new StringBuilder(); key.Append("feedNFADFA"); key.Append(nfaCorrectDesc.ToString()); key.Append(dfaAttemptDesc.ToString()); string keystr = key.ToString(); var cachedValue = HttpContext.Current.Cache.Get(key.ToString()); if (cachedValue != null) { HttpContext.Current.Cache.Remove(keystr); HttpContext.Current.Cache.Add(keystr, cachedValue, null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromDays(30), System.Web.Caching.CacheItemPriority.Normal, null); return((XElement)cachedValue); } #endregion CharSetSolver solver = new CharSetSolver(BitWidth.BV64); //Read input var nfaCorrectPair = DFAUtilities.parseNFAFromXML(nfaCorrectDesc, solver); var dfaCorrect = nfaCorrectPair.Second.RemoveEpsilons(solver.MkOr).Determinize(solver).Minimize(solver); var dfaAttemptPair = DFAUtilities.parseDFAFromXML(dfaAttemptDesc, solver); var level = FeedbackLevel.Hint; var maxG = int.Parse(maxGrade.Value); //Compute feedback var feedbackGrade = DFAGrading.GetGrade(dfaCorrect, dfaAttemptPair.Second, nfaCorrectPair.First, solver, 1500, maxG, level); //Pretty print feedback var feedString = "<ul>"; foreach (var feed in feedbackGrade.Second) { feedString += string.Format("<li>{0}</li>", feed); } feedString += "</ul>"; var output = string.Format("<div><grade>{0}</grade><feedString>{1}</feedString></div>", feedbackGrade.First, feedString); XElement outXML = XElement.Parse(output); //Add this element to chace and return it HttpContext.Current.Cache.Add(key.ToString(), outXML, null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromDays(30), System.Web.Caching.CacheItemPriority.Normal, null); return(outXML); }
private static int GradeTest(int probId, long timeout) { string fromDir = "C:/Users/Dileep/Desktop/Attempts/" + probId + "/"; string toDir = "C:/Users/Dileep/Desktop/Graded/" + probId + "/"; Directory.CreateDirectory(toDir); var files = Directory.GetFiles(fromDir, "*.xml", System.IO.SearchOption.AllDirectories); string outputFile; string ansFile = "C:/Users/Dileep/Desktop/Answers/" + "ans-" + probId + ".xml"; var solver = new CharSetSolver(BitWidth.BV64); var alph = new List <char> { 'a', 'b' }; var al = new HashSet <char>(alph); var ans_aut = DFAUtilities.parseDFAfromTutor(ansFile, solver); var dfa_correct = ans_aut.Second; TextWriter tmp = Console.Out; var count = 0; foreach (string inputFile in files) { outputFile = toDir + Path.GetFileNameWithoutExtension(inputFile) + "-grade.txt"; var aut = DFAUtilities.parseDFAfromEvent(inputFile, solver); var dfa = aut.Second; //var writer = new StreamWriter(outputFile, false); //Console.SetOut(writer); var gradeFeedback = Grading.GetGrade(dfa_correct, dfa, al, solver, timeout, 10); var grade = gradeFeedback.First; var feedback = gradeFeedback.Second; if (grade < 10) { count++; } Console.WriteLine("Wrong: #{0}", count); //writer.Close(); } return(count); //Console.SetOut(tmp); }
public void DileepTest3() { //XElement dfaCorrectDesc = XElement.Parse("<automaton xmlns=\"http://automatagrader.com/\"> <alphabet type=\"basic\"> <symbol>a</symbol><symbol>b</symbol> </alphabet> <stateSet> <state sid=\"0\"><label>0</label></state><state sid=\"1\"><label>1</label></state> </stateSet> <transitionSet> <transition tid=\"0\"> <from>0</from> <to>0</to> <read>b</read> <edgeDistance>30</edgeDistance> </transition><transition tid=\"1\"> <from>0</from> <to>1</to> <read>a</read> <edgeDistance>30</edgeDistance> </transition><transition tid=\"2\"> <from>1</from> <to>1</to> <read>b</read> <edgeDistance>30</edgeDistance> </transition><transition tid=\"3\"> <from>1</from> <to>0</to> <read>a</read> <edgeDistance>30</edgeDistance> </transition> </transitionSet> <acceptingSet> <state sid=\"1\"></state> </acceptingSet> <initState> <state sid=\"0\"></state> </initState> </automaton>"); XElement dfaCorrectDesc = XElement.Parse("<automaton xmlns=\"http://automatagrader.com/\"> <alphabet type=\"basic\"> <symbol>a</symbol><symbol>b</symbol> </alphabet> <stateSet> <state sid=\"0\"><label>0</label></state><state sid=\"1\"><label>1</label></state><state sid=\"2\"><label>2</label></state><state sid=\"3\"><label>3</label></state><state sid=\"4\"><label>4</label></state><state sid=\"5\"><label>5</label></state><state sid=\"6\"><label>6</label></state> </stateSet> <transitionSet> <transition tid=\"0\"> <from>0</from> <to>0</to> <read>b</read> <edgeDistance>30</edgeDistance> </transition><transition tid=\"1\"> <from>0</from> <to>1</to> <read>a</read> <edgeDistance>0</edgeDistance> </transition><transition tid=\"2\"> <from>1</from> <to>1</to> <read>a</read> <edgeDistance>30</edgeDistance> </transition><transition tid=\"3\"> <from>1</from> <to>2</to> <read>b</read> <edgeDistance>0</edgeDistance> </transition><transition tid=\"4\"> <from>2</from> <to>2</to> <read>b</read> <edgeDistance>30</edgeDistance> </transition><transition tid=\"5\"> <from>2</from> <to>3</to> <read>a</read> <edgeDistance>0</edgeDistance> </transition><transition tid=\"6\"> <from>3</from> <to>3</to> <read>a</read> <edgeDistance>30</edgeDistance> </transition><transition tid=\"7\"> <from>3</from> <to>4</to> <read>b</read> <edgeDistance>0</edgeDistance> </transition><transition tid=\"8\"> <from>4</from> <to>4</to> <read>b</read> <edgeDistance>30</edgeDistance> </transition><transition tid=\"9\"> <from>4</from> <to>5</to> <read>a</read> <edgeDistance>0</edgeDistance> </transition><transition tid=\"10\"> <from>5</from> <to>5</to> <read>a</read> <edgeDistance>30</edgeDistance> </transition><transition tid=\"11\"> <from>5</from> <to>6</to> <read>b</read> <edgeDistance>0</edgeDistance> </transition><transition tid=\"12\"> <from>6</from> <to>6</to> <read>a</read> <edgeDistance>30</edgeDistance> </transition><transition tid=\"13\"> <from>6</from> <to>6</to> <read>b</read> <edgeDistance>30</edgeDistance> </transition> </transitionSet> <acceptingSet> <state sid=\"4\"></state><state sid=\"5\"></state> </acceptingSet> <initState> <state sid=\"0\"></state> </initState> </automaton>"); XElement dfaAttemptDesc = XElement.Parse("<automaton xmlns=\"http://automatagrader.com/\"> <alphabet type=\"basic\"> <symbol>a</symbol><symbol>b</symbol> </alphabet> <stateSet> <state sid=\"0\"><label>0</label></state> </stateSet> <transitionSet> <transition tid=\"0\"> <from>0</from> <to>0</to> <read>a</read> <edgeDistance>30</edgeDistance> </transition><transition tid=\"1\"> <from>0</from> <to>0</to> <read>b</read> <edgeDistance>30</edgeDistance> </transition> </transitionSet> <acceptingSet> </acceptingSet> <initState> <state sid=\"0\"></state> </initState> </automaton>"); XElement feedbackLevel = XElement.Parse("<level xmlns=\"http://automatagrader.com/\">smallhint</level>"); XElement enabledFeedbacks = XElement.Parse("<metrics xmlns=\"http://automatagrader.com/\">dfaedit,moseledit,density</metrics>"); CharSetSolver solver = new CharSetSolver(BitWidth.BV64); //XElement dfaAttemptDesc = dfaAttemptHint.Element("Automaton"); //FeedbackLevel level = (FeedbackLevel)Convert.ToInt32(dfaAttemptHint.Element("FeedbackLevel").Value); var dfaCorrectPair = DFAUtilities.parseDFAFromXML(dfaCorrectDesc, solver); Console.WriteLine(feedbackLevel); Console.WriteLine(enabledFeedbacks); var dfaAttemptPair = DFAUtilities.parseDFAFromXML(dfaAttemptDesc, solver); //var sb = new StringBuilder(); var level = (FeedbackLevel)Enum.Parse(typeof(FeedbackLevel), feedbackLevel.Value, true); var enabList = (enabledFeedbacks.Value).Split(',').ToList <String>(); bool dfaedit = enabList.Contains("dfaedit"), moseledit = enabList.Contains("moseledit"), density = enabList.Contains("density"); var feedbackGrade = DFAGrading.GetGrade(dfaCorrectPair.Second, dfaAttemptPair.Second, dfaCorrectPair.First, solver, 2000, 10, level, dfaedit, moseledit, density); var feedString = "<ul>"; foreach (var feed in feedbackGrade.Second) { feedString += string.Format("<li>{0}</li>", feed); } feedString += "</ul>"; Console.WriteLine(string.Format("<div>Grade: {0} <br /> Feedback: {1}</div>", feedbackGrade.First, feedString)); }
private static void LazyGrade(int probId) { string dir = "C:/Users/Dileep/Desktop/Attempts/" + probId + "/"; string ansFile = "C:/Users/Dileep/Desktop/Answers/ans-" + probId + ".xml"; List <char> alph = new List <char> { 'a', 'b' }; HashSet <char> al = new HashSet <char>(alph); CharSetSolver solver = new CharSetSolver(BitWidth.BV64); var dfa_correct = DFAUtilities.parseDFAfromTutor(ansFile, solver); using (StreamReader reader = new StreamReader(dir + "clean.txt")) using (StreamWriter writer = new StreamWriter(dir + "Lazy-" + probId + ".txt", false)) { string id; string[] file; int g; RandomGen.SetSeedFromSystemTime(); while ((id = reader.ReadLine()) != null) { //CharSetSolver solver = new CharSetSolver(BitWidth.BV64); file = Directory.GetFiles(dir, id + ".xml", System.IO.SearchOption.AllDirectories); Console.WriteLine(file[0]); var dfa = DFAUtilities.parseDFAfromEvent(file[0], solver); if (dfa_correct.Second.IsEquivalentWith(dfa.Second, solver)) { g = (RandomGen.GetUniform() > 0.5 ? 10 : 9); } else { g = (int)Math.Max(Math.Min(8.0 - Math.Abs(dfa_correct.Second.StateCount - dfa.Second.StateCount) * 2.0 + RandomGen.GetNormal(0, 2), 10.0), 0.0); } //var g = DFAGrading.GetGrade(dfa_correct.Second, dfa.Second, al, solver, timeout, 10); Console.WriteLine("---- {0},{1}", id, g); writer.WriteLine("{0},{1}", id, g); } } }
private IEnumerable <Automaton <BDD> > readDFAs(CharSetSolver solver) { int c = 0; XElement autcontent = null; using (XmlReader reader = XmlReader.Create("C:/temp/feedback/group2hints-formatted.xml")) { reader.MoveToContent(); while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element && reader.Name == "automaton") { autcontent = XElement.ReadFrom(reader) as XElement; String line = autcontent.ToString(); c++; //if (c > 10000000) // yield break; yield return(DFAUtilities.parseForTest(line, solver)); } } } }
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); }
//A test to see how many isomorphic solutions are graded differently by the same grader private static void IsoTest(int prob, string grader) { //get grader score, get DFA from XML for that id ,check if printDFA in Dictionary and add score to that list string dir = "C:/Users/Dileep/Desktop/Attempts/" + prob + "/"; var ret = new Dictionary <string, List <Pair <int, int> > >(); var score = new Dictionary <int, int>(); string outFile = dir + "Iso-" + grader + ".txt"; List <char> alph = new List <char> { 'a', 'b' }; HashSet <char> al = new HashSet <char>(alph); var solver = new CharSetSolver(BitWidth.BV64); using (TextFieldParser parser = new TextFieldParser(dir + grader + "-" + prob + ".txt")) { parser.Delimiters = new string[] { "," }; while (true) { string[] parts = parser.ReadFields(); if (parts == null) { break; } score.Add(Convert.ToInt32(parts[0]), Convert.ToInt32(parts[1])); // has also unclean problems } } List <int> clean = new List <int>(); // will have ids of clean problems using (StreamReader reader = new StreamReader(dir + "/clean.txt")) { string line; int id; while ((line = reader.ReadLine()) != null) { id = Convert.ToInt32(line); clean.Add(id); } } // go through clean, put a list for printDFA if not present, put score in that list. string[] file; var sb = new StringBuilder(); int ex = 0; string dfaString; foreach (int i in clean) { file = Directory.GetFiles(dir, i + ".xml", System.IO.SearchOption.AllDirectories); try { DFAUtilities.printDFA(DFAUtilities.parseDFAfromEvent(file[0], solver).Second, al, sb); dfaString = sb.ToString(); if (!ret.ContainsKey(dfaString)) { ret.Add(dfaString, new List <Pair <int, int> >()); } ret[dfaString].Add(new Pair <int, int>(i, score[i])); } catch (Exception e) { Console.WriteLine("EXCEPTION: " + e); ex++; } sb.Clear(); } using (var writer = new StreamWriter(outFile, false)) { writer.WriteLine("# of string/list pairs: {0}", ret.Count); writer.WriteLine("# of exceptions: {0}", ex); Console.WriteLine("# of string/list pairs: {0}", ret.Count); Console.WriteLine("# of exceptions: {0}", ex); foreach (KeyValuePair <string, List <Pair <int, int> > > pair in ret) { if (pair.Value.Count != 1) { foreach (Pair <int, int> p in pair.Value) { Console.Write("({0},{1})", p.First, p.Second); writer.Write("({0},{1})", p.First, p.Second); } Console.WriteLine(""); writer.WriteLine(""); } } } }