Tp 4 – objets composés - intelligence artificielle ai - prol

Intelligence Artificielle AI - Prolog : TP 4 – Objets composés

Télécharger PDF

Objets composés en Programmation Logique sous SWI-Prolog

Un objet composé est un objet défini par un ensemble de descripteurs pouvant appartenir à des types différents. La création d'un type d'objets composés permet de regrouper plusieurs caractéristiques pour décrire un objet de manière plus exhaustive.

Exemple :

né(ali, date(1, 1, 1977)).

Test :

?- né(X, Y).

X = ali, Y = date(1, 1, 1977).

?- né(ali, date(J, M, A)).

J = 1, M = 1, A = 1977.

Union d'objets composés

Il est possible de représenter différents types d'objets par un même objet composé.

Exemple :

possède(ali, bureau).

possède(hamid, ordinateur('Pentium II', 450)).

possède(driss, voiture('Renault 19', blanche)).

Test :

?- possède(X, voiture(Y, Z)).

X = driss, Y = 'Renault 19', Z = blanche.

Base de connaissances sur des employés en entreprise

Représentez les données des deux tableaux ci-dessous en utilisant les prédicats suivants :

employe(Nom, Age, Sexe, Entree, Entreprise, Echelon)

salaire(Entreprise, Echelon, Salaire)

Données des employés :

employe(ahmed, 32, homme, 2006, iam, 2).

employe(omar, 40, homme, 2000, meditel, 4).

employe(salma, 30, femme, 2010, inwi, 3).

employe(kamal, 33, homme, 2004, meditel, 3).

employe(kawtar, 26, femme, 2012, inwi, 1).

employe(souad, 44, femme, 1998, iam, 4).

employe(jalil, 50, homme, 1990, iam, 5).

employe(khadija, 39, femme, 2005, meditel, 3).

employe(othmane, 29, homme, 2009, meditel, 2).

Données des salaires :

salaire(iam, 1, 3000).

salaire(iam, 2, 3500).

salaire(iam, 3, 5000).

salaire(iam, 4, 7000).

salaire(iam, 5, 10000).

salaire(meditel, 1, 3500).

salaire(meditel, 2, 4000).

salaire(meditel, 3, 5000).

salaire(meditel, 4, 7500).

salaire(meditel, 5, 10000).

salaire(inwi, 1, 4000).

salaire(inwi, 2, 5000).

salaire(inwi, 3, 6000).

salaire(inwi, 4, 8000).

salaire(inwi, 5, 11000).

Requêtes Prolog

1. Lister les noms des employés de chez Iam

?- employe(Nom, _, _, _, iam, _).

2. Afficher le salaire de Ahmed

?- employe(ahmed, _, _, _, Entreprise, Echelon), salaire(Entreprise, Echelon, Salaire).

3. Liste des noms, âges, sexes, années d'entrée et échelons des employés d'Iam

?- employe(Nom, Age, Sexe, Entree, iam, Echelon).

4. Liste des noms et âges uniquement des femmes de la base

?- employe(Nom, Age, femme, _, _, _).

5. Liste des salaires de l'entreprise Meditel par échelon

?- salaire(meditel, Echelon, Salaire).

6. Liste des noms et âges des hommes de moins de 30 ans

?- employe(Nom, Age, homme, _, _, _), Age =< 30.

7. Pourquoi ne peut-on pas obtenir la liste des noms uniquement des hommes n'ayant pas plus de 30 ans ?

La requête ?- employe(Nom, Age, homme, _, _, _), Age =< 30 ne fonctionne pas car elle ne filtre pas les hommes ayant exactement 30 ans. Pour obtenir uniquement les hommes de moins de 30 ans, il faut utiliser : ?- employe(Nom, Age, homme, _, _, _), Age =< 30, Age \= 30.

Ajout de prédicats à la base de connaissances

1. Définition du prédicat jeune_employe(Nom, Entreprise)

jeune_employe(Nom, Entreprise) :- employe(Nom, Age, _, _, Entreprise, _), Age =< 30.

2. Vérification si Othmane est un jeune employé travaillant chez Meditel

?- jeune_employe(othmane, meditel).

3. Vérification si Kamal est un jeune employé

?- jeune_employe(kamal, Entreprise).

4. Liste des jeunes employés travaillant chez Iam

?- jeune_employe(Nom, iam).

5. Définition du prédicat cadre(Nom)

cadre(Nom) :- employe(Nom, _, _, _, _, Echelon), Echelon => 3.

6. Définition du prédicat collègues(Nom1, Nom2)

collegues(Nom1, Nom2) :- employe(Nom1, _, _, _, Entreprise, _), employe(Nom2, _, _, _, Entreprise, _), Nom1 \= Nom2.

7. Définition du prédicat gagne_plus_que(Nom1, Nom2)

gagne_plus_que(Nom1, Nom2) :- employe(Nom1, _, _, _, Entreprise1, Echelon1), employe(Nom2, _, _, _, Entreprise2, Echelon2), salaire(Entreprise1, Echelon1, Salaire1), salaire(Entreprise2, Echelon2, Salaire2), Salaire1 => Salaire2.

FAQ

Qu'est-ce qu'un objet composé en Prolog ?

Un objet composé est une structure qui regroupe plusieurs attributs de types différents pour décrire un élément de manière complexe, comme un employé avec son nom, âge, sexe, etc.

Comment vérifier si un employé est un cadre ?

Utilisez le prédicat cadre(Nom) qui est défini comme vrai si l'employé est au moins au 3ème échelon : cadre(Nom) :- employe(Nom, _, _, _, _, Echelon), Echelon => 3.

Pourquoi la requête ?- employe(Nom, Age, homme, _, _, _), Age =< 30 ne fonctionne pas ?

Cette requête inclut les hommes de 30 ans, car l'opérateur =< signifie "inférieur ou égal". Pour exclure ceux de 30 ans, ajoutez Age \= 30.

Cela peut vous intéresser :

Partagez vos remarques, questions , propositions d'amélioration ou d'autres cours à ajouter dans notre site

Enregistrer un commentaire (0)
Plus récente Plus ancienne