{"id":385,"date":"2017-05-15T12:09:36","date_gmt":"2017-05-15T12:09:36","guid":{"rendered":"http:\/\/imalogic.com\/blog\/?p=385"},"modified":"2017-05-15T13:38:20","modified_gmt":"2017-05-15T13:38:20","slug":"labeling-in-clpfd-with-evolutionary-programming","status":"publish","type":"post","link":"https:\/\/imalogic.com\/blog\/2017\/05\/15\/labeling-in-clpfd-with-evolutionary-programming\/","title":{"rendered":"Labeling in CLP(FD) with evolutionary programming"},"content":{"rendered":"<body><p><\/p>\n<h1>Introduction<\/h1>\n<ul>\n<li>Les probl\u00e8mes d\u2019optimisation combinatoire sur des nombres entiers sont d\u00e9finis comme suit :\n<ul>\n<li>un groupe de variable.<\/li>\n<li>un groupe de contraintes associ\u00e9es \u00e0 celles-ci.<\/li>\n<li>un fonction objective<\/li>\n<\/ul>\n<p>Le probl\u00e8me est de trouver une solution qui satisfait les contraintes et optimise (minimise ou maximise) la fonction objective.<\/p><\/li>\n<li>L\u2019id\u00e9e de base de la <strong>P<\/strong>rogrammation <strong>L<\/strong>ogique par <strong>C<\/strong>ontrainte (Constraint Logic Programming(FD)\u00b9)<br>\nest de remplacer le m\u00e9canisme d\u2019unification de la Programmation Logique par la r\u00e9solution de contraintes sur des domaines particuliers, en consid\u00e9rant le r\u00e9solveur de contraintes comme une bo\u00eete noire qui se charge de tester la satisfiabilit\u00e9 des contraintes.<\/li>\n<li>La compr\u00e9hension et l\u2019imitation des ph\u00e9nom\u00e8nes naturels d\u2019\u00e9volution et d\u2019adaptation des individus et des populations a donn\u00e9 lieu \u00e0 de nombreux algorithmes d\u2019intelligence artificielle regroup\u00e9s sous le terme g\u00e9n\u00e9rique d\u2019algorithmes \u00e9volutionnaires. Les plus connus sont les algorithmes g\u00e9n\u00e9tiques (GA), les Evolution Strategies (ES) et les Evolutionary Programming (EP).<\/li>\n<li>Ces algorithmes se r\u00e9v\u00e8lent robustes et efficaces dans la r\u00e9solution de nombreux probl\u00e8mes et en particulier des probl\u00e8mes d\u2019optimisation et de satisfaction de contraintes (p. ex. la planification, l\u2019ordonancement et l\u2019affectation de ressources). Ils sont largement utilis\u00e9s dans les industries, le transport, les t\u00e9l\u00e9communications, la d\u00e9fence, les soins de sant\u00e9 , etc. De nombreuses recherches sont aujourd\u2019hui r\u00e9alis\u00e9es dans ce domaine tr\u00e8s actif de l\u2019intelligence artificielle.<\/li>\n<li>Le principe de base de ces algorithmes est la mise en oeuvre de processus de s\u00e9lection, mutation et recombinaison au sein d\u2019une population d\u2019individus; chaque individu repr\u00e9sentant un point particulier dans l\u2019espace de recherche.<\/li>\n<li>La litt\u00e9rature scientifique propose une large game d\u2019algorithmes \u00e9volutionnaires, de strat\u00e9gies de s\u00e9lection, d\u2019op\u00e9rateurs de mutation et de recombinaison. N\u00e9anmoins, la mise en oeuvre de ces algorithmes pour la r\u00e9solution de probl\u00e8mes sp\u00e9cifiques d\u2019optimisation reste encore, aujourd\u2019hui, un art et laisse une grande part \u00e0 la cr\u00e9ativit\u00e9.<\/li>\n<\/ul>\n<h1>Base du probl\u00e8me<\/h1>\n<ul>\n<li>Probl\u00e8me d\u2019optimisation combinatoire<\/li>\n<li>Programmation Logique par Contrainte sur des Domaines Finis (CLP-FD)<\/li>\n<li>Paradigme utilis\u00e9 : \u00ab\u00a0Constraint &amp; Generate\u00a0\u00bb, 3 phases<br>\n1) Phase de contrainte : r\u00e9duction de l\u2019espace de recherche<br>\n2) Phase d\u2019\u00e9num\u00e9ration ou Labeling : invoque la r\u00e9solution compl\u00e8te des contraintes<br>\n3) Phase de recherche de la solution optimale : heuristique sp\u00e9cifique ou m\u00e9thode g\u00e9n\u00e9rale ( Branch &amp; Bound )<\/li>\n<li>Mais les limites existent\u2026<\/li>\n<\/ul>\n<h1>L\u2019alternative<\/h1>\n<ul>\n<li>Les algorithmes d\u2019approximation<\/li>\n<li>Pas de garantie pour trouver la solution optimale<\/li>\n<li>Haute probabilit\u00e9 de trouver une bonne solution en explorant seulement une partie de l\u2019espace des solutions.<\/li>\n<li>Int\u00e9gration d\u2019une technique d\u2019approximation appel\u00e9e \u00ab\u00a0Evolutionary Programming into CLP(FD)\u00a0\u00bb<\/li>\n<\/ul>\n<h1>Labeling with evolutionary programming<\/h1>\n<ul>\n<li>But : Am\u00e9liorer CLP(FD)<\/li>\n<li>Par une technique d\u2019optimisation qui : suivant une liste de variables de domaines et une expression de co\u00fbt qui retourne une solution (la plus optimale) en respectant l\u2019expression de co\u00fbt.<\/li>\n<\/ul>\n<h1>Algorithmes \u00e9volutionnaires<\/h1>\n<ul>\n<li>La compr\u00e9hension et l\u2019imitation des ph\u00e9nom\u00e8nes naturels d\u2019\u00e9volution et d\u2019adaptation des individus et des populations a donn\u00e9 lieu \u00e0 de nombreux algorithmes d\u2019intelligence artificielle regroup\u00e9s sous le terme g\u00e9n\u00e9rique d\u2019algorithmes \u00e9volutionnaires.<\/li>\n<li>Ils permettent une recherche effective dans un espace de recherche tr\u00e8s large.<\/li>\n<li>Le principe de base de ces algorithmes est la mise en oeuvre de processus de s\u00e9lection, mutation et recombinaison au sein d\u2019une population d\u2019individus; chaque individu repr\u00e9sentant un point particulier dans l\u2019espace de recherche.<\/li>\n<li>\u00ab\u00a0Genetic Algorithms + Data structures = evolution programs\u00a0\u00bb<\/li>\n<\/ul>\n<h1>Evolutionary program (1)<\/h1>\n<pre>Procedure evolutionary program\r\nBegin\r\n t:=0;\r\n initialize P(t); \r\n evaluate P(t);\r\n while not termination-condition do begin\r\n   t := t + 1;\r\n   select P(t) from P(t-1);\r\n   alter P(t);\r\n   evaluate P(t);\r\n end;\r\nEnd.<\/pre>\n<h1>Evolutionary program (2)<\/h1>\n<ul>\n<li>Population de \u00ab\u00a0chromosomes\u00a0\u00bb, P(t) = {Xt1 \u2026,Xtn } pour l\u2019it\u00e9ration t.<\/li>\n<li>Chaque chromosome repr\u00e9sente une solution potentiele du probl\u00e8me et est repr\u00e9sent\u00e9 par une structure de donn\u00e9e : S<\/li>\n<li>La premi\u00e8re \u00e9tape dans tous les programmes \u00e9volutionnaires est la g\u00e9n\u00e9ration de la population initiale : P(0), qui est g\u00e9n\u00e9r\u00e9 de fa\u00e7on al\u00e9atoire (INITIALIZE)<\/li>\n<li>La population est ensuite \u00e9valu\u00e9e. A chaque g\u00e9n\u00e9ration, une valeur \u00abfitness \u00bb (adaptation) est calcul\u00e9e pour chaque chromosome Xti<\/li>\n<li>Fitness indiquant le degr\u00e9 de \u00ab\u00a0justesse\u00a0\u00bb du chromosome comme \u00e9tant solution du probl\u00e8me d\u2019optimisation. (EVALUATE)<\/li>\n<li>La fonction objective du probl\u00e8me qui doit \u00eatre optimis\u00e9e est \u00e0 la base du calcul de la valeur \u00ab\u00a0fitness\u00a0\u00bb<\/li>\n<\/ul>\n<h1>Evolutionary program (3)<\/h1>\n<ul>\n<li>Une nouvelle population P(t+1) est form\u00e9e par s\u00e9lection d\u2019un certain nombre de chromosomes de la population P(t) (SELECT)<\/li>\n<li>Les chromosomes, ayant la meilleure valeur d\u2019 \u00abadaptation\u00bb, ont plus de chance d\u2019\u00eatre retenu par la proc\u00e9dure de s\u00e9lection.<\/li>\n<li>Quelques chromosomes de la population P(t) seront pr\u00e9sent dans la population P(t+1)<\/li>\n<li>Tous les \u00ab\u00a0mauvais\u00a0\u00bb chromosomes ne sont pas tous jet\u00e9s car ils pourraient \u00e9ventuellement conduire \u00e0 la g\u00e9n\u00e9ration d\u2019une bonne solution.<\/li>\n<\/ul>\n<h1>Evolutionary program (4)<\/h1>\n<ul>\n<li>Quelques membres de la nouvelle population subiront des transformations (op\u00e9rateurs g\u00e9n\u00e9tiques) afin de former de nouvelles solutions. (ALTER)<\/li>\n<li>Ces op\u00e9rateurs g\u00e9n\u00e9tiques vont g\u00e9n\u00e9rer de nouveaux chromosomes qui seront additionn\u00e9s \u00e0 la population P(t)<\/li>\n<li>La mutation : la mutation cr\u00e9e des nouvelles solutions par de petit changement dans un simple chromosomes. S S, elle permet de \u00ab\u00a0sauter\u00a0\u00bb vers des zones encore inexplor\u00e9e de l\u2019espace de recherche.<\/li>\n<\/ul>\n<h1>Condition de terminaison<\/h1>\n<ul>\n<li>Soit on atteint un nombre d\u2019it\u00e9ration maximum<\/li>\n<li>Soit on arr\u00eate apr\u00e8s un temps d\u00e9termin\u00e9 par l\u2019utilisateur<\/li>\n<li>Soit on obtient un chromosome ayant le co\u00fbt sp\u00e9cifi\u00e9 par l\u2019utilisateur<\/li>\n<li>Soit on atteint une population invariante et\u00a0sans espoir<\/li>\n<\/ul>\n<h1>Param\u00e9trisation<\/h1>\n<ul>\n<li>Taille de la population<\/li>\n<li>Pourcentage de survivant \u00e0 chaque g\u00e9n\u00e9ration, \u2026<\/li>\n<li>Affecte dramatiquement les performances du syst\u00e8me<\/li>\n<\/ul>\n<h1>Exemple<\/h1>\n<p>Recherche d\u2019un plan de transport de co\u00fbt minimum pour un produit unique<\/p>\n<ul>\n<li>Soit n sources et k destination<\/li>\n<li>Nombre de provision \u00e0 la source i : sour(i)<\/li>\n<li>Nombre de demande \u00e0 la destination : dest(j)<\/li>\n<li>Co\u00fbt de transport entre la source i et la destination j : cost(i,j)<\/li>\n<li>Volume transport\u00e9 entre la source i et la destination j : X i,j<\/li>\n<\/ul>\n<p><a href=\"https:\/\/i0.wp.com\/imalogic.com\/blog\/wp-content\/uploads\/2017\/05\/formule.jpg?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"387\" data-permalink=\"https:\/\/imalogic.com\/blog\/2017\/05\/15\/labeling-in-clpfd-with-evolutionary-programming\/formule\/\" data-orig-file=\"https:\/\/i0.wp.com\/imalogic.com\/blog\/wp-content\/uploads\/2017\/05\/formule.jpg?fit=395%2C255&amp;ssl=1\" data-orig-size=\"395,255\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}\" data-image-title=\"formule\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/imalogic.com\/blog\/wp-content\/uploads\/2017\/05\/formule.jpg?fit=395%2C255&amp;ssl=1\" class=\"size-medium wp-image-387 aligncenter\" src=\"https:\/\/i0.wp.com\/imalogic.com\/blog\/wp-content\/uploads\/2017\/05\/formule.jpg?resize=300%2C194&#038;ssl=1\" alt=\"\" width=\"300\" height=\"194\" loading=\"lazy\" srcset=\"https:\/\/i0.wp.com\/imalogic.com\/blog\/wp-content\/uploads\/2017\/05\/formule.jpg?resize=300%2C194&amp;ssl=1 300w, https:\/\/i0.wp.com\/imalogic.com\/blog\/wp-content\/uploads\/2017\/05\/formule.jpg?w=395&amp;ssl=1 395w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<h1>Exemple (2)<\/h1>\n<ul>\n<li>La forme de la courbe est caract\u00e9ristique des programmes \u00e9volutionnaires<\/li>\n<li>Les chromosomes de d\u00e9part ont une valeur adaptative pauvre, mais apr\u00e8s quelques it\u00e9rations les bonnes solutions sont g\u00e9n\u00e9r\u00e9es<\/li>\n<li>Tous les chromosomes de la population tendent \u00e0 converger lentement vers une m\u00eame solution proche de l\u2019optimale<\/li>\n<\/ul>\n<p><a href=\"https:\/\/i0.wp.com\/imalogic.com\/blog\/wp-content\/uploads\/2017\/05\/courbe.png?ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"388\" data-permalink=\"https:\/\/imalogic.com\/blog\/2017\/05\/15\/labeling-in-clpfd-with-evolutionary-programming\/courbe\/\" data-orig-file=\"https:\/\/i0.wp.com\/imalogic.com\/blog\/wp-content\/uploads\/2017\/05\/courbe.png?fit=437%2C220&amp;ssl=1\" data-orig-size=\"437,220\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"courbe\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/imalogic.com\/blog\/wp-content\/uploads\/2017\/05\/courbe.png?fit=437%2C220&amp;ssl=1\" class=\" wp-image-388 aligncenter\" src=\"https:\/\/i0.wp.com\/imalogic.com\/blog\/wp-content\/uploads\/2017\/05\/courbe.png?resize=379%2C191&#038;ssl=1\" alt=\"\" width=\"379\" height=\"191\" loading=\"lazy\" srcset=\"https:\/\/i0.wp.com\/imalogic.com\/blog\/wp-content\/uploads\/2017\/05\/courbe.png?resize=300%2C151&amp;ssl=1 300w, https:\/\/i0.wp.com\/imalogic.com\/blog\/wp-content\/uploads\/2017\/05\/courbe.png?w=437&amp;ssl=1 437w\" sizes=\"auto, (max-width: 379px) 100vw, 379px\" \/><\/a><\/p>\n<h1>Conclusion<\/h1>\n<ul>\n<li>L\u2019int\u00e9gration d\u2019un algorithme \u00e9volutionnaire dans la programmation logique par contrainte sur les domaines finis a permis de r\u00e9aliser la phase d\u2019\u00e9num\u00e9ration (de fa\u00e7on optimale) du probl\u00e8me de recherche d\u2019optimisation combinatoire<\/li>\n<li>La version finale du syst\u00e8me devrait \u00eatre comp\u00e9titive par rapport aux strat\u00e9gies classiques tel que \u00ab\u00a0branch &amp; bound\u00a0\u00bb et promet un bel avenir.<\/li>\n<\/ul>\n<hr>\n<p>\u00b9CLP(FD) : Constraint Logic Programming over Finite Domains<\/p>\n<\/body>","protected":false},"excerpt":{"rendered":"<p>Introduction Les probl\u00e8mes d\u2019optimisation combinatoire sur des nombres entiers sont d\u00e9finis comme suit : un groupe de variable. un groupe<\/p>\n","protected":false},"author":1,"featured_media":386,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[7],"tags":[],"class_list":["post-385","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-coding"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/imalogic.com\/blog\/wp-content\/uploads\/2017\/05\/labeling.jpg?fit=512%2C256&ssl=1","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p8J21V-6d","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/imalogic.com\/blog\/wp-json\/wp\/v2\/posts\/385","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/imalogic.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/imalogic.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/imalogic.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/imalogic.com\/blog\/wp-json\/wp\/v2\/comments?post=385"}],"version-history":[{"count":1,"href":"https:\/\/imalogic.com\/blog\/wp-json\/wp\/v2\/posts\/385\/revisions"}],"predecessor-version":[{"id":394,"href":"https:\/\/imalogic.com\/blog\/wp-json\/wp\/v2\/posts\/385\/revisions\/394"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/imalogic.com\/blog\/wp-json\/wp\/v2\/media\/386"}],"wp:attachment":[{"href":"https:\/\/imalogic.com\/blog\/wp-json\/wp\/v2\/media?parent=385"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/imalogic.com\/blog\/wp-json\/wp\/v2\/categories?post=385"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/imalogic.com\/blog\/wp-json\/wp\/v2\/tags?post=385"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}