Inheritance: AIMA.Core.Logic.Propositional.Parsing.AbstractPLVisitor
Example #1
0
        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;
        }
Example #2
0
        public bool askWithDpll(String queryString)
        {
            Sentence query = null, cnfForm = null;
            try
            {
                // just a check to see that the query is well formed
                query = (Sentence)parser.parse(queryString);
            }
            catch (Exception e)
            {
                System.Console.WriteLine("error parsing query" + e);
            }

            Sentence kbSentence = asSentence();
            Sentence kbPlusQuery = null;
            if (kbSentence != null)
            {
                kbPlusQuery = (Sentence)parser.parse(" ( " + kbSentence.ToString()
                        + " AND (NOT " + queryString + " ))");
            }
            else
            {
                kbPlusQuery = query;
            }
            try
            {
                cnfForm = new CNFTransformer().transform(kbPlusQuery);
                // System.Console.WriteLine(cnfForm.ToString());
            }
            catch (Exception e)
            {
                System.Console.WriteLine("error converting kb +  query to CNF "
                        + e);

            }
            return !new DPLL().dpllSatisfiable(cnfForm);
        }
 public void setUp()
 {
     transformer = new CNFTransformer();
 }
 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));
 }