Outils pour utilisateurs

Outils du site


ia:prolog:intro

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
ia:prolog:intro [2017/11/02 14:07] – [Problème] brunoia:prolog:intro [2018/11/09 11:50] (Version actuelle) – [Prise en main] bruno
Ligne 2: Ligne 2:
 ===== Supports de cour ===== ===== Supports de cour =====
 {{ :ia:prolog:cours1-ia-intro-.pdf |Introduction à l'IA et à Prolog}} {{ :ia:prolog:cours1-ia-intro-.pdf |Introduction à l'IA et à Prolog}}
 +
 +[[https://perso.liris.cnrs.fr/christine.solnon/publications/poly.pdf|Un très bon cours introductif de Christine Solnon]] qui reprend ce qui a été dit en cours. Lire les chapitres 1, 2 et 3 (et le reste si vous avez envie bien sûr!!!).
  
 ===== Travaux pratique en Prolog===== ===== Travaux pratique en Prolog=====
Ligne 9: Ligne 11:
 ==== Prise en main ==== ==== Prise en main ====
 {{ :ia:prolog:ia-robotique.tar.gz | TP découverte de Prolog}} {{ :ia:prolog:ia-robotique.tar.gz | TP découverte de Prolog}}
 +
 +Au programme: parties 1, 2 et 3.
 ==== Problème ==== ==== Problème ====
 Nous allons traiter un cas concret de planification de tâches appliqué à la robotique. Nous allons traiter un cas concret de planification de tâches appliqué à la robotique.
  
-=== Énoncé  === +[[ia:prolog:tpRobotiquePlanification de tâches robotisées en prolog]]
-Une école dispense des cours dans des salles informatiques équipées d'ordinateurs. +
- +
-L'objectif est qu'avant chaque cours, tous les ordinateurs soient allumés et qu'une bouteille d'eau soit disponible pour l'enseignant. +
- +
-L'école dispose d'un robot capable d'allumer un ordinateur s'il est éteint, et d'apporter une bouteille d'eau dans une salle. +
- +
-Les créneaux de cours sont les suivants: +
- +
-  * 7h00-8h00: libre (pas de cours) +
-  * 8h00-10h00; +
-  * 10h-10h30: pause (toutes les salles sont inoccupées); +
-  * 10h30-12h30; +
-  * 12h30-13h30: pause +
-  * 13h30-15h30; +
-  * 15h30:16h00: pause +
-  * 16h00-18h00; +
-  * 18h00-19h00: libre (pas de cours) +
- +
-L'objectif est de fournir un planning au robot permettant d'allumer avant chaque cours les machines et de fournir une bouteille d'eau. +
- +
-=== Mise en pratique === +
-Pour le moment, nous commencerons par considérer: +
-  - que le robot a besoin de 30 minutes pour s'occuper d'une salle; +
-  - que l'école dispose uniquement de 4 salles informatiques. +
- +
-Nous complexifierons les données en fin de TP. +
- +
-== 1) Description d'une solution == +
-  -  Décrivez en prolog une structure permettant de représenter une solution. +
-<spoiler|Structure d'une solution> +
-Il y a plusieurs solutions bien entendu, voici celle que nous utiliserons pour le moment: +
-<code prolog> +
-plan([ +
-    cr([_,_,_,_,_],r1), +
-    cr([_,_,_,_,_],r2), +
-    cr([_,_,_,_,_],r3), +
-    cr([_,_,_,_,_],r4), +
-    cr([_,_,_,_,_],r5), +
-    cr([_,_,_,_,_],r6), +
-    cr([_,_,_,_,_],r7), +
-    cr([_,_,_,_,_],r8), +
-    cr([_,_,_,_,_],r9), +
-    cr([_,_,_,_,_],r10), +
-    cr([_,_,_,_,_],r11), +
-    cr([_,_,_,_,_],r12), +
-    cr([_,_,_,_,_],r13), +
-    cr([_,_,_,_,_],r14), +
-    cr([_,_,_,_,_],r15), +
-    cr([_,_,_,_,_],r16), +
-    cr([_,_,_,_,_],r17), +
-    cr([_,_,_,_,_],r18), +
-    cr([_,_,_,_,_],r19), +
-    cr([_,_,_,_,_],r20), +
-    cr([_,_,_,_,_],r21), +
-    cr([_,_,_,_,_],r22), +
-    cr([_,_,_,_,_],r23), +
-    cr([_,_,_,_,_],r24) +
-    ]). +
-</code> +
- Questions auxquelles vous devez pouvoir répondre: +
-  * **Q1.1** pourquoi la liste de la solution comprend 24 lignes ? +
-  * **Q1.2** pourquoi dans cr([liste],valeur), //liste// a une taille de 5 et non de 4 (pour 4 salles)? +
-  * **Q1.3** à quoi servent les valeurs de variable r1, r2,...,r24?  +
- +
-</spoiler> +
-== 2) Écriture du but et affichage == +
-  - Créez un but avec cette solution (que nous appellerons //but//). +
-  - Affichez la solution (sans contrainte pour le moment). +
-<spoiler|Résultat attendu> +
-<code prolog+
-?- but. +
-[cr([_68,_70,_72,_74,_76],r1),cr([_81,_83,_85,_87,_89],r2),cr([_94,_96,_98,_100,_102],r3),cr([_107,_109,_111,_113,_115],r4),cr([_120,_122,_124,_126,_128],r5),cr([_133,_135,_137,_139,_141],r6),cr([_146,_148,_150,_152,_154],r7),cr([_159,_161,_163,_165,_167],r8),cr([_172,_174,_176,_178,_180],r9),cr([_185,_187,_189,_191,_193],r10),cr([_198,_200,_202,_204,_206],r11),cr([_211,_213,_215,_217,_219],r12),cr([_224,_226,_228,_230,_232],r13),cr([_237,_239,_241,_243,_245],r14),cr([_250,_252,_254,_256,_258],r15),cr([_263,_265,_267,_269,_271],r16),cr([_276,_278,_280,_282,_284],r17),cr([_289,_291,_293,_295,_297],r18),cr([_302,_304,_306,_308,_310],r19),cr([_315,_317,_319,_321,_323],r20),cr([_328,_330,_332,_334,_336],r21),cr([_341,_343,_345,_347,_349],r22),cr([_354,_356,_358,_360,_362],r23),cr([_367,_369,_371,_373,_375],r24)] +
-yes +
-</code> +
-<spoiler| Code du but et affichage> +
-<code prolog> +
-but:-plan(P), +
-    write(P). +
-</code> +
-Questions auxquelles vous devez pouvoir répondre: +
-  * **Q2.1** A quoi sert la règle //plan(P)// ? +
-</spoiler> +
-</spoiler> +
- +
-== 3) Amélioration de l'affichage == +
-  - Améliorez le rendu pour obtenir uniquement un affichage sous forme de tableau 2D (voir exemple attendu plus bas). +
-  - Réalisez pour cela une règle print_plan(P) permettant d'afficher uniquement l'occupation des créneaux. +
- +
-Vous pourrez avoir besoin de définir d'autres règles pour obtenir le résultat attendu! +
- +
-**Résultat attendu**: +
- +
-<prolog+
-| ?- but.                      +
-[_68,_70,_72,_74,_76] +
-[_81,_83,_85,_87,_89] +
-[_94,_96,_98,_100,_102] +
-[_107,_109,_111,_113,_115] +
-[_120,_122,_124,_126,_128] +
-[_133,_135,_137,_139,_141] +
-[_146,_148,_150,_152,_154] +
-[_159,_161,_163,_165,_167] +
-[_172,_174,_176,_178,_180] +
-[_185,_187,_189,_191,_193] +
-[_198,_200,_202,_204,_206] +
-[_211,_213,_215,_217,_219] +
-[_224,_226,_228,_230,_232] +
-[_237,_239,_241,_243,_245] +
-[_250,_252,_254,_256,_258] +
-[_263,_265,_267,_269,_271] +
-[_276,_278,_280,_282,_284] +
-[_289,_291,_293,_295,_297] +
-[_302,_304,_306,_308,_310] +
-[_315,_317,_319,_321,_323] +
-[_328,_330,_332,_334,_336] +
-[_341,_343,_345,_347,_349] +
-[_354,_356,_358,_360,_362] +
-[_367,_369,_371,_373,_375] +
- +
-yes +
- +
-</prolog>+
  
ia/prolog/intro.1509631670.txt.gz · Dernière modification : 2017/11/02 14:07 de bruno