Esempio n. 1
0
    def initialize_KB(self):
        # Clause pour differencier les pièces
        for i in range(len(self.rooms)):
            for j in range(len(self.rooms)):
                if i != j:
                    # Le bureau est different de la cuisine = PieceDifferente(Bureau, Cuisine)
                    self.clauses.append(
                        expr(
                            self.room_different_clause.format(
                                self.rooms[i], self.rooms[j])))

        # Clause pour differencier les armes
        for i in range(len(self.weapons)):
            for j in range(len(self.weapons)):
                if i != j:
                    # Le couteau est different de la corde = ArmeDifferente(Couteau, Corde)
                    self.clauses.append(
                        expr(
                            self.weapon_different_clause.format(
                                self.weapons[i], self.weapons[j])))

        # Initialiser KB sur Armes, Pieces, Personnes
        for weapon in self.weapons:
            # Le couteau est une arme = Arme(Couteau)
            self.clauses.append(expr(self.arme_clause.format(weapon)))

        for room in self.rooms:
            # La cuisine est une pièce = Piece(Cuisine)
            self.clauses.append(expr(self.piece_clause.format(room)))

        for person in self.persons:
            # Mustar est une personne = Personne(Mustard)
            self.clauses.append(expr(self.personne_clause.format(person)))
Esempio n. 2
0
    def get_innocent(self):
        result = list(fol_bc_ask(self.crime_kb, expr('Innocent(x)')))
        res = []

        for elt in result:
            if not res.__contains__(elt[x]):
                res.append(elt[x])
        return res
Esempio n. 3
0
    def inference_rules(self):
        # Determine la piece du crime
        self.clauses.append(
            expr('EstMort(x) & Personne_Piece(x, y) ==> PieceCrime(y)'))

        # Determiner l'arme du crime
        self.clauses.append(
            expr(
                'PieceCrime(x) & Arme(y) & Piece_Arme(y, x) ==> ArmeCrime(y)'))
        self.clauses.append(
            expr("EstMort(x) & MarqueCou(x) ==> ArmeCrime(Corde)"))

        # Si la personne est morte alors elle est la victime et ce n'est pas un suicide
        self.clauses.append(expr('EstMort(x) ==> Victime(x)'))

        # Si la personne est morte alors elle est innocente et ce n'est pas un suicide
        self.clauses.append(expr('EstMort(x) ==> Innocent(x)'))

        # Si la personne est vivante et était dans une pièce
        # qui ne contient pas l'arme du crime, alors elle est innocente
        self.clauses.append(
            expr(
                'EstVivant(p) & UneHeureApresCrime(h1) & Personne_Piece_Heure(p,r2,h1) & PieceCrime(r1)'
                ' & PieceDifferente(r1,r2) & ArmeCrime(a1) & Arme_Piece(a2,r2) & ArmeDifferente(a1,a2) ==> Innocent(p)'
            ))

        # Si la personne se trouvait dans une piece qui contient l'arme
        # qui a tué la victime une heure après le meurtre alors elle est suspecte
        self.clauses.append(
            expr(
                'EstVivant(p) & UneHeureApresCrime(h1) & Personne_Piece_Heure(p,r2,h1) & PieceCrime(r1)'
                ' & PieceDifferente(r1,r2) & ArmeCrime(a) & Arme_Piece(a,r2) ==> Suspect(p)'
            ))
Esempio n. 4
0
    def inference_rules(self):
        # Determine la piece du crime
        self.clauses.append(
            expr(
                'Victime(x) & Personne_Piece_Heure(x, y, z) & HeureActuelle(z) ==> PieceCrime(y)'
            ))

        # Determiner l'arme du crime
        self.clauses.append(
            expr('Arme_Marque(x,y) & VictimeMarque(y) ==> ArmeCrime(x)'))

        # Determiner la pièce où le meurtrier à laissé tomber l'arme du crime
        self.clauses.append(
            expr('ArmeCrime(x) & Arme_Piece(x,y) ==> PieceArmeTombee(y)'))

        # Si la personne est morte alors elle est innocente et ce n'est pas un suicide
        self.clauses.append(expr('Victime(x) ==> Innocent(x)'))

        # Si la personne se trouve dans la pièce où le meurtrier a laissé tomber son arme à l'heure où le meurtrier a
        # laissé tomber son arme, alors la personne est suspecte.
        self.clauses.append(
            expr(
                'Personne_Piece_Heure(x, y, z) & HeureArmeTombee(z) & PieceArmeTombee(y) ==> Suspect(x)'
            ))
Esempio n. 5
0
 def get_suspect(self):
     result = self.crime_kb.ask(expr('Suspect(x)'))
     if not result:
         return result
     else:
         return result[x]
Esempio n. 6
0
 def get_crime_hour_plus_one(self):
     result = self.crime_kb.ask(expr('UneHeureApresCrime(x)'))
     if not result:
         return result
     else:
         return result[x]
Esempio n. 7
0
 def get_crime_hour(self):
     result = self.crime_kb.ask(expr('HeureCrime(x)'))
     if not result:
         return result
     else:
         return result[x]
Esempio n. 8
0
 def get_crime_weapon(self):
     result = self.crime_kb.ask(expr('ArmeCrime(x)'))
     if not result:
         return result
     else:
         return result[x]
Esempio n. 9
0
 def get_crime_room(self):
     result = self.crime_kb.ask(expr('PieceCrime(x)'))
     if not result:
         return False
     else:
         return result[x]
Esempio n. 10
0
 def get_victim(self):
     result = self.crime_kb.ask(expr('Victime(x)'))
     if not result:
         return False
     else:
         return result[x]
Esempio n. 11
0
 def add_clause(self, clause_string):
     self.crime_kb.tell(expr(clause_string))
Esempio n. 12
0
    def create_initial_clause(self, clause, *args):

        formatted_clause = self.format_clause(clause, *args)
        self.clauses.append(expr(formatted_clause))
Esempio n. 13
0
 def add_clause(self, clause):
     self.crime_kb.tell(expr(clause))
Esempio n. 14
0
 def get_clause(self, clause):
     result = self.crime_kb.ask(expr(clause))
     if not result:
         return result
     else:
         return result[x]
Esempio n. 15
0
 def get_weapon_drop_hour(self):
     result = self.crime_kb.ask(expr('HeureArmeTombee(x)'))
     if not result:
         return result
     else:
         return result[x]
Esempio n. 16
0
 def get_weapon_drop_room(self):
     result = self.crime_kb.ask(expr('PieceArmeTombee(x)'))
     if not result:
         return result
     else:
         return result[x]