{"id":133,"date":"2009-07-16T12:16:08","date_gmt":"2009-07-16T10:16:08","guid":{"rendered":"http:\/\/wp1.fredptitgars.net\/index.php\/2009\/07\/16\/methode-de-balas-hammer\/"},"modified":"2009-07-16T12:16:08","modified_gmt":"2009-07-16T10:16:08","slug":"methode-de-balas-hammer","status":"publish","type":"post","link":"https:\/\/fredptitgars.ovh\/?p=133","title":{"rendered":"Methode de Balas-Hammer"},"content":{"rendered":"<h2>M\u00e9thode<\/h2>\n<p>On calcule pour chaque rang\u00e9e, ligne ou colonne, la diff\u00e9rence entre le co\u00fbt le plus petit avec celui qui lui est imm\u00e9diatement sup\u00e9rieur. Affecter \u00e0 la relation de co\u00fbt le plus petit correspondant \u00e0 la rang\u00e9e pr\u00e9sentant la diff\u00e9rence maximale la quantit\u00e9 la plus \u00e9lev\u00e9e possible. Ce qui sature une ligne ou une colonne. Reprendre le processus jusqu&rsquo;\u00e0 ce que toutes les rang\u00e9es soient satur\u00e9es.<\/p>\n<p><strong>Algorithme<\/strong><br \/>\n<br \/>Dl: diff\u00e9rence entre le co\u00fbt mini et celui imm\u00e9diatement sup\u00e9rieur sur une ligne<br \/>\n<br \/>Dc: diff\u00e9rence entre le co\u00fbt mini et celui imm\u00e9diatement sup\u00e9rieur sur une colonne<\/p>\n<ol>\n<li>Calculer les diff\u00e9rences Dl et Dc pour chaque ligne et colonnes<\/li>\n<li> S\u00e9lectionner la ligne ou la colonne ayant le Dl ou Dc maximum<\/li>\n<li> Choisir dans cette ligne ou colonne le co\u00fbt le plus faible<\/li>\n<li> Attribuer \u00e0 la relation (i,j) correspondante le maximum possible de mati\u00e8re transportable de fa\u00e7on \u00e0 saturer soit la destination soit la disponibilit\u00e9<\/li>\n<li> calculer la quantit\u00e9 r\u00e9siduelle soit demande soit en disponibilit\u00e9.<\/li>\n<li> Eliminer la ligne ou la colonne ayant sa disponibilit\u00e9 ou demande satisfaite<\/li>\n<li> SI nombre de lignes ou colonnes> 2 retour en 2. SINON affecter les quantit\u00e9s restantes aux liaisons<br \/>\n<br \/>FIN<\/li>\n<\/ol>\n<p>Exemple:<br \/>\nSch\u00e9ma de d\u00e9part:<\/p>\n<figure id=\"attachment_131\" aria-describedby=\"caption-attachment-131\" style=\"width: 610px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" aligncenter size-full wp-image-131\" src=\"https:\/\/fredptitgars.ovh\/wp-content\/uploads\/2009\/07\/graph1-6-96f.png\" alt=\"sch\u00e9ma initial\" title=\"sch\u00e9ma initial\" class=\"caption\" align=\"center\" width=\"610\" height=\"302\" srcset=\"https:\/\/fredptitgars.ovh\/wp-content\/uploads\/2009\/07\/graph1-6-96f.png 610w, https:\/\/fredptitgars.ovh\/wp-content\/uploads\/2009\/07\/graph1-6-96f-300x149.png 300w\" sizes=\"auto, (max-width: 610px) 100vw, 610px\" \/><figcaption id=\"caption-attachment-131\" class=\"wp-caption-text\"><strong>sch\u00e9ma initial<\/strong><\/figcaption><\/figure>\n<p>vous avez 3 points de production A1 A2 et A3 et 4 points de livraisons : D1 D2 D3 D4 <\/p>\n<p>Tableaux des co\u00fbts de chaque trajet:<\/p>\n<table>\n<tbody>\n<tr class='row_even'>\n<td> <\/td>\n<td>D1<\/td>\n<td>D2<\/td>\n<td>D3<\/td>\n<td>D4<\/td>\n<td><strong>ai<\/strong><\/td>\n<td><strong>\u0394i<\/strong><\/td>\n<\/tr>\n<tr class='row_odd'>\n<td>A1<\/td>\n<td>11<\/td>\n<td>12<\/td>\n<td>10<\/td>\n<td>10<\/td>\n<td><strong>60<\/strong><\/td>\n<td><strong>1<\/strong><\/td>\n<\/tr>\n<tr class='row_even'>\n<td>A2<\/td>\n<td>17<\/td>\n<td>16<\/td>\n<td>15<\/td>\n<td>18<\/td>\n<td><strong>30<\/strong><\/td>\n<td><strong>1<\/strong><\/td>\n<\/tr>\n<tr class='row_odd'>\n<td>A3<\/td>\n<td>19<\/td>\n<td>21<\/td>\n<td>20<\/td>\n<td>22<\/td>\n<td><strong>90<\/strong><\/td>\n<td><strong>1<\/strong><\/td>\n<\/tr>\n<tr class='row_even'>\n<td><strong>bj<\/strong><\/td>\n<td><strong>50<\/strong><\/td>\n<td><strong>75<\/strong><\/td>\n<td><strong>30<\/strong><\/td>\n<td><strong>25<\/strong><\/td>\n<td><strong>180<\/strong><\/td>\n<td><\/td>\n<\/tr>\n<tr class='row_odd'>\n<td><strong>\u0394c<\/strong><\/td>\n<td><strong>6<\/strong><\/td>\n<td><strong>4<\/strong><\/td>\n<td><strong>5<\/strong><\/td>\n<td><strong>8<\/strong><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>A1 vers D2 coute 12 unit\u00e9s (par exemple 8 mille francs)<br \/>\n<br \/>aj correspond aux capacit\u00e9 de production<br \/>\n<br \/>bj correspond aux besoins<\/p>\n<p>on calcule les deltaL et deltaC donc les regrets<br \/>\n<br \/>les deltats:<br \/>\n<br \/>\u0394c= diff\u00e9rence entre les deux valeurs minimums<\/p>\n<p>\u0394cD1=17-11<br \/>\n<br \/>\u0394cD2=16-12<br \/>\n<br \/>\u0394cD3=15-10<br \/>\n<br \/>\u0394cD4=18-10<\/p>\n<p>La meilleure solution coute 10 mais si je prends la seconde meilleure solution, cela ne me coutera que 11<br \/>\n<br \/>\u0394i= 11-10 sur la ligne 1<br \/>\n<br \/>donc le second choix me fait perdre 1 <\/p>\n<p>Le choix se fait en prenant le plus gros de tous les delta, Ligne et colonne.<\/p>\n<p>Dans cet exemple, c&rsquo;est D4 avec un delta de 8.<br \/>\n<br \/>Maintenant on sature D4. D4 a besoin de 25 unit\u00e9. On choisi la ligne avec le deltaL le plus haut. Ici il sont tous \u00e9gaux a 1 on prend au hasard,<br \/>\npar exemple, je mets 25 unit\u00e9s sur A1 D4, on a satur\u00e9 D4<br \/>\nA1 qui produit 60 ne compte plus que pour 60-25=35<br \/>\net on recalcule les deltas<\/p>\n<p>ce qui nous donne ce nouveau tableau:<\/p>\n<table>\n<tbody>\n<tr class='row_even'>\n<td> <\/td>\n<td>D1<\/td>\n<td>D2<\/td>\n<td>D3<\/td>\n<td>D4<\/td>\n<td><strong>ai<\/strong><\/td>\n<td><strong>\u0394i<\/strong><\/td>\n<\/tr>\n<tr class='row_odd'>\n<td>A1<\/td>\n<td>11<\/td>\n<td>12<\/td>\n<td>10<\/td>\n<td> <\/td>\n<td><strong>35<\/strong><\/td>\n<td><strong>1<\/strong><\/td>\n<\/tr>\n<tr class='row_even'>\n<td>A2<\/td>\n<td>17<\/td>\n<td>16<\/td>\n<td>15<\/td>\n<td> <\/td>\n<td><strong>30<\/strong><\/td>\n<td><strong>1<\/strong><\/td>\n<\/tr>\n<tr class='row_odd'>\n<td>A3<\/td>\n<td>19<\/td>\n<td>21<\/td>\n<td>20<\/td>\n<td> <\/td>\n<td><strong>90<\/strong><\/td>\n<td><strong>1<\/strong><\/td>\n<\/tr>\n<tr class='row_even'>\n<td><strong>bj<\/strong><\/td>\n<td><strong>50<\/strong><\/td>\n<td><strong>75<\/strong><\/td>\n<td><strong>30<\/strong><\/td>\n<td> <\/td>\n<td><strong>180<\/strong><\/td>\n<td><\/td>\n<\/tr>\n<tr class='row_odd'>\n<td><strong>\u0394c<\/strong><\/td>\n<td><strong>6<\/strong><\/td>\n<td><strong>4<\/strong><\/td>\n<td><strong>5<\/strong><\/td>\n<td> <\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table>\n<tbody>\n<tr class='row_even'>\n<td> <\/td>\n<td>D1<\/td>\n<td>D2<\/td>\n<td>D3<\/td>\n<td>D4<\/td>\n<td>ai<\/td>\n<\/tr>\n<tr class='row_odd'>\n<td>A1<\/td>\n<td> <\/td>\n<td> <\/td>\n<td> <\/td>\n<td>25 <\/td>\n<td> <\/td>\n<\/tr>\n<tr class='row_even'>\n<td>A2<\/td>\n<td> <\/td>\n<td> <\/td>\n<td> <\/td>\n<td> <\/td>\n<td> <\/td>\n<\/tr>\n<tr class='row_odd'>\n<td>A3<\/td>\n<td> <\/td>\n<td> <\/td>\n<td> <\/td>\n<td> <\/td>\n<td> <\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>On recommence, on prend le plus grand delta (Ligne et colonne). C&rsquo;est en D1 qui est \u00e9gale 6.<br \/>\n<br \/>On sature D1 avec le plus petit co\u00fbt qui est A1D1. A dispose encore de 35. On met 35 dans A1D1,<br \/>\n<br \/>On recalcule les delta<\/p>\n<table>\n<tbody>\n<tr class='row_even'>\n<td> <\/td>\n<td>D1<\/td>\n<td>D2<\/td>\n<td>D3<\/td>\n<td>D4<\/td>\n<td><strong>ai<\/strong><\/td>\n<td><strong>\u0394i<\/strong><\/td>\n<\/tr>\n<tr class='row_odd'>\n<td>A1<\/td>\n<td> <\/td>\n<td> <\/td>\n<td> <\/td>\n<td> <\/td>\n<td> <\/td>\n<td> <\/td>\n<\/tr>\n<tr class='row_even'>\n<td>A2<\/td>\n<td>17<\/td>\n<td>16<\/td>\n<td>15<\/td>\n<td> <\/td>\n<td><strong>30<\/strong><\/td>\n<td><strong>1<\/strong><\/td>\n<\/tr>\n<tr class='row_odd'>\n<td>A3<\/td>\n<td>19<\/td>\n<td>21<\/td>\n<td>20<\/td>\n<td> <\/td>\n<td><strong>90<\/strong><\/td>\n<td><strong>1<\/strong><\/td>\n<\/tr>\n<tr class='row_even'>\n<td><strong>bj<\/strong><\/td>\n<td><strong>15<\/strong><\/td>\n<td><strong>75<\/strong><\/td>\n<td><strong>30<\/strong><\/td>\n<td> <\/td>\n<td><strong>180<\/strong><\/td>\n<td><\/td>\n<\/tr>\n<tr class='row_odd'>\n<td><strong>\u0394c<\/strong><\/td>\n<td><strong>2<\/strong><\/td>\n<td><strong>5<\/strong><\/td>\n<td><strong>5<\/strong><\/td>\n<td> <\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table>\n<tbody>\n<tr class='row_even'>\n<td> <\/td>\n<td>D1<\/td>\n<td>D2<\/td>\n<td>D3<\/td>\n<td>D4<\/td>\n<td>ai<\/td>\n<\/tr>\n<tr class='row_odd'>\n<td>A1<\/td>\n<td>35<\/td>\n<td> <\/td>\n<td> <\/td>\n<td>25 <\/td>\n<td> <\/td>\n<\/tr>\n<tr class='row_even'>\n<td>A2<\/td>\n<td> <\/td>\n<td> <\/td>\n<td> <\/td>\n<td> <\/td>\n<td> <\/td>\n<\/tr>\n<tr class='row_odd'>\n<td>A3<\/td>\n<td> <\/td>\n<td> <\/td>\n<td> <\/td>\n<td> <\/td>\n<td> <\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>On recommence, on prend le plus grand deltat (Ligne, colonne). C&rsquo;est en D2 qui est \u00e9gale \u00e0 5. On sature A2D2 qui est moins cher. A2 produit 30. On met 30 dans A2D2.<\/p>\n<table>\n<tbody>\n<tr class='row_even'>\n<td> <\/td>\n<td>D1<\/td>\n<td>D2<\/td>\n<td>D3<\/td>\n<td>D4<\/td>\n<td><strong>ai<\/strong><\/td>\n<td><strong>\u0394i<\/strong><\/td>\n<\/tr>\n<tr class='row_odd'>\n<td>A1<\/td>\n<td> <\/td>\n<td> <\/td>\n<td> <\/td>\n<td> <\/td>\n<td> <\/td>\n<td> <\/td>\n<\/tr>\n<tr class='row_even'>\n<td>A2<\/td>\n<td> <\/td>\n<td> <\/td>\n<td> <\/td>\n<td> <\/td>\n<td> <\/td>\n<td> <\/td>\n<\/tr>\n<tr class='row_odd'>\n<td>A3<\/td>\n<td>19<\/td>\n<td>21<\/td>\n<td>20<\/td>\n<td> <\/td>\n<td><strong>90<\/strong><\/td>\n<td><strong>1<\/strong><\/td>\n<\/tr>\n<tr class='row_even'>\n<td><strong>bj<\/strong><\/td>\n<td><strong>15<\/strong><\/td>\n<td><strong>45<\/strong><\/td>\n<td><strong>30<\/strong><\/td>\n<td> <\/td>\n<td><strong>180<\/strong><\/td>\n<td><\/td>\n<\/tr>\n<tr class='row_odd'>\n<td><strong>\u0394c<\/strong><\/td>\n<td><strong>19<\/strong><\/td>\n<td><strong>21<\/strong><\/td>\n<td><strong>20<\/strong><\/td>\n<td> <\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table>\n<tbody>\n<tr class='row_even'>\n<td> <\/td>\n<td>D1<\/td>\n<td>D2<\/td>\n<td>D3<\/td>\n<td>D4<\/td>\n<td>ai<\/td>\n<\/tr>\n<tr class='row_odd'>\n<td>A1<\/td>\n<td>35<\/td>\n<td> <\/td>\n<td> <\/td>\n<td>25 <\/td>\n<td> <\/td>\n<\/tr>\n<tr class='row_even'>\n<td>A2<\/td>\n<td> <\/td>\n<td>30<\/td>\n<td> <\/td>\n<td> <\/td>\n<td> <\/td>\n<\/tr>\n<tr class='row_odd'>\n<td>A3<\/td>\n<td> <\/td>\n<td> <\/td>\n<td> <\/td>\n<td> <\/td>\n<td> <\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Avec A3, il ne reste plus qu&rsquo;a satur\u00e9 le moins cher, cela revient \u00e0 mettre les restes.<br \/>\n<br \/>D1 a encore besoin de 15, on lui donne<br \/>\n<br \/>D2 a besoin de 45, on lui donne<br \/>\n<br \/>D3 a besoin de 30, on lui donne<br \/>\n<br \/><em>et voil\u00e0 on a gagn\u00e9<\/em><\/p>\n<p><strong>solution final<\/strong><\/p>\n<table>\n<tbody>\n<tr class='row_even'>\n<td> <\/td>\n<td>D1<\/td>\n<td>D2<\/td>\n<td>D3<\/td>\n<td>D4<\/td>\n<td>ai<\/td>\n<\/tr>\n<tr class='row_odd'>\n<td>A1<\/td>\n<td>35<\/td>\n<td> <\/td>\n<td> <\/td>\n<td>25 <\/td>\n<td> <\/td>\n<\/tr>\n<tr class='row_even'>\n<td>A2<\/td>\n<td> <\/td>\n<td>30<\/td>\n<td> <\/td>\n<td> <\/td>\n<td> <\/td>\n<\/tr>\n<tr class='row_odd'>\n<td>A3<\/td>\n<td>15<\/td>\n<td>45<\/td>\n<td>30<\/td>\n<td> <\/td>\n<td> <\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Cout de la solution= 2945<\/p>\n<p><strong>optimisation des cycle<\/strong><\/p>\n<p>Si nous avons un cycle on peut l&rsquo;optimiser.<\/p>\n<p>Sur ce graph:<\/p>\n<figure id=\"attachment_132\" aria-describedby=\"caption-attachment-132\" style=\"width: 284px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" aligncenter size-full wp-image-132\" src=\"https:\/\/fredptitgars.ovh\/wp-content\/uploads\/2009\/07\/graph2-6-a71.png\" alt=\"graph \u00e0 optimiser\" title=\"graph \u00e0 optimiser\" class=\"caption\" align=\"center\" width=\"284\" height=\"307\" srcset=\"https:\/\/fredptitgars.ovh\/wp-content\/uploads\/2009\/07\/graph2-6-a71.png 284w, https:\/\/fredptitgars.ovh\/wp-content\/uploads\/2009\/07\/graph2-6-a71-278x300.png 278w\" sizes=\"auto, (max-width: 284px) 100vw, 284px\" \/><figcaption id=\"caption-attachment-132\" class=\"wp-caption-text\"><strong>graph \u00e0 optimiser<\/strong><\/figcaption><\/figure>\n<p>on peut optimiser le cycle A2D3A3D4<br \/>\n<br \/>un cycle consiste a se retrouver au point de d\u00e9part en suivant un chemin<br \/>\nOn prend le point de d\u00e9part et on ajoute un (+1) sur un axe. Du coup on enl\u00e8ve 1 (-1) sur le retour et +1 sur le 3e et -1 sur le quatri\u00e8me<br \/>\nen faisant +1 -1 +1 -1, vous changez le cout si cela am\u00e9liore, vous continuez avec +2 -2 +2 -2 et ainsi de suite jusqu&rsquo;\u00e0 disparition du cycle. Si cela n&rsquo;am\u00e9liore PAS, vous faite -1 +1 -1 +1 et cela am\u00e9liore le cout obligatoirement et on traite tout les cycles<\/p>\n<p>le stepping stone<\/p>\n<p>Montrons que l&rsquo;on peut am\u00e9liorer la solution de base obtenue.<br \/>\n<br \/>Supposons que l&rsquo;on veuille transporter sur la liaison A1-D3, de co\u00fbt 10, une _ unit\u00e9. Nous avons alors:<br \/>\n<br \/>xA1D1-1=-11; xA3D1+1=19; xA3D3-1=-20; xA1D3+1=10;<br \/>\n<br \/>Co\u00fbt marginal Dx=-2 Nous gagnons de cette fa\u00e7on 2 unit\u00e9s.<\/p>\n<p>On cr\u00e9e un cycle fictif en ajoutant un lien entre A1 et D3. On obtient le cycle A1D1A3D3. Nous avons un cycle et on peux optimiser<\/p>\n","protected":false},"excerpt":{"rendered":"<p>M\u00e9thode On calcule pour chaque rang\u00e9e, ligne ou colonne, la diff\u00e9rence entre le co\u00fbt le plus petit avec celui qui lui est imm\u00e9diatement sup\u00e9rieur. Affecter \u00e0 la relation de co\u00fbt le plus petit correspondant \u00e0 la rang\u00e9e pr\u00e9sentant la diff\u00e9rence maximale la quantit\u00e9 la plus \u00e9lev\u00e9e possible. Ce qui sature une ligne ou une colonne. [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":131,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[],"class_list":["post-133","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-rcp101-recherche-operationnelle-et-aide-a-la-decision"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/fredptitgars.ovh\/index.php?rest_route=\/wp\/v2\/posts\/133","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fredptitgars.ovh\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fredptitgars.ovh\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fredptitgars.ovh\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/fredptitgars.ovh\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=133"}],"version-history":[{"count":0,"href":"https:\/\/fredptitgars.ovh\/index.php?rest_route=\/wp\/v2\/posts\/133\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fredptitgars.ovh\/index.php?rest_route=\/wp\/v2\/media\/131"}],"wp:attachment":[{"href":"https:\/\/fredptitgars.ovh\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=133"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fredptitgars.ovh\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=133"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fredptitgars.ovh\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=133"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}