{"id":15651,"date":"2022-04-21T15:41:59","date_gmt":"2022-04-21T14:41:59","guid":{"rendered":"https:\/\/complex-systems-ai.com\/?page_id=15651"},"modified":"2024-02-11T15:57:58","modified_gmt":"2024-02-11T14:57:58","slug":"exercices-corriges-de-programmation-logique-par-contraintes","status":"publish","type":"page","link":"https:\/\/complex-systems-ai.com\/es\/optimizacion-combinatoria\/ejercicios-de-programacion-logica-de-restricciones-corregidas\/","title":{"rendered":"5 ejercicios de programaci\u00f3n l\u00f3gica de restricciones corregidos"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"15651\" class=\"elementor elementor-15651\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-20ce3ee elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"20ce3ee\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-117f488\" data-id=\"117f488\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-e92a903 elementor-align-justify elementor-widget elementor-widget-button\" data-id=\"e92a903\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/complex-systems-ai.com\/optimisation-combinatoire\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Optimisation Combinatoire<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-ee057bb\" data-id=\"ee057bb\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d551eac elementor-align-justify elementor-widget elementor-widget-button\" data-id=\"d551eac\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/complex-systems-ai.com\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Page d'accueil<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-86335ef\" data-id=\"86335ef\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-511dcf4 elementor-align-justify elementor-widget elementor-widget-button\" data-id=\"511dcf4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/fr.wikipedia.org\/wiki\/Programmation_par_contraintes\" target=\"_blank\" rel=\"noopener\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Wiki<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-1b1b01f elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"1b1b01f\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-1ca60ff\" data-id=\"1ca60ff\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-25d06a4 elementor-widget elementor-widget-heading\" data-id=\"25d06a4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Contenus<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Alternar tabla de contenidos\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/complex-systems-ai.com\/es\/optimizacion-combinatoria\/ejercicios-de-programacion-logica-de-restricciones-corregidas\/#Programmation-logique-par-contraintes\" >Programmation logique par contraintes<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/complex-systems-ai.com\/es\/optimizacion-combinatoria\/ejercicios-de-programacion-logica-de-restricciones-corregidas\/#Exercice-1\" >Exercice 1<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/complex-systems-ai.com\/es\/optimizacion-combinatoria\/ejercicios-de-programacion-logica-de-restricciones-corregidas\/#Exercice-2\" >Exercice 2<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/complex-systems-ai.com\/es\/optimizacion-combinatoria\/ejercicios-de-programacion-logica-de-restricciones-corregidas\/#Exercice-3\" >Exercice 3<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/complex-systems-ai.com\/es\/optimizacion-combinatoria\/ejercicios-de-programacion-logica-de-restricciones-corregidas\/#Exercice-4\" >Exercice 4<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/complex-systems-ai.com\/es\/optimizacion-combinatoria\/ejercicios-de-programacion-logica-de-restricciones-corregidas\/#Exercice-5\" >Exercice 5<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"ez-toc-section\" id=\"Programmation-logique-par-contraintes\"><\/span>Programmation logique par contraintes<span class=\"ez-toc-section-end\"><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-a46817d elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"a46817d\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-5996bdf\" data-id=\"5996bdf\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-361472c elementor-widget elementor-widget-text-editor\" data-id=\"361472c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Cette page pr\u00e9sente des exercices corrig\u00e9s d\u00e9taill\u00e9s du probl\u00e8me de <a href=\"https:\/\/complex-systems-ai.com\/es\/algoritmico\/programacion-logica-2\/\">programmation logique<\/a> par contraintes, qui est un m\u00e9lange naturel de la programmation logique et la <a href=\"https:\/\/complex-systems-ai.com\/es\/optimizacion-combinatoria\/programacion-de-restricciones\/\">programmation par contraintes<\/a>.<\/p><p><img decoding=\"async\" class=\"aligncenter wp-image-11096 size-full\" src=\"https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2020\/09\/cropped-Capture.png\" alt=\"programmation logique par contraintes\" width=\"97\" height=\"97\" title=\"\"><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-ad79018 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"ad79018\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-63a4e33\" data-id=\"63a4e33\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-484c43f elementor-widget elementor-widget-heading\" data-id=\"484c43f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"ez-toc-section\" id=\"Exercice-1\"><\/span>Exercice 1<span class=\"ez-toc-section-end\"><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-0948023 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"0948023\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-417a4e2\" data-id=\"417a4e2\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-1c016a7 elementor-widget elementor-widget-text-editor\" data-id=\"1c016a7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>On consid\u00e8re le puzzle suivant :<\/p><p><img decoding=\"async\" class=\"alignnone wp-image-15657 size-full\" src=\"https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2022\/04\/log1.png\" alt=\"programmation logique par contraintes\" width=\"210\" height=\"206\" title=\"\" srcset=\"https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2022\/04\/log1.png 210w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2022\/04\/log1-12x12.png 12w\" sizes=\"(max-width: 210px) 100vw, 210px\" \/><\/p><p>Chaque r\u00e9gion de la grille doit \u00eatre remplie par un nombre entre 0 et 9 de sorte que<\/p><ul><li>les nombres dans deux r\u00e9gions adjacentes (verticalement ou horizontalement) soient diff\u00e9rents<\/li><li>\u00e0 chaque fois qu\u2019il y a quatre r\u00e9gions qui se rencontrent en un point (indiqu\u00e9 par un petit rond), la somme de leurs nombres soient \u00e9gale \u00e0 20.<\/li><\/ul><p>R\u00e9soudre ce probl\u00e8me par programmation logique par contraintes.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-efbe706 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"efbe706\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-536bb4f\" data-id=\"536bb4f\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6701380 elementor-widget elementor-widget-toggle\" data-id=\"6701380\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"toggle.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-toggle\">\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-1081\" class=\"elementor-tab-title\" data-tab=\"1\" role=\"button\" aria-controls=\"elementor-tab-content-1081\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-caret-right\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-caret-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">Solution<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-1081\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"1\" role=\"region\" aria-labelledby=\"elementor-tab-title-1081\"><p>Nommons de haut \u00e0 gauche vers le bas \u00e0 droite (par ligne) les cases vides par une lettre. Chaque domaine a une valeur comprise entre 0 et 9. Par la suite, il faut remplir les deux contraintes \u00e0 la main.<\/p><p>Pour chaque case, son score doit \u00eatre diff\u00e9rent de ses voisines.<\/p><p>Pour chaque rond, la somme doit \u00eatre \u00e9gale \u00e0 20.<\/p><p>Nous avons donc la programmation logique par contraintes suivante :<\/p><pre>L = [A,B,C,D,E,F,G,H,I,J,K,M],<br \/>L :: [0..9],<br \/>A #\\= 7, A #\\= 8, A #\\= 6,<br \/>B #\\= 8, B #\\= 4,<br \/>C #\\= 7, C #\\= 6, C #\\= 9, <br \/>D #\\= 6, D #\\= 8,<br \/>E #\\= 6, E #\\= 8, E #\\= 4, E #\\= 5,<br \/>F #\\= 9, F #\\= 6, F #\\= G, F #\\= J,<br \/>G #\\= 6, G #\\= 5, G #\\= K,<br \/>H #\\= 5, H #\\= 4, H #\\= M,<br \/>I #\\= 9, I #\\= J, J #\\= K,<br \/>K #\\= 5, K #\\= M,<br \/>7+6+A+C #= 20, A+6+8+D #= 20, 6+8+D+E #= 20, 4+8+B+E #= 20,<br \/>9+6+C+F #= 20, 5+6+E+G #= 20, 4+5+E+H #= 20,<br \/>9+F+I+J #= 20, F+G+J+K #= 20, 5+H+K+M #= 20,<br \/>labeling(L).\u00a0<\/pre><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-e6a75d4 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"e6a75d4\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6362d93\" data-id=\"6362d93\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-02e8f76 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"02e8f76\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-74452fb elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"74452fb\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-ef7da06\" data-id=\"ef7da06\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-117be1f elementor-widget elementor-widget-heading\" data-id=\"117be1f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"ez-toc-section\" id=\"Exercice-2\"><\/span>Exercice 2<span class=\"ez-toc-section-end\"><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-345ee8a elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"345ee8a\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-8d18ff9\" data-id=\"8d18ff9\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ee520f3 elementor-widget elementor-widget-text-editor\" data-id=\"ee520f3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>On consid\u00e8re le jeu Bokkusu. Le but du jeu est de marquer en noir certaines cases de la grille donn\u00e9e.<\/p><p>Chaque case a deux valeurs : une valeur A et une valeur B. Les nombres \u00e0 droite d\u00e9notent les valeurs A des cases de chaque ligne correspondante et les nombres en bas d\u00e9enotent les valeurs B des cases de chaque colonne correspondante (Ces valeurs vont toujours de 1 \u00e0 la taille de la grille en\u00a0 augmentant de 1 de gauche \u00e0 droite ou du haut vers le bas).<\/p><p>Les valeurs \u00e0 gauche indiquent la somme des valeurs B des cases noires pour chaque ligne et les valeurs en haut indiquent la somme des valeurs\u00a0A des cases noires pour chaque colonne. Un exemple d\u2019une grille et sa solution est donn\u00e9 dans la figure.\u00a0Dans la solution de cette exemple on a par exemple 7 = 1 + 2 + 4 (les cases avec valeur B de 1, 2 et\u00a04 sont marqu\u00e9es noir) et 6 = 2 + 4 (les cases avec valeurs A de 2 et 4 sont marqu\u00e9es).<\/p><p><img decoding=\"async\" class=\"alignnone wp-image-15659 size-medium\" src=\"https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2022\/04\/log3-300x111.png\" alt=\"programmation logique par contraintes\" width=\"300\" height=\"111\" title=\"\" srcset=\"https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2022\/04\/log3-300x111.png 300w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2022\/04\/log3-18x7.png 18w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2022\/04\/log3.png 350w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/p><p>R\u00e9soudre ce probl\u00e8me par programmation logique par contraintes.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-39d008d elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"39d008d\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-1c20cb3\" data-id=\"1c20cb3\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-e2a274c elementor-widget elementor-widget-toggle\" data-id=\"e2a274c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"toggle.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-toggle\">\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-2371\" class=\"elementor-tab-title\" data-tab=\"1\" role=\"button\" aria-controls=\"elementor-tab-content-2371\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-caret-right\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-caret-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">Solution<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-2371\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"1\" role=\"region\" aria-labelledby=\"elementor-tab-title-2371\"><p>Nommons chaque case de la grille de fa\u00e7on matriciel. Pour les contraintes, il faut que la somme des variables binaires (blanc=0 ou noir=1) multipli\u00e9 par les coefficients \u00e0 gauche ou en haut soient \u00e9gale \u00e0 la valeur en face.<\/p><pre>L = [X11,X12,X13,X14,<br \/>X21,X22,X23,X24,<br \/>X31,X32,X33,X34,<br \/>X41,X42,X43,X44],<br \/>fd_domain(L,0,1),<br \/>X11 + 2*X12 + 3*X13 + 4*X14 #= 3,<br \/>X21 + 2*X22 + 3*X23 + 4*X24 #= 7,<br \/>X31 + 2*X32 + 3*X33 + 4*X34 #= 1,<br \/>X41 + 2*X42 + 3*X43 + 4*X44 #= 2,<br \/>X11 + 2*X21 + 3*X31 + 4*X41 #= 5,<br \/>X12 + 2*X22 + 3*X32 + 4*X42 #= 6,<br \/>X13 + 2*X23 + 3*X33 + 4*X43 #= 1,<br \/>X14 + 2*X24 + 3*X34 + 4*X44 #=2<\/pre><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9fc1e12 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"9fc1e12\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4314042\" data-id=\"4314042\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-83af9cd elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"83af9cd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-84b2238 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"84b2238\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-fc12a57\" data-id=\"fc12a57\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4fc2779 elementor-widget elementor-widget-heading\" data-id=\"4fc2779\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"ez-toc-section\" id=\"Exercice-3\"><\/span>Exercice 3<span class=\"ez-toc-section-end\"><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-a4f52ca elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"a4f52ca\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-b95f854\" data-id=\"b95f854\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4fda2ca elementor-widget elementor-widget-text-editor\" data-id=\"4fda2ca\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>On consid\u00e8re le probl\u00e8me de g\u00e9n\u00e9rer un emploi de temps. Il y a 7 cours et 4 cr\u00e9neaux. Un cr\u00e9neaux peut accueillir au maximum 2 cours. Il y a les contraintes suivantes :<\/p><p>\u2013 Cours 4 doit \u00eatre avant cours 6.<br \/>\u2013 Cours 5 doit \u00eatre avant cours 7.<br \/>\u2013 Cours 6 doit \u00eatre avant cours 2.<br \/>\u2013 Cours 1 ne peut pas \u00eatre en parall\u00e8le avec les cours 2, 3, 4 et 7.<br \/>\u2013 Cours 2 ne peut pas \u00eatre en parall\u00e8le avec les cours 3 et 6.<br \/>\u2013 Cours 3 ne peut pas \u00eatre en parall\u00e8le avec les cours 4, 5 et 6.<br \/>\u2013 Cours 4 ne peut pas \u00eatre en parall\u00e8le avec les cours 5 et 6.<br \/>\u2013 Cours 5 ne peut pas \u00eatre en parall\u00e8le avec le cours 7.<\/p><p>R\u00e9soudre ce probl\u00e8me par programmation logique par contraintes.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-8c7876c elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"8c7876c\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-7cc92ba\" data-id=\"7cc92ba\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ac462e6 elementor-widget elementor-widget-toggle\" data-id=\"ac462e6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"toggle.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-toggle\">\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-1801\" class=\"elementor-tab-title\" data-tab=\"1\" role=\"button\" aria-controls=\"elementor-tab-content-1801\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-caret-right\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-caret-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">Solution<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-1801\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"1\" role=\"region\" aria-labelledby=\"elementor-tab-title-1801\"><p>On va consid\u00e9rer que les cours sont des domaines, et qu&rsquo;ils peuvent prendre une valeur de 1 \u00e0 4 correspondant au cr\u00e9neau qui sera choisi. La programmation logique par contraintes est la suivante :<\/p><pre>L = [C1,C2,C3,C4,C5,C6,C7],<br \/>fd_domain(L,1,4),<br \/>C4 #&lt; C6, C5 #&lt; C7, C6 #&lt; C2,<br \/>C1 #\\= C2, C1 #\\= C3, C1 #\\= C4, C1 #\\= C7,<br \/>C2 #\\= C3, C2 #\\= C6,<br \/>C3 #\\= C4, C3 #\\= C5, C3 #\\= C6,<br \/>C4 #\\= C5, C4 #\\= C6,<br \/>C5 #\\= C7,<br \/>fd_cardinality(1,[C1#=1,C2#=1,C3#=1,C4#=1,C5#=1,C6#=1,C7#=1],2),<br \/>fd_cardinality(1,[C1#=2,C2#=2,C3#=2,C4#=2,C5#=2,C6#=2,C7#=2],2),<br \/>fd_cardinality(1,[C1#=3,C2#=3,C3#=3,C4#=3,C5#=3,C6#=3,C7#=3],2),<br \/>fd_cardinality(1,[C1#=4,C2#=4,C3#=4,C4#=4,C5#=4,C6#=4,C7#=4],2),<br \/>fd_labeling(L)<\/pre><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-94c1403 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"94c1403\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-252fe67\" data-id=\"252fe67\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2426a63 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"2426a63\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-8c898ea elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"8c898ea\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-48c1467\" data-id=\"48c1467\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5970126 elementor-widget elementor-widget-heading\" data-id=\"5970126\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"ez-toc-section\" id=\"Exercice-4\"><\/span>Exercice 4<span class=\"ez-toc-section-end\"><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-931ed72 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"931ed72\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-9fdeb60\" data-id=\"9fdeb60\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-91e3a10 elementor-widget elementor-widget-text-editor\" data-id=\"91e3a10\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Inshi no heya est un jeu logique japonais. Il est jou\u00e9 sur une grille rectangulaire de cellules qui est s\u00e9par\u00e9e en rectangles. Une dimension de chaque rectangle est 1 tandis que l\u2019autre dimension varie.<\/p><p>Chaque rectangle est plac\u00e9 horizontalement ou verticalement et contient un nombre. Le but est de<br \/>remplir toutes les cellules avec des chiffres de 1 \u00e0 9 de sorte que :<\/p><p>\u2013 Si on multiplie tous les chiffres de chaque rectangle on obtient le nombre indiqu\u00e9 dans le rectangle<br \/>\u2013 Aucun chiffre apparait plusieurs fois dans une colonne.<br \/>\u2013 Aucun chiffre apparait plusieurs fois dans une ligne.<\/p><p>Un exemple d\u2019une grille d\u2019origine et une solution sont donn\u00e9 ci-dessous :<\/p><p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-15660 size-full\" src=\"https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2022\/04\/log4.png\" alt=\"programmation logique par contraintes\" width=\"272\" height=\"122\" title=\"\" srcset=\"https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2022\/04\/log4.png 272w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2022\/04\/log4-18x8.png 18w\" sizes=\"(max-width: 272px) 100vw, 272px\" \/><\/p><p>R\u00e9soudre ce probl\u00e8me par programmation logique par contraintes.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-1712df4 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"1712df4\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-060bb46\" data-id=\"060bb46\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-0135c7a elementor-widget elementor-widget-toggle\" data-id=\"0135c7a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"toggle.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-toggle\">\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-1261\" class=\"elementor-tab-title\" data-tab=\"1\" role=\"button\" aria-controls=\"elementor-tab-content-1261\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-caret-right\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-caret-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">Solution<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-1261\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"1\" role=\"region\" aria-labelledby=\"elementor-tab-title-1261\"><p>Chaque case de la matrice est consid\u00e9r\u00e9 comme un domaine, chaque case peut prendre une valeur de 1 \u00e0 5. Les contraintes sont simples puisque la somme des cases d&rsquo;un certain p\u00e9rim\u00e8tre doit \u00eatre \u00e9gale \u00e0 un nombre donn\u00e9.<\/p><pre> L = [X11,X21,X31,X41,X51,<br \/>X12,X22,X32,X42,X52,<br \/>X13,X23,X33,X43,X53,<br \/>X14,X24,X34,X44,X54,<br \/>X15,X25,X35,X45,X55],<br \/>fd_domain(L,1,9),<br \/>fd_all_different([X11,X12,X13,X14,X15]),<br \/>fd_all_different([X21,X22,X23,X24,X25]),<br \/>fd_all_different([X31,X32,X33,X34,X35]),<br \/>fd_all_different([X41,X42,X43,X44,X45]),<br \/>fd_all_different([X51,X52,X53,X54,X55]),<br \/>fd_all_different([X11,X21,X31,X41,X51]),<br \/>fd_all_different([X12,X22,X32,X42,X52]),<br \/>fd_all_different([X13,X23,X33,X43,X53]),<br \/>fd_all_different([X14,X24,X34,X44,X54]),<br \/>fd_all_different([X15,X25,X35,X45,X55]),<br \/>X11 #= 5, X31*X41 #= 2, X32*X42 #= 4, X33 #= 4,<br \/>X43*X53 #= 15, X34*X44 #= 15, X15*X25*X35*X45 #= 120,<br \/>X21*X22 #= 15, X51*X52 #= 12, X12*X13*X14 #= 8,<br \/>X23*X24 #= 2, X54*X55 #= 2,<br \/>fd_labeling(L)<\/pre><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-0432be7 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"0432be7\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-078bf15\" data-id=\"078bf15\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-54c2272 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"54c2272\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-5c8b25f elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"5c8b25f\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-aa5a020\" data-id=\"aa5a020\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-e0dfe76 elementor-widget elementor-widget-heading\" data-id=\"e0dfe76\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"ez-toc-section\" id=\"Exercice-5\"><\/span>Exercice 5<span class=\"ez-toc-section-end\"><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-ef80a5f elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"ef80a5f\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-d61ccf9\" data-id=\"d61ccf9\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-cea82ff elementor-widget elementor-widget-text-editor\" data-id=\"cea82ff\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Des gratte-ciel sont construits sur une grille NxN. Chaque gratte-ciel a un nombre d&rsquo;\u00e9tages correspondant \u00e0 sa taille (de 1 \u00e0 N). Dans chaque colonne et chaque ligne chaque taille apparait exactement une fois. Les nombres sur les bords de la grille indiquent combien de gratte-ciel peuvent \u00eatre vus en regardant de ce point vers la ligne ou la colonne correspondante. Un gratte-ciel est visible, si tous les gratte-ciel devant lui sont plus petits. Voici l\u2019exemple d\u2019une grille et de sa solution :<\/p><p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-15661 size-full\" src=\"https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2022\/04\/log5.png\" alt=\"programmation logique par contraintes\" width=\"472\" height=\"189\" title=\"\" srcset=\"https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2022\/04\/log5.png 472w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2022\/04\/log5-300x120.png 300w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2022\/04\/log5-18x7.png 18w\" sizes=\"(max-width: 472px) 100vw, 472px\" \/><\/p><p>Par exemple, dans la deuxi\u00e8me ligne du bas en regardant de la gauche on peut voir 2 gratte-ciel : celui d&rsquo;hauteur 3 et celui d&rsquo;hauteur 4. Voici un deuxi\u00e8me probl\u00e8me d&rsquo;une grille (5&#215;5) \u00e0 r\u00e9soudre :<\/p><p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-15662 size-full\" src=\"https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2022\/04\/log6.png\" alt=\"programmation logique par contraintes\" width=\"254\" height=\"238\" title=\"\" srcset=\"https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2022\/04\/log6.png 254w, https:\/\/complex-systems-ai.com\/wp-content\/uploads\/2022\/04\/log6-13x12.png 13w\" sizes=\"(max-width: 254px) 100vw, 254px\" \/><\/p><p>R\u00e9soudre ce probl\u00e8me par programmation logique par contraintes.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-37a0172 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"37a0172\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-92f7619\" data-id=\"92f7619\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ea0be2a elementor-widget elementor-widget-toggle\" data-id=\"ea0be2a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"toggle.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-toggle\">\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-2451\" class=\"elementor-tab-title\" data-tab=\"1\" role=\"button\" aria-controls=\"elementor-tab-content-2451\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-caret-right\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-caret-up\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">Solution<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-2451\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"1\" role=\"region\" aria-labelledby=\"elementor-tab-title-2451\"><p>Vous pouvez utiliser le pr\u00e9dicat pr\u00e9d\u00e9fini fd_cardinality(+List, ?Count)<br \/>o\u00f9 List est une liste de contraintes et Count le nombre de contraintes de List satisfaites.<\/p><pre>contrainte([A1,A2,A3,A4,A5],C) :-<br \/>fd_cardinality([A5 #&gt; A4 #\/\\ A5 #&gt; A3 #\/\\ A5 #&gt; A2 #\/\\ A5 #&gt; A1,<br \/>A4 #&gt; A3 #\/\\ A4 #&gt; A2 #\/\\ A4 #&gt; A1,<br \/>A3 #&gt; A2 #\/\\ A3 #&gt; A1, A2 #&gt; A1],C).<br \/>gratteciel(L) :-<br \/>L = [Line1,Line2,Line3,Line4,Line5],<br \/>Line1 = [X11,X12,X13,X14,X15],<br \/>Line2 = [X21,X22,X23,X24,X25],<br \/>Line3 = [X31,X32,X33,X34,X35],<br \/>Line4 = [X41,X42,X43,X44,X45],<br \/>Line5 = [X51,X52,X53,X54,X55],<br \/>fd_domain(Line1,1,5),fd_domain(Line2,1,5),<br \/>fd_domain(Line3,1,5),fd_domain(Line4,1,5),<br \/>fd_domain(Line5,1,5),<br \/>fd_all_different(Line1),fd_all_different(Line2),<br \/>fd_all_different(Line3),fd_all_different(Line4),<br \/>fd_all_different(Line5),<br \/>fd_all_different([X11,X21,X31,X41,X51]),<br \/>fd_all_different([X12,X22,X32,X42,X52]),<br \/>fd_all_different([X13,X23,X33,X43,X53]),<br \/>fd_all_different([X14,X24,X34,X44,X54]),<br \/>fd_all_different([X15,X25,X35,X45,X55]),<br \/>% Le premier gratte-ciel est toujours visible. Il faut donc enlever 1<br \/>% de chaque nombre de gratte-ciel visible.<br \/>contrainte(Line1,0), contrainte(Line2,3), contrainte(Line3,2),<br \/>contrainte(Line4,1),<br \/>contrainte([X12,X22,X32,X42,X52],2),<br \/>contrainte([X13,X23,X33,X43,X53],2),<br \/>contrainte([X15,X14,X13,X12,X11],2),<br \/>contrainte([X25,X24,X23,X22,X21],1),<br \/>contrainte([X35,X34,X33,X32,X31],2),<br \/>contrainte([X55,X54,X53,X52,X51],0),<br \/>contrainte([X52,X42,X32,X22,X12],1),<br \/>contrainte([X53,X43,X33,X23,X13],1),<br \/>contrainte([X54,X44,X34,X24,X14],1),<br \/>contrainte([X55,X45,X35,X25,X15],0),<br \/>fd_labeling(Line1),fd_labeling(Line2),fd_labeling(Line3),<br \/>fd_labeling(Line4),fd_labeling(Line5).<\/pre><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>P\u00e1gina de inicio de optimizaci\u00f3n combinatoria Wiki de programaci\u00f3n l\u00f3gica de restricciones Esta p\u00e1gina presenta ejercicios corregidos detallados para el problema de la programaci\u00f3n l\u00f3gica de restricciones, que es... <\/p>","protected":false},"author":1,"featured_media":0,"parent":1770,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-15651","page","type-page","status-publish","hentry"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/complex-systems-ai.com\/es\/wp-json\/wp\/v2\/pages\/15651","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/complex-systems-ai.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/complex-systems-ai.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/complex-systems-ai.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/complex-systems-ai.com\/es\/wp-json\/wp\/v2\/comments?post=15651"}],"version-history":[{"count":6,"href":"https:\/\/complex-systems-ai.com\/es\/wp-json\/wp\/v2\/pages\/15651\/revisions"}],"predecessor-version":[{"id":20243,"href":"https:\/\/complex-systems-ai.com\/es\/wp-json\/wp\/v2\/pages\/15651\/revisions\/20243"}],"up":[{"embeddable":true,"href":"https:\/\/complex-systems-ai.com\/es\/wp-json\/wp\/v2\/pages\/1770"}],"wp:attachment":[{"href":"https:\/\/complex-systems-ai.com\/es\/wp-json\/wp\/v2\/media?parent=15651"}],"curies":[{"name":"gracias","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}