Projet de représentation des connaissances 2008 Simulation de traitement médical Gauvain Bourgne February 27, 2008 1 Description du contexte On considère un ensemble de maladies. Chacune de ces maladies provoque un certain nombre de symptômes. Exemple 1 On considère l’ensemble de maladies suivant: Grippe, Bronchite, Angine, Pneumonie et Rhume. La grippe a pour symptômes toux, fièvre, et fatigue. La bronchite a pour symptômes toux et mucus. L’ angine a pour symptômes fièvre et fatigue. La pneumonie a pour symptômes fièvre et toux. Enfin, le rhume a pour seul symptôme mucus. A chacune de ses maladies est associée un traitement. Si un patient suit le traitement correspondant à sa maladie, il est totalement guéri de cette maladie. Si un patient subissait plusieurs maladies, il lui faudra les guérir séparément par deux traitements consécutifs. Il se peut cependant que le diagnostic soit inexact, et que le traitement ne corresponde pas à la maladie du patient. On a alors deux cas possibles (qui peuvent se mélanger) : • Le traitement a un effet partiel. Pour certaintes maladie, ce traitement soigne certains des symptômes, mais ne guérit pas la maladie. Ainsi, le symptôme disparaı̂tra temporairement, mais réapparaı̂tra plus tard après la fin du traitement si la maladie source n’a pas été soignée correctement. • Le traitement a des effets secondaires dans certains cas. Si le patient souffre de certaines maladies particulières, la combinaison du traitement avec la maladie fera apparaı̂tre certains symptômes qui disparaı̂tront à l’arrêt du traitement. Exemple 2 On note tG le traitement contre la grippe, tB celui contre la bronchite, tA le traitement pour l’ angine, tP celui contre la pneumonie, et enfin tR le traitement pour le rhume. 1 Le traitement tG a un effet partiel sur la bronchite. Quand un patient atteint de bronchite suit ce traitement, sa bronchite ne lui provoque plus de toux (notons que si le patient a une autre maladie, un effet secondaire ou une contre indication qui provoque aussi de la toux, il est possible qu’il tousse encore). De plus, ce traitement a un effet secondaire sur les patients ayant une bronchite: un patient souffrant de bronchite qui suite ce traitement devient sujet à de la fièvre. Cette dernière s’arrête quand la bronchite est soignée ou dès l’arrêt du traitement tG . Le traitement tB , pour sa part, a un effet partiel et un effet secondaire visà-vis du rhume. Quand il est appliqué à un patient ayant un rhume, il fait disparaitre le symptôme de mucus dû au rhume et provoque de la fatigue. Ces deux effets disparaissent à la fin du traitement. Le traitement pour l’angine, tA , a un effet partiel sur la grippe. Il annule les symptômes de fièvre causés par la grippe (mais pas ceux ayant une autre origine). Le traitement pour la pneumonie, tP , est spécifique, et n’a aucun effet partiel ni effet secondaire. Enfin, le traitement du rhume, tR , a un effet partiel sur la bronchite. Il annule en effet le symptôme de mucus causé par la bronchite. On se propose dans ce projet de simuler l’évolution de l’état d’un patient en fonction des traitements qu’il reçoit. Exemple 3 Prenons un cas pathologique. Soit un patient souffrant d’une pneumonie, d’une bronchite et d’une angine. Dans l’état initial, avant tout traitement, il a les symptômes des trois maladies. C’est à dire qu’il a de la toux, et de la fièvre du fait de sa pneumonie, de la fatigue et de la fièvre du fait de son angine, ainsi que du mucus et de la toux du fait de sa bronchite. Au final, il a de la toux, de la fièvre, de la fatigue et du mucus (un symptôme présent deux fois reste). Observant les symptômes, le medecin pense qu’il souffre d’une grippe et d’un rhume, et propose d’abord un traitement contre la grippe (tG ). Juste après ce traitement, on a les effets suivants: • le traitement n’est adapté à aucune de ses maladie, donc aucune maladie n’est soignée. • le traitement a eu un effet partiel sur la bronchite, annulant la toux due à celle-ci. Mais comme la pneumonie provoque aussi la toux et n’est pas soignée, le patient tousse toujours. • le traitement a un effet secondaire en cas de bronchite. Comme le patient souffre d’une bronchite, ce traitement provoque de la fièvre (la fièvre du patient a donc maintenant 3 causes !). Le patient souffre donc toujours des mêmes symptômes: toux, fièvre, fatigue et mucus. Le medecin tente maintenant le traitement tA . Les effets sont alors les suivants: • le traitement soigne l’ angine du patient. • comme le patient ne souffre pas de grippe, le traitement n’a pas d’effet partiel. Le patient a donc encore une pneumonie et une bronchite. En pratique, ces deux maladies provoquent les symptômes suivants: toux, fièvre, et mucus. Le soin de l’angine a permis d’éliminer la fatigue. On applique maintenant le traitement tP . Les effets sont alors les suivants: • le traitement soigne la pneumonie du patient. 2 Le patient a donc encore une bronchite. En pratique, il lui reste les symptômes suivants: toux, mucus. Un dernier traitement avec tB permet alors au malade de se débarasser de toutes ses maladies et de tous les symptômes (sans problème puisque le traitement correspond maintenant bien à la seule maladie du patient). On illustre avec un second cas. Exemple 4 Soit un patient souffrant d’une grippe et d’une bronchite. Dans l’état initial, avant tout traitement, il a les symptômes des deux maladies: toux, fièvre, fatigue et mucus. Observant les symptômes, le medecin pense qu’il souffre d’une grippe et d’un rhume, et propose d’abord un traitement contre la grippe (tG ). Juste après ce traitement, on a les effets suivants: • le traitement soigne la grippe du patient. • le traitement a un effet partiel sur la bronchite, annulant la toux due à celle-ci. Comme la grippe est aussi soignée, le patient ne tousse plus. • le traitement a un effet secondaire en cas de bronchite. Comme le patient souffre d’une bronchite, ce traitement provoque de la fièvre. Ainsi le patient n’a plus qu’une bronchite, dont la toux est annulée, mais il subit de la fièvre du fait des effets secondaires du traitement. Le patient souffre maintenant des symptômes suivant: fièvre et mucus. Le medecin tente maintenant le traitement tR (il arrête ainsi le traitement tG ). Les effets sont alors les suivants: • le traitement ne soigne aucune maladie , car le patient n’a pas de rhume. • le traitement a un effet partiel sur la bronchite, annulant le mucus du à celle-ci. Le patient a donc toujours sa bronchite, mais sans mucus. De plus, les effets secondaires et partiels de tG disparaı̂ssent (plus de fièvre, mais à nouveau de la toux). En pratique, il a maintenant uniquement le symptôme suivant: toux. Pour y voir, plus clair, le médecin interrompt tout traitement. Les effets partiel de tR sont alors annulés, et le mucus réapparait. Le patient a ainsi les symptômes suivants: toux et mucus. Le medecin prescrit alors enfin un traitement contre la bronchite (tB ). La bronchite est soignée sans effets secondaires, et en l’absence de maladies, le patient n’a plus aucun symptôme. 2 Questions Le projet devra comporter un programme, à présenter en soutenance de projet, et un rapport présentant le projet. Le rapport devra notamment contenir les réponses à toutes les questions qui ont une partie autre que programmation (questions 1 et 2). Il fournira aussi le code des fonctions explicitement demandées dans le sujet (question 3). Le programme pourra être programmé dans n’importe quel langage au choix de l’élève. Un langage objet procédural comme Java ou C++ est recommandé. Un utilisateur expérimenté de CAML pourra toutefois tout à fait utiliser ce langage. Le groupe devra cependant s’assurer que son programme fonctionne bien sur les ordinateurs de la salle de soutenance, ou apporter un ordinateur portable. 3 1. Proposer une structure de données pour représenter ce problème. Une structure de frames serait appréciée, mais n’est pas obligatoire. On veut pouvoir définir rapidement une maladie et ses symptômes, puis décrire les effets partiels et les effets secondaires de son traitement. Programmation: Coder la structure de donnée choisie, et l’instancier sur l’exemple donnée (grippe, pneumonie, angine, bronchite, rhume). Il sera demandé lors de la soutenance d’ajouter une maladie et un traitement donnés par l’examinateur. 2. On veut représenter ce problème avec en calcul des situations. Les constantes seront les maladies et les symptômes. On notera par la suite m une maladie, et y un symptôme. Les actions seront des traitements (ou bien l’action arrêter les traitements). Elles n’ont pas de préconditions (pas besoin du prédicat Poss). On aura ainsi l’action Traiter(m) qui signifie qu’on applique le traitement correspondant à la maladie m, et l’action Arret() qui signifie qu’on arrête les traitements pour observer l’évolution. Les fluents correspondront les maladies et les symptômes présents chez le patient. On aura ainsi le fluent AMaladie(m,s), qui indique que le patient a la maladie m dans la situation s, et le fluent ASymptome(y,s), qui indique que le patient a le symptôme y dans la situation s. (a) Donner l’axiome gouvernant l’évolution des fluents de maladies. On considère qu’aucune action ne déclenche de maladie, et qu’une maladie ne peut dont être présente que si elle était présente auparavant et qu’elle n’a pas été soignée. Aide: La formule sera de la forme: AMaladie(m, do(a,s)) ⇔ condition sur a et AMaladie(m, s). (b) Donner l’axiome gouvernant l’évolution de ASymptome(toux,s). Aide: La formule sera de la forme: ASymptome(toux, do(a,s)) ⇔ condition sur a et AMaladie(m, s). La condition sera une disjonction de deux termes. Le premier terme traduira que la grippe provoque de la toux si elle n’est pas soignée. C’est la traduction du fait qu’une maladie a des symptômes (ou plus exactement que le symptôme auquel on s’intéresse est un symptôme de grippe). Le deuxième terme traduira que la bronchite provoque aussi de la toux si elle n’est pas soignée, et que l’effet de toux de la bronchite n’est pas annulé par l’effet partiel du traitement de la grippe. Ce deuxième terme nous montre comment traduire les effets partiels d’un traitement. (c) Donner l’axiome gouvernant l’évolution de ASymptome(fievre,s). Aide: Ici la conjonction sera une disjonction de quatre termes. Les deux premiers correspondront au fait qu’on a de la fièvre si on a une pneumonie ou une angine non soignée. Le troisième correspondra au fait qu’on a de la fièvre si on a une grippe non soignée et qu’on a pas pris de traitement contre l’angine (qui a pour effet partiel d’annuler le symptôme de fièvre pour la grippe). Enfin le quatrième terme traduira une contre-indication. Il correspondra donc au fait 4 que l’on a de la fièvre si on a pris un traitement contre la grippe alors qu’on avait une bronchite. (d) Donner les axiomes gouvernant les évolutions des symptômes restants. (e) Donner l’axiome général donnant l’évolution d’un symptôme quelconque y. Aide: On se servira de • la fonction booléenne effets(y,m), qui renvoie vrai si y est un effet de m, • la fonction booléenne soinPartiel(m1 ,m2 ,y), qui renvoie vrai si le traitement de m1 a un effet partiel annulant le symptôme y quand le patient souffre de la maladie m2 . • la fonction booléenne effetSecondaire(m1 ,m2 ,y), qui renvoie vrai si le traitement de m1 a un effet secondaire provoquant le symptôme y quand le patient souffre de la maladie m2 . On aura donc dans la condition, une disjonction de deux conjonctions. La première conjonction correspond au fait que le symptôme y se manifeste s’il existe une maladie m contractée par le patient et non soignée qui a y pour symptôme, et qu’aucun des traitements qui ont pour effet partiel d’annuler y quand m est présente n’a été prescrit par la dernière action. La deuxième conjonction exprime le fait que le symptôme se manifeste aussi si l’on a appliqué le traitement d’une maladie m1 ayant pour effet secondaire y quand m2 est présente et que justement le patient souffre de m2 . 3. Programmation: (a) Programmer les fonctions booléennes effets(y,m), soinPartiel(m1,m2 ,y) et effetSecondaire(m1,m2 ,y). (b) On considérera par la suite qu’une situation est caractérisée par son état, c’est-à-dire la liste de tous les fluents de maladies et de symptômes qui sont vrais dans cette situation. Programmer la fonction booléenne appliquerActionMaladie(a,s,m) qui, à partir d’une situation s et d’une action a, renvoie la valeur de vérité du fluent AMaladie(m,do(a,s)). Aide : On pourra se servir de la question (2a) qui indique dans quelle conditions cette fonction est vraie. (c) Programmer la fonction booléenne appliquerActionSymptome(a,s,m) qui, à partir d’une situation s et d’une action a, renvoie la valeur de vérité du fluent ASymptome(m,do(a,s)). On s’appuiera sur l’axiome général d’évolution des fluents de symptômes (question , et les fonctions effets(y,m), soinPartiel(m1,m2 ,y) et effetSecondaire(m1,m2 ,y). (d) Programmer la fonction do(a,s) qui, à partir d’une situation s, renvoie la situation do(a,s). Aide: On pourra se servir des deux fonctions précédentes (et supposer qu’on a accès à la liste de toutes maladies et tous les symptômes possibles). 4. Programmation: Simulation de traitement. Programmer un simulateur qui, 5 (a) Permette de spécifier une situation initiale donnée correspondant aux maladies dont souffre le patient (par fichier de configuration, menu, ou au pire, directement dans le code - attention il faudra être capable de renseigner rapidement une situation initiale pendant la soutenance) (b) Affiche ensuite les symptômes correspondant à ces maladies initiales. (c) Demande à l’utilisateur de choisir un traitement. (d) Annonce le résultat du traitement (symptômes et maladies dans la nouvelle situation). (e) Itère les demandes de traitements jusqu’à ce que le patient soit guéri. 3 Soutenance Le groupe est encouragé à préparer sa soutenance afin d’éviter tout dysfonctionnement. Le rapport pourra être rendu lors de la soutenance. Lors de celle-ci, il sera demandé : 1. D’ajouter une nouvelle maladie et un traitement correspondant (avec effets partiels et effets secondaires), spécifiés par l’examinateur, aux données de base. 2. De faire la simulation avec des maladies de départ et une séquence de traitement donnés par l’examinateur. 6