Un système à Base de Connaissances se distingue des systèmes informatiques classiques par le fait qu'il tente d'exploiter explicitement des "connaissances" sur un problème à résoudre pour en faciliter la résolution. Bien entendu, cette approche est particulièrement importante pour faire face à des problèmes "complexes". Pour illustrer ce que nous entendons par un système complexe, nous vous proposons d'explorer cette notion de complexité au travers d'exemples concrets.
lire n s <- 0 pour i variant de 1 à n s <- s + i finpour imprimer sLa complexité de cet algorithme est O(n).
lire n imprimer (n * (n + 1) / 2)
La complexité de cet algorithme est O(1).
On ne peut pas faire mieux. C'est donc la complexité de ce problème.
Soit maintenant à écrire un algorithme qui trie un tableau de nombres. Un débutant
écrira une boucle de 1 à n-1, au sein de laquelle il comparera deux cases successives,
en les permutant si elles ne sont pas dans l'ordre. Et il plongera cette boucle
dans une autre de 1 à n. La complexité de son algorithme sera O(n2).
On montre qu'en fait, la complexité du problème est O(n log(n)).
Soit maintenant à écrire un programme qui joue un coup aux échecs. On développe
l'arbre de tous les coups possibles (alternativement coup ami et coup ennemi),
jusqu'à une profondeur n, puis on calcule une fonction d'évaluation sur
chaque feuille, et on remonte alternativement le max et le min des notes obtenues.
La complexité de cet algorithme est O(pn),
où p est le nombre moyen de coups légaux dans un état donné.
Pour revenir un peu sur terre, comparons n2 (n au carré) et 2n (2
à la puissance n), pour n=100, en supposant une micro-seconde par
opération :
C'est-à-dire à peu près un million de fois l'age de l'univers ! Inutile de chercher
à acheter une machine mille fois ou un million de fois plus rapide ; il faut
abandonner l'espoir de résoudre le problème.
Et pourtant... Je connais, et vous connaissez aussi, des gens qui résolvent un tel problème en quelques minutes, alors que leur "hardware" est environ 107 fois moins rapide que celui d'un ordinateur. Donc, ils n'utilisent pas l'algorithme que nous avons évoqué au paragraphe précédent. Qu'utilisent-ils? Ce que nous appellerons des heuristiques, ou plus généralement des connaissances. Mettons les en évidence sur un petit problème. Soit à résoudre le problème de cryptarithmétique :
S E N D M O R E --------- M O N E YIl s'agit de trouver une bijection entre les lettres et des chiffres (S et M ne pouvant être nuls) pour que l'addition soit correcte en base 10. Le seul algorithme que je connaisse consiste à faire 8 boucles imbriquées de 0 à 9 pour essayer toutes les valeurs possibles pour chacune des lettres : il est typiquement exponentiel. Mais, grace à mes connaissances, je vais résoudre ce problème en temps linéaire :
D + E = Y + 10r1 r1 + N + R = E + 10r2 r2 + E + O = N + 10r3 r3 + S + M = O + 10r4 r4 = M S # 0 M # 0
D + E = Y + 10r1 r1 + N + R = E + 10r2 r2 + E + O = N + 10r3 r3 + S + M = O + 10*1 r4 = M M = 1 r4 = 1 S # 0 M # 0
D + E = Y + 10r1 r1 + N + R = E + 10r2 r2 + E + O = N + 10r3 r3 + S = O + 9 M = 1 S # 0
D + E = Y + 10r1 r1 + N + R = E + 10r2 r2 + E = N + 10r3 r3 + S = 9 O = 0 M = 1
D + E = Y + 10r1 r1 + N + R = E + 10r2 r2 + E = N S = 9 O = 0 M = 1
D + E = Y + 10r1 r1 + N + R = E + 10 1 + E = N S = 9 O = 0 M = 1
r1 + 1 + E + R = E + 10, ou r1 + R = 9R ne peut pas valoir 9 (valeur de S), donc R = 8 et r1 = 1.
D + E = Y + 10 1 + E = N R = 8 S = 9 O = 0 M = 1
algorithme | heuristiques | |
temps de calcul | 10n | n + epsilonn |
taille du programme | 3n | ? |
noir sur blanc | matière grise |
peu de temps | tout son temps |
structuré | cas par cas |
pratiquement pas de retour | feedback |
information positive | information négative |
Nous allons donc nous inspirer de ce processus pour développer notre système.
Dans un premier temps, l'"ingénieur de la connaissance" (bof) discute avec l'"expert".
Il construit un système initial.
L'"expert" soumet un premier problème au système, et analyse la solution.
Le "cogniticien" (beurk) modifie le système : ajout de connaissances, suppression
de choses qui avaient été mal comprises.
On recommence.
Même ce qui vient d'être ajouté est remis en question.
Et on continue ainsi jusqu'à ce que, en moyenne, la solution à n'importe quel
problème soit jugée acceptable.
Le processus a convergé, on a capturé la connaissance.
Sauf que ce procédé est impraticable : une étude commandée en 1972 par le DoD
a montré que, s'il fallait $75 pour écrire une instruction, il en fallait 4000
pour modifier une instruction. Or ici, la quasi totalité du programme résulte
de modifications.
EXPLIQUER LA DIFFERENCE DE COÜT ENTRE ECRITURE ET MODIFICATION D'UNE INSTRUCTION (EN MOYENNE); ILLUSTRER PAR UN EXEMPLE D'APPLICATION (correction avec illustration)