• Aucun résultat trouvé

Devoirsurtable DS1

N/A
N/A
Protected

Academic year: 2022

Partager "Devoirsurtable DS1"

Copied!
9
0
0

Texte intégral

(1)

Devoir sur table DS 1

Exercice 1 : De nombreux travaux sont réalisés en Intelligence Articielle pour construire un programme qui imite le raisonnement humain et soit capable de réussir le test de Turing, c'est- à-dire qu'il ne puisse pas être distingué d'un être humain dans une conversation en aveugle.

Vous êtes chargés de vérier la correction des réponses données par un tel programme lors des tests de bon fonctionnement. Dans le scénario de test considéré, le comportement attendu est le respect de la règle suivante : pour chaque question, le programme répondra par trois ar- mations dont une seule sera correcte.

Nous noterons A1, A2 et A3 les propositions associées aux armations eectuées par le pro- gramme.

1. Représenter le comportement attendu sous la forme d'une formule du calcul des proposi- tions qui dépend de A1, A2 et A3.

Correction

Une seule armation est correcte, on a donc :

(A1∧ ¬A2∧ ¬A3)∨(¬A1∧A2∧ ¬A3)∨(¬A1∧ ¬A2∧A3)

2. Premier cas : Vous demandez au programme : Quels éléments doivent contenir les aliments que je dois consommer pour préserver ma santé ?

Il répond les armations suivantes :

ˆ A1 : Consommez au moins des aliments qui contiennent des glucides, mais pas des lipides !

ˆ A2: Si vous consommez des aliments qui contiennent des glucides alors ne consommez pas d'aliments qui contiennent des lipides !

ˆ A3 : Ne consommez aucun aliment qui contient des lipides !

Nous noterons G, respectivement L, les variables propositionnelles qui correspondent au fait de consommer des aliments qui contiennent des glucides, respectivement des lipides.

(a) Exprimer A1, A2 et A3 sous la forme de formules du calcul des propositions. Ces formules peuvent dépendre des variables G etL.

Correction

Par lecture de l'énoncé :

ˆ A1 ≡G∧ ¬L

ˆ A2 ≡G⇒ ¬L

ˆ A3 ≡ ¬L

(b) En utilisant le calcul des propositions (résolution avec les formules de De Morgan), déterminer ce que doivent contenir les aliments que vous devez consommer pour préserver votre santé.

Correction

(2)

On a¬A1 =¬G∨L et¬A2 =G∧L et¬A3 =L. La réponse est : R ≡ (A1∧ ¬A2∧ ¬A3)∨(¬A1 ∧A2∧ ¬A3)∨(¬A1∧ ¬A2∧A3)

≡ ((G∧ ¬L)∧ ¬(G⇒ ¬L)∧ ¬(¬L))∨

(¬(G∧ ¬L)∧(G⇒ ¬L)∧ ¬(¬L))∨

(¬(G∧ ¬L)∧ ¬(G⇒ ¬L)∧(¬L))

≡ ((G∧ ¬L)∧(G∨L)∧L∨( ce qui est forcément faux...) (¬G∨L)∧(¬G∨ ¬L)∧L∨

(¬G∨L)∧(G∧L)∧(¬L))( ce qui est forcément faux...)

≡ ¬G∧L

Il ne faut donc pas manger de glucides et manger des lipides...

3. Second cas : Vous demandez au programme : Quelles activités dois-je pratiquer si je veux préserver ma santé ?

Suite à une coupure de courant, la dernière armation est interrompue.

ˆ A1 : Ne faites des activités sportives que si vous prenez également du repos !

ˆ A2 : Si vous ne faites pas d'activité intellectuelle alors ne prenez pas de repos !

ˆ A3 : Prenez du repos ou faites des activités . . . !

Nous noteronsS, I et R les variables propositionnelles qui correspondent au fait de faire des activités sportives, des activités intellectuelles et de prendre du repos.

(a) Exprimer A1, A2 etA3 sous la forme de formules du calcul des propositions. Ces formules peuvent dépendre deS, I etR.

Correction On a :

ˆ A1 ≡S⇒R

ˆ A2 ≡ ¬I ⇒ ¬R

ˆ A3 ≡R∨T avecT =S ou T =I ouT =S∧I.

(b) En utilisant le calcul des propositions (résolution avec les tables de vérité), déterminer quelle(s) activité(s) vous devez pratiquer pour préserver votre santé.

Correction

S I R A1 A2 A3 A1∧ ¬A2∧ ¬A3 ¬A1∧A2∧ ¬A3 ¬A1∧ ¬A2∧A3

