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)
示例#2
0
    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))