{"id":185,"date":"2012-03-09T14:14:46","date_gmt":"2012-03-09T14:14:46","guid":{"rendered":"http:\/\/www.managementscience.nl\/wordpress\/planning-met-open-source-software\/"},"modified":"2012-09-18T11:17:53","modified_gmt":"2012-09-18T11:17:53","slug":"planning-met-open-source-software","status":"publish","type":"post","link":"https:\/\/www.managementscience.nl\/slimmer-plannen\/planning-met-open-source-software\/","title":{"rendered":"Planning met open source software"},"content":{"rendered":"<p>Open source software is vrij verkrijgbare software waarvan de broncode is vrijgegeven en die voor iedereen beschikbaar is. Vaak is dergelijke software volledig gratis te gebruiken, ook in het bedrijfsleven.<!--more--><\/p>\n<h2><strong>Lineaire programmering <\/strong><\/h2>\n<p>Er is veel open source software die gebruikt kan worden voor vele doeleinden, bijvoorbeeld het optimaliseren van de planning. Met een voorbeeld gaan we dit laten zien. We gebruiken daarbij de wiskundige techniek Lineair Programmeren (LP).<\/p>\n<p>Het &#8220;lineair&#8221; slaat er op dat de wiskundige vergelijkingen lineair geformuleerd zijn, oftewel &#8220;rechte lijnen&#8221;. Met andere woorden, er komen geen kwadratische of exponenti\u00eble waarden voor.<\/p>\n<p>Voor wie direct zelf aan de gang wil gaan: de software die we hier gebruiken is GUSEK, een gebruiksvriendelijk interface met de GLPK optimalisatie software. Dit programma is open source en kan vrij worden gedownload en ge\u00efnstalleerd vanaf: <a href=\"http:\/\/gusek.sourceforge.net\/\" target=\"_blank\">http:\/\/gusek.sourceforge.net\/<\/a><\/p>\n<h2><strong>Eenvoudig voorbeeld<\/strong><\/h2>\n<p>We houden het eenvoudig: een bedrijf maakt twee producten. De beide producten worden gemaakt uit twee materialen, maar in verschillende hoeveelheden. Om de producten te maken zijn drie bewerkingen nodig, maar met verschillende bewerkingstijden.<\/p>\n<p>Beide producten hebben een verschillende opbrengst. Het bedrijf kan echter geen voorraad aanhouden. De mogelijke afzet van beide producten kent echter wel een maximum. De planning moet aangeven hoeveel producten er gemaakt moeten worden om de omzet te maximaliseren.<\/p>\n<table class=\"checklist\" style=\"width: 100%; padding: 0pt; margin: 0pt; text-align: center;\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td style=\"text-align: left;\" valign=\"top\"><\/td>\n<td style=\"text-align: center;\" valign=\"top\"><strong>Product 1<\/strong><\/td>\n<td style=\"text-align: center;\" valign=\"top\"><strong>Product 2<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\" valign=\"top\"><strong>Opbrengst per stuk<\/strong><\/td>\n<td style=\"text-align: center;\" valign=\"top\">12<\/td>\n<td style=\"text-align: center;\" valign=\"top\">8<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\" valign=\"top\"><strong>Maximale afzet (stuks)<\/strong><\/td>\n<td style=\"text-align: center;\" valign=\"top\">100<\/td>\n<td style=\"text-align: center;\" valign=\"top\">300<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\" valign=\"top\"><strong>Materiaal 1 (stuks)<\/strong><\/td>\n<td style=\"text-align: center;\" valign=\"top\">8<\/td>\n<td style=\"text-align: center;\" valign=\"top\">2<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\" valign=\"top\"><strong>Materiaal 2 (stuks)<\/strong><\/td>\n<td style=\"text-align: center;\" valign=\"top\">2<\/td>\n<td style=\"text-align: center;\" valign=\"top\">1<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\" valign=\"top\"><strong>Bewerking 1 (tijd)<\/strong><\/td>\n<td style=\"text-align: center;\" valign=\"top\">10 min<\/td>\n<td style=\"text-align: center;\" valign=\"top\">25 min<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\" valign=\"top\"><strong>Bewerking 2 (tijd)<\/strong><\/td>\n<td style=\"text-align: center;\" valign=\"top\">25 min<\/td>\n<td style=\"text-align: center;\" valign=\"top\">25 min<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left;\" valign=\"top\"><strong>Bewerking 3 (tijd)<\/strong><\/td>\n<td style=\"text-align: center;\" valign=\"top\">50 min<\/td>\n<td style=\"text-align: center;\" valign=\"top\">15 min<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Van beide materialen zijn 400 stuks voorhanden en de capaciteit van beide bewerkingen is 40 uur.<\/p>\n<h2><strong>Wiskundige formulering<\/strong><\/h2>\n<p>De eerste stap is om de situatie te vertalen naar wiskundige vergelijkingen. Wat hierboven staat beschreven, wordt in formules uitgewerkt, te beginnen met de doelfunctie. Met andere woorden: wat willen we bereiken?<\/p>\n<p><span style=\"text-decoration: underline;\">Beslissingsvariabelen<\/span><br \/>\nDaarvoor hebben we allereerst twee waarden nodig, die nu nog onbekend zijn, maar die onze planning bepalen. Wat willen we berekenen? Onze beslissingsvariabelen zijn de hoeveelheden van de twee producten die we gaan produceren.<\/p>\n<p>We noemen we p1 en p2, zijnde het aantal dat we van beide producten gaan maken:<\/p>\n<pre>p1 = het aantal stuks product 1 dat geproduceerd wordt\r\np2 = het aantal stuks product 2 dat geproduceerd wordt<\/pre>\n<p>Vergelijk dit ook met een spreadsheet. Je kunt verwijzen naar een bepaalde waarde met verwijzingen. Bijvoorbeeld de formule &#8220;A1+B1&#8221; betekent: tel de waarden van cel A1 en B1 op. In dit geval hebben we dus p1 en p2, de hoeveelheden van product 1 en product 2.<\/p>\n<p>Met deze twee variabelen kunnen we de doelfunctie en de restricties in formules uitdrukken.<\/p>\n<p><strong>Doelfunctie<\/strong><br \/>\nBeide producten hebben verschillende opbrengsten. Als we p1 stuks maken, levert dat 12 p1 euro op. De de productie van product 2 levert 8 p2 euro op. En die opbrengst willen we maximaliseren. Kort gezegd willen we:<\/p>\n<pre>Maximaliseer: 12 p1 + 8 p2<\/pre>\n<p><strong>Restricties<\/strong><br \/>\nDan de restricties, dat zijn de beperkingen voor de planning. Als er geen beperkingen waren, zouden de opbrengsten onbeperkt kunnen zijn. Doordat er nu eenmaal beperkingen zijn in vrijwel iedere planning, kunnen we geen oneindige opbrengsten behalen. De restricties bepalen wat er maximaal mogelijk is. En naar dat maximum zijn we op zoek.<\/p>\n<p><em>Afzet<\/em><br \/>\nDe maximale afzet voor product 1 is 100 stuks en voor product 2 300 stuks. Oftewel: p1 moet kleiner of gelijk zijn aan 100, en p2 moet kleiner of gelijk zijn aan 300. Het kleiner of gelijk teken is hier &#8220;&lt;=&#8221;. Dit laat zich vertalen in de volgende twee regels:<\/p>\n<pre>Max afzet product 1: p1 &lt;= 100\r\nMax afzet product 2: p2 &lt;= 300<\/pre>\n<p><em>Materialen<\/em><br \/>\nVervolgens de beperkte beschikbaarheid van de materialen. Ieder product heeft zijn eigen mix. Voor elk product 1 heb je 8 stuks van materiaal 1 nodig en 2 stuks van materiaal 2. Voor elk product 2 heb je 2 stuks van materiaal 1 nodig en 1 stuks materiaal 2. Voor beide materialen zijn 400 stuks beschikbaar. De restricties zijn dan als volgt:<\/p>\n<pre>Beschikbaar materiaal 1: 8 p1 + 2 p2 &lt;= 400 \r\nBeschikbaar materiaal 2: 2 p1 + 1 p2 &lt;= 400<\/pre>\n<p><em>Bewerkingen<br \/>\n<\/em>De beiden producten ondergaan drie bewerkingen, maar met verschillende tijden. De maximale capaciteit van iedere bewerking is bekend, 40 uur oftewel: 60x 40 = 2.400 minuten.<\/p>\n<pre>Bewerking 1: 10 p1 + 25 p2 &lt;= 2400 \r\nBewerking 2: 25 p1 + 25 p2 &lt;= 2400 \r\nBewerking 3: 50 p1 + 15 p2 &lt;= 2400<\/pre>\n<h2>Optimalisatie<\/h2>\n<p>Nu de wiskundige formulering compleet is, gebruiken we het eerder genoemde programma om de oplossing te laten berekenen. De berekeningen die nodig zijn, worden al jaren verbeterd door de slimste wiskundigen en van die kennis maken wij gebruik.<\/p>\n<p><strong>Invoeren<\/strong><br \/>\nAls het programma GUSEK is opgestart, kunnen we de wiskundige formulering invoeren aan de linkerzijde:<\/p>\n<pre>Maximize \r\n12 p1 + 8 p2\r\n\r\nSubject To \r\np1 &lt;= 100 \r\np2 &lt;= 300 \u00a0 \r\n\r\n8 p1 + 2 p2 &lt;= 400 \r\n2 p1 + p2 &lt;= 400\r\n\r\n10 p1 + 25 p2 &lt;= 2400 \r\n25 p1 + 25 p2 &lt;= 2400 \r\n50 p1 + 15 p2 &lt;= 2400\r\n\r\nEnd<\/pre>\n<p><a href=\"http:\/\/www.managementscience.nl\/slimmer-plannen\/wp-content\/uploads\/2012\/09\/image00.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-353\" title=\"image00\" src=\"http:\/\/www.managementscience.nl\/slimmer-plannen\/wp-content\/uploads\/2012\/09\/image00-1024x592.png\" alt=\"\" width=\"584\" height=\"337\" srcset=\"https:\/\/www.managementscience.nl\/slimmer-plannen\/wp-content\/uploads\/2012\/09\/image00-1024x592.png 1024w, https:\/\/www.managementscience.nl\/slimmer-plannen\/wp-content\/uploads\/2012\/09\/image00-300x173.png 300w, https:\/\/www.managementscience.nl\/slimmer-plannen\/wp-content\/uploads\/2012\/09\/image00-500x289.png 500w, https:\/\/www.managementscience.nl\/slimmer-plannen\/wp-content\/uploads\/2012\/09\/image00.png 1280w\" sizes=\"auto, (max-width: 584px) 85vw, 584px\" \/><\/a><\/p>\n<p>Je kunt deze wiskundige formulering ook opslaan als een bestand in het programma, om het later opnieuw te gebruiken.<\/p>\n<p><strong>Berekenen<\/strong><br \/>\nZorg dat de optie <em>Tools &gt; Generate Output <\/em>is aangevinkt, zodat je de complete rapportage krijgt. Ook moet de juiste taal zijn geselecteerd: <em>Language &gt; CPLEX LP<\/em>.<\/p>\n<p>Met F5 of <em>Tools &gt; Go<\/em> worden de berekeningen gestart. Bij complexere problemen kan je de voortgang aan de rechterzijde volgen. Als de optimale oplossing is gevonden, wordt dat ook daar gemeld.<\/p>\n<p><a href=\"http:\/\/www.managementscience.nl\/slimmer-plannen\/wp-content\/uploads\/2012\/09\/image01.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-354\" title=\"image01\" src=\"http:\/\/www.managementscience.nl\/slimmer-plannen\/wp-content\/uploads\/2012\/09\/image01-1024x586.png\" alt=\"\" width=\"584\" height=\"334\" srcset=\"https:\/\/www.managementscience.nl\/slimmer-plannen\/wp-content\/uploads\/2012\/09\/image01-1024x586.png 1024w, https:\/\/www.managementscience.nl\/slimmer-plannen\/wp-content\/uploads\/2012\/09\/image01-300x171.png 300w, https:\/\/www.managementscience.nl\/slimmer-plannen\/wp-content\/uploads\/2012\/09\/image01-500x286.png 500w, https:\/\/www.managementscience.nl\/slimmer-plannen\/wp-content\/uploads\/2012\/09\/image01.png 1287w\" sizes=\"auto, (max-width: 584px) 85vw, 584px\" \/><\/a><\/p>\n<p><strong>Uitkomsten<\/strong><br \/>\nDe resultaten worden nu getoond aan de linkerzijde waar een nieuw tabblad is geopend. De doelfunctie (objective) heeft een maximum van afgerond 878. De waarden voor p1 en p2 zijn afgerond 27 en 69.<\/p>\n<p>Oftewel: de maximaal haalbare opbrengst is 878 en deze wordt bereikt door het produceren van 27 stuks van product 1 en 69 stuks van product 2. Dit is waar we naar op zoek waren.<\/p>\n<p><span style=\"text-decoration: underline;\"> Beperkingen<\/span><br \/>\nOok is te zien dat de restricties voor bewerking 2 en 3 de grootste beperkingen zijn. Deze restricties worden ten volle benut, de activity is gelijk aan de upperbound van 2400 minuten.<\/p>\n<p>In de kolom marginal staan de schaduwprijzen, de marginale kosten van de restricties. Die zijn te lezen als de extra opbrengst die te behalen is, als de restrictie met \u00e9\u00e9n eenheid wordt verhoogd. Oftewel: als je \u00e9\u00e9n extra minuut zou kunnen produceren op bewerking 3 dan zou dat een extra opbrengst genereren van 0,11.<\/p>\n<p>De schaduwprijzen zijn een interessante bron van informatie. Vooral als een bedrijf op zoek is naar de bottleneck van de productie en de kosten die daarmee gemoeid zijn. Door de processen op deze wijze te modelleren worden de beperkingen duidelijk en in getallen uitgedrukt.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Veel bedrijven laten geld liggen als de planning niet optimaal is. Vaak is men al tevreden \u00e1ls er een planning is, al dan niet uit een ERP systeem of in Excel opgesteld. Met vrij verkrijgbare software kan men echter de planning eenvoudig optimaliseren.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[21,23,19],"class_list":["post-185","post","type-post","status-publish","format-standard","hentry","category-nieuws","tag-open-source","tag-optimalisatie","tag-planning"],"_links":{"self":[{"href":"https:\/\/www.managementscience.nl\/slimmer-plannen\/wp-json\/wp\/v2\/posts\/185","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.managementscience.nl\/slimmer-plannen\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.managementscience.nl\/slimmer-plannen\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.managementscience.nl\/slimmer-plannen\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.managementscience.nl\/slimmer-plannen\/wp-json\/wp\/v2\/comments?post=185"}],"version-history":[{"count":5,"href":"https:\/\/www.managementscience.nl\/slimmer-plannen\/wp-json\/wp\/v2\/posts\/185\/revisions"}],"predecessor-version":[{"id":396,"href":"https:\/\/www.managementscience.nl\/slimmer-plannen\/wp-json\/wp\/v2\/posts\/185\/revisions\/396"}],"wp:attachment":[{"href":"https:\/\/www.managementscience.nl\/slimmer-plannen\/wp-json\/wp\/v2\/media?parent=185"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.managementscience.nl\/slimmer-plannen\/wp-json\/wp\/v2\/categories?post=185"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.managementscience.nl\/slimmer-plannen\/wp-json\/wp\/v2\/tags?post=185"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}