def test_as_sentence(self): kb = KnowledgeBase() kb.tell_str("A") kb.tell_str("A OR B") kb.tell_str("C <=> D") kb.tell_str("E => NOT F") sentence = kb.as_sentence() expected_sentence = AndTerm( SymbolTerm("A"), AndTerm( OrTerm(SymbolTerm("A"), SymbolTerm("B")), AndTerm( BiconditionalTerm(SymbolTerm("C"), SymbolTerm("D")), ImplicationTerm(SymbolTerm("E"), NotTerm(SymbolTerm("F")))))) self.assertEqual(expected_sentence, sentence)
def test_as_sentence(self): kb = KnowledgeBase() kb.tell_str("A") kb.tell_str("A OR B") kb.tell_str("C <=> D") kb.tell_str("E => NOT F") sentence = kb.as_sentence() expected_sentence = AndTerm( SymbolTerm("A"), AndTerm( OrTerm(SymbolTerm("A"), SymbolTerm("B")), AndTerm( BiconditionalTerm(SymbolTerm("C"), SymbolTerm("D")), ImplicationTerm(SymbolTerm("E"), NotTerm(SymbolTerm("F"))), ), ), ) self.assertEqual(expected_sentence, sentence)
# # Number of flips in a single WalkSAT algorithm NUMBER_OF_FLIPS = 10000 # Probability of flipping symbol's value in a clause WALK_SAT_PROBABILITY = 0.02 # Number of tries to solve a problem NUMBER_OF_TRIES = 10 # Create a simple knowledge base from AIMA example kb = KnowledgeBase() kb.tell_str("NOT P11") kb.tell_str("B11 <=> (P12 OR P21)") kb.tell_str("B21 <=> (P11 OR P22 OR P31)") kb.tell_str("NOT B11") kb.tell_str("B21") # Create sentence with all statements from knowledge base sentence = kb.as_sentence() # Create WalkSAT algorithm class ws = WalkSat() for i in range(NUMBER_OF_TRIES): # Get result model. If solution was found it return Model object, or None otherwise result_model = ws.find_model_for(AndTerm(sentence, SymbolTerm("P31")), NUMBER_OF_FLIPS, WALK_SAT_PROBABILITY) print("Model: " + str(result_model))
# Example of using WalkSAT algorithm # # Number of flips in a single WalkSAT algorithm NUMBER_OF_FLIPS = 10000 # Probability of flipping symbol's value in a clause WALK_SAT_PROBABILITY = 0.02 # Number of tries to solve a problem NUMBER_OF_TRIES = 10 # Create a simple knowledge base from AIMA example kb = KnowledgeBase() kb.tell_str("NOT P11") kb.tell_str("B11 <=> (P12 OR P21)") kb.tell_str("B21 <=> (P11 OR P22 OR P31)") kb.tell_str("NOT B11") kb.tell_str("B21") # Create sentence with all statements from knowledge base sentence = kb.as_sentence() # Create WalkSAT algorithm class ws = WalkSat() for i in range(NUMBER_OF_TRIES): # Get result model. If solution was found it return Model object, or None otherwise result_model = ws.find_model_for(AndTerm(sentence, SymbolTerm("P31")), NUMBER_OF_FLIPS, WALK_SAT_PROBABILITY) print("Model: " + str(result_model))