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)))
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
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)' ))
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)' ))
def get_suspect(self): result = self.crime_kb.ask(expr('Suspect(x)')) if not result: return result else: return result[x]
def get_crime_hour_plus_one(self): result = self.crime_kb.ask(expr('UneHeureApresCrime(x)')) if not result: return result else: return result[x]
def get_crime_hour(self): result = self.crime_kb.ask(expr('HeureCrime(x)')) if not result: return result else: return result[x]
def get_crime_weapon(self): result = self.crime_kb.ask(expr('ArmeCrime(x)')) if not result: return result else: return result[x]
def get_crime_room(self): result = self.crime_kb.ask(expr('PieceCrime(x)')) if not result: return False else: return result[x]
def get_victim(self): result = self.crime_kb.ask(expr('Victime(x)')) if not result: return False else: return result[x]
def add_clause(self, clause_string): self.crime_kb.tell(expr(clause_string))
def create_initial_clause(self, clause, *args): formatted_clause = self.format_clause(clause, *args) self.clauses.append(expr(formatted_clause))
def add_clause(self, clause): self.crime_kb.tell(expr(clause))
def get_clause(self, clause): result = self.crime_kb.ask(expr(clause)) if not result: return result else: return result[x]
def get_weapon_drop_hour(self): result = self.crime_kb.ask(expr('HeureArmeTombee(x)')) if not result: return result else: return result[x]
def get_weapon_drop_room(self): result = self.crime_kb.ask(expr('PieceArmeTombee(x)')) if not result: return result else: return result[x]