public void testAimaExample() { Sentence aimaEg = (Sentence)parser.parse("( B11 <=> (P12 OR P21))"); CNFTransformer transformer = new CNFTransformer(); Sentence transformed = transformer.transform(aimaEg); List <Sentence> clauses = gatherer.getClausesFrom(transformed); Sentence clause1 = (Sentence)parser.parse("( B11 OR ( NOT P12 ) )"); Sentence clause2 = (Sentence)parser.parse("( B11 OR ( NOT P21 ) )"); Sentence clause3 = (Sentence)parser .parse("( ( NOT B11 ) OR ( P12 OR P21 ) )"); Assert.AreEqual(3, clauses.Count); Assert.IsTrue(clauses.Contains(clause1)); Assert.IsTrue(clauses.Contains(clause2)); Assert.IsTrue(clauses.Contains(clause3)); }
public Model findModelFor(String logicalSentence, int numberOfFlips, double probabilityOfRandomWalk) { myModel = new Model(); Sentence s = (Sentence) new PEParser().parse(logicalSentence); CNFTransformer transformer = new CNFTransformer(); CNFClauseGatherer clauseGatherer = new CNFClauseGatherer(); SymbolCollector sc = new SymbolCollector(); List <Symbol> symbols = sc.getSymbolsIn(s); Random r = new Random(); for (int i = 0; i < symbols.Count; i++) { Symbol sym = (Symbol)symbols[i]; myModel = myModel.extend(sym, Util.randombool()); } List <Sentence> clauses = clauseGatherer.getClausesFrom(transformer .transform(s)); for (int i = 0; i < numberOfFlips; i++) { if (getNumberOfClausesSatisfiedIn(clauses, myModel) == clauses.Count) { return(myModel); } Sentence clause = clauses[random.Next(clauses.Count)]; List <Symbol> symbolsInClause = sc .getSymbolsIn(clause); if (random.NextDouble() >= probabilityOfRandomWalk) { Symbol randomSymbol = symbolsInClause[random .Next(symbolsInClause.Count)]; myModel = myModel.flip(randomSymbol); } else { Symbol symbolToFlip = getSymbolWhoseFlipMaximisesSatisfiedClauses( clauses, symbolsInClause, myModel); myModel = myModel.flip(symbolToFlip); } } return(null); }
public void testSymbolTransform() { Sentence symbol = (Sentence)parser.parse("A"); Sentence transformed = transformer.transform(symbol); Assert.AreEqual("A", transformed.ToString()); }