ASP Syntaxe ASP par la pratique Clustering avec ASP Introduction à l'Answer Interfaçage Python/clingo Conclusion References Set Programming Thomas Guyet Agrocampus-Ouest/IRISA-Inria Séminaire du LIFO 9 mars 2015 T. Guyet Tuto ASP 1 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Outline 1 ASP 2 Syntaxe ASP par la pratique 3 Clustering avec ASP 4 Interfaçage Python/clingo 5 Conclusion T. Guyet Tuto ASP 2 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Answer Set Programming I Programmation ASP idéal de la programmation déclarative : le problème est le programme ⇒ modélisation du problème à résoudre sous formes d'axiomes et de contraintes exprimées dans un langage logique ; les résultats du programme sont des modèles logiques solution de l'ensemble de formules ⇒ un modèle = un ensemble réponse ⇒ formalisé par des modèles de Herbrand le résultat est un ensemble de modèles (ensembles réponses) des solveurs associés eectuent la recherche d'une, de plusieurs, ou de l'ensemble des solutions T. Guyet Tuto ASP 3 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Answer Set Programming II Résolution par la programmation classique Problem Solution 6 Specication algorithmique Interpreting ? Programme Comment résoudre -Compilation - Execution - Sortie Solving T. Guyet Tuto ASP 4 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Answer Set Programming III Résolution par la programmation ASP Problem Solution 6 Modeling Interpreting ? Logic Program - Grounder - Solver - Stable Models Solving T. Guyet Tuto ASP 5 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Programmation ASP et Prolog I Prolog= Programmation en Logique, même domaine, approche "déclarative" (on décrit des relations, pas des procédures). Syntaxiquement, il y a des ressemblances évidentes Constante : entier, mot de a-z, A-Z,0-9,_* débutant par une minuscule. Variable : mot de a-z,A-Z,0-9,_* débutant par une majuscule. Fonction : constante(terme,..., terme) Les clauses du programme sont également très ressemblantes Fait : p (2, a) . Règles : q(X) :− p(X,Y), q(Y). Contraintes (ou buts) : :− q(2). T. Guyet Tuto ASP 6 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Programmation ASP et Prolog II Model Generation based approach (eg. SATisability testing) Theorem Proving based approach (eg. Prolog) 1 Provide a representation of the problem A solution is given by a derivation of a query on(a , b) . on(b,c) . above(X,Y) :− above(X,Z), on(Z,Y). above(X,Y) :− on(X,Y). 2 1 Provide a representation of the problem above(a,c). Fatal Error : local stack overow . ?− T. Guyet Tuto ASP on(a, b) ∧ on(b, c )∧ (on(X , Y ) → above (X , Y ))∧ (on(X , Z ) ∧ above (Z , Y ) → above (X , Y )) 2 A solution is given by a model of the representation (Herbrand model) on(a, b), on(b, c ), on(a, c ), on(b, b), above (a, b), above (b, c ), above (a, c ), above (b, b), above (c , b) 7 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Programmation ASP et Prolog III Diérences Prolog/ASP Une approche plus déclarative : l'ordre des clauses n'a aucune importance. Un modélisation basée sur la négation par défaut (not) ⇒ not p ⇔ Si p ne peut être prouvé, alors on peut déduire p. ⇒ le programme q ← not p . engendre q (car p ne peut pas être falsié) On peut écrire des termes du premier ordre mais, par contre, tout doit se ramener à du propositionnel. Les solutions sont des modèles de l'ensemble des clauses : des ensembles d'atomes vrais dans la théorie décrite. Le langage inclut l'expression de critères à optimiser. T. Guyet Tuto ASP 8 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Conception d'un programme ASP Principe "général" de programmation [Lif08] 1 ensemble de règles pour "générer" des modèles (modèles potentielles) 2 ensemble de règles de dénition : règles classiques de prolog. 3 ensemble de contraintes : éliminent les modèles non-souhaités 4 directive d'achage : #show B ces règles dénissent un espace de recherche qui sera parcourus Coloration de graphe 1 node(1). node(2). node(3). node(4). node(5). node(6). 2 edge(1,2) . edge(1,3) . edge(1,4) . edge(2,4) . edge(2,5) . 3 edge(3,1) . edge(3,4) . edge(3,5) . edge(4,1) . edge(4,2) . 4 edge(5,4) . edge(5,6) . edge(6,2) . edge(6,3) . edge(6,5) . 5 col ( r ) . col ( m). col ( b) . col ( c ) . col ( g) . col ( o) . 6 7 1 { color ( X,C) : col ( C) } 1 :− node(X). 8 :− edge(X,Y), color ( X,C), color ( Y,C). 9 10 #show color/2. T. Guyet Tuto ASP edge(2,6) . edge(5,3) . 9 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Principes de résolution Résolution par la programmation ASP Problem Solution 6 Modeling Interpreting ? Logic Program - Grounder - Solver - Stable Models Solving T. Guyet Tuto ASP 10 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Principes de résolution Interfaçage Python/clingo grounding Conclusion References I Programme P p (X , Y ) ← q (X , Y ). q (a, b). q (b, c ). Univers de Herbrand H = {a, b , c } Programme instancié p (a, a) ← q (a, a), p (b, a) ← q (b, a), p (c , a) ← q (c , a), q (a, b) p (a, b) ← q (a, b), p (a, c ) ← q (a, c ), p (b, b) ← q (b, b), p (b, c ) ← q (b, c ), p (c , b) ← q (c , b), p (c , c ) ← q (c , c ), q (b, c ) Instanciation par gringo {p (a, b ), p (b , c ), q (a, b ), q (b , c )} T. Guyet Tuto ASP 11 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Principes de résolution Interfaçage Python/clingo grounding Conclusion References II Toutes les variables d'une règle doivent être "instanciables", sinon la variable est dite unsafe. :− 1 { node(X), not color (X,C). % C is unsafe color (X,C) } 1 :− node(X). % C is unsafe ! La manière la plus simple pour assurer cette contrainte est de dénir un domaine ni pour chaque variable d'une règle. :− 1 { node(X), col (C), not color (X,C). color (X,C) : col (C) } 1 :− node(X). gringo essaye d'inférer le domaine pour réduire le nombre de règles dans le programme instancié Avertissement Une instanciation mal pensée peut conduire à un besoin en mémoire très important ! T. Guyet Tuto ASP 12 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Principes de résolution Interfaçage Python/clingo Conclusion References solve Stratégie générale clasp Aectation=vrai TANT QUE Aectation Propagation des conséquences déterministe du jeu de clauses SI pas de conit (clause vide détectée) SI toutes les variables sont assignées Sortir la solution aectation=faux SINON Choisir une variable et lui aecter une valeur de vérité SINON Analyser la source du conit ajouter une contrainte de conit Défaire toutes les aectations de variable jusqu'à contrainte unitaire T. Guyet Tuto ASP 13 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Principes de résolution vue pratique Avertissement Slides intuitifs servant à aider à la conception des programmes. Voir les détails des solveurs pour les stratégies de résolution. T. Guyet Tuto ASP 14 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Principes de résolution vue pratique Attention à l'explosion combinatoire de l'espace de recherche ! Gestion de le redondance : B les modèles explorés ne peuvent pas partager d'information entre eux ! B parallélisation possible du solveur Trouver le nombre minimal de couleurs pour colorer un graphe. nb_colors (1..6) } 1. K{ col(a ; m;b;c ; g ; o) } K :− nb_colors(K). 1{ 1 { :− color (X,C) : col (C) } 1 :− node(X). edge(X,Y), color (X,C), color (Y,C). minimize{ K : nb_colors(K) }. # show color/2. # T. Guyet Tuto ASP 15 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Résolution avec la suite Potassco clingo gringo : instantiateur clasp : solveur de contraintes (conict driven solver ) Appels de clingo clingo text coloration.lp : pour voir le modèle instancié ⇒ très utile pour vérier que le programme correspond à notre idée de la modélisation ! clingo coloration.lp : résolution (génère 1 ensemble réponse) clingo -n 10 coloration.lp : résolution (génère 10 ensembles réponses) clingo -n 0 coloration.lp : résolution (génère toutes les ensembles réponses) clingo -n 0 stats quiet=2,2 coloration.lp : statistiques de l'exécution, sans achage clingo help : aide T. Guyet Tuto ASP 16 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Outline 1 ASP 2 Syntaxe ASP par la pratique 3 Clustering avec ASP 4 Interfaçage Python/clingo 5 Conclusion T. Guyet Tuto ASP 17 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Un peu de syntaxe (Gringo 4) I Commentaires : % ou %∗ ... ∗% Littéraux : p, not p, X<Y, U=V, U !=V, p(|20+T∗−3|/U) ⇒ toutes les variables/constantes sont interprétées comme des entiers (pas d'opérations sur des nombres réels) "extension conditionnelle" : r (X):q(X), désigne l'ensemble des r (X) q (45;56;67) . r (78) . r (X):q(X). %%grounding: r(45);r(56);r(67). B Lors de l'utilisation d'expressions conditionnelles, il faut faire attention aux distinction , et ; . q (45;56;67) . r (56) . u(X): q(X), not r (X). %deux modeles : r(56). q(45). q(56). q(67). u(45);u(67). v(X): q(X); not r (X). %X unsafe T. Guyet Tuto ASP 18 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Un peu de syntaxe (Gringo 4) II Littéraux de choix ensemblistes : 1 { ... } 2 : choix d'un sous-ensemble des atomes contenant 1 à 2 atomes : 6 modèles possibles (tous sont des AS) Déclaration des faits (pooling ) node(1).node(2).node(3). peut être simplié en node (1..3) . edge(1,2) . edge(1,4) . edge(1,6) . peut être "simplié" en node (1,(2;4;6) ) . 1{ r (X):q(X) } 2. 3 formes de règles Classique : autre (X) :− r (X), not q(X). Règles de choix : c (1.. n) . 1 { color ( X, I ) : c( I )} 1 :− v(X). Contraintes (règles sans têtes) : :− r (X), q(x) . Directives d'achage des prédicats : #show node/1., #show edge/2. par défaut, tous les prédicats sont achés si une directive #show est utilisée, les autres prédicats sont par défaut cachés. T. Guyet Tuto ASP 19 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Un peu de sémantique Un programme est ensemble de règles de la forme : A0 ← A1 , . . . , Am , not Am+1 , . . . , not An où Ai désigne un atome propositionnel. La sémantique intuitive de cette règle est : si on a généré A1 , . . . , Am dans un modèle, et qu'il est impossible de générer chacun des Am+1 , . . . , An , alors on peut générer A0 T. Guyet Tuto ASP 20 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Problème de recherche d'un cycle Hamiltonian Une chaîne hamiltonienne est une chaîne qui passe une fois et une seule par chaque sommet du graphe Un cycle hamiltonien est une chaîne hamiltonienne qui est cyclique Ressources france.lp : chier de description de l'instance du problème (données) hamilton_v?.lp : diérentes versions de résolution hamilton_optim.lp : partie de programme pour l'optimisation du chemin de Hamilton (minimisation de la distance) T. Guyet Tuto ASP 21 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Cycle Hamiltonien (version 1) ville (angers,147571). ville (bordeaux,239157). ville ( brest ,141303). ville (nantes,284970). %Distances routieres edge(angers,bordeaux, 335). edge(angers, brest ,371) . edge(angers,nantes ,90) . edge(bordeaux,brest , 634). edge(bordeaux,nantes,329). edge( brest , nantes , 305). 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 edge(X,Y):− edge(X,Y,_). %projection des donnees edge(X,Y,C):− edge(Y,X,C). %symetrisation des arcs node(X;Y):− edge(X,Y). %generation des noeuds start ( brest ) . % denition d'un point de depart % denition d'une chaine cycle (X,Y) } 1 :− edge(X,Y). cycle (X,Y), { cycle (Y,Z) : node(Z)}0. :− cycle ( X,Y), { cycle ( Z,X) : node(Z)}0. 0{ :− %liste des points atteints reached(Y):− cycle(X,Y), reached(X). reached(Y):− cycle(X,Y), start (X). %tous les noeuds doivent etre atteints :− node(X), not reached(X). %on ne passe qu'une seule fois dans chaque noeud :− 2{ # cycle (X,Y) }, node(X). show cycle/2. Vérication clingo 10 france.lp hamilton_v1.lp clingo 0 quiet=2,2 stats france.lp hamilton_v1.lp Statistiques T. Guyet Tuto ASP 22 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Cycle Hamiltonien (version 1) : analyse du programme Génération des cycles cycle (X,Y) } 1 :− edge(X,Y). : instanciation très coûteuse (proportionnelle au nombre d'arcs du graphe) 0{ requière beaucoup de mémoire lors de l'instanciation le temps nécessaire à cette étape est important risque d'avoir des résolutions diciles également (beaucoup de modèles sont à évaluer) ⇒ Conclusions : il faut générer moins de modèles ! ! Idéal de la programmation déclarative ... certes, mais les programmes ecaces nécessitent un peu de pratique ! T. Guyet Tuto ASP 23 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Cycle Hamiltonien (version 2) Amélioration du programme Astuce : si on ne passe qu'une fois pas ville, il y a exactement 1 cycle partant et 1 cycle arrivant pour chaque noeuds 1 edge(X,Y):− edge(X,Y,_). 2 edge(X,Y,C):− edge(Y,X,C). 3 node(X;Y):− edge(X,Y). 4 start ( brest ) . % denition d'un point de 5 6 1{ cycle ( X,Y):edge(X,Y) }1 :− node(X). 7 1{ cycle ( X,Y):edge(X,Y) }1 :− node(Y). 8 9 reached(Y):− cycle(X,Y), reached(X). 10 reached(Y):− cycle(X,Y), start ( X). 11 :− node(X), not reached(X). 12 #show cycle/2. depart Statistiques T. Guyet Tuto ASP 24 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Cycle Hamiltonien (version 3) Elimination des solutions redondantes Les symmétries de problèmes sont la plaie de l'ASP redondance articielle de solutions dans des AS diérents autant de travail à faire pour tous les cas dupliqués Casser les symétries ore souvent des gains de temps de résolution ! ⇒ les solutions sont dupliquées par deux sens possibles de parcours d'un cycle (orienté) 1 edge(X,Y):− edge(X,Y,_). edge(X,Y,C):− edge(Y,X,C). 2 start ( brest ) . % denition d'un point de depart 3 4 1{ cycle ( X,Y):edge(X,Y) }1 :− node(X). 5 1{ cycle ( X,Y):edge(X,Y) }1 :− node(Y). 6 reached(Y):− cycle(X,Y), reached(X). 7 reached(Y):− cycle(X,Y), start ( X). 8 :− node(X), not reached(X). 9 10 :− cycle ( X,Y), cycle ( Z,X), start ( X), Z<Y. 11 #show cycle/2. Statistiques T. Guyet Tuto ASP node(X;Y):− edge(X,Y). Alternative ecace 25 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Exercice From Richard Bird and Sharon Curtis : "Functional pearls : Finding celebrities : A lesson in functional programming" J. Funct. Program., 16(1) :1320, 2006. Given the graph for a list of people at a party of people they know, nd the celebrities at the party. A celebrity is a person that everybody at the party knows but that only knows other celebrities. At least one celebrity is present at the party. Write an ASP program that nd who are the celebrities in this party graph Adam knows {Dan, Alice, Peter, Eva} Dan knows {Adam, Alice, Peter} Eva knows {Alice, Peter} Alice knows {Peter} Peter knows {Alice} ⇒ pas de contraintes ensemblistes ici ! Solution T. Guyet Tuto ASP 26 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Les agrégats Les agrégats sont des directives qui s'appliquent sur les ensembles Supported Functions : min : minimum des termes max : maximum des termes #sum : sommes des termes #count : nombre de termes # # Exemple Récupération d'une valeur 1 2 p (1..3) . q(X) :− X = #sum{Y:p(Y)}. T. Guyet Tuto ASP 27 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Utilisation de min/max Attention avec les agrégats l'instanciation d'un agrégat peut conduire à une explosion combinatoire (à l'instanciation) des valeurs pour identier l'extremum recherché il est parfois plus judicieux d'identier les extremums manuellement Trouver la plus grande ville Solution avec un #max plusgrandeville (V) :− ville (V,P), P = #max{Q : ville(U,Q)}. Solution "ensembliste" (pas de ville plus grande que la plus grande) plusgrandeville (V) :− ville (V,P), { ville (U,Q):Q>P} 0 . Solution astucieuse (attention : entre ; et , ) plusgrandeville (V) :− ville (V,P); not ville (U,Q):Q>P,ville(_,Q), ville (U,_). T. Guyet Tuto ASP 28 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Optimisation des solutions Sélection des modèles optimaux Il est possible de sélectionner les modèles selon un (ou plusieurs) critères d'optimisation. Directives d'optimisation maximize # #minimize hd (1..5) }1. cost (1,250) . cost (2,500) . cost (3,750) . cost (4,1000) . cost (5,1000) . e (1,20) . e (2,40) . e (3,75) . e (4,80) . e (5,70) . 1{ # # minimize{ C@1 : cost(X,C),hd(X) }. maximize{ C@2 : cost(X,C),hd(X) }. Appels de clingo clingo 0 optimisation.lp : donne les modèles intermédiaires jusqu'à trouver un optimum clingo 0 optimisation.lp opt-mode=optN : donne tous les modèles optimaux T. Guyet Tuto ASP 29 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Cycle de Hamilton minimal Coût des cycles chaque arc est associé à un poid (le distance entre deux villes) on cherche à identier le chemin de moindre coût Contraintes de minimisation Ajout aux programmes précédents : cost (SC) :− SC= #sum{C: edge(X,Y,C),cycle(X,Y)}. #minimize {C@1 : cost(C)}. Evaluations clingo france.lp hamilton_v3.lp hamilton_optim.lp Temps de résolution v1 : 880.122s v2 : 401.177s v3 : 190.654s Longueur minimale du cycle : 2733 T. Guyet Tuto ASP 30 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Outline 1 ASP 2 Syntaxe ASP par la pratique 3 Clustering avec ASP 4 Interfaçage Python/clingo 5 Conclusion T. Guyet Tuto ASP 31 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Clustering : approche déclarative Description de la tâche La classication non supervisée, ou clustering, est un problème d'optimisation mono-objectif : minimisation du diamètre maximal des clusters D ou maximisation de la marge entre clusters S bi-objectif : (max(S ), min(D )) Approche de Dao et al. basée sur la programmation par contraintes [TBHD14]. Vers une implémentation ASP On donne une base de faits dist (X,Y,C) : distance C entre les objets X et Y, Y>X (voir chier dist_iris.lp). #const k=3. : dénition du nombre souhaité de classes (constante) T. Guyet Tuto ASP 32 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Exercice Dénir les nouveaux faits utiles à la résolution : cluster /1, objet /1. Dénition de la partition ∆ : règle de choix pour l'attribution d'un objet à un cluster (prédicat att /2) Contraindre un cluster à avoir au moins 2 éléments Dénir une règle pour le calcul du diamètre de la partition diametre/1. D (∆) = max c ∈[1,k ],(oi ,oj )∈Cc d (oi , oj ) Dénir une règle pour le calcul de la marge de la partition M (∆) = 1≤ min c <c 0 ≤k ,oi ∈Cc ,oj ∈Cc 0 d (oi , oj ) Écrire les directives d'optimisation des critères : min∆ D (∆), max∆ M (∆) Solution T. Guyet Tuto ASP 33 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Ajout de contraintes utilisateurs sur le clustering Contraintes de type must-link, cannot-link :− :− att (C,X), att (C,Y), cannotlink (X,Y). att (C1,X), att (C2,Y), C1!=C2, mustlink(X,Y). → nécessite de dénir des faits correspondant aux prédicats cannotlink /2. et mustlink /2. Contraintes de diamètre maximal/marge minimale ∀c ∈ [1, k ], ∀oi , oj ∈ Cc , d (oi , oj ) ≤ γ , ∀c ∈ [1, k ], c 0 6= c , ∀oi ∈ Cc , oj ∈ Cc 0 , d (oi , oj ) ≥ δ const delta=40. #const gamma=500. :− att ( C,X), att ( C,Y), d(X,Y,D), X<Y, D>gamma. :− att ( C1,X), att ( C2,Y), C1!=C2, d(X,Y,D), D<delta. # T. Guyet Tuto ASP 34 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Outline 1 ASP 2 Syntaxe ASP par la pratique 3 Clustering avec ASP 4 Interfaçage Python/clingo 5 Conclusion T. Guyet Tuto ASP 35 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Clingo4 : ASP + Control clingo4 cherche à répondre à des problèmes où la connaissance est apportée de manière dynamique [GKKS14] Les caractéristiques principales de cet environnement sont : l'interfaçage avec des langages de scripts : Lua et Python la possibilité de déclarer des sous-programmes (paramétré) le contrôle de l'exécution via deux instructions de base ground et solve ; accès à des variables externes http://potassco.sourceforge.net/gringo.html Détail technique ! L'utilisation des fonctionnalités de script avec Python nécessite de compiler sa version de clingo. Usage pratique récupération de statistiques complémentaires automatisation du chargement d'une base de faits récupération structurée des sorties de la résolution T. Guyet Tuto ASP 36 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Interfaçage Python embedding Directive de script La directive #script permet d'inclure du code Python dans un programme ASP, dans ce cas la fonction main(prg) du programme dénit la procédure de résolution prg . ground([("base", []) ]) : instanciation prg . solve () : résolution script (python) import gringo def id (x) : return x def seq(x , y) : return [ x , y ] script (python) import gringo # def main(prg): prg . ground([("base", prg . solve () #end. p(@id(10)) . q(@seq(1,2)) . T. Guyet Tuto ASP # def onModel(model): print model []) ]) def main(prg): prg . ground([("sousp", [5]) ]) prg . solve (on_model=onModel) #end. program sousp(n). q (1.. n) . # 37 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Interfaçage Python intégration Python Inclusion de résolution dans un programme Python Possibilité d'inclure des résolution ASP au sein d'un programme Python Permet de développer des outils intégrant clingo from gringo import ∗ def onModel(model): print model ctl = Control() ctl . load ("./structures/patterns.lp") ctl . ground([("base", []) ]) ctl . solve (on_model=onModel) print ( json . dumps(ctl. stats , sort_keys=True, indent=4, separators=(',', ': '))) Exemples clingo quiet=2,2 classif_embedded.lp python classif_embedded.py a a. nécessite un export T. Guyet Tuto ASP PYTHONPATH=. 38 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Outline 1 ASP 2 Syntaxe ASP par la pratique 3 Clustering avec ASP 4 Interfaçage Python/clingo 5 Conclusion T. Guyet Tuto ASP 39 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Sur le langage ASP Les possibilités du langage sont en fait plus complexes mais au-delà des possibilités d'une introduction Notons qu'il est possible d'utiliser la négation classique en utilisant le moins (e.g −p:− q.) La modélisation ASP reste un art délicat ! les bonnes modélisations s'appuient sur des représentations concises, limitant les symmetries des améliorations peuvent être apportées par des astuces (e.g. attention aux aggrégats !) l'approche expérimentale est de mise ! T. Guyet Tuto ASP 40 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Sur la suite Potassco clingo en version 4 est un logiciel fonctionnel et ecace (cette version est prévue pour être stable) De nombreuses options sont encore à découvrir : choix des heuristiques de résolution utilisation de la parallélisation la résolution incrémentale (avec Python) la suite logicielle s'accompagne d'autres outils spéciques moteurs hybrides (asprin, aspartame) solveurs expérimentaux (aclasp) les grandes possibilités d'interfaçage sont très intéressantes en pratique (Python, Lua ou C++) T. Guyet Tuto ASP 41 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References L'ASP c'est utile quand ? Pour .. Techniquement, ASP ore un cadre unié pour des aspects bases de données, bases de connaissances, résolution de contraintes et programmation logique. Il est possible de faire de l'optimisation et d'utiliser diérents modes de raisonnement pour chercher une solution, toutes, les meilleures, leur intersection ou leur union. La résolution des problèmes combinatoires est le coeur de cible d'ASP. En particulier c'est un candidat de choix pour attaquer des problèmes NP-complets et NP-diciles (graphes, raisonnement, ...) du fait de la facilité de mettre au point et tester diérents modèles et diérentes heuristiques . Contre ... remplacer des algorithmes classiques maîtrisés : pour faire du tri, du calcul ou du traitement de séquences, il faut revenir à un langage de programmation classique. Embarquer des scripts Python pour les pré et post-traitements ; travailler dans des espaces peu structurés et peu contraints ou des espaces diciles à discrétiser. résoudre un problème qui nécessiterait de nombreuses étapes successives qui communiquent : un programme ASP ne permet pas d'écrire des procédures. T. Guyet Tuto ASP 42 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Ressources complémentaires http://potassco.sourceforge.net/teaching.html ⇒ cours, tutoriaux et références de Potassco ⇒ vidéos d'utilisation de clingo ⇒ listes de diusion de clingo (active) Answer Set Solving in Practice, by Martin Gebser, Roland Kaminski, Benjamin Kaufmann, and Torsten Schaub, Morgan and Claypool [GKKS12] ( ! !clingo 3 ! !) T. Guyet Tuto ASP 43 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References ASP nos applications phares Fouille déclarative de motifs Adaptation des tâches classiques de fouille de motifs itemsets, séquences, ux de données variantes des motifs : clos, maximaux motifs émergents Utilisation de connaissances expertes sur les données Extraction d'un sous-ensemble de motifs optimaux k -patterns sets dominant patterns Application à la caractérisation de parcours de soins Utilisation d'ASP proposition de modélisation des tâches ajout de connaissances dans le processus de fouille utilisation de Python pour les entrées/sorties exploration de modélisation ecace (with T. Schaub et al.) T. Guyet Tuto ASP 44 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References ASP nos applications phares Simulation des paysages agricoles Recomposition des occupations du sol pour un parcellaire agricole Formalisation par un problème de couverture de graphe contraint par des structures (graph-packing ) Ajout de contraintes expertes complémentaires Utilisation d'ASP résolution d'un problème de graph-packing symmetry breaking : approches génériques intégration du solveur dans des scripts python (interfaces en cours) T. Guyet Tuto ASP 45 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References Merci de votre attention ! Ce support s'inspire des présentations de J. Nicolas (Inria/Dyliss) et de T. Schaub (Potassco). Mes remerciements vont également à Y. Moinard qui m'a mis le pied à l'étrier. T. Guyet Tuto ASP 46 / 53 ASP Syntaxe ASP par la pratique Clustering avec ASP Interfaçage Python/clingo Conclusion References References I M. Gebser, R. Kaminski, B. Kaufmann, and T. Schaub, Answer set solving in practice, Synthesis Lectures on Articial Intelligence and Machine Learning, Morgan and Claypool Publishers, 2012. Martin Gebser, Roland Kaminski, Benjamin Kaufmann, and Torsten Schaub, Clingo = ASP + control : Preliminary report, CoRR abs/1405.3694 (2014). Vladimir Lifschitz, What is answer set programming ?, Proceedings of the Twenty-Third AAAI Conference on Articial Intelligence, AAAI 2008, Chicago, Illinois, USA, July 13-17, 2008 (Dieter Fox and Carla P. Gomes, eds.), AAAI Press, 2008, pp. 15941597. C Vrain T.-B.-H. Dao, K.-C. Duong, Classication non supervisée mono et bi-objectif par la programmation par contraintes, Dixièmes Journées Francophones de Programmation par Contraintes (JFPC), 2014. T. Guyet Tuto ASP 47 / 53 Annexes Statistiques Cycle Hamiltonien - v1 Retour Models Calls Time CPU Time : : : : 5040 1 0.384s (Solving: 0.38s 1st Model: 0.00s Unsat: 0.01s) 0.380s Choices Conflicts Restarts Model-Level Problems Lemmas Binary Ternary Conflict Loop Other : : : : : : : : : : : 13977 8586 235 8.3 1 6921 10 29 6921 0 0 : : : : : : 490 1344 369 649 No 232 Atoms Rules Bodies Equivalences Tight T. Guyet Tuto ASP Variables (Analyzed: 6921) (Average: 29.45 Last: 246) (Average Length: 0.00 Splits: 0) (Deleted: 0) (Ratio: 0.14%) (Ratio: 0.42%) (Average Length: 17.3 Ratio: 100.00%) (Average Length: 0.0 Ratio: 0.00%) (Average Length: 0.0 Ratio: 0.00%) (1: 496/1280 2: 120/8 3: 56/56) (Atom=Atom: 184 Body=Body: 0 Other: 465) (SCCs: 1 Non-Hcfs: 0 Nodes: 71 Gammas: 0) (Eliminated: 0 Frozen: 120) 48 / 53 Annexes Statistiques Cycle Hamiltonien - v2 Retour Models Calls Time CPU Time : : : : 5040 1 0.038s (Solving: 0.03s 1st Model: 0.00s Unsat: 0.00s) 0.030s Choices Conflicts Restarts Model-Level Problems Lemmas Binary Ternary Conflict Loop Other : : : : : : : : : : : 5975 925 29 5.3 1 226 0 0 226 0 0 : : : : : : 298 432 169 473 No 136 Atoms Rules Bodies Equivalences Tight T. Guyet Tuto ASP Variables (Analyzed: 226) (Average: 7.79 Last: 220) (Average Length: 0.00 Splits: 0) (Deleted: 0) (Ratio: 0.00%) (Ratio: 0.00%) (Average Length: 12.9 Ratio: 100.00%) (Average Length: 0.0 Ratio: 0.00%) (Average Length: 0.0 Ratio: 0.00%) (1: 288/400 2: 32/16 3: 16/16) (Atom=Atom: 200 Body=Body: 0 Other: 273) (SCCs: 1 Non-Hcfs: 0 Nodes: 71 Gammas: 0) (Eliminated: 0 Frozen: 120) 49 / 53 Annexes Statistiques Cycle Hamiltonien - v3 Retour Models Calls Time CPU Time : : : : 2520 1 0.021s (Solving: 0.02s 1st Model: 0.00s Unsat: 0.00s) 0.020s Choices Conflicts Restarts Model-Level Problems Lemmas Binary Ternary Conflict Loop Other : : : : : : : : : : : 3077 530 19 10.3 1 282 0 0 282 0 0 : : : : : : 298 453 190 473 No 136 Atoms Rules Bodies Equivalences Tight T. Guyet Tuto ASP Variables (Analyzed: 282) (Average: 14.84 Last: 1) (Average Length: 0.00 Splits: 0) (Deleted: 0) (Ratio: 0.00%) (Ratio: 0.00%) (Average Length: 14.2 Ratio: 100.00%) (Average Length: 0.0 Ratio: 0.00%) (Average Length: 0.0 Ratio: 0.00%) (1: 309/421 2: 32/16 3: 16/16) (Atom=Atom: 200 Body=Body: 0 Other: 273) (SCCs: 1 Non-Hcfs: 0 Nodes: 71 Gammas: 0) (Eliminated: 0 Frozen: 120) 50 / 53 Annexes Retour Le programme ci-dessous est basé sur une génération de tous les sous-ensembles de chemin, combiné avec les contraintes proposées il est cependant très ecace (équilavent aux autres). 1 edge(X,Y):− edge(X,Y,_). 2 edge(X,Y,C):− edge(Y,X,C). 3 node(X;Y):− edge(X,Y). 4 start ( brest ) . 5 6 { cycle ( X,Y) } :− edge(X,Y). 7 :− 2 { cycle ( X,Y) : edge(X,Y)}, node(X). 8 :− 2 { cycle ( X,Y) : edge(X,Y)}, node(Y). 9 10 reached(Y):− cycle(X,Y), reached(X). 11 reached(Y):− cycle(X,Y), start ( X). 12 :− node(X), not reached(X). 13 14 #show cycle/2. T. Guyet Tuto ASP 51 / 53 Annexes Retour 1 %The party graph 2 knows(adam, (dan;alice ; peter ; eva)) . knows(dan, (adam;alice ; peter )) . 3 knows(eva, ( alice ; peter )) . 4 knows( alice , peter ) . knows(peter, alice ) . 5 %People at the party 6 people(X):−knows(X,_). 7 people(X):−knows(_,X). 8 % A person is unknown if someone else does not know it 9 unknown(U) :− people(P); people(U); U!=P; not knows(P,U). 10 % A person is normal if it knows someone who is not a celebrity 11 normal(P):− people(P); people(U); U!=P; knows(P,U), not celebrity ( U). 12 %A celebrity is a person neither unknown or normal 13 celebrity ( C):−people(C), not unknown(C), not normal(C). 14 %At least one celebrity is present at the party . 15 :− not celebrity ( C):people(C). 16 #show celebrity /1. T. Guyet Tuto ASP 52 / 53 Annexes Retour # const k=3. % denition des clusters cluster (1.. k) . % denition des objets a partir des distances objet (X) :− dist (X,_,_). %projection T. Guyet Tuto ASP 53 / 53 Annexes Retour # const k=3. % denition des clusters cluster (1.. k) . % denition des objets a partir des distances objet (X) :− dist (X,_,_). %projection % Denition de la partition % −> choix de l' attribution des objets aux clusters 1{ att (C,X): cluster (C) }1 :− objet (X). T. Guyet Tuto ASP 53 / 53 Annexes Retour # const k=3. % denition des clusters cluster (1.. k) . % denition des objets a partir des distances objet (X) :− dist (X,_,_). %projection % Denition de la partition % −> choix de l' attribution des objets aux clusters 1{ att (C,X): cluster (C) }1 :− objet (X). % au moins deux objets par classes :− cluster (C), {att (C,X): objet (X)}1. T. Guyet Tuto ASP 53 / 53 Annexes Retour # const k=3. % denition des clusters cluster (1.. k) . % denition des objets a partir des distances objet (X) :− dist (X,_,_). %projection % Denition de la partition % −> choix de l' attribution des objets aux clusters 1{ att (C,X): cluster (C) }1 :− objet (X). % au moins deux objets par classes :− cluster (C), {att (C,X): objet (X)}1. % Diametre de la partition diam(D) :− D=#max{ M : dist(X,Y,M), att(C,X), att(C,Y), X<Y, cluster(C) }. T. Guyet Tuto ASP 53 / 53 Annexes Retour # const k=3. % denition des clusters cluster (1.. k) . % denition des objets a partir des distances objet (X) :− dist (X,_,_). %projection % Denition de la partition % −> choix de l' attribution des objets aux clusters 1{ att (C,X): cluster (C) }1 :− objet (X). % au moins deux objets par classes :− cluster (C), {att (C,X): objet (X)}1. % Diametre de la partition diam(D) :− D=#max{ M : dist(X,Y,M), att(C,X), att(C,Y), X<Y, cluster(C) }. % Marge de la partition marge(M) :− M=#min{D : dist(X,Y,D), att(C1,X), att(C2,Y), X<Y, C1!=C2}. % on ne peut pas mettre C1<C2 a cause de la matrice de distance triangulaire (X<Y) T. Guyet Tuto ASP 53 / 53 Annexes Retour # const k=3. % denition des clusters cluster (1.. k) . % denition des objets a partir des distances objet (X) :− dist (X,_,_). %projection % Denition de la partition % −> choix de l' attribution des objets aux clusters 1{ att (C,X): cluster (C) }1 :− objet (X). % au moins deux objets par classes :− cluster (C), {att (C,X): objet (X)}1. % Diametre de la partition diam(D) :− D=#max{ M : dist(X,Y,M), att(C,X), att(C,Y), X<Y, cluster(C) }. % Marge de la partition marge(M) :− M=#min{D : dist(X,Y,D), att(C1,X), att(C2,Y), X<Y, C1!=C2}. % on ne peut pas mettre C1<C2 a cause de la matrice de distance triangulaire (X<Y) %Directives d' optimisation # # minimize{ D@1 : diam(D) }. maximize{ M@1 : marge(M) }. T. Guyet Tuto ASP 53 / 53