1 1 1 1 1 1 0 0 0

1 1 0 0 1 ? 0 ? 0

1 0 1 1 0 1 0 0 0

1 0 0 0 1 ? 0 ? 0

0 1 1 1 1 1 0 0 0

0 1 0 1 1 ? 0 0 0

0 0 1 1 0 1 0 0 0

0 0 0 1 1 0 0 0 0

La seule possibilité est donc queA2 soit vraie, donc A3 est faux, il ne faut donc pas se reposer, et donc ne pas faire d'activités intellectuelle non plus ( sinon A2 nous impose de faire du sport...). Il faut donc uniquement faire du sport.

(3)

Exercice 2 :

Arbres de décision

Un arbre de décision est un arbre binaire dans lequel :

ˆ un n÷ud interne est associé à une variable, parmi un ensemble V de variables ;

ˆ une feuille est associée à un booléen (vrai ou faux).

Si chaque variable de l'ensemble V reçoit une valeur booléenne, un tel arbre permet de prendre une décision en parcourant l'arbre :

ˆ on part de la racine ;

ˆ quand on arrive sur un n÷ud interne (racine comprise), on regarde quelle est la valeur de la variable associée au n÷ud : si elle vaut vrai on poursuit le parcours dans le sous-arbre gauche, sinon on poursuit le parcours dans le sous-arbre droit ;

ˆ quand on arrive sur une feuille, le booléen associé constitue la décision.

Conventionnellement, on représente l'arête menant au sous-arbre pour le cas vrai en trait plein ; l'arête menant au sous-arbre cas faux en pointillés. Schématiquement, un arbre est structuré comme indiqué ci-dessous à gauche.

Variable

sous-arbre si variable vraie

sous-arbre si variable fausse

e

a

r vrai

vrai

faux

faux

Le schéma de droite ci-dessus illustre l'exemple : un module de cours est validé si l'examen est réussi (e), ou sinon, si l'étudiant a été assidu en cours (a) et qu'il réussit un examen de rattrapage(r). Cela revient à dénir la validation du module par la formule logique e∨(a∧r). On envisage une représentation simple d'un arbre de décision, à l'aide d'un tableau. On nu- mérote les n÷uds : la racine reçoit le numéro 0, les autres n÷uds sont numérotés arbitrairement par des entiers consécutifs à partir de 1. On crée un tableau contenant autant de cases que de n÷uds, indicé à partir de 0. La case d'indice i contient soit un triplet (nom de variable, numéro du ls gauche, numéro du ls droit) si le n÷ud numéro iest un n÷ud interne, soit un booléen si le n÷ud numéro i est une feuille.

On utilise alors les type suivant :

type noeud = Feuille of bool | Decision of string * int * int ;;

type arbre = noeud array;;

(4)

1. Dénir une variablemonAD représentant l'arbre de décision illustré précédemment.

Correction

En numérotant de manière classique les n÷uds ( comme un tas ) : Listing 1 L'exemple : monAD

let (monAD:arbre) = [| Decision("e" , 1,2) ;Feuille(true) ; Decision("a" , 3,4) ; Decision("r" , 5,6) ; Feuille(false) ;

Feuille(true) ;Feuille(false) |];;

Dans les deux questions suivantes, on veut faire déterminer une décision en fournissant une valuation des variables, c'est-à-dire la liste des seules variables qui sont vraies dans l'évaluation.

2. Dénir une fonction eval_var qui, étant donnés le nom d'une variable et une liste des seules variables vraies, renvoie un booléen correspondant à la valuation de la variable indiquée.

eval_var : 'a -> 'a list -> bool Correction

Si la variable est dans la liste, cela renvoie vraie... :

Listing 2 La fonctioneval_var

let rec eval_var variable liste = match liste with

| [] -> false

| tete::reste -> (variable = tete) || (eval_var variable reste);;

3. Dénir une fonction eval qui, étant donnés un arbre de décision et une liste des seules variables vraies, renvoie un booléen correspondant à la décision nale.

eval : arbre -> string list -> bool Correction

Si la variable est dans la liste, cela renvoie vraie... : Listing 3 La fonction eval

let eval (arbre:arbre) liste =

let rec aux indice = match arbre.(indice) with

| Feuille b -> b

| Decision(variable,ag,ad) -> if eval_var variable liste then aux ag else aux ad

in aux 0;;

Diagrammes de décision

On souhaite compacter la représentation en mémoire des arbres de décision. Si plusieurs sous-arbres sont identiques, on n'a pas envie de les stocker plusieurs fois.

En raisonnant sur la représentation informatique des arbres de décision, on voit assez facilement une façon de procéder : si les arbres de numéros ietj sont identiques, on peut (par exemple) au niveau du parent p de j indiquer comme numéro de ls i au lieu de j

(5)

et ainsi éliminer j de la représentation.

Ce faisant, on ne représente plus un arbre (car i a maintenant deux parents), mais un graphe orienté : on parle de diagrammes de décision. Néanmoins aucune connaissance particulière en théorie des graphes n'est requise pour aborder ce problème. On dira qu'il existe un arc dep vers i et on le notera p−→b i avecb ∈ {T, F} (pour vrai ou faux), selon que l'arc est suivi dans le cas où p est vrai (précédemment : ls gauche) ou dans le cas oùp est faux (précédemment : ls droit). Lorsque p−→b i, on note i=succb(p).

Exemple : l'expression(z1∧z3)∨(z2∧z3)admet (entre autres) les diagrammes de décision ci-dessous.

4. Créer une fonction redirige à trois paramètres : un diagramme ainsi que deux indices v et w , qui supprime le n÷ud v dans le graphe et transforme tous les arcs u −→b v en arcs u−→b w. Les cases du tableau qui deviennent inoccupées sont remplies avec la valeur spéciale Vide.

redirige : noeud array -> int -> int -> unit Pour ce faire, on complète :

type noeud = Feuille of bool

| Decision of string * int * int

| Vide;;

Correction

On lit l'ensemble du graphe, on change alors les direction vers v en direction vers w. On change alors l'indicev en Vide.

Listing 4 La fonctionredirige

let redirige graphe v w =

let taille = Array.length(graphe) in for i = 0 to taille -1 do

match (graphe.(i)) with

| Decision( variable,ag,ad) ->

graphe.(i) <- Decision( variable,( if v = ag then w else ag), (if v=ad then w else ad))

| _->() done;

graphe.(v) <- Vide;;

Pour transformer un arbre en diagramme sans répétition, on applique deux règles de simplication.

(6)

ˆ Élimination : Si pour un n÷udv on a succF(v) =succT(v) =w alors on élimine v et on transforme les arcsu−→b v en u−→b w.

ˆ Isomorphisme : Soitvetwdeux n÷uds,v 6=w. Si ce sont des feuilles avec valeur(v)=valeur(w) ou si ce sont des n÷uds internes tels que variable(v) = variable(w) et succF(v) =

succF(w) etsuccT(v) =succT(w) alors on éliminev et on transforme les arcs u−→b v enu−→b w.

5. Créer une fonction trouve_elimination, prenant en paramètre un diagramme et ren- voyant l'indice d'un n÷ud pouvant être supprimé par élimination, s'il en existe un. Sinon, elle doit renvoyer−1.

trouve_elimination : noeud array -> int Correction

On se sert d'un pointeur qui initialement prend la valeur de -1, il sera amené à changer si dans la lecture du tableau, on rencontre deux ls égaux.

Listing 5 La fonction trouve_elimination

let trouve_elimination graphe =

let taille = Array.length(graphe) in let reponse = ref (-1) in

let i= ref 0 in

while (!i < taille ) && ( !reponse = -1) do match (graphe.(!i)) with

| Decision( variable,ag,ad) when ag = ad -> reponse := !i

| _->();

incr i;

done;

!reponse;;

6. De même, créer une fonction trouve_isomorphisme, prenant en paramètre un dia- gramme, et renvoyant un couple d'indices correspondant à deux n÷uds pouvant être simpliés par isomorphisme, s'il en existe un. Sinon, elle doit renvoyer le couple(−1,−1).

Correction

(7)

On se sert d'un pointeur qui initialement prend la valeur de (-1,-1) , on parcourt alors le tableau avec une double boucle. Il sera amené à changer si dans la lecture du tableau, on rencontre deux valeurs égale, ou des variable identique avec les même successeurs.

Listing 6 La fonctiontrouve_isomorphisme

let trouve_isomorphisme graphe =

let taille = Array.length(graphe) in let reponse = ref (-1,-1) in

let v = ref 0 in

while (!v < taille -1)&& (!reponse = (-1,-1)) do let w = ref (!v+1) in

while (!w < taille )&& (!reponse = (-1,-1)) do match ( graphe.(!v) , graphe.(!w) ) with

| Feuille(b_v) , Feuille(b_w) when b_v = b_w -> reponse := (!v,!w ) | Decision( variable_v,ag_v,ad_v) , Decision( variable_w,ag_w, ad_w)

when (variable_v = variable_w) && (ag_v =ag_w) && (ad_v = ad_w) ->

reponse := (!v,!w)

| _ -> ();

incr w;

done;

incr v ; done;

!reponse;;

7. Créer une fonction sans résultat appelée reduit, prenant en paramètre un diagramme, qui détecte les deux simplications possibles, eectue les redirections correspondantes, jusqu'à ce qu'il ne soit possible de faire aucune simplication supplémentaire.

Correction

L'idée est de créer un pointeur vériant s'il y a eut une réduction du graphe, et de s'arrêter quand il n'y a plus de réduction.

Listing 7 La fonctiontrouve_isomorphisme

let reduit graphe =

let redirection = ref true in while !redirection do

redirection := false ;

let v_1 = trouve_elimination graphe in if v_1 <> -1 then

begin

redirection := true ;

let Decision( variable,w_1,w_2) = graphe.(v_1) in redirige graphe v_1 w_1 ;

end ;

let (v,w) = trouve_isomorphisme graphe in if (v,w) <> (-1,-1) then

begin

redirection := true ;

(8)

redirige graphe v w ; end ;

done;;

Construction d'arbres de décision

Nous nous intéressons maintenant à la construction d'arbres de décision à partir de for- mules logiques.

Étant données des formules logiquest,e1 ete2, on dénit l'opérateur t →e1, e2 par : t →e1, e2≡(t∧e1)∨(¬t∧e2)

8. Soient x et y des formules logiques quelconques. Montrer que les trois formules logiques suivantes :

¬x , x∨y , x∧y

peuvent s'écrire en utilisant uniquement les constantes 0 (faux), 1 (vrai), l'opérateur

· → ·,·déni précédemment et les variables xet y. Correction

On reste sur l'idée est la construction de l'arbre, l'opérateur étant construit comme l'arbre dont la racine est t et les sous arbres étant e1 ete2. On a donc :

ˆ ¬x≡x→(0,1)

ˆ x∨y ≡x→(1, y)

ˆ x∧y ≡x→(y,0) 9. Montrer que

(a→b, c)→d, e≡a→(b→d, e),(c→d, e) Correction

Il est possible de le montrer par les opérations usuelles sur les formules logiques, ou en utilisant une table de vérité, mais cette équivalence est un résultat simple sur les arbres de décision :(a →b, c) correspond à l'arbre

a

b

V F

c

V F

Pour (a →b, c)→d, e, cette proposition devient la racine, donc les feuilles V conduise à la proposition d, et les feuilles F à la proposition e, on a donc l'arbre :

a

b

d

V F

e

V F

c

d

V F

e

V F

(9)

Ce qui correspond bien à un arbre dans la racine est a, avec le sous arbre gauche corres- pondant à la proposition b → d, e et le sous arbre droit correspondant à la proposition c→d, e.

10. Déduire de ce qui précède une méthode systématique de construction d'un arbre de déci- sion à partir d'une formule logique quelconque.

Correction

La construction peut se faire de façon inductive :

ˆ Pour une variable x seule, l'arbre correspond à la formule x→1,0.

ˆ Pour deux formules logiques x et y dont on a déjà les arbres correspondants : x ≡ a→b, c, et y≡d→e, f, on a :

Pour¬x , la construction sera donnée par :

(a→b, c)→(0,1)≡a →(b →0,1),(c→0,1) Pourx∨y , la construction sera donnée par :

(a →b, c)→(1, d→e, f)≡a→(b→1, d→e, f),(c→1, d→e, f) Pourx∧y , la construction sera donnée par :

(a→b, c)→(d→e, f),0≡a →(b →(d →e, f),0),(c→(d→e, f),0)

Références

Documents relatifs

[r]

[r]

[r]

Except for the differen.ce in protein content, bloC?d plasma and interstitial fluid. arc q':!ite similar in ionic compOsition, The pri,ncipal cat'~on 'of blood.plasma i&#34;s

udkisl m%:udOdr uE;l§ isÿjqKq oreKq w¾nqohlg fydA yÈis wjia:djlg uqyqK § lïmkhg m;ajqKq mqoa.,hka Wfoidh' fuh &lt;uqka iy jeäysáhka hk fomd¾Yjhgu Woõ lsÍu ioyd fhdod .;

Only one passenger should be carried and then only if the motorcycle is designed and equipped to carry a passenger and the motorcycle is operated by

El 23 de junio de 1997, el Director General estableció un pequeño grupo especial integrado por personal de la Sede y de la Oficina Regional a fin de que examinara opciones

Dans ce dernier j'ai vraiment découvert avec émerveillement toutes les possibilités qu'offre la broderie... côté de l'estrade, la démarche pédago- gique que nous