Een Hiërarchische Aanpak voor Productieplanning in een...

197
Andy Cole een Chemisch Proces: Casestudie van Lanxess Een Hiërarchische Aanpak voor Productieplanning in Academiejaar 2008-2009 Faculteit Ingenieurswetenschappen Voorzitter: prof. dr. ir. Hendrik Van Landeghem Vakgroep Technische bedrijfsvoering operationeel onderzoek Master in de ingenieurswetenschappen: bedrijfskundige systeemtechnieken en Masterproef ingediend tot het behalen van de academische graad van Begeleiders: Carles Sitompul, Patrick Missiaen Promotor: prof. dr. El-Houssaine Aghezzaf

Transcript of Een Hiërarchische Aanpak voor Productieplanning in een...

Page 1: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

Andy Cole

een Chemisch Proces: Casestudie van LanxessEen Hiërarchische Aanpak voor Productieplanning in

Academiejaar 2008-2009Faculteit IngenieurswetenschappenVoorzitter: prof. dr. ir. Hendrik Van LandeghemVakgroep Technische bedrijfsvoering

operationeel onderzoekMaster in de ingenieurswetenschappen: bedrijfskundige systeemtechnieken en

Masterproef ingediend tot het behalen van de academische graad van

Begeleiders: Carles Sitompul, Patrick MissiaenPromotor: prof. dr. El-Houssaine Aghezzaf

Page 2: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

Development of a Hierarchical Production Planningin a Chemical Process: Casestudy of Lanxess

Andy Cole

Supervisor(s): prof. dr. El-Houssaine Aghezzaf, Patrick Missiaen

Abstract— A Mixed Integer Linear Programming model is proposed inthis paper that targets the optimal production scheduling for a specificchemical process. The model takes into account all the standard con-straints encountered in production scheduling. There are also some con-straints that are typical for this chemical process such as sequence depen-dent changeovers. The ultimate goal is a production plan that states whathas to be produced every month by using the theory of Hierarchical Pro-duction Planning. The model is applied to a chemical production plant,Lanxess located in Belgium.

Keywords— Hierarchical Production Planning, Time Aggregation,Sequence-Dependent Changeovers, Linear Programming, Optimization,Chemical Process

I. INTRODUCTION

HIERARCHICAL production planning is a well-covereddomain in the literature. Instead of one model, it uses sev-

eral models on different levels. Most of the time, the models arelinked with the different managerial decision areas. The strate-gic or first level looks for the best production planning on a longrolling horizon, typically one year ahead. The following levelsare considered as more operational, more in-depth levels, butover a shorter time span.

Between these levels, there is a need for a carefully thought-out aggregation and disaggregation procedure. The upper levelmakes estimations for the production of large groups of productsover a long time, while the lower level splits these estimationsto the specific products in a shorter time period. This aggrega-tion also means that you need aggregated parameters for productgroups. To make an estimation of these parameters, you oftenneed some iterative procedures between the different levels. Sothis method is not just a top-down approach.

The big advantage of hierarchical production planning is thegain in computational effort because you can solve some smallerproblems instead of one big. On the other hand, due to the splitin different levels, the optimal solution can never be reached.Some accuracy is lost on each level and in the end, you can onlyreach a suboptimal solution. The relatively fast way though tocome to this solution is a big advantage.

II. AIMS

The ultimate aim is to create models in a hierarchical waywhich provides realistic and optimal production estimations fora chemical process. The model ensures that the production goalsare met, while the costs are minimized. The costs include vari-able production costs, inventory costs, changeover costs andshortage costs. The model should also cope with a list of 103

A. Cole is with the Industrial Management Department, Ghent University(UGent), Gent, Belgium. E-mail: [email protected] .

constraints provided by the company. In the end, we shouldhave estimates of the product quantities for each month.

III. SOLUTION

Because of the small amount of products and because none ofthe products can be seen as almost similar, it is not relevant toaggregate the products in groups. We only use the aggregationin time. For the first model, we use a rolling planning horizonfrom 12 months with a planningsbucket of one month, for thesecond model, we use a bucket from one day with a horizon ofone month.

The solution algorithm looks like in figure 1

Fig. 1. Solution algorithm

First, we solve the first phase. This one looks for the cheapestsolution for the coming twelve months and gives the first esti-mates of the product quantities.

Thereafter, phase two checks for each month seperately ifthe proposed estimation is feasible or not. This phase tries tomake a schedule for the whole estimation and minimizes the to-tal makespan.

Page 3: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

After the scheduling, the analysis part checks if the makespanis smaller than the available amount of days in that month. If themakespan is smaller, which means that the scheduling is feasi-ble, we verify if there are some days at the end of the monthwhich are not used for the scheduling. If this is the case, wememorise these days and use them for solving problems in an-other month. In the end, we move on to the next month in phase2.

If the makespan is not smaller, it means that the schedulingis not feasible. We try to solve the problem by using the freedays from a month before. If there are no free days availablewe return to phase one and make new estimates for the wholeproduction planning after restricting capacity. The whole storygoes about: ’Are there enough days to schedule the planning inthe month?’, so if we have for example two days in shortage, wego back to phase one and solve it again with a difference on theamount of days for the particular month from two days.

IV. APPLIED TO THE CASE

The most difficult part exists in translating all the restrictionsto the different levels. Most of the restrictions are written indays and tell something about the flow between the products indays. Therefore it is not that easy to make the aggregation to thefirst level, because the only thing we could model at this level isthe flow between two months.

So the main part is the modelling of the first phase in orderto make very accurate estimates, which should avoid a lot ofproblems in the second phase. For the real mathematical part ofthis work, we like to refer to the whole work because it is reallyinteresting to discover how we solved all aggregation problemsexcept for one.

There is one type of restriction that we did not include in themodel. All the restrictions about forbidden days for changeoversare ignored. This is normally a typical restriction for the secondphase, but if it is not managed in the first one, there could be alot of problems in the second one, because the production cam-paigns must wait on the correct day to start a changeover. Thisleads to a lot of capacity losses and with an estimation lookingfor the smallest shortage cost, each capacity loss creates prob-lems in the second phase. Because of implementation difficul-ties we ignored them in the first phase.

V. RESULTS

The first phase works perfectly and gives wonderfull estima-tions. The only disadvantage is the calculation time. At thismoment, starting from three hours or more, you can reach asolution which is very close to an optimal one. In the secondphase, unfortunately, there is a small error. This is no big prob-lem, though, due to the large calculation time of the first phase.The feedback mechanism could not be triggered too much, sothat the calculation time would not boom. That is the reasonwhy the first phase is needed to be as accurate as possible. Sothe first phase could actually be used on his own.

VI. CONCLUSION

At this moment, there are three problems that we do not solve.Firstly, we have the small error in phase two. This is actuallynot a real problem. Secondly, we have the large calculation time

and thirdly, we have ignored the restrictions about the forbiddendays for changeovers.

For the last two problems, We propose to make some adap-tations in the solution algorithm. Instead of checking for eachmonth if the planning is feasible, it’s justifiable to only check thefirst two months, because the planning after these two monthswill certainly change. This adaptation means that there is atmost two times a feedback which implies a great reduction incalculation time.

Second adaption: if we just check the first two months itis allowed to only implement the restrictions about forbiddenchangeovers for the first two months in the first phase.

After implementing these last adaptations, we are sure thatthe output from the hierarchical planning gives great results forthis specific problem.

ACKNOWLEDGMENTS

The author would like to thank prof. dr. E.H. Aghezzaf andP. Missiaen for their much needed and appreciated help.

REFERENCES

[1] Sven Axsater, “Aggregation of product data for hierarchical productionplanning,” Operations Research, vol. 29, no. 4, pp. 744–756, 1981.

[2] Gabriel R. Bitran, Elizabeth A. Haas, and Arnoldo C. Hax, “Hierarchicalproduction planning: A single stage system,” Operations Research, vol.29, no. 4, pp. 717–743, 1981.

[3] Gabriel R. Bitran, Elizabeth A. Haas, and Arnoldo C. Hax, “Hierarchicalproduction planning: A two-stage system,” Operations Research, vol. 30,no. 2, pp. 232–251, 1982.

[4] Gabriel R. Bitran and Arnoldo C. Hax, “Disaggregation and resource al-location using convex knapsack problems with bounded variables,” Man-agement Science, vol. 27, no. 4, pp. 431–441, 1981.

[5] J. Erschler, G. Fontan, and C. Merce, “Consistency of the disaggregationprocess in hierarchical planning,” Operations Research, vol. 34, no. 3, pp.464–469, 1986.

[6] Matthew J. Liberatore and Tan Miller, “A Hierarchical Production Plan-ning System,” INTERFACES, vol. 15, no. 4, pp. 1–11, 1985.

[7] M. M. Qiu and E. E. Burch, “Hierarchical production planning andscheduling in a multi-product, multi-machine environment.,” InternationalJournal of Production Research, vol. 35, no. 11, pp. 3023 – 3042, 1997.

[8] Germaine H. Saad, “Hierarchical production-planning systems: Exten-sions and modifications,” The Journal of the Operational Research Soci-ety, vol. 41, no. 7, pp. 609–624, 1990.

[9] E. Vicens, M. E. Alemany, C. Andrs, and J. J. Guarch, “A design and ap-plication methodology for hierarchical production planning decision sup-port systems in an enterprise integration context,” International Journalof Production Economics, vol. 74, no. 1-3, pp. 5 – 20, 2001.

[10] Gabriel R. Bitran and Arnoldo C. Hax, “On the Design of HierarchicalProduction Planning Systems,” Decision Sciences, vol. 8, no. 1, pp. 28–55, 1977.

Page 4: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

i

Page 5: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

Voorwoord

In dit voorwoord wil ik in de allereerste plaats mijn promotor prof. dr. El-Houssaine

Aghezzaf bedanken om mij de mogelijkheid aan te bieden deze thesis uit te voeren en om

mij hierin vervolgens te ondersteunen en te begeleiden als geen ander. Dankzij zijn hulp

was ik in staat om deze thesis uit te werken tot wat het geworden is. Bedankt om tijd te

maken voor al mijn ’kleine’ problemen op elk moment van de dag en voor de opbouwende

commentaren.

Ik zou ook nadrukkelijk de heer Patrick Missiaen willen bedanken voor het geduld dat hij

aan de dag heeft gelegd bij elke vraag die ik stelde. De eindeloze emailcorrespondentie over

de probleemsituatie bij Lanxess spreekt hier voor zich. Maar ook bedankt voor de kritische

blik op mijn resultaten om zo tot een correct model te kunnen komen.

De mensen van de vakgroep technische bedrijfsvoering die me geholpen hebben bij andere

technische en niet-technische problemen verdienen ook een dankjewel. Hulp bij het program-

meergedeelte of een vriendelijke goedemorgen als het weer eens veel te vroeg was, waren een

enorme opsteker.

Voorts zou ik graag m’n metgezellen uit de PC-klas van Zwijnaarde willen bedanken. Zon-

der jullie was het daar vrij stil en eenzaam. Bedankt voor de vele droge moppen, de kleine

ironische opmerkingen en de ’feestjes’ overdag. Ze waren een welgekomen bron van afwisse-

ling.

Mijn gezinsleden ben ik onnoemelijk dankbaar voor al hun indirecte en directe aanmoedi-

gingen, voor de talrijke kleine attenties en om mijn thesis taalkundig correct te maken. Alle

kennissen, vrienden, familie die me met net zo veel oprechtheid en vertrouwen ondersteun-

den, bedankt!

En als laatste wil ik mijn vriendin bedanken om me tijdig weer met mijn voeten op de grond

te zetten als ik het allemaal weer te losjes opnam, om me aan te moedigen verder te werken

indien er toch leukere dingen te doen waren en om de momenten zonder thesisgedachten op

te vrolijken.

Andy Cole, 1 juni 2009

Page 6: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

Universiteit Gent

Faculteit Ingenieurswetenschappen

Vakgroep Technische Bedrijfsvoering

Verklaring in verband met de toegankelijkheid van de masterproef

Ondergetekende, Andy Cole, afgestudeerd aan de UGent in het academiejaar 2008-2009 en

auteur van de masterproef met als titel:

Een Hierarchische Aanpak voor Productieplanning in een Chemisch Proces:

Casestudie van Lanxess

verklaart hierbij:� dat hij geopteerd heeft voor de hierna aangevinkte mogelijkheid in verband met de

consultatie van zijn masterproef:

❐ de masterproef mag steeds ter beschikking gesteld worden van elke aanvrager;

❐ de masterproef mag enkel ter beschikking gesteld worden met uitdrukkelijke,

schriftelijke goedkeuring van de auteur;

❐ de masterproef mag ter beschikking gesteld worden van een aanvrager na een

wachttijd van x jaar;

✔❐ de masterproef mag nooit ter beschikking gesteld worden van een aanvrager;� dat elke gebruiker te allen tijde gehouden is aan een correcte en volledige bronverwij-

zing.

Gent, 1 juni 2009

Andy Cole

Page 7: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

Een Hierarchische Aanpak voor

Productieplanning in een Chemisch

Proces:

Casestudie van Lanxess

door

Andy Cole

Masterproef ingediend tot het behalen van de academische graad van

Master in de ingenieurswetenschappen:

bedrijfskundige systeemtechnieken en operationeel onderzoek

Academiejaar 2008–2009

Promotor: prof. dr. E.-H. Aghezzaf

Begeleiders: P. Missiaen en C. Sitompul

Faculteit Ingenieurswetenschappen

Universiteit Gent

Vakgroep Technische bedrijfsvoering

Voorzitter: prof. dr. ir. H. Van Landeghem

Samenvatting

Hoofdstuk 1 geeft de lezer een algemene indruk van de inhoud van deze masterproef. Inhoofdstuk 2 wordt de context van deze masterproef kort gesitueerd binnen de uitgebreideliteratuur over productieplanning. De probleemstelling van de specifieke case die hier wordtuitgewerkt, komt aan bod in hoofdstuk 3. Hoe de algemene structuur van de oplossing er uitziet wordt in hoofdstuk 4 uiteengezet om vervolgens stuk voor stuk het wiskundige modeluit te werken voor de verschillende onderdelen: hoofdstukken 5, 6, 7 en 8 voor respectievelijkde analyse van de terugkoppeling, de preprocessing stap, level 1 en level 2. Het uiteindelijketoepassen van het model en de correcte werking ervan wordt in hoofdstuk 9 besprokenom dan ook in ditzelfde hoofdstuk conclusies te trekken. Voor de volledigheid worden degegevens waarmee het model wordt getest en de broncode meegegeven in de appendix.

Trefwoorden

hierarchische productieplanning, aggregatie, disaggregatie, wiskundig model, omstellingen,lineair programmeren, optimalisatie

Page 8: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

Inhoudsopgave

Voorwoord ii

Overzicht iv

Inhoudsopgave iv

Gebruikte afkortingen ix

Gebruikte Variabelen en Parameters x

Lijst van figuren xviii

Lijst van tabellen xx

1. Inleiding 1

2. Literatuurstudie 4

3. Probleemstelling: De case van Lanxess 8

3.1. Optimalisatiemodel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

3.2. Automatisering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

3.3. Productieplanning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

3.4. Chemisch proces van Lanxess . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

3.4.1. Schematisch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

3.4.2. Restricties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3.4.3. Bemerkingen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

4. Werkelijke model: structuur 13

4.1. Algemene structuur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

4.1.1. De theorie achter het wiskundige model . . . . . . . . . . . . . . . . . 16

4.1.2. Probleem: Restricties 88-91 en 96 . . . . . . . . . . . . . . . . . . . . . 19

5. Analyse en terugkoppeling 21

5.1. Ambitieuze plan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

5.2. Radicale plan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

5.3. Intermediaire oplossing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

5.4. Probleem: Restricties 88-91 en 96 . . . . . . . . . . . . . . . . . . . . . . . . . 25

v

Page 9: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

Inhoudsopgave vi

6. Preprocessing 26

6.1. Stilstanden ingevoerd door het management . . . . . . . . . . . . . . . . . . . 26

7. Fase 1: Planning 30

7.1. Veel gebruikte notaties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

7.2. Algemene beslissingsvariabelen . . . . . . . . . . . . . . . . . . . . . . . . . . 31

7.3. Flowvoorwaarden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

7.3.1. Vraag versus Aanbod eindproducten . . . . . . . . . . . . . . . . . . . 33

7.3.2. Voldoende productie tussenproducten . . . . . . . . . . . . . . . . . . 35

7.4. Totale kost (1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

7.4.1. Voorraadkost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

7.4.2. Tekortkosten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

7.5. Stilstanden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

7.5.1. Beslissingsvariabelen in verband met Stilstanden . . . . . . . . . . . . 41

7.5.2. Restricties in verband met Stilstanden . . . . . . . . . . . . . . . . . . 42

7.5.3. Bijdrage van de stilstanden tot de totale kost . . . . . . . . . . . . . . 45

7.6. Productierun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

7.6.1. Beslissingsvariabelen in verband met Productieruns . . . . . . . . . . 47

7.6.2. Voorwaarden in verband met Productieruns . . . . . . . . . . . . . . . 48

7.7. Stilstanden in combinatie met Productieruns . . . . . . . . . . . . . . . . . . 51

7.8. Voorraadrestricties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

7.8.1. Algemene voorwaarden . . . . . . . . . . . . . . . . . . . . . . . . . . 52

7.8.2. B-voorraad: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

7.8.3. A2-voorraad: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

7.9. Omstellingen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

7.9.1. Beslissingsvariabelen en voorwaarden . . . . . . . . . . . . . . . . . . . 61

7.9.2. Bijdrage tot de totale kost . . . . . . . . . . . . . . . . . . . . . . . . . 63

7.10. Capaciteitsrestricties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

7.11. Totale kost (2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

7.12. Voorwaarden in verband met Tank 3 . . . . . . . . . . . . . . . . . . . . . . . 67

7.13. Straat 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

7.13.1. 70 ton D2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

7.13.2. J- en D2K-productie in blok . . . . . . . . . . . . . . . . . . . . . . . . 74

7.13.3. Beperkt aantal productieruns per jaar . . . . . . . . . . . . . . . . . . 75

7.13.4. H123 in de winter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

7.13.5. Tank 3 leeg na productiecampagne . . . . . . . . . . . . . . . . . . . . 76

7.14. Beginvoorwaarden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

7.15. Overige voorwaarden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

7.15.1. Efficientie productie A1 . . . . . . . . . . . . . . . . . . . . . . . . . . 78

7.15.2. Doorgeven van stilstanden . . . . . . . . . . . . . . . . . . . . . . . . . 79

7.15.3. Minimum afvalwaterdebiet . . . . . . . . . . . . . . . . . . . . . . . . 80

7.15.4. Maximum stilstand installatie 2 . . . . . . . . . . . . . . . . . . . . . . 81

7.15.5. Stilstand tijdens zomervakantie: . . . . . . . . . . . . . . . . . . . . . . 81

Page 10: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

Inhoudsopgave vii

7.15.6. Voorkeur M-productie op straat 6 . . . . . . . . . . . . . . . . . . . . 82

7.15.7. Energiekoppeling tussen straat 5 en 6 . . . . . . . . . . . . . . . . . . 82

7.15.8. Voorkeur voor G-productie op straat 3 . . . . . . . . . . . . . . . . . . 83

7.15.9. Voorwaarden in verband met het moment van omstel . . . . . . . . . 84

8. Fase 2: Scheduling 86

8.1. Inputvariabelen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

8.2. Beslissingsvariabelen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

8.3. Doelfunctie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

8.4. Definitie van de makespan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

8.5. Voldoen aan schattingen uit fase 1 . . . . . . . . . . . . . . . . . . . . . . . . 91

8.6. Flowvoorwaarden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

8.6.1. Flow A1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

8.6.2. Flow A2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

8.6.3. Flow tank 3 en 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

8.6.4. Flow tussen rechtstreekse producten . . . . . . . . . . . . . . . . . . . 94

8.6.5. Flow tussen deelproducten . . . . . . . . . . . . . . . . . . . . . . . . 95

8.7. Voorraden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

8.7.1. Minimum voorraden . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

8.7.2. Maximum voorraden tanken . . . . . . . . . . . . . . . . . . . . . . . . 96

8.8. Voorwaarden in verband met Tank 3 en tank 4 . . . . . . . . . . . . . . . . . 96

8.8.1. Tank 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

8.8.2. Tank 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

8.9. Productierun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

8.10. Stilstanden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

8.10.1. Ingeplande stilstanden door het management . . . . . . . . . . . . . . 101

8.10.2. Stilstanden ingevoerd door het model . . . . . . . . . . . . . . . . . . 101

8.11. Omstellingen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

8.12. Voorwaarden in verband met JD2K-productie . . . . . . . . . . . . . . . . . . 105

8.12.1. D2K-productie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

8.12.2. D2KJ-productie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

8.13. Beginvoorwaarden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

8.14. Overige voorwaarden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

8.14.1. Doorgeven van stilstanden . . . . . . . . . . . . . . . . . . . . . . . . . 107

8.14.2. Minimum afvalwaterdebiet . . . . . . . . . . . . . . . . . . . . . . . . 107

8.14.3. Stilstand tijdens zomervakantie . . . . . . . . . . . . . . . . . . . . . . 108

8.14.4. M-productie op straat 4 . . . . . . . . . . . . . . . . . . . . . . . . . . 108

8.14.5. Resterende voorwaarden . . . . . . . . . . . . . . . . . . . . . . . . . . 109

9. Resultaten en Conclusie 110

9.1. Resultaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

9.1.1. Fase 1: output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

9.1.2. Fase 1: gedetailleerde bespreking . . . . . . . . . . . . . . . . . . . . . 111

9.1.3. Fase 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

Page 11: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

Inhoudsopgave viii

9.2. Conclusies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

I. Variabelen van het proces: 122

A. Variabelen productieplanning 123

B. Inputgegevens productieplanning 125

C. Inputgegevens maalplanning 127

D. Gegevens van de laatst beeindigde maand 130

II. Broncode: 132

E. Fase 1: broncode mod-file 133

F. Fase 2: broncode mod-file 154

G. Fase 1 en 2: broncode run-file 167

Bibliografie 174

Page 12: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

Gebruikte afkortingen

ix

Page 13: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

Gebruikte Variabelen en Parameters

#d2m2 Het aantal dagen beschikbaar in maand m2 voor de tweede fase om de geschatte

hoeveelheden in te plannen. (inclusief ∆Dm2−1)

#dm Het aantal dagen in een maand.

∆Dm2 Parameter die het verband aangeeft tussen opeenvolgende maanden in fase 2.

Indien positief, dan zijn er productiedagen over in maand m2 die eventueel naar een

volgende maand kunnen geschoven worden. Indien negatie, dan zijn er

productiedagen tekort in maand m2.

ADebietp Parameter die het afvalwaterdebiet voor product p vastlegt.

APp Parameter die vastlegt hoeveel productiecampagnes van product p mogelijk zijn op

1 jaar.

D1 Een set van dagen uit fase 2 dat alle dagen bevat van de vorige maand m2 − 1.

D1 := ∀d ∈ {1, . . . ,#d2m2−1}

D12 Een set van dagen uit fase 2 dat alle dagen bevat van zowel de huidige maand m2

als van de vorige maand m2 − 1. D12 := ∀d ∈ {1, . . . ,#d2m2−1 + #d2m}

D2 Een set van dagen uit fase 2 dat alle dagen bevat van de huidige maand m2.

D2 := ∀d ∈ {#d2m2−1 + 1, . . . ,#d2m}

dagenLeegp,m ∈ R+, is het aantal dagen nodig om de tank leeg te maken van niveau

V T3p,m−1 naar 0. Ondertussen is het wel mogelijk dat er nog productie is van p

tijdens het legen van de tank. Variabele in fase 1.

x

Page 14: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

Gebruikte Variabelen en Parameters xi

dagenOp Parameter in fase 1 die de verwachte dagen omstel vastlegt na het beeindigen

van een productierun van product p.

dagenP luss,m ∈ R+, variabele in fase 1 die gelijk is aan #dm − dagenSs,m − dagenSA1,m

indien dat groter is dan 0 en gelijk aan 0 indien de term kleiner is dan nul.

dagenSs,m ∈ Z+, variabele in fase 1 die vastlegt hoeveel dagen stilstand het model gaat

inplannen op straat s in maand m.

dagenTussenp,m ∈ R+ is omwille van het tussentijds gebruik van tank 3 voor een ander

product. Variabele in fase 1.

dagenV olp,m ∈ R+ is het aantal dagen nodig om de tank te vullen van 0 tot het niveau

V T3p,m. Ondertussen is het wel mogelijk dat er ook reeds verbruik is van p tijdens

het vullen van de tank. Variabele in fase 1.

DPp,d ∈ {0, 1}, variabele in fase 2 die aanduidt of er productie is van product p op dag d

in maand m2.

DQp,d ∈ Z+, variabele in fase 2 die de productiehoeveelheid aanduidt van product p op

dag d.

DV raagA2,d ∈ R+, variabele in fase 2 die de totale vraag in een maand naar A2 gaat

uitspreiden over de verschillende dagen.

EPp,m ∈ {0, 1}, variabele in fase 1 die bepaalt of er een productiecampagne eindigt in de

maand m van product p of niet.

EPp Binaire parameter in fase 2 die aanduidt of er in de maand waarvoor fase 2

behandeld wordt een productierun beeindigd wordt van product p. Deze parameter

wordt vastgelegd in fase 1.

ESs,m ∈ {0, 1}, variabele in fase 1 die bepaalt of er een stilstand eindigt in de maand m

op straat s of niet.

ESs Binaire parameter in fase 2 die aanduidt of er in de maand waarvoor fase 2

behandeld wordt een stilstand beeindigd wordt op straat s. Deze parameter wordt

vastgelegd in fase 1.

Page 15: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

Gebruikte Variabelen en Parameters xii

helpDebietd ∈ {0, 1}, helpvariabele in fase 2 die 1 is als de restrictie in verband met het

afvalwaterdebiet moet gelden.

ingeplandeSs,m Parameter die het aantal ingeplande dagen stilstand van straat s in

maand m vastlegt.

ingSs Een set van dagen in fase 2 die voor maand m2 alle dagen vastlegt waarop een

stilstand is ingepland door het management op straat s. Dit wordt afgeleid in de

preprocessingstap

initCBp De initiele voorraad van product p op de eerste dag van de maand m2 in

containers. Vastgelegd door fase 1.

initDPp,d ∈ {0, 1}, parameter uit fase 2 die de beginvoorwaarden van de productie uit de

vorige maand voor elke dag d bevat.

initLPp ∈ {0, 1}, parameter in fase 2 die gelijk is aan 1 indien p het laatste product is dat

geproduceerd werd op zijn straat.

initSp,d ∈ {0, 1}, parameter uit fase 2 die de beginvoorwaarden van de stilstanden uit de

vorige maand voor elke dag d voor elke straat s bevat.

initT12p De initiele voorraad van product p op de eerste dag van de maand m2 in tanks 1

en 2. Vastgelegd door fase 1.

initT3p De initiele voorraad van product p op de eerste dag van de maand m2 in tank 3.

Vastgelegd door fase 1.

initT4p De initiele voorraad van product p op de eerste dag van de maand m2 in tank 4.

Vastgelegd door fase 1.

initTBp De initiele voorraad van product p op de eerste dag van de maand m2 in tank B.

Vastgelegd door fase 1.

initV IBCp De initiele voorraad van product p op de eerste dag van de maand m2 in vaten

en IBC’s. Vastgelegd door fase 1.

initV rijs,d ∈ {0, 1}, parameter in fase 2 die de vrije toestand van de laatste dagen van de

vorige maand vastlegt.

Page 16: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

Gebruikte Variabelen en Parameters xiii

m2 De maand waarin fase 2 zich bevindt.

M6nietOm ∈ R+, variabele in fase 1 die het aantal dagen weergeeft waarop er meer

M-productie is in de maand m dan O-productie.

maxCapCD1 Parameter die het maximaal aantal dagen productie op straat CD1 voor een

jaar vastlegt.

maxDagp,vp Parameter die voor product p het aantal dagen van maximale voorraad

vastlegt.

minADebiet Parameter die het minimale afvalwaterdebiet per dag voor de

AW2-installatie vastlegt.

minDagp,vp Parameter die voor product p het aantal dagen horende bij de

voorraadparameter vp van minimale voorraad vastlegt.

MLp Parameter die de minimale lengte van een productiecampagne voor product p

vastlegt.

MSs ∈ Z+, variabele uit fase 2. De makespan van straat s die de volledige productie van

alle geschatte hoeveelheden uit fase 1 omvat.

NnietOm ∈ R+,variabele uit fase 1 die het aantal dagen zal weergeven waarbij de

N-productie nog gecovered is door O, nadat we zoveel mogelijk de M-productie en

de tussenliggende stilstand coveren

ODp1,p2 ∈ Z+, parameter uit fase 2 die de werkelijke omstelduur in dagen tussen de twee

producten p1 en p2 vastlegt.

OMp1,p2,d ∈ {0, 1}, variabele uit fase 2 die aangeeft of er een omstel bezig is van product

p1 naar product p2 op dag d.

omstelDuo een set van productduo’s waartussen een omstel kan plaatsvinden.

OMT3d ∈ {0, 1}, variabele uit fase 2 die 1 is indien er een omstelling plaatsvindt in tank

3 op dag d.

Page 17: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

Gebruikte Variabelen en Parameters xiv

OSp,m ∈ {0, 1} variabele in fase 1 die bepaalt of er een omstel is na product p in de

maand m of niet.

OST3m ∈ {0, 1, 2}, bepaalt het aantal omstellingen in tank 3 gedurende maand m.

Pp,m ∈ {0, 1}, binaire productievariabele van product p in maand m voor fase 1.

PA1 Het set dat bestaat uit al die producten die rechtstreeks uit A1 vervaardigd kunnen

worden, A2 uitgezonderd.

PA1vA2 Het set van producten die enkel uit A2 worden vervaardigd indien de productie

van A1 stilligt.

PA1vA2T12 Het set van producten die enkel vervaardigd worden uit A2 indien A1 stilligt

en waarbij de A2 afkomstig is uit tank 1 en 2.

PA1vA2T3 Het set van producten die enkel vervaardigd worden uit A2 indien A1 stilligt

en waarbij de A2 afkomstig is uit tank 3.

PA2 Het set van producten dat rechtstreeks vervaardigd wordt uit A2.

PA2T12 Het set van producten die rechtstreeks vervaardigd worden uit A2 waarbij de A2

afkomstig is uit tank 1 en 2.

PA2T3 Het set van producten die rechtstreeks vervaardigd worden uit A2 waarbij de A2

afkomstig is uit tank 3.

PAfval die verzameling van producten p waarvoor een afvalwaterdebiet (ADebietp) geldt.

PT3p,m ∈ {0, 1}, variabele in fase 1 die bepaalt of tank 3 op het einde van maand m

toegewezen is aan product p of niet.

PV T3p,d ∈ {0, 1}, variabele uit fase 2 die aangeeft aan welk product p tank 3 toegewezen

is doorheen dag d.

PV T4p,d ∈ {0, 1}, variabele uit fase 2 die aangeeft op welke dag d tank 4 in gebruik is

voor opslag van product p.

Qp,m ∈ R+, variabele in fase 1. De productiehoeveelheid van product p in maand m.

Page 18: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

Gebruikte Variabelen en Parameters xv

QV CBB,d ∈ R+, variabele in fase 2 die weergeeft wat de voorraad is van product B op het

einde van dag d in de tankcontainers voor B.

QV T12p,d ∈ R+, de voorraad van product p op het einde van dag d in tanken 1 en 2.

Beslissingsvariabele van in fase 2.

QV T3p,d ∈ R+, de voorraad van product p op het einde van dag d in tank 3.

Beslissingsvariabele van in fase 2.

QV T4p,d ∈ R+ variabele in fase 2 die aangeeft hoeveel ton van product p opgeslagen is in

tank 4 op het eind van dag d.

QV T4p,d ∈ R+, variabele in fase 2 die de voorraad weergeeft van product p op het einde

van dag d in tank 4.

QV TBB,d ∈ R+, variabele in fase 2 die weergeeft wat de voorraad is van product B op het

einde van dag d in de tank B.

QV V IBCp,d ∈ R+, de voorraad van product p op het einde van dag d in vaten en IBC’s.

Beslissingsvariabele van in fase 2.

Ss,d ∈ {0, 1}, variabele uit fase 2 die aangeeft of straat s stilstaat op dag d of niet.

Inclusief de afstel- en opstartdagen.

schatQp,m2 De schatting voor de productiehoeveelheid van product p in maand m2

bepaald door fase 1.

schatTA2,m Parameter in fase 2 die de schatting weergeeft van het tekort voor A2 in

maand m zoals bepaald in fase 1.

SJM4 Parameter die het eerste jaar waarin M-productie mogelijk is op straat 4 definieert.

SMM4 Parameter die de eerste maand waarin M-productie mogelijk is op straat 4

definieert.

somInitV rijs ∈ Z+, parameter in fase 2 dit het aantal vrije dagen van de vorige maand

weergeeft voor straat s.

Page 19: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

Gebruikte Variabelen en Parameters xvi

somSPEPs Binaire parameter in fase 2 die aangeeft of er op straat s een productierun

gaande is op de overgang van maand m2− 1 naar maand m2. Deze parameter komt

rechtstreeks voort uit fase 1.

somSSESs Binaire parameter in fase 2 die aangeeft of er op straat s een stilstand gaande

is op de overgang van maand m2 − 1 naar maand m2. Deze parameter komt

rechtstreeks voort uit fase 1.

SPp,m ∈ {0, 1}, variabele in fase 1 die bepaalt of er een productiecampagne start in de

maand m van product p of niet.

SPp Binaire parameter in fase 2 die aanduidt of er in de maand waarvoor fase 2

behandeld wordt een productierun gestart wordt van product p. Deze parameter

wordt vastgelegd in fase 1.

SSs,m ∈ {0, 1}, variabele in fase 1 die bepaalt of er een stilstand start in de maand m op

straat s of niet.

SSs Binaire parameter in fase 2 die aanduidt of er in de maand waarvoor fase 2

behandeld wordt een stilstand gestart wordt op straat s. Deze parameter wordt

vastgelegd in fase 1.

startM De maand waarin de planning wordt gestart.

Tp,m ∈ R+: de tekorten van elk product p in de maand m zodat niet aan de vereiste

vraag voor die maand kan voldaan worden. Variabele in fase 1.

totMS ∈ Z+, variabele uit fase 2. De makespan van het volledige chemische proces voor

maand m2, deze is gelijk aan het maximum van MSs van die maand m2.

Vp,m ∈ R+: de voorraden van elk product p op het einde van de maand m. Fase 1

V Cp,m ∈ R+: de voorraad van p in containers op het einde van de maand m. Fase 1

V erbrA2s,m,12 ∈ R+: geeft de schatting weer van het verbruik van A2 voor straat s in de

maand m die te maken heeft met restrictie 12.

verbruikp1,p2 ∈ R+ Parameter die het verbruik van product p2 weergeeft voor de

productie van p1.

Page 20: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

Gebruikte Variabelen en Parameters xvii

verwDagenOs Parameter voor fase 1 die het verwachte aantal dagen omstel op een straat

s vastlegt.

vraagp,m ∈ R+ Parameter die de vraag naar product p in de maand m weergeeft.

vrijT3p,d ∈ {0, 1}, parameter in fase 2 die de toestand van tank 3 op het einde van de

vorige maand vastlegt.

V T12p,m ∈ R+: de voorraad van p in tank 1 en 2 op het einde van de maand m. Fase 1

V T3p,m ∈ R+: de voorraad van p in tank 3 op het einde van de maand m. Fase 1

V T4p,m ∈ R+: de voorraad van p in tank 4 op het einde van de maand m. Fase 1

V TBp,m ∈ R+: de voorraad van p in tank B op het einde van de maand m. Fase 1

V V IBCp,m ∈ R+: de voorraad van p in vaten en IBC’s op het einde van de maand m.

Fase 1

y140,m ∈ {0, 1}, hulpvariabele in fase 1 in verband met D2K-productierun.

y210,m ∈ {0, 1}, hulpvariabele in fase 1 in verband met D2K-productierun.

y70,m ∈ {0, 1}, hulpvariabele in fase 1 in verband met D2K-productierun.

Page 21: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

Lijst van figuren

3.1. Schematische voorstelling van het productieproces . . . . . . . . . . . . . . . 10

4.1. Algemene structuur van de oplossing . . . . . . . . . . . . . . . . . . . . . . . 15

5.1. Grafische voorstelling van het ambitieuze plan . . . . . . . . . . . . . . . . . . 22

5.2. Grafische voorstelling van het praktische plan . . . . . . . . . . . . . . . . . . 23

7.1. Grafische voorstelling variabelen stilstand . . . . . . . . . . . . . . . . . . . . 42

7.2. Grafische voorstelling vergelijking 7.28 . . . . . . . . . . . . . . . . . . . . . . 46

7.3. Grafische voorstelling bij vergelijkingen 7.33a en 7.33b . . . . . . . . . . . . . 49

7.4. Grafische voorstelling restrictie 21 . . . . . . . . . . . . . . . . . . . . . . . . 54

7.5. Grafische voorstelling situatie 0 1 1 uit tabel 7.3 . . . . . . . . . . . . . . . . 58

7.6. Grafische voorstelling situatie 1 1 0 uit tabel 7.3 . . . . . . . . . . . . . . . . 59

7.7. Grafische voorstelling situatie 1 1 1 uit tabel 7.3 . . . . . . . . . . . . . . . . 60

7.8. Grafische voorstelling van de omstelduur in straat 3 . . . . . . . . . . . . . . 63

7.9. Grafische voorstelling van de kosten horend bij de omstel in straat 3 . . . . . 63

7.10. Grafische voorstelling voor probleem in tank 3 bij C- of D1-productie . . . . . 69

7.11. Grafische voorstelling voor het opvullen en legen van Tank 3 . . . . . . . . . . 71

7.12. Grafische voorstelling ter verduidelijking restrictie 73 . . . . . . . . . . . . . . 72

7.13. Grafische voorstelling ter verduidelijking restrictie 74 . . . . . . . . . . . . . . 75

7.14. Grafische voorstelling in verband met restrictie 63 . . . . . . . . . . . . . . . 83

8.1. Grafische voorstelling mogelijke combinaties omstellingen tussen D2KJ . . . . 106

9.1. Resultaat: productieplanning voor maand 5-12 . . . . . . . . . . . . . . . . . 111

9.2. Resultaat: productieplanning voor maand 13-16 . . . . . . . . . . . . . . . . . 112

9.3. Evolutie van de totale kost (rood) en de tekortkost (blauw) doorheen de tijd . 115

9.4. Evolutie van de omstelkosten met de simulatietijd . . . . . . . . . . . . . . . 116

9.5. Evolutie van de gebondenkosten met de simulatietijd . . . . . . . . . . . . . . 116

9.6. Evolutie van de voorraadkosten met de simulatietijd . . . . . . . . . . . . . . 117

9.7. Productieschema voor straat 6 doorheen de 12 maanden . . . . . . . . . . . . 118

9.8. Productieschema voor maand 12 . . . . . . . . . . . . . . . . . . . . . . . . . 119

xviii

Page 22: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

LIJST VAN FIGUREN xix

A.1. Variabelen van de productieplanning . . . . . . . . . . . . . . . . . . . . . . . 124

B.1. Inputgegevens in verband met specifieke probleem . . . . . . . . . . . . . . . 126

Page 23: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

Lijst van tabellen

6.1. Relaties tussen de stilstanden. vb: stilstand in AG wordt doorgegeven aan

A1 omwille van restrictie (2) . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

7.1. Opsplitsing van product G . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

7.2. Denkvoorbeeld in verband met de capaciteitsengpassingen . . . . . . . . . . . 41

7.3. Waarheidstabel in verband met de verschillende situaties voor SS, ES en∑

. 58

7.4. Waarheidstabel in verband met de verschillende situaties voor omstel in tank 3 69

8.1. Relaties tussen rechtstreekse producten. vb: productie van FC vereist pro-

ductie van F . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

xx

Page 24: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

1Inleiding

HET ultieme doel van deze masterproef is een bruikbaar lineair model opstellen dat de

productieplanning genereert voor een chemisch proces voor de komende twaalf maan-

den vertrekkende van de voorspelling van de vraag en de beginvoorraden van de producten.

Dit is een uitbreiding op het werk van Andy Maenhout die getracht heeft om dit probleem

op te lossen aan de hand van een model. Computationele beperkingen zorgden er echter voor

dat men niet verder kwam dan een productieplanning voor enkele maanden. Vandaar dat

we op zoek gingen naar een alternatieve methode om deze productieplanning te verkrijgen.

Hierarchische productieplanning

Bij een hierarchische productieplanning maakt men gebruik van meerdere modellen om een

productieplanning te genereren. Op het hoogste level gaat men strategische beslissingen

nemen door het aggregeren van producten en door het gebruiken van grote tijdsperiodes.

Een planningshorizon van 1 jaar is hierbij zeker niet vreemd. De aggregatie van producten

in de tijd vraagt een specifieke behandeling. Niet elk product uit dezelfde productgroep

heeft dezelfde parameters, maar de producten uit een groep worden wel beschreven met een

parameter. Men heeft dus nood aan geaggregeerde verwachte waarden.

Het volgende level gaat de resultaten uit het bovenliggende level disaggregeren in zowel de

tijd als over de verschillende producten van een groep. Bijvoorbeeld er wordt eerst een

planning gemaakt voor de productie van t-shirts voor het komende jaar, vervolgens wordt er

een planning gemaakt voor de komende maand waarbij de totale productiehoeveelheid van

1

Page 25: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 1. INLEIDING 2

1de t-shirts wordt opgeplitst in hoeveelheden per kleur van een t-shirt. In de onderliggende

levels spreekt men daarom vaak over het nemen van operationele beslissingen.

Het grote voordeel van hierarchische productieplanning is de opsplitsing in kleinere modellen

waardoor men mathematisch sneller tot een oplossing komt. Het nadeel is dat door deze

opsplitsing niet de meest optimale oplossing wordt gevonden, maar slechts een suboptimale.

Bovendien kan men ook niet spreken van een simpele top-down benadering en is er vaak

nood aan iteratief switchen tussen de verschillende modellen.

Oplossingsalgoritme

Door de beperking in het aantal producten en omdat er geen twee producten ook maar

een gelijke behandeling kennen, aggregeren we niet naar productgroepen. We maken enkel

gebruik van de aggregatie in de tijd. Voor een planningshorizon van 12 maanden kiezen we

een planningsbucket van 1 maand in de eerste fase. De tweede fase maakt gebruik van een

planningshorizon van 1 maand met een bucket van 1 dag.

Het oplossingsalgoritme ziet er dan als volgt uit:� In eerste instantie lossen we de eerste fase op. Deze gaat op zoek naar de goedkoopste

planning voor de komende twaalf maanden en genereert de eerste productiecijfers.� Vervolgens wordt er per maand gekeken of de vooropgestelde productiehoeveelheden

voor die maand in te plannen zijn. Dit wordt door de tweede fase uitgevoerd die de

totale makespan van de productie van de vooropgestelde schattingen gaat minimalise-

ren.

– Indien de makespan kleiner is dan het aantal beschikbare dagen, gaan we over

naar de controle van de volgende maand met behulp van fase 2. Bovendien wordt

het aantal dagen van de beschikbare dagen, die vrij zijn van productie omdat

de makespan voldoende klein is, bijgehouden om eventueel een probleem in een

volgende maand op te vangen.

– Indien de makespan groter is dan het aantal beschikbare dagen en het overschot

aan dagen niet kan opgevangen worden door eerder opgespaarde dagen, wordt te-

ruggekeerd naar fase 1 en wordt er gezocht naar een nieuwe goedkoopste planning

mits het updaten van het aantal beschikbare dagen in de probleemmaand. Indien

we bijvoorbeeld 2 dagen tekort hebben voor de huidige planning, dan lossen we

fase 1 op met het aantal dagen voor die maand verminderd met 2.

Voor het opstellen van de modellen is het van belang om alle restricties van het chemische

proces op een correcte manier te vertalen naar de verschillende aggregatieniveaus. Veel van

deze restricties staan uitgedrukt in dagen wat het niet eenvoudig maakt om ze in de eerste

Page 26: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 1. INLEIDING 3

1fase toe te passen. Bovendien wordt de flow van alle producten ook uitgedrukt in dagen,

maar kan in het eerste model met de planningsbucket van 1 maand deze flow enkel per maand

verzekerd worden. Het was in eerste instantie dan ook de bedoeling om een zeer nauwkeurig

model op te stellen voor fase 1 om latere moeilijkheden in fase twee te verminderen. Voor de

wiskundeliefhebber verwijs ik dan graag naar de hoofdstukken in verband met het opstellen

van deze modellen. Alle restricties zijn verwerkt in beide fasen behalve die restricties die de

start van een omstel op een bepaalde datum verbieden. Dit is een perfecte restrictie die pas

in fase twee aan bod moet komen, maar indien ze niet in fase een wordt gemodelleerd, levert

dat zeer grote problemen in de tweede fase. De implementatie hiervan zou te uitgebreid

worden en is daarom weggelaten.

Resultaten en Conclusie

De eerste fase werkt perfect en geeft schitterende schattingen voor de goedkoopste planning.

Het nadeel hierbij is de nodige rekentijd. Op dit moment is minimaal drie uur nodig om

min of meer in de buurt te komen van de optimale oplossing. In de tweede fase is ergens een

kleine logische fout gekropen waardoor deze voorlopig niet werkt, aangezien de nadruk toch

vooral lag op de eerste fase. Op zich is dat een spijtige zaak, maar door de lange rekentijd

van de eerste fase zijn meerdere terugkoppelingen toch uitgesloten. Bovendien kan door de

zeer nauwkeurige resultaten van de eerste fase deze ook als een losstaand geheel worden

gebruikt.

Naar de toekomst toe moet er een oplossing worden gezocht voor fase 2, voor de computa-

tionele problemen en voor de restricties in verband met dagen waarop geen omstel mag

voorkomen. Indien men in plaats van voor alle maanden, slechts voor de eerste twee maan-

den fase twee gaat controleren en mits toevoeging in fase een van deze weggelaten restricties

voor de verboden dagen van de eerste twee maanden, dan kunnen beide problemen op een

correcte manier behandeld worden.

Page 27: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

2Literatuurstudie

HIERARCHISCHE productieplanning heeft in de literatuur al uitgebreid de aandacht

gekregen. Het is hier zeker niet de bedoeling om een uitgebreide reflectie te geven

van alles wat er in de literatuur is te vinden. We gaan hier voor een zo concreet en bondig

mogelijke uitleg over wat hierarchische productieplanning nu juist is, waar het voor gebruikt

wordt en wat de voor- en nadelen zijn. Op deze manier heeft de lezer een algemeen begrip

voor de toepassing van hierarchische productieplanning voor de specifieke case. We starten

eerst met een algemene uitleg over wat hierarchische productieplanning is. Vervolgens gaan

we meer in detail in op enkele aspecten van een single-stage systeem en een multi-stage

systeem en bekijken we de verschillende mogelijkheden van aggregatie en disaggregatie.

Wat is hierarchische productieplanning

Volgens Bitran et al. (1981) draait de methode van hierarchische productieplanning om het

herkennen van de verschillen tussen strategische en operationele beslissingen. De modellen

voor de productieplanning die hieruit volgen, zijn dan volledig in overeenstemming met het

reele beslissingsproces. De strategische beslissingen die in eerste instantie worden genomen,

komen overeen met een geaggregeerde eerste productieplanning. De operationele beslissingen

komen dan aan bod in een lager level met een gedisaggregeerde planning.

In het meest algemene geval treedt er aggregatie op door zowel het samennemen tot langere

tijdsperiodes als door het samennemen van verschillende producten in 1 groep. Vandaar

de analogie met het strategische level van het beslissingsproces. Er wordt bijvoorbeeld in

4

Page 28: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 2. LITERATUURSTUDIE 5

2

eerste instantie een forecast gemaakt voor een heel lange tijdsperiode en voor verschillende

productgroepen. Met een simpel voorbeeld uitgelegd: het is in januari nog niet van belang

om te weten hoeveel t-shirts van elke kleur zullen verkocht worden in december van datzelfde

jaar, maar het is wel het totaal aantal t-shirts voor het komende jaar ongeacht de kleur en

ongeacht de maand van verkoop dat ons op dit niveau interesseert. In het gedisaggregeerde

level wordt er dan naar kleinere periodes gekeken en per product afzonderlijk. De operati-

onele beslissingen zijn daarbij van belang. Hierbij willen we enkel voor de maand januari

weten hoeveel t-schirts er in welke kleur verkocht zullen worden. Eventueel ook nog voor

februari, maar dat is niet strikt noodzakelijk. Een combinatie van deze twee levels met alle

mogelijke tussenliggende vormen is mogelijk. Zolang er maar duidelijk in elk level wordt

nagegaan wat de tijdshorizon is en hoe de producten gegroepeerd zijn.

Het grote voordeel van deze aggregatie en disaggregatie is dat een productieplanning kan ge-

genereerd worden voor een grote planningshorizon, maar dat er geen gedetailleerde gegevens

noodzakelijk zijn voor heel deze planningshorizon. De planning die werkelijk zal uitgevoerd

worden, is deze van een kortere planningshorizon. Hiervoor zijn wel gedetailleerde gegevens

nodig, maar deze zijn eenvoudiger te voorspellen op korte termijn dan op een lange termijn.

Het nadeel van het opsplitsen in verschillende niveaus is dat er aan nauwkeurigheid wordt

ingeboet. Het meest optimale geval wordt gevonden indien al de informatie gekend is voor

de hele planningsperiode zodat er 1 model kan opgesteld worden. Deze gedetailleerde for-

mulering van het probleem leidt vaak tot meer problemen. Het is moeilijk om het op te

lossen, het vereist data die op langere termijn moeilijk nauwkeurig te bepalen zijn en het is

vaak duur om het te laten werken. Het verlies van nauwkeurigheid door de opsplitsing is

dus zeker gerechtvaardigd.

Single-Stage System

Bitran et al. (1981) geeft een heel uitgebreide uitleg over de toepassing van deze theorie voor

single-stage systemen. Er wordt een opsplitsing gemaakt in drie aggregatielevels:� Items: de eindproducten zoals geleverd aan de klanten� Families: een groepering van items die gelijkaardige setups delen. Indien een item

van een familie wordt geproduceerd, kan elk ander item van deze familie zonder grote

omstelling ook geproduceerd worden.� Product types: een groepering van families met gelijkaardige kosten, voorraadkosten,

hoeveelheden,...

In het eerste level wordt voor de product types een geaggregeerde planning opgesteld met

een typische planningshorizon van 1 jaar om strategische beslissingen te kunnen nemen.

Page 29: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 2. LITERATUURSTUDIE 6

2

Enkel de hoeveelheid van elk product type dat gepland wordt in de eerste periode wordt

doorgegeven naar het familie-level. In dit level wordt de geplande hoeveelheid van het

producttype opgesplitst in de families die tot dit type behoren. Deze hoeveelheden worden

doorgegeven aan het item level om de te produceren hoeveelheid te bepalen van elk item

in deze eerste periode. We zien hierin dus duidelijk dat gedetailleerde voorspellingen op

het item niveau niet nodig zijn voor de hele planningshorizon, enkel voor de eerste periode.

Aangezien geaggregeerde voorspellingen ook nauwkeuriger zijn dan meer gedetaileerde zullen

de productieplannen door deze aanpak stabieler zijn in de tijd.

Bitran et al. (1981) suggereren het gebruik van convexe knapzak problemen voor de disag-

gregatie tussen de verschillende levels. Op het hoogste niveau worden de productiekosten

en de voorraadkosten geminimaliseerd. Het tweede niveau probeert de setupkosten tussen

de verschillende families te minimaliseren. Op dit moment zijn alle kosten bepaald. Op het

derde niveau is het dan de bedoeling om te kijken naar de invloed op de toekomstige kos-

ten. De hoeveelheden per familie worden opgesplitst per item op zo’n manier dat alle items

ongeveer in een zelfde tijdspanne een nieuwe productierun vragen. Voor meer gedetailleerde

uitleg hierover verwijs ik je naar de tekst van Bitran et al. (1981). Mits het gebruik van

enkele aanpassingen aan de heuristieken kan voor de meeste situaties een optimaal model

worden gevonden.

Een two-stage system

Bitran et al. (1982) geeft uitbreidingen op het algemene model van een hierarchische produc-

tieplanning voor een tweedelig productieproces. Naast de producten voor de eindgebruiker

hebben we hier ook grondstoffen voor deze producten die ingepland moeten worden. Ook

voor deze grondstoffen wordt een verdeling gemaakt in verschillende types en families. Wat

hieruit vooral kan besloten worden is dat elk probleem zijn specifieke oplossing vergt. Je

kan je baseren op een algemene structuur, maar de uiteindelijke oplossing blijft afhankelijk

van het specifieke probleem.

Aggregatie en Disaggregatie

Een moeilijkheid bij de aggregatie is dat door het samennemen van verschillende producten

in 1 producttype er ook aggregatieparameters voor dit producttype moeten bepaald worden.

Een gezamenlijke voorraadkost, een gezamenlijke productiekost, een gezamenlijke produc-

tierate, een verwachte setupkost (Qiu en Burch, 1997),. . . Vaak doet men dit door gewichten

toe te kennen per product om zo tot 1 parameter te komen. Hieruit blijkt duidelijk dat

hierarchische planning geen pure top-down benadering kent. Via een iteratief proces is het

beter om deze parameters te updaten tot ze de gewenste waarden bereiken (Vicens et al.,

2001).

Page 30: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 2. LITERATUURSTUDIE 7

2

Een goede aggregatie en disaggregatieprocedure heeft daarnaast ook nog heuristieken en

consistencyvergelijkingen om infeasible problemen te vermijden en om feedback te geven

tussen de verschillende modellen. Op deze manier wordt de beste suboptimale oplossing

gevonden (Erschler et al., 1986; Vicens et al., 2001).

Conclusie

Samenvattend kunnen we stellen dat een hierarchische productieplanning zijn voordelen en

nadelen kent. Het grote nadeel is dat men op zoek moet naar een correcte aggregatie- en

disaggregatieprocedure. Dit is niet voor de hand liggend en elk probleem vraagt een eigen

oplossing. Bovendien verliezen we door de opsplitsing in meerdere levels aan nauwkeurigheid

en vinden we een suboptimale oplossing. De voordelen wegen echt zwaarder door dan de

nadelen, want naast de link met het reele beslissingsproces is vooral de beperking in rekentijd

en de noodzaak aan een minder gedetailleerde productieforecast van zeer grote waarde.

Voor meer details in verband met de wiskundige modellering verwijs ik door naar de meer

gespecialiseerde literatuur. Na het eerste level is het op langere termijn reeds mogelijk

om eerste essentiele trade-offs op te merken en kan er reeds op ingespeeld worden door

manageriele interactie.

Page 31: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

3Probleemstelling: De case van Lanxess

IN theorie is het een zeer eenvoudige probleemstelling:

Stel een optimalisatiemodel op voor de automatisering van de productieplanning voor een

chemisch proces van het chemische bedrijf Lanxess.

Achter deze ene zin zit echter meer dan men op het eerste zicht denkt. Daarom overlopen

we kort alle elementen die in deze probleemstelling aan bod komen.

3.1. Optimalisatiemodel

De bedoeling is om een wiskundig model op te stellen dat bestaat uit een doelfunctie en

een aantal voorwaarden waaraan de variabelen moeten voldoen, waaruit de meest optimale

oplossing van het probleem moet volgen. Een zeer eenvoudig voorbeeld van een wiskundig

model is het volgende: maximaliseer de winst door het produceren van twee producten x en

y, waarbij rekening moet gehouden worden met de beschikbaarheid van een grondstof: 20

stuks. Voor x heb je 5 eenheden van de grondstof nodig en win je 10 euro. Voor y heb je 4

eenheden nodig, maar win je ook maar 9 euro.

Max. 10x + 9y

o.v. 5x + 4y ≤ 20

x ∈ Z+

y ∈ Z+

8

Page 32: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 3. PROBLEEMSTELLING: DE CASE VAN LANXESS 9

3

Het is hier duidelijk dat de oplossing wordt gegeven door x = 0 en y = 5. De probleemstelling

houdt dus in om de correcte doelfunctie en de correcte voorwaarden op te stellen voor het

specifieke probleem.

3.2. Automatisering

Op dit moment gebeurt de planning handmatig. Hier zijn onmiddellijk twee nadelen aan

verbonden. Enerzijds is het een tijdrovend proces, anderzijds is men nooit zeker of de

gevonden planning wel de beste is. De bedoeling van het automatiseren van de planning

is dan ook tweedelig. Men kan zogezegd op de ’start’-knop drukken en na een verloop van

tijd terugkomen om te zien dat je planning klaar is. Ondertussen kan er dus iets anders

gedaan worden. Bovendien is men ook zeker dat dit de beste planning is onder de gegeven

voorwaarden.

3.3. Productieplanning

Productieplanning is een zeer ruim begrip. In het algemeen is het de bedoeling dat de

productie van producten gepland wordt doorheen de tijd om zo aan de doelstellingen te

voldoen. Ik stap nu af van het algemene geval om meer in detail het specifieke probleem te

bekijken.� Input

– De beginvoorraden van alle producten op de eerste van een bepaalde maand

– De verkoopsprognoses voor de komende 12 maanden

– De door het management ingeplande stilstanden

– De restricties specifiek voor het proces

– De variabelen van de productieplanning (kosten, capaciteiten,. . . )� Output: Een planning voor de komende 12 maanden die voor elke maand de produc-

tiehoeveelheden geeft.� Doelstelling: het vinden van die planning die de totale kost zo klein mogelijk maakt.

De planningshorizon is dus 1 jaar, de tijd waarover men in de toekomst wil kijken om de

producten te plannen. De planningsbucket lijkt 1 maand, maar achteraf zal blijken dan

een planningsbucket van 1 dag nodig is. Dit is de kleinste eenheid voor planning. En de

planningsfrequentie is 2 weken, of de basis waarop de planning geupdate wordt. Hieraan

moet het model allemaal voldoen.

Page 33: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 3. PROBLEEMSTELLING: DE CASE VAN LANXESS 10

3

3.4. Chemisch proces van Lanxess

3.4.1. Schematisch

Al het voorgaande moet specifiek toegepast worden op een chemisch proces van het bedrijf

Lanxess. Een schematische voorstelling van dit proces is gegeven in figuur 3.1. Hierop

zien we dat, om het bedrijfsgeheim niet te schaden, alle producten en processen een code

gekregen hebben. Dit is voor het model van geen belang, aangezien het slechts namen zijn.

Figuur 3.1.: Schematische voorstelling van het productieproces

We overlopen in het kort dit schema. We zien twee grondstoffen AG en E. Deze grondstoffen

zijn in een onbeperkte hoeveelheid aanwezig, er moet enkel rekening gehouden worden met

een eventuele ingeplande stilstand van de processen die aan deze grondstoffen vooraf gaan.

Tijdens die periode zijn er geen grondstoffen beschikbaar.

Uit grondstof E kunnen dan de producten F , L, M en O gemaakt worden, wat aangeduid

wordt door de blauwe pijl op het schema. Alle pijlen op het schema, uitgezonderd de

dunne blauwe lijntjes, duiden aan wat de grondstoffen zijn voor andere producten en welke

producten er al dan niet nog verder worden verwerkt.

Page 34: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 3. PROBLEEMSTELLING: DE CASE VAN LANXESS 11

3

Indien verschillende producten in 2 aaneengesloten kadertjes staan, zoals bijvoorbeeld pro-

ducten C en D1 betekent dit dat ze op dezelfde installatie vervaardigd worden. Dit is een

exclusiviteitsrelatie. Op elk moment kan slechts 1 product gemaakt worden.

We onderscheiden twee grote delen. Enerzijds het linkerdeel van het schema met de pro-

ducten A1, B, C, D1 en A2. Anderzijds het rechterdeel met alle overige producten. Het

linkerdeel wordt ook wel installatie 1 genoemd, het rechterdeel installatie 2. In installatie 2

hebben we 5 productiestraten gevolgd door 1 maalstraat. Op straat 1 worden bijvoorbeeld

F en G geproduceerd. Vervolgens hebben we nog straten 3, 4, 5 en 6. Straat 2 bestaat niet

meer. Alle producten van deze straten worden verkocht (behalve D2). 3 van deze producten

kunnen eventueel ook nog gemalen worden. Deze gemalen producten worden ook verkocht.

En ook van A2 is er verkoop mogelijk.

Ter illustratie gaan we even verder in op A1. Gewoon om te duiden dat achter dit schema nog

veel meer zit dan op het eerste gezicht. Deze informatie is echter niet helemaal nuttig voor de

productieplanning en wordt dus voor de rest achterwege gelaten. Het is belangrijk om enkel

de nodige aspecten uit deze informatie te halen. A1 is een volledige chemische installatie

met reactoren, extracties, ...enz. Uit deze installatie komt het product A1. We hebben geen

stapelcapaciteit voor A1. Product A2 wordt uit A1 gemaakt. De A2-installatie is niet meer

dan een indamping (destillatie). Deze indamping kan relatief gemakkelijk gestopt en gestart

worden. Voor deze A2-installatie gelden de 21 dagen stilstand natuurlijk niet. We kunnen

bij wijze van spreken de A2-installatie ook voor een paar dagen stilleggen. Dan moeten we

natuurlijk ook de capaciteit van de A1-installatie verminderen omdat we A1 niet kunnen

bufferen. Dit doen we dus zelden omwille van de energie-inefficientie.

Er zijn ook vier voorraadtanken beschikbaar voor tijdelijke opslag van producten. In tank

1 kan A2 opgeslagen worden. In tank 3 kan A2, C of D1 opgeslagen. Ook hier exclusiviteit,

slechts 1 product op elk moment. Deze tanken zijn beperkt in capaciteit. Er kan niet

oneindig veel in opgeslagen worden. Indien er geen tank staat is er ook geen opslag mogelijk

en moeten de geproduceerde producten ook onmiddellijk verbruikt worden. Indien er dus

A1-productie is, moet dat onmiddellijk omgezet worden naar A2, F , . . .C- of D1 kan eerst

opgeslagen worden, indien de tank beschikbaar is, alvorens verder te worden verwerkt.

Dan rest er ons nog alleen AW1, AW2 en AW3 uit te leggen. Dit zijn drie afvalwaterin-

stallatie die met de verschillende producten in verbinding staan. Voor de werking hiervan

in combinatie met de producten verwijs ik naar de behandeling van de restricties. Een

voorbeeld om de complexiteit van deze installaties te illustreren: als er maar op 1 straat

geproduceerd wordt (1 product), dan mag bij uitval van AW2 terwijl AW1 nog loopt elk

product geproduceerd worden behalve product N.

Page 35: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 3. PROBLEEMSTELLING: DE CASE VAN LANXESS 12

3

3.4.2. Restricties

Naast deze floweigenschappen zoals vastgelegd in het schema zijn er ook nog 103 andere

restricties waaraan het chemische proces moet voldoen. Deze lijst is ter beschikking ge-

steld door Lanxess. Ik ga deze hier niet allemaal opsommen. Ze komen voldoende aan bod

bij de uitwerking van het wiskundig model. In het kort gezegd gaan deze restricties over

de omstellingen die tussen bepaalde producten op eenzelfde straat moeten gebeuren. Ver-

plichtingen in verband met productiesequenties, de lengte van een productierun, het aantal

productiecampagnes, stilstanden, de kosten die hiermee gepaard gaan, . . .

3.4.3. Bemerkingen

Het grote probleem hierbij is dat er met zeer veel factoren rekening moet worden gehouden.

Geen enkel product is hetzelfde en kan dus op dezelfde manier behandeld worden. Het

analoge geldt voor de productiestraten. Het probleem vraagt dus echt een zeer specifieke

oplossing.

Vorig jaar reeds heeft een thesis-student zich gebogen over het probleem. Toen is men van

een straightforward aanpak uitgegaan. Het bleek echter al snel dat door de planningsbucket

van slechts 1 dag het aantal variabelen voor het model zeer snel toenam. Elke ingevoerde

variabele voor 1 dag, moet vermenigvuldigd worden met 365 om voor het hele jaar de

planning te kunnen bepalen. De rekencapaciteit en rekentijd nam dus ook toe, zodat de

enige correcte conclusie die hieruit volgde was: het gaat niet op deze manier. Er moest dus

gezocht worden naar een nieuwe manier om dit probleem aan te pakken.

Page 36: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

4Werkelijke model: structuur

IN de volgende hoofdstukken wordt al het voorgaande samengenomen om tot een op-

lossing van het specifieke planningsprobleem van Lanxess te komen. We beginnen in

dit hoofdstuk met het uitleggen van de algemene structuur van de oplossing, zodat al de

onderdelen onmiddellijk kunnen gesitueerd worden in het volledige plaatje. In de vier daar-

opvolgende hoofdstukken behandelen we de belangrijkste bouwblokken om tot het resultaat

te komen.

4.1. Algemene structuur

Zoals aangehaald in het theoretische onderdeel over hierarchische productieplanning is het

mogelijk om op verschillende manieren de hierarchie in het beslissingsproces te verwerken.

De combinatie van een aggregatie over tijd en producten is bij ons probleem niet toepas-

baar omwille van de complexiteit van een chemisch proces. Aggregatie van producten in

productfamilies en productgroepen om zo voor deze groepen een geaggregeerde planning op

te stellen is niet mogelijk omdat elk product verschillend is en bovendien gaat het ook maar

over een beperkt aantal producten.

Aggregatie over enkel de tijd is wel mogelijk om toe te passen. Ondanks dat er gevraagd

wordt naar productiehoeveelheden per maand voor de komende twaalf maanden, is het toch

noodzakelijk om de planningsbucket kleiner te kiezen dan die maand aangezien zeer veel

restricties en voorwaarden worden uitgedrukt in dagen. Bijvoorbeeld, een omstelling op

straat 1 duurt twee dagen, een stilstand duurt minstens 21 dagen, . . . Om zo een correcte

13

Page 37: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 4. WERKELIJKE MODEL: STRUCTUUR 14

4

productieplanning te krijgen moeten we kijken per dag of dat mogelijk is. Zoals al eerder

gezegd is het niet mogelijk om dit als 1 wiskundig model te formuleren voor een volledig

jaar. Elke variabele moet dan vermenigvuldigd worden met de factor 365, wat tot een te

grote rekentijd leidt.

Indien we nu echter aggregeren over de tijd om vervolgens opnieuw te disaggregeren, is het

wel mogelijk om dit probleem op te lossen. Het algemene schema van deze aggregatie/dis-

aggregatie is te zien op het schema van figuur 4.1.

Page 38: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 4. WERKELIJKE MODEL: STRUCTUUR 15

4

Figuur 4.1.: Algemene structuur van de oplossing

Page 39: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 4. WERKELIJKE MODEL: STRUCTUUR 16

4

We onderscheiden drie grote delen:� Input� Wiskundige model� Output

Over de input en de output kunnen we zeer kort zijn. Op vraag van Lanxess en uiteraard

omwille van de gebruiksvriendelijkheid wordt alles ingegeven via Excel en wordt de output

gegenereerd in Excel. Het wiskundige model zelf wordt in AMPL, ’A Modeling Language

for Mathematical Programming’ geschreven, wat een begrijpbare en krachtige algebraısche

modelleertaal is voor lineaire en niet-lineaire optimalisatieproblemen. Daarom is er dus

nood aan de koppeling tussen Excel en AMPL enerzijds en AMPL en Excel anderzijds.

Deze koppeling is niet zomaar met 1 commando te regelen. Vooral voor de output was het

een hele opgave om de correcte waarden op de correcte plaats te krijgen in de geleverde

excelsjablonen. Ik ga hier verder niet op in omdat dat niet relevant is voor de oplossing van

het echte probleem.

4.1.1. De theorie achter het wiskundige model

Na het inlezen van alle parameters en de beginvoorwaarden uit excel is er eerst nog nood

aan een kleine preprocessing stap alvorens echt over te gaan op de wiskundige modellen.

Deze preprocessing komt uitgebreid aan bod in sectie 6.

Zoals op schema 4.1 te zien bestaat het werkelijke model uit drie grote onderdelen die op

allerlei manieren met elkaar gekoppeld zijn. We beschrijven het doel van elk afzonderlijk deel

en hoe ze met elkaar gekoppeld worden. De wiskunde per onderdeel wordt in desbetreffende

hoofdstukken gegeven.

Fase 1: planning per maand voor een heel jaar

Zonder in al te veel detail te treden, worden er hier productiehoeveelheden per product

voor de komende 12 maanden vastgelegd. Dit zou dan een eerste ruwe schatting moeten

geven voor de uiteindelijke productieplanning. We doen dit door te aggregeren over de

tijd en alles te bekijken op het maandelijks niveau. We kijken helemaal niet op welke

dag een bepaald product geproduceerd wordt of in welke volgorde de producten worden

geproduceerd. Zolang de algemene flow voor een hele maand maar behouden blijft en dat

er geen producten geproduceerd worden die dan plots verdwijnen in de overgang naar de

volgende maand. Op deze manier moet elke variabele slechts vermenigvuldigd worden met

12, voor elke maand 1. Dit zorgt voor een zeer sterke reductie van de rekentijd. Bovendien

behandelen we ook een volledig jaar, wat zonder aggregatie onmogelijk zou zijn.

Page 40: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 4. WERKELIJKE MODEL: STRUCTUUR 17

4

We trachten hier wel al de kosten reeds in rekening te brengen om zo die schatting te bekomen

waarvoor de totale kost geminimaliseerd wordt. Het grote probleem door deze aggregatie is

dat alles moet worden uitgedrukt in maanden en dat we daardoor aan correctheid inboeten.

Het is dus nooit mogelijk om echt de optimale oplossing te vinden voor het gehele probleem,

maar we zullen wel een suboptimale oplossing vinden die een zeer goede benadering is van

het gehele probleem.

Indien de exacte productievolgorde niet geweten is, is het ook onmogelijk om hier de exacte

omstellingen in rekening te brengen. We zullen dus een methode moeten vinden om een

verwachte omstelduur en een verwachte omstelkost per straat te definieren. Ook stiltanden

kunnen moeilijk worden ingepland, we weten namelijk niet wanneer deze stilstand zal plaats-

vinden. Is dat in het begin van de maand, op het einde of in het midden van die maand. De

eisen voor een minimale duur van een stilstand zullen dus over verschillende maanden moe-

ten lopen waarbij er zeer goed nagedacht moet worden over de verschillende mogelijkheden

en hoe die te modelleren. Indien je voor elke dag exact weet wat er geproduceerd wordt,

weet je ook perfect of dit voldoet aan de capaciteit. Je weet nu niet welke omstellingen

er gebeuren op welke dagen er productie is van welk product, dus het definieren van een

restrictie die eist dat een straat op vollast moet lopen is ook niet zo eenvoudig aangezien de

totale capaciteit van die straat moeilijk te voorspellen is.

Er wordt dus bij elke restrictie nagedacht of er een equivalente formulering bestaat op het

maandelijkse niveau en de keuze wordt gemaakt om restricties door te schuiven naar de

volgende fase of niet.

Het resultaat van deze eerste fase is een eerste ruwe schatting voor de productiehoeveelheden

voor de komende twaalf maand. Met andere woorden de gevraagde planning voor het

probleem. We zijn echter door het aggregeren over de tijd en door het uitstellen van enkele

restricties niet zeker of deze planning wel haalbaar is en dus aan alle eisen voldoet. Daarom

worden deze eerste ruwe schattingen en enkele andere variabelen dan doorgegeven aan de

tweede fase van het model.

Fase 2: scheduling per dag voor een maand

Per maand wordt er gekeken of er een schedule bestaat die al de geplande producties uit

de eerste fase inplant over de verschillende productiestraten. Indien er zo een schedule

bestaat voor elke maand en indien al deze schedules voldoen aan alle restricties dan is het

volledige probleem opgelost. Dit is eigenlijk gedeeltelijk te vergelijken met het rechtstreeks

modelleren van het probleem voor een heel jaar, maar ik heb hier wel voor een andere

doelfunctie gekozen. Bovendien zal de rekentijd ook een heel stuk ingekort worden aangezien

een zeer groot deel van de producties in bepaalde maanden op nul wordt gesteld, wat dus ook

weer aanleiding geeft tot een groot aantal variabelen in het model die onmiddellijk worden

Page 41: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 4. WERKELIJKE MODEL: STRUCTUUR 18

4

vastgelegd.

Er wordt dus 12 keer een ’kleiner’ model opgelost. Dit model plant voor elke dag van een

maand welk product er wordt geproduceerd of welke omstelling er gebeurt. We beginnen

met de eerste maand vertrekkend van de beginvoorwaarden uit de huidige maand en plannen

de geschatte hoeveelheden in op de productielijnen rekening houdend met alle restricties.

We bekijken dan voor elke straat afzonderlijk hoeveel dagen er noodzakelijk zijn om aan deze

planning te voldoen, dit is de makespan. Het is natuurlijk de bedoeling dat deze makespan

kleiner is dan of gelijk aan het aantal dagen van een maand. De fout op deze makespan

moet dus zo klein mogelijk gemaakt worden. Hoe meer dagen we tekort hebben om alles in

de maand te produceren, hoe slechter dus de eerste schattingen waren.

Analyse van de schedule

We analyseren deze schedule van de eerste maand en nemen een beslissing of we de schatting

behouden of niet. Indien de schatting voor deze maand goed is, starten we de tweede fase

voor de tweede maand uitgaande van de beginvoorwaarden bepaald door de schedule van de

eerste maand. Indien de schatting niet goed is keren we terug naar de eerste fase en bepalen

we nieuwe schattingen. Welke beslissingsregels er opgesteld worden, wordt besproken in het

deel over deze analyse.

Uiteindelijk komen we in de situatie waarbij het tweede model voor elke maand de schedule

heeft bepaald en beslist heeft dat deze allemaal in orde zijn. Op dat moment weten we

dat de laatst gevormde schattingen een volledig haalbare productieplanning geeft voor de

volgende twaalf maanden en is het probleem opgelost.

Terugkoppeling naar fase 1

Aangezien alles draait rond voldoende capaciteit hebben om alles te kunnen produceren

in een maand of in een jaar ligt hier de sleutel tot de terugkoppeling. Capaciteit kan

onmiddellijk vertaald worden naar het aantal beschikbare dagen voor productie. Indien we

dus merken dat er enkele dagen tekort zijn om de huidige productiehoeveelheden in 1 maand

in te plannen, laten we het eerste model opnieuw lopen, maar met een beperking op het

aantal dagen in de maand die niet voldeed in fase 2. We merken bijvoorbeeld in de maand

mei dat we 32 dagen nodig hebben om aan de huidige planning te kunnen voldoen. Er zijn

slechts 31 dagen beschikbaar in mei. We laten deze eerste fase dus opnieuw lopen, maar

met een beperking van het aantal dagen in mei tot slechts 30, wat 1 dag minder is dan de

realiteit. Op deze manier gaan er nieuwe schattingen gecreeerd worden die nu hopelijk wel

voldoen. Het is dus een iteratief proces dat op zoek gaat naar de beste optimale oplossing.

Een tweede aspect in verband met deze terugkoppeling is of we al dan niet alle maanden gaan

Page 42: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 4. WERKELIJKE MODEL: STRUCTUUR 19

4

herrekenen. Stel dat we bijvoorbeeld op een bepaald moment reeds vijf maanden hebben

die in orde zijn. De zesde maand die we bekijken is niet in orde en er wordt een terugkop-

peling gemaakt naar de eerste fase. Er zijn nu twee mogelijkheden. Ofwel berekenen we

nieuwe schattingen voor alle maanden, ofwel berekenen we enkel nieuwe schattingen voor

die maanden die nog niet in orde zijn. Het is duidelijk dat in de eerste situatie fase 2 voor

alle maanden opnieuw moet doorlopen worden, maar dit geeft wel een perfecte aggregatie/-

disagggregatie. In de tweede situatie is door het vastleggen van deze productiehoeveelheden

in fase 1, de schatting niet veranderd, en hoeft fase 2 niet opnieuw doorlopen worden voor

de maanden die reeds in orde zijn. Twee grote voordelen, enerzijds is er door het vastleggen

in fase 1 van een groot aantal variabelen minder tijd nodig om tot nieuwe schattingen te

komen, anderzijds is er ook tijdswinst in fase 2 omdat niet opnieuw alle maanden moeten

gecontroleerd worden. Het nadeel echter is dat er met deze methode ook weer een klein

verlies aan optimaliteit wordt ingecalculeerd, omdat eventuele wijzigingen enkel nog kunnen

voorkomen in de laatste maanden. We verkiezen omwille van de tijdswinst toch voor deze

tweede methode.

4.1.2. Probleem: Restricties 88-91 en 96

Nu reeds zou ik willen wijzen op de grote moeilijkheid in het specifieke probleem. Indien

onderstaande restricties worden genegeerd is het bovenstaande model perfect in staat om in

een beperkte rekentijd tot een goede oplossing te komen.� (88) een productomstel moet op maandag, dinsdag, woensdag of donderdag gebeuren.

Er mag geen wettelijke feestdag binnen deze dagen vallen.� (89) de productomstel van straat 1 en 3 mag niet gelijktijdig gebeuren omwille van de

personeelsbezetting.� (90) de productomstel van straat 4 en 6 mag niet gelijktijdig gebeuren omwille van de

personeelsbezetting.� (91) een productomstel van straat 1, 3, 4, 5 en 6 mag niet gelijktijdig gebeuren omwille

van de personeelsbezetting. Opgepast: het zou kunnen zijn dat deze voorwaarde in de

nabije toekomst komt te vervallen terwijl de twee vorige behouden blijven.� (96) een productomstel in de maalstraat moet op maandag, dinsdag, woensdag of don-

derdag gebeuren. Er mag geen wettelijke feestdag binnen deze dagen vallen.

In het geval deze restricties niet worden genegeerd zitten we met meer problemen. Enerzijds

volgt uit deze restricties dat ze niet van belang zijn in de eerste fase, omdat ze expliciet

spreken over producties op bepaalde dagen. Maar deze worden helemaal nog niet vastgelegd

in deze eerste fase waardoor de restricties logischerwijze worden doorgeschoven naar de

tweede fase.

Page 43: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 4. WERKELIJKE MODEL: STRUCTUUR 20

4

In de tweede fase zullen deze restricties echter voor zeer grote problemen zorgen indien er in

de eerste fase nog geen rekening met gehouden is. Een productierun is bijvoorbeeld geschat

voor 8 dagen in de maand. Deze run stopt op een vrijdag, wat betekent dat we twee dagen

moeten wachten, tot een maandag, alvorens de omstelling kan starten. Nog erger is het

dan als ook op een andere straat deze productierun toevallig stopt in het einde van die

week, zodat ook die omstelling op maandag moet starten. Maar 1 omstelling tegelijkertijd

betekent zelfs het uitstellen van de omstelling naar de volgende week. Dit effect kan zeer

snel oplopen, wat leidt tot fouten op de makespan van een groot aantal dagen. Het is niet de

bedoeling dat deze fouten te groot worden, want dit zal leiden tot inconsistenties tussen de

twee fasen. Mits enkele kleine aanpassingen zou waarschijnlijk de schatting wel voldoen aan

bovenstaande restricties zonder al te veel verlies van capaciteit. Er moet dus een oplossing

worden gezocht om deze voorwaarden in de eerste fase reeds in te plannen.

Dit gaat weer gepaard met voor- en nadelen. De eerste fase is op dit moment al meer dan

genoeg belast en heeft al voldoende tijd nodig om nauwkeurige schattingen te berekenen

zonder deze restricties. Het is mogelijk om deze restricties uit te schrijven voor de eerste

fase indien men de volledige productievolgorde gaat proberen vastleggen van alle straten en

de productiehoeveelheden dan zo gaat beperken zodat een productierun steeds eindigt op

een dag waarbij een omstelling kan beginnen. Er moeten dus ranges opgesteld worden voor

deze productiehoeveelheden. Dit vraagt echter een zeer groot aantal aan extra variabelen

en bovendien is dan de tweede fase ook helemaal niet meer van belang.

Voorlopig negeren we deze restricties en we komen er op terug bij de bespreking van de

resultaten.

Page 44: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

5Analyse en terugkoppeling

ALVORENS over te gaan op de behandeling van de echte wiskundige modellen wordt

eerst het ’analyse-blok’ nog verder besproken, omdat dit van belang is voor een correct

begrip van de beide modellen.

De grote vraag die in dit blok wordt gesteld is of de vooropgestelde schedule haalbaar is in

de maand of niet. Indien het niet haalbaar is, is het dan mogelijk om wijzigingen aan te

brengen zodat het alsnog haalbaar wordt?

5.1. Ambitieuze plan

Het ambitieuze plan houdt in dat voor elke maand de makespan wordt geminimaliseerd. Alle

producten worden ingepland en beslissingen die afhangen van de volgende maand worden

uitgesteld. Zo zal het starten van een stilstand, of het starten van een omstelling op het

einde van de maand afhangen van de situatie in de volgende maand. Alle dagen die op

het einde van de maand op deze manier onbepaald blijven voor een straat noemen we de

vrije dagen van die straat. Deze vrije dagen kunnen dan worden gebruikt om verschillende

problemen van de komende maanden op te vangen.

Bekijken we bijvoorbeeld de situatie van figuur 5.1. In de eerste maand wordt er slechts voor

15 dagen F-productie ingepland. De laatste 15 dagen van de maand zijn over. We zouden

nu al kunnen beslissen om er een stilstand te starten, maar dit hangt ook af van de daarop-

volgende maand. Deze 15 dagen worden dus voorlopig beschouwd als vrije dagen. Indien nu

21

Page 45: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 5. ANALYSE EN TERUGKOPPELING 22

5

maand 2 volledig is volgepland met G-productie, betekent dit dat er een omstel noodzakelijk

is tussen de F-productie uit maand 1 en de G-productie uit maand 2. Twee van de vrije

dagen worden dus ingenomen door omsteldagen en dan blijven er nog 13 dagen over. Indien

maand 2 gedeeltelijk is volgepland met G-productie, zou er ook nog een stilstand mogelijk

zijn. Stellen we dat deze stilstand bijvoorbeeld minstens 20 dagen moet duren, dan kunnen

een aantal vrije dagen daarvoor gebruikt worden tot het minimum aantal stilstand dagen

bereikt is voor maand 2 in combinatie met maand 1. Maand 3 veronderstellen we volledig

volgepland zodat er geen problemen zijn. In maand vier zijn door omstandigheden twee

dagen productie tekort voor de F-productie. De schedule is niet haalbaar in het vooropge-

stelde aantal dagen en een terugkoppeling naar fase 1 is vereist. We hebben echter geluk,

want we hadden nog een aantal dagen over in de eerste maand. Het ambitieuze plan houdt

dus in om de overproductie naar voor te schuiven en de vrije dagen op deze manier vol te

plannen.

Het grote nadeel hierbij is dat deze methode impliceert dat opnieuw moet worden gecon-

troleerd of maand 1 nog wel feasible is. Het naar voor brengen van F impliceert ook meer

A1-productie, en al de daarbij horende andere verbanden met de andere producten. Het

opnieuw doorlopen van de eerste maand en uiteraard dan ook de daaropvolgende maanden

vraagt extra rekentijd. Ten tweede ontstaat er een veel groter gevaar door het naar voor

brengen van producties. De schattingen uit de eerste fase worden dus gewijzigd en indien

in een latere maand een terugkoppeling naar de eerste fase noodzakelijk is, worden deze

schattingen vastgelegd, maar is het mogelijk dat er op die manier een infeasible probleem is

gecreeerd voor de eerste fase. Deze twee problemen zijn niet helemaal onoverkomelijk, maar

in de realiteit is het zeer moeilijk om dit allemaal te implementeren. Het ambitieuze plan

wordt bij deze dus afgevoerd.

Figuur 5.1.: Grafische voorstelling van het ambitieuze plan

5.2. Radicale plan

Indien de schedule niet feasible is voor een bepaalde maand, omdat er bijvoorbeeld 33 dagen

noodzakelijk zijn om de vooropgestelde schattingen te produceren, maar de maand slechts

31 dagen telt, zouden we radicaal kunnen zeggen: ’Die twee dagen produceren we niet’.

Bijgevolg is de planning uiteraard haalbaar in 31 dagen, maar we verliezen op deze manier

wel een grote productiehoeveelheid en dit leidt tot een grote hoeveelheid tekorten. Het is

Page 46: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 5. ANALYSE EN TERUGKOPPELING 23

5

duidelijk dat ook deze oplossing niet wordt verkozen.

5.3. Intermediaire oplossing

Praktisch gezien zoeken we dus een oplossing die iets van beide voorgaande oplossingen

heeft. De terugkoppeling naar voorgaande maanden door het verschuiven van productie-

hoeveelheden laten we achterwege. Er wordt nog enkel naar de laatst ingeplande maand

gekeken om de productiehoeveelheden van de huidige maand in te plannen. Indien in de

vorige maand in totaal een overschot van 1 dag is op elke productiestraat, dan kan deze

dag ter beschikking worden gesteld van de volgende maand. De tweede fase gaat dus op

zoek naar die schedule die het minst lang duurt en niet zoals in de oorspronkelijke structuur

van de oplossing gezegd naar die schedule die de totale fout op de makespan minimaliseert.

We behouden het concept van de vrije dagen, maar deze keer niet per straat, maar voor de

hele productie. Dit aantal vrije dagen voegen we dan toe aan het aantal beschikbare dagen

van de volgende maand. Dit kan voor elke maand herhaald worden en op deze manier gaan

we iteratief een volledig vrije dag doorschuiven naar een latere periode op het jaar tot het

moment waarbij deze vrije dag nodig is. Een illustratie hiervan is te zien op figuur 5.2. Zeer

eenvoudig zouden we kunnen stellen dat door de overschot van 1 dag in januari we beslissen

dat januari maar 1 dag telt en februari 28 dagen. Aangezien er geen probleem is in februari,

telt februari opnieuw 28 dagen en schuiven we de dag door naar maart welke dan 32 dagen

telt. Uiteindelijk zien we dat in april een dag tekort is, dus indien april 31 dagen zou tellen

is het probleem opgelost. Door het verschuiven van de overschot-dag uit januari naar april

is dit probleem opgelost.

Figuur 5.2.: Grafische voorstelling van het praktische plan

Volledige productieruns worden op deze manier verschoven naar voren. We passen echter

niet de schattingen uit de eerste fase aan om het daaraan gekoppelde probleem bij de te-

rugkoppeling te vermijden, we passen wel het aantal beschikbare dagen aan door gebruik te

maken van formule 5.1 waarin ∆dm−1 gelijk is aan de vrije dagen van de voorgaande maand.

#dm,update = #dm,oud + ∆dm−1 (5.1)

Alles hangt feitelijk af van de correctheid van de schattingen uit fase 1. Zoals eerder reeds

besproken zou de terugkoppeling naar fase 1 gebeuren door het inperken van het aantal

Page 47: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 5. ANALYSE EN TERUGKOPPELING 24

5

beschikbare dagen in een maand. Een terugkoppeling gaat wel gepaard met een aanzienlijk

tijdsverlies. Ik kan nu al zeggen dat fase 1 niet zo klein uitvalt en dat het nood heeft aan

een relatief grote rekentijd. Dus terugkoppelingen worden liefst zoveel mogelijk vermeden.

Een oplossing hiervoor zou kunnen zijn om reeds in fase 1 een zeer grote beperking op de

totale capaciteit per maand in te voeren. Alle maanden kunnen dan perfect de geschatte

productiehoeveelheden in de maand inplannen, maar verschillende maanden zullen meer-

dere vrije dagen hebben. Bovendien geeft een beperking van de capaciteit aanleiding tot

meer tekorten. Met andere woorden, er is hier sprake van een tradeoff. Ofwel regelmati-

ge terugkoppeling en een aanzienlijk tijdsverlies, ofwel geen terugkoppeling en veel dagen

die moeten worden doorgeschoven tussen de verschillende maanden en het daarbij horende

capaciteitsverlies. Er moet dus gezocht worden naar de perfect afweging tussen deze twee

aspecten.

Indien de makespan na het opgebruiken van alle vrije dagen nog steeds te lang uitvalt is er

noodzaak voor een terugkoppeling naar fase 1. Indien terugkoppeling niet noodzakelijk is

gaat men wel naar de volgende maand om te kijken of het mogelijk is om de schattingen in

te plannen mits gebruik van een vrije dag of mits zelf een extra vrije dag te creeren.

Hieronder staat het gebruikte algoritme welk het verband aangeeft tussen de eerste en de

tweede fase en waarin de terugkoppelingsmechanismen ook verwerkt zijn. Dit algoritme

geeft schematisch weer wat hierboven reeds is uitgelegd.

1. Initialisatie beginwaarden fase 1

2. Oplossen fase 1

3. Initialisatie beginwaarden fase 2� Begintoestand vorige maand� maandF2 := startM� ∆DstartM−1 := 0� #d2startM := #dstartM + ∆DstartM−1

4. Herhaal zolang maandF2 ≤ startM + 11� Opslaan waarden en parameters uit fase 1 noodzakelijk voor fase 2 betreffende

maandF2

– QmaandF2, SPp,maandF2, EPp,maandF2, SSs,maandF2, ESs,maandF2

– V T12p,maandF2−1, V T3p,maandF2−1,. . .� Ingeplande stilstanden door het management vastleggen voor fase 2� Initialiseren van de dagen waarop geen omstel mag plaatsvinden

Page 48: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 5. ANALYSE EN TERUGKOPPELING 25

5

� Oplossen fase 2� Bepalen van het aantal dagen dat er tekort of te veel zijn in de gevonden schedule

– ∆DmaandF2 := #d2maandF2 − totMakespan� Indien ∆DmaandF2 < 0, dan zijn er dagen tekort en is de schedule niet feasible

a) Updaten van het aantal beschikbare dagen voor maandF2 in fase 1, het

beschikbare aantal dagen wordt kleiner gemaakt

– #d1maandF2 := #d1maandF2 + ∆DmaandF2

b) Opnieuw oplossen van fase 1 (eventueel met vastleggen van de produc-

tiehoeveelheden uit maanden die reeds in orde zijn)� Anders, dus als ∆DmaandF2 >= 0, wat wil zeggen dat de schedule feasible is,

maken we alles klaar om over te gaan naar de volgende maand in fase 2

a) De schattingen uit de maand die in orde is worden vastgelegd

b) Indien er een overschot is, ∆DmaandF2 > 0, wordt het aantal dagen van de

huidige maand geupdate:

– #d2maandF2 := #d2maandF2 − ∆DmaandF2

c) De gevonden schedule is de begintoestand voor de volgende maand

d) #d2maandF2+1 := #d2maandF2+1 + ∆DmaandF2

e) maandF2 := maandF2 + 1

5.4. Probleem: Restricties 88-91 en 96

Ook hier weer een kleine zijsprong naar het eerder besproken grote probleem. De eerder

gevormde conclusie om de restricties 88-91 en 96 te negeren wordt hier verder aangemoedigd.

Het gevaar van het uitstellen van omstellingen geeft aanleiding tot de mogelijkheid dat er

een groot aantal dagen tekort kunnen zijn in elke maand. Dit kan niet opgelost worden

door enkel gebruik te maken van de terugkoppeling door het aantal dagen te beperken. Er

moeten dus meer gesofisticeerde oplossingen worden bedacht, die alvorens terug te koppelen

echt gaan kijken waar het probleem van het tekort aan productiedagen zich werkelijk bevindt.

Zo een probleem analyse vergt echter zeer veel extra tijd om nog volledig in detail te kunnen

uitwerken. We blijven dus bij de conclusie om deze restricties te negeren.

Page 49: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

6Preprocessing

6.1. Stilstanden ingevoerd door het management

ER zijn verschillende stilstanden die op voorhand ingevoerd worden door het manage-

ment. Deze zijn niet gelijk aan de stilstanden die door het model worden ingevoerd

zoals verderop wordt uitgelegd. Volgende opsomming is een samenvatting van al deze stil-

standen en de relaties onderling.� (1) jaarlijkse technische stilstand van de AG-installatie gedurende 3 weken, door het

management vast te leggen. Drie weken betekent vanaf maandagmorgen van de eerste

week tot vrijdag 16u30 van de derde week of 18.3 kalenderdagen (dit getal moet als

variabele kunnen ingegeven worden).� (2) de A1-, A2- en B-productie kan alleen lopen als de AG-installatie loopt.� (23) geen C- of D1-productie als de AG-installatie stilstaat (zie hierboven).� (25) geen C- of D1-productie tussen 15 december en 15 maart omdat de installatie niet

wintervast is (deze grenzen moeten als variabele kunnen ingegeven worden).� (32) jaarlijkse technische stilstand van de E-installatie gedurende 1 of 2 weken, door

het management vast te leggen. De weken lopen vanaf maandagmorgen tot vrijdag

16u30. 1 week is dus 4.3 dagen, 2 weken zijn 11.3 dagen (dit getal moet als variabele

kunnen ingegeven worden).

26

Page 50: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 6. PREPROCESSING 27

6

� (33) de O-, F-, L- en M(in L)-producties kunnen alleen lopen als de E-installatie loopt.� (37) indien een technische stilstand van de AW3-installatie noodzakelijk is, wordt deze

gedurende 1 of 2 weken afgesteld. Dat wordt door het management vastgelegd. De

weken lopen vanaf maandagmorgen tot vrijdag 16u30. 1 week is dus 4.3 dagen, 2

weken zijn 11.3 dagen (dit getal moet als variabele kunnen ingegeven worden).� (38) bij een stilstand van de AW3-installatie, moeten alle producties stilgelegd worden.� (39) jaarlijkse technische stilstand van de AW1-installatie gedurende 1 of 2 weken,

door het management vast te leggen. De weken lopen vanaf maandagmorgen tot vrijdag

16u30. 1 week is dus 4.3 dagen, 2 weken zijn 11.3 dagen (dit getal moet als variabele

kunnen ingegeven worden).� (40) de H1-, H2-, H3-, L-, M(in L)- en O- en M(in L)-producties kunnen alleen lopen

als de AW1-installatie loopt.� (41) jaarlijkse technische stilstand van de AW2-installatie gedurende 1 of 2 weken,

door het management vast te leggen. De weken lopen vanaf maandagmorgen tot vrijdag

16u30. 1 week is dus 4.3 dagen, 2 weken zijn 11.3 dagen (dit getal moet als variabele

kunnen ingegeven worden).� (43) als de AW2-installatie niet loopt, is alleen onderstaande combinatie van producties

mogelijk (zie spreadsheet ’variabelen productieplanning, 2e blad) op voorwaarde dat de

AW1-installatie loopt.� (46) jaarlijkse algemene energiestilstand in installatie 2 tijdens de AG-/A1-stilstand

(o.a. spanningstesten) gedurende 2 dagen (dit getal moet als variabele kunnen ingege-

ven worden).� (47) indien een langere algemene energiestilstand in installatie 2 noodzakelijk is (warm-

watersysteem, koelwatersysteem, stoomsysteem) wordt het aantal dagen door het ma-

nagement vastgelegd (dit getal moet als variabele kunnen ingegeven worden).

Aangezien deze stilstanden allemaal op voorhand vastgelegd worden, zorgen we voor een

preprocessing stap die een aantal parameters met betrekking tot deze stilstanden initiali-

seert. In eerste instantie worden de noodzakelijke stilstanden per installatie of per straat

ingegeven in een excel-file (meerdere per installatie zijn mogelijk). Restricties (1), (25),

(32), (37), (39), (41), (46) en (47) zijn hierdoor onmiddellijk voldaan. Enkel de ingave van

de startdatum en de duur van de stilstand zijn voldoende, dit is inclusief de afstel- en op-

starttijd. Het is ook niet noodzakelijk om de daaruitvolgende stilstanden ook allemaal in

te geven. Het is bijvoorbeeld voldoende om de productie van AG 20 dagen stil te leggen.

Het onmiddellijke gevolg hiervan is dat ook A1, A2 en B 20 dagen zullen stilliggen. Dit

Page 51: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 6. PREPROCESSING 28

6

mag mee ingegeven worden, maar is niet strikt noodzakelijk. De preprocessing stap zorgt

automatisch voor het doorgeven van de ingeplande stilstanden. Voor fase 1 is het vooral van

belang dat we weten hoeveel dagen er effectief geproduceerd kan worden. Daarom voeren we

volgende parameter in: ingeplandeSs,m ∈ Z+, deze parameter geeft voor elke straat s in el-

ke maand m weer hoeveel dagen er verloren gaan door een op voorhand ingeplande stilstand.

De preprocessing stap gaat als volgt te werk:

1. Bepalen van de einddatum horend bij de ingegeven stilstand

2. Doorgeven van de ingegeven stilstand naar daaropvolgende productiestraten volgens

de relaties uit tabel 6.1:� Stilstand bestaat reeds in de daaropvolgende straat: er wordt niets gedaan� Stilstand bestaat nog niet: stilstand wordt toegevoegd� Stilstand overlapt gedeeltelijk met een stilstand in de daaropvolgende straat: de

correcte totale stilstand wordt bepaald

3. Per straat wordt uitgaande van de resulterende stilstanden uit vorige stappen in elke

maand het totaal aantal dagen ingeplande stilstand bepaald: ingeplandeSs,m

Tabel 6.1.: Relaties tussen de stilstanden. vb: stilstand in AG wordt doorgegeven aan A1 omwille

van restrictie (2)

Straat 1 Straat 2 Restrictie Straat 1 Straat 2 Restrictie

AG → A1 (2) AW3 → s5 (38)

AG → A2 (2) AW3 → s6 (38)

AG → CD1 (23) AW3 → sM (38)

E → s5 (33) AW1 → s4 (40)

AW3 → AG (38) AW1 → s5 (40)

AW3 → E (38) A1 → A2 (-)

AW3 → A1 (38) inst2 → s1 (46)

AW3 → A2 (38) inst2 → s3 (46)

AW3 → CD1 (38) inst2 → s4 (46)

AW3 → s1 (38) inst2 → s5 (46)

AW3 → s3 (38) inst2 → s6 (46)

AW3 → s4 (38) inst2 → sM (46)

De restricties (33), (40) en (42) zijn slechts gedeeltelijk voldaan door de relaties in tabel 6.1,

het andere gedeelte wordt behandeld in het model zelf en we komen er later dus nog op terug.

Page 52: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 6. PREPROCESSING 29

6

Op deze manier blijft enkel restrictie (43) nog over. Dit is niet eenvoudig te modelleren,

zowel niet in de preproces-stap als in de eerste of de tweede fase. Aangezien echter de

afvalwaterinstallatie zeer bedrijfszeker is, er geen stilstanden moeten ingepland worden door

het model en vanuit het management slechts 1 stilstand wordt ingepland per jaar, betekent

dit dat deze restrictie slechts in 2 weken van het hele jaar zou moeten gelden. Vanuit

deze optiek besluiten we om ze pas in fase 2 nauwkeuriger te bekijken. Indien AW2 dan

toch onverwacht uitvalt door een storing, kan dit toch niet op voorhand voorspeld worden

wanneer dit juist gaat gebeuren. Op dat moment maakt men het best gebruik van een

manuele planning om de storingsperiode op te vangen.

Page 53: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

7Fase 1: Planning

HET is in de eerste fase de bedoeling dat we een zo goed mogelijke schatting maken

voor alle maandelijkse productiehoeveelheden. Deze beste schatting moet voortkomen

uit een zo klein mogelijke totale kost. De doelfunctie van deze eerste fase zal dan ook

bestaan uit het minimaliseren van een totale kost. Deze totale kost bestaat uit zeer veel

verschillende termen aangezien er ook zeer veel interacties zijn in het chemische proces. Een

kleine opsomming van de meeste aspecten die in de totale kost zitten vervat, wordt hierna

gegeven:� Voorraadkosten� Gebonden voorraadkosten� Omstellingskosten� Kosten voor tekorten� Winst en verlies ten gevolge van energie-(in)efficientie� Kosten en opbrengsten door invoeren van stilstanden

Deze totale kost wordt niet als 1 onderdeel behandeld, maar er worden telkens termen toe-

gevoegd indien ze voortkomen uit een behandeld onderwerp. Hou vooral in het achterhoofd

dat deze kost geminimaliseerd moet worden, omdat we naar de goedkoopste planning op

zoek zijn.

30

Page 54: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 31

7

7.1. Veel gebruikte notaties

We beginnen eerst met het geven van de notatie van enkele veel gebruikte parameters.� startM geeft de maand waarin de planning wordt gestart� #dm is het aantal dagen in een maand. Bijvoorbeeld maand 5 is de meimaand die 31

dagen telt.� Tenzij anders wordt vermeld, geldt voor de index m het volgende: m ∈ {startM, . . . , startM+

11} Deze index geeft de maand aan waarvoor de variabelen gelden.� Vervolgens hebben we nog de index p die het product aangeeft waarvoor de variabele

geldt� Een laatste, veel voorkomende, index is s, die de productiestraat aangeeft

7.2. Algemene beslissingsvariabelen

De belangrijkste beslissingsvariabelen die worden ingevoerd zijn:� Qp,m ∈ R+: de productiehoeveelheden van elk product p per maand m� Pp,m :=

1, als productie van product p in maand m,

0, als geen productie van product p in maand m

De binaire productievariabelen.

We voeren voorwaarde 7.1 in die de relatie tussen Qp,m en Pp,m vastlegt. Indien Pp,m gelijk

is aan 0, dan zorgt vergelijking 7.1a er voor dat Qp,m ook gelijk is aan 0. Indien Pp,m = 1

dan kan Qp,m elke mogelijke productiehoeveelheid aannemen. De omgekeerde relatie wordt

vastgelegd door vergelijking 7.1b.

∀p,∀m : Qp,m ≤ Pp,m · dagcapaciteitp · 31 (7.1a)

∀p,∀m : Pp,m ≤ Qp,m (7.1b)

In het voorgaande is p elk product dat mogelijks wordt geproduceerd. Voor sommige voor-

waarden is het noodzakelijk om deze producten op te splitsen in verschillende subproducten.

Het product G kan hier perfect als voorbeeld voor dienen:

Page 55: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 32

7

Tabel 7.1.: Opsplitsing van product G

G product G

→ G1 G geproduceerd op straat 1

→ G1v1 G1 uit grondstof A1

→ G1v2 G1 uit grondstof A2

→ G1v2T12 G1v2 via tank 1 en 2

→ G1v2T3 G1v2 via tank 3

→ G3 G geproduceerd op straat 3

→ G3v1 G3 uit grondstof A1

→ G3v2 G3 uit grondstof A2

→ G3v2T12 G3v2 via tank 1 en 2

→ G3v2T3 G3v2 via tank 3

In tabel 7.1 zien we dus dat G kan opgesplitst worden afhankelijk van de wijze waarop het

geproduceerd wordt. De index p kan al deze productvormen aannemen. Voor de andere

producten gelden analoge opsplitsingsregels, we splitsen echter niet op indien het niet strikt

noodzakelijk is voor verder gebruik in de voorwaarden. Voorwaarde 7.2 wordt toegevoegd

voor die producten die opgesplitst worden, zodat de totale productiehoeveelheid de som is

van de deelproducties.

∀m,∀(p1, p2, p) ∈ {alle producten p die opgesplitst worden in p1 en p2} :

Qp1,m + Qp2,m = Qp,m

(7.2)

We gaan vervolgens verder met de opsomming van de belangrijkste beslissingsvariabelen:� Tp,m ∈ R+: de tekorten van elk product p in de maand m zodat niet aan de vereiste

vraag voor die maand kan voldaan worden. Uiteraard geldt deze variabele enkel voor

die producten die verkocht worden. Bovendien kan een tekort in een maand ook

nooit groter zijn dan de vraag in die maand. Hier hoort wel nog een opmerking bij,

er is namelijk ook nog steeds een veiligheidsvoorraad waar het model rekening met

houdt. Dus een tekort in de vraag kan eventueel wel opgevangen worden door de

veiligheidsvoorraad indien het tekort uiteraard niet te groot is.� Vp,m ∈ R+: de voorraden van elk product p op het einde van de maand m� V T12A2,m, V T3p,m, V T4p,m en V TBB,m ∈ R

+: de voorraad van p in tank 1 en 2,

respectievelijk tank 3, respectievelijk tank 4, respectievelijk tank B op het einde van

de maand m.

Page 56: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 33

7

� V V IBCp,m ∈ R+: de voorraad van p in vaten en IBC’s op het einde van de maand m� V Cp,m ∈ R

+: de voorraad van B in containers op het eind van maand m

In wat volgt zullen er indien nodig nog andere beslissingsvariabelen worden ingevoerd. We

proberen dit echter zoveel als mogelijk te vermijden. Eerst trachten we de problemen op te

lossen met de bestaande beslissingsvariabelen. Indien het echter onmogelijk blijkt, voeren

we toch nieuwe beslissingsvariabelen in. Dit om het aantal variabelen en de daarbij horende

rekentijd toch zoveel mogelijk te beperken.

7.3. Flowvoorwaarden

7.3.1. Vraag versus Aanbod eindproducten

Voorwaarden

Voor p ∈ {Alle producten die verkocht worden uitgezonderd A2} moet de algemeen gekende

voorwaarde 7.3 gelden: de voorraad op het begin van de maand samen met de productie

in de maand moet gelijk zijn aan de vraag naar het product in de maand samen met de

voorraad op het eind van de maand eventueel verminderd met de tekorten in de maand

indien de productie niet kan voldoen aan de vraag. We laten ook backlogging toe om

tekorten uit de vorige maand op te vangen met een eventueel productieoverschot van de

huidige maand. Indien het in de volgende maand nog niet opgevangen is, wordt er weer

een penalty aangerekend. Op zich kan je de vraagp,m + Tp,m−1 zien als de geupdate vraag

vraagUpdatep,m voor de maand m.

∀p,∀m : Vp,m−1 + Qp,m + Tp,m = vraagp,m + Vp,m + Tp,m−1 (7.3)

Twee korte bemerkingen in verband met deze tekorten: ten eerste is dit niet expliciet een

tekort omdat er niet geleverd kan worden. Zoals eerder gezegd is er ook nog de minimum-

voorraad waaruit het tekort kan geleverd worden. Ten tweede is het aan het bedrijf zelf om

de strategie in verband met deze tekorten te bepalen.

Voorwaarde 7.3 moet niet gelden voor A2 omdat daar ook nog intermediair verbruik is.

In plaats daarvan geldt voorwaarde 7.4 waarbij het verbruik van A2 voor de productie

van andere producten in rekening wordt gebracht. We maken hier de opsplitsing tussen

producten rechtstreeks vervaardigd uit A2 (PA2) en producten die enkel uit A2 worden

vervaardigd indien er een tekort is van A1 (PA1vA2).

Page 57: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 34

7

∀m : QA2,m + VA2,m−1 + TA2,m =∑

p∈PA2

(verbruikp,A2 ·Qp,m)+∑

p∈PA1vA2

(verbruikp,A2 ·Qp,m)+VA2,m +vraagA2,m +TA2,m−1

(7.4)

We splitsen deze voorwaarde ook nog op volgens de tank die gebruikt wordt voor de tussen-

opslag van A2 en we maken ook gebruik van een opsplitsing voor VA2,m. Bij deze opsplitsing

zien we in voorwaarden 7.5 ofwel T12 ofwel T3 bij komen. Dit wil niets anders zeggen dan

het product dat via tank 1 en 2, respectievelijk tank 3 wordt geproduceerd. Bijvoorbeeld

PA2T12 is dan die set van producten die rechtstreeks vervaardigd worden uit A2, zoals PA2

ons leert, maar waarbij A2 afkomstig is uit tank 1 en 2. We veronderstellen hier ook bij dat

zowel de vraag als de voorraad van de vaten en de IBC’s altijd wordt voldaan vanuit tank

1 en 2.

∀m : VA2,m = V T12p,m + V T3p,m + V V IBCp,m (7.5a)

∀m : QA2T12,m + V T12A2,m−1 + V V IBCA2,m−1 + TA2T12,m =∑

p∈PA2T12

(verbruikp,A2 · Qp,m) +∑

p∈PA1vA2T12

(verbruikp,A2 · Qp,m)+

V T12A2,m + V V IBCA2,m + vraagA2,m + TA2T12,m−1 (7.5b)

∀m : QA2T3,m + V T3A2,m−1 + TA2T3,m =∑

p∈PA2T3

(verbruikp,A2 · Qp,m) +∑

p∈PA1vA2T3

(verbruikp,A2 · Qp,m) + V T3A2,m + TA2T3,m−1

(7.5c)

De opsplitsing van de producties is reeds behandeld in een vorige paragraaf. Dan rest er al-

leen nog enkele voorwaarden te schrijven in verband met de tekorten. Enerzijds hebben we de

tekorten opgesplitst en moet deze som gelijk zijn aan de totale som van tekorten (voorwaarde

7.6), anderzijds mag het tekort van A2 enkel dienen om de tekorten voor de verkoop van A2

op te vangen (en de eventuele tekorten uit de vorige maand), hiervoor schrijven we voorwaar-

de 7.7. Indien de productie van A2 nog meer beperkt wordt dan kan het tekort van enkel A2

dit niet meer alleen opvangen. Bijgevolg zal de productiehoeveelheid van een volgend pro-

duct ook verminderd worden en worden de tekorten uit vergelijking 7.3 verschillend van 0.

Ook voor de andere producten p ∈ {Alle producten die verkocht worden uitgezonderd A2}

Page 58: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 35

7

is er een beperking op de grootte van de tekorten. Deze voorwaarde 7.8 is niet strikt nood-

zakelijk, omdat het model automatisch de tekorten probeert te minimaliseren, maar ze zorgt

wel voor extra intelligentie zodat er sneller een oplossing wordt gevonden.

∀m : TA2T12,m + TA2T3,m = TA2,m (7.6)

∀m : TA2,m ≤ vraagA2,m + TA2,m−1 (7.7)

∀p∀m : Tp,m ≤ vraagp,m + Tp,m−1 (7.8)

7.3.2. Voldoende productie tussenproducten

De algemene flowvergelijking 7.3 is niet geldig voor de tussenproducten. We passen hier 1

na 1 deze vergelijking aan met betrekking tot de andere producten.

A1-productie:

∀m : QA1,m = verbruikA2,A1 · QA2,m +∑

p∈PA1

verbruikp,A1 · Qp,m (7.9a)

In voorwaarde 7.9a bestaat het set PA1 uit al die producten die rechtstreeks uit A1 vervaar-

digd kunnen worden, A2 uitgezonderd. De termen in verband met de voorraden en de vraag

vallen weg omdat er geen opslagmogelijkheid is van A1 en omdat A1 niet verkocht wordt.

Bijgevolg kunnen er ook geen tekorten zijn voor A1, want de tekorten waren zo gedefinieerd

als die hoeveelheid waaraan men niet kon voldoen voor de vraag. Indien er een tekort aan

capaciteit is op de productiestraat van A1 weerspiegelt dit in lagere productiehoeveelheden

Q voor de andere producten, en dit wordt in de eigen flowvergelijking opgevangen door de

tekorten van de andere producten. Dit is in overeenstemming met volgende restrictie: (15)

er is geen opslag van A1. De productie moet dus direct verbruikt worden of tot A2 worden

omgezet. De A2-productiecapaciteit is kleiner dan de A1-productiecapaciteit. Indien er geen

verbruik is van A1 moet de A1-productie verminderd worden.

C-productie:

∀m : QC,m + V T3C,m−1 = verbruikI,C · QI,m + V T3C,m (7.9b)

Een analoge uitleg geldt voor voorwaarde 7.9b. Wel voorraden omdat er opslag mogelijk is,

geen vraag en dus ook geen tekorten omdat er geen verkoop is van product C.

Page 59: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 36

7

D1-productie

∀m : QD1,m + V T3D1,m−1 =∑

p∈PD1

(verbruikp,D1 · Qp,m) + V T3D1,m (7.9c)

Het set PD1 wordt als volgt gedefinieerd: PD1 := {D2, J}.

D2-productie

∀m : QD2,m + V T4D2,m−1 = verbruikK,D2 · QK,m) + V T4D2,m (7.9d)

Molen-productie

∀m,∀(p1, p2) ∈ {(F, FC), (G, GC), (L, LC)} :

dagcapaciteitp2

dagcapaciteitp1· Qp1,m ≥ Qp2,m

(7.9e)

De vergelijking voor de producten in de molen is eigenlijk al vervat in 7.3, maar aangezien

er geen tussenopslag is tussen de productiestraten en de maalstraat, moet er een beperking

ingevoerd worden op de molenproductie per product. Bijvoorbeeld 1 dag productie van F

betekent 25.4 ton, indien op diezelfde dag ook de molen draait voor F kan niet die volledige

25.4 ton vermaald worden, maar slechts 19.3 ton. Dus de hoeveelheid van gemalen producten

per maand moet kleiner zijn dan een fractie van de ongemalen producten per maand wat is

uitgeschreven in vergelijking 7.9e. Hiermee is voldaan aan restrictie: (93) om een product

te kunnen malen, moet de overeenkomstige productiestraat lopen, straat 1 voor F/c, straat

1 of 3 voor G/c en straat 4 voor L/c.

B-productie

Voor B is nog een speciale uitbreiding nodig omdat het een bijproduct is van A1, met beper-

kingen op de geproduceerde hoeveelheid van B afhankelijk van de geproduceerde hoeveelheid

van A1. Vergelijkingen 7.9f en 7.9g worden ingevoerd omwille van restrictie: (17) B is een

nevenproduct uit de A1-productie en kan dus enkel geproduceerd worden als de A1-productie

loopt. De B-productie ’voor verkoop’ is minimaal 3.5% (ondergrensB) en maximaal 7.0%

(bovengrensB) van het A1-productievolume (deze grenzen moeten als variabele kunnen in-

gegeven worden).

∀m :ondergrensB

100· QA1,m ≤ QB,m (7.9f)

∀m :bovengrensB

100· QA1,m ≥ QB,m (7.9g)

Page 60: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 37

7

Flow-producties

Voor volgende restricties moeten niet expliciet voorwaarden worden uitgeschreven. Door

een correcte definitie van het set producten waaraan elke voorwaarde moet voldoen is auto-

matisch aan deze restricties voldaan.� (34) De O-, N- en M(in N)-producties kunnen enkel uit A2 als grondstof lopen.� (35) De F-, G(in F), G(in H1)-, H1-, H2-, H3-, L- en M(in L)- en L- en M(in L)-

producties lopen preferentieel uit A1 als grondstof.� (36) De F-, G(in F), G(in H1)-, H1-, H2-, H3-, L- en M(in L)-producties kunnen ook

uit A2 als grondstof geproduceerd worden zolang er voorraad beschikbaar is.� (53) op straat 6 kunnen N of M(in N) geproduceerd worden.� (57) op straat 4 kunnen L of M(in L) geproduceerd worden.� (66) op straat 1 kunnen F of G (=G(in F) geproduceerd worden.� (71) op straat 3 kunnen G(in H1), H1, H2, H3, I, J, D2 of K geproduceerd worden.� (72) K wordt uitsluitend uit D2 geproduceerd.� (92) in de maalstraat kunnen F/c, G/c en L/c geproduceerd worden.

Nog een kleine bemerking is op zijn plaats bij restricties 35 en 36. In heel de voorgaande

discussie is er nog geen enkele keer gesproken over hoe de voorkeur wordt gegeven tot

productie uit A1 in plaats van productie uit A2. Door de restricties te schrijven zoals

hierboven is namelijk deze voorkeur er automatisch ingeslopen. Enerzijds heeft productie

over A2 noodzaak aan meer verbruik van A1, dus hieruit volgt al de logische beslissing om

rechtstreeks uit A1 te produceren. Anderzijds krijgen we ook een weerspiegeling van de

voorkeur in de kosten. Zowel voor A2 als voor de producten wordt een kost aangerekend.

Dus de kost van rechtstreekse productie uit A1 is kleiner dan productie via A2. Deze twee

bemerkingen zouden de preferenties op een correcte manier moeten weerspiegelen. Of het

model tot dezelfde conclusies leidt, zullen we verifieren bij de resultaten.

7.4. Totale kost (1)

In dit onderdeel behandelen we de belangrijkste termen uit de doelfunctie tot nu toe. In

latere onderdelen worden er indien nodig extra termen aan de doelfunctie toegevoegd. We

houden in ons achterhoofd dat het de bedoeling is om de totale kost te minimaliseren.

De totale kost is dan het resultaat van verschillende effecten die op elkaar inwerken. We

behandelen hier achtereenvolgens de voorraadkosten en de tekortkosten.

Page 61: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 38

7

7.4.1. Voorraadkost

De voorraadkosten zijn een combinatie van de kost voor opslag van de geproduceerde pro-

ducten in het magazijn en het gebonden kapitaal dat in de voorraad zit. Want indien de

voorraad niet aanwezig is, dan zou op het bespaarde kapitaal van die voorraad een rendement

zijn van 7.5%.

Voorraadkost omwille van opslag:

(103) de opslag van F, G, H1, H2, H3, I, J, K, L, M, O en N gebeurt in een extern maga-

zijn en kost 3.15 Euro/ton/maand (voorraadKost). 400 ton (maximumOpslag) wordt

kostenloos in het bedrijf gestockeerd (deze getallen moeten als variabele kunnen ingege-

ven worden). We breiden deze restrictie uit door ook de gemalen producten in reke-

ning te brengen. We voegen volgende term toe aan de te minimaliseren totale kost met

p ∈ {F, G, H1, H2, H3, I, J, K, L, M, O, N, FC, GC, LC}:

+∑

m

(

p

∑mt=m−1 Vp,t

2− maximumOpslag

)

· voorraadKost (7.10)

We sommeren over alle maanden het teveel aan gemiddelde voorraad van die maand en

vermenigvuldigen dit met de voorraadkost voor het bijhouden van de voorraad per maand.

Het teveel aan gemiddelde voorraad per maand, is niets anders dan de de totale gemiddelde

voorraad van alle producten verminderd met de maximum opslag capaciteit. We nemen het

gemiddelde in een maand, omdat er niet exact geweten is op elk moment van de maand

hoeveel voorraad er aanwezig is. De beste schatting hiervoor is de voorraad in het begin

van de maand plus de voorraad op het einde van de maand te delen door 2.

Een tweede aspect van de voorraadkost voor opslag vind je in restrictie (9) 4.4 Euro/ton/-

maand (voorraadKostV atenEnIBC) opslagkost voor vaten en IBC’s (dit getal moet als

variabele kunnen ingegeven worden). Deze restrictie geldt voor alle producten die in vaten

en IBC’s kunnen opgeslagen worden, dus p ∈ {A2, B}.

+∑

m

(

p

∑mt=m−1 V V IBCp,t

2

)

· voorraadKostV atenEnIBC (7.11)

Een analoge uitleg als bij term 7.10 geldt voor deze term.

In verband met deze voorraadkosten is er nog niets in rekening gebracht wat het kost voor

de opslag van de voorraden in de tanks. Indien deze ook noodzakelijk zijn kunnen deze

eenvoudig aan deze termen toegevoegd worden.

Page 62: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 39

7

Voorraadkost omwille van het gebonden kapitaal:

Het gebonden kapitaal wordt als volgt berekend:

+∑

m

p

(∑m

t=m−1 Vp,t

2· varProductieKostp

)

·7.5%

12(7.12)

Hierin zit de productiekost reeds vervat, dus het is niet noodzakelijk om de productiekosten

apart in de doelfunctie op te nemen.

7.4.2. Tekortkosten

De kost voor een ton tekort van een product is gelijk aan de marge van dat product in ton.

De tekortkost kan dan heel eenvoudig geschreven worden als volgt:

+ (∑

m

p∈verkochte producten

Tp,m · margep) (7.13)

De tekorten zoals in het model beschreven, zijn de tekorten indien we onder de totale mi-

nimum voorraad zitten. In praktijk kunnen deze producten dus wel nog geleverd worden

zolang de voorraad maar niet negatief wordt. Een echt tekort is er dus maar als de voorraad

negatief wordt en de klanten dus niet meer bediend kunnen worden. We behouden toch

deze vergelijking 7.13 omdat het niet de bedoeling is om onder de minimale voorraad te

gaan. Op die manier bestraffen we elke productiehoeveelheid tekort voor het behouden van

dit minimumlevel, ondanks het feit dat in de praktijk alle klanten toch beleverd kunnen

worden. Om in de praktijk met deze tekorten om te gaan is het aan het bedrijf zelf om een

goede strategie te ontwikkelen. Ze geven een eerste indicatie waar het in de komende 12

maanden verkeerd kan gaan door een tekort aan capaciteit.

Het voorgaande was het eenvoudige geval. Het is echter ook de bedoeling dat indien er een

tekort is, dit tekort zo wordt opgevangen dat er het minste verlies is zoals beschreven in

onderstaande restricties.� (98) bij capaciteitsengpassen op straat 4 en 6 voor L,M en N moet volgende productie

prioriteit gevolgd worden in functie van de variabele marge/dag: N > M > L (deze

volgorde moet manueel kunnen ingegeven worden). P98 := {L, M, N}� (99) bij capaciteitsengpassen op straat 1 en 3 bij F, G, H1, H2, H3, I, J en K moet

volgende productie prioriteit gevolgd worden in functie van de variabele marge/dag:

K > I > J > H1 > H2 > F > G > H3 (deze volgorde moet manueel kunnen

ingegeven worden). P99 := {F, G, H1, H2, H3, I, J, K}� (100) bij capaciteitsengpassen bij de A1-/A2-productie moet volgende productie prio-

riteit gevolgd worden in functie van de marge/kg A1/A2: N > M > H1 > H2 >

Page 63: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 40

7

O > L > F > G > H3 > verkoopA2 (deze volgorde moet manueel kunnen ingegeven

worden). P100 := {F, G, H1, H2, H3, L, M, N, O, verkoopA2}� (101) bij capaciteitsengpassen bij de D1-productie moet volgende productie prioriteit

gevolgd worden in functie van de marge/kg D1: K > I > J (deze volgorde moet

manueel kunnen ingegeven worden). P101 := {K, I, J}

In overleg is er besloten dat de volgorde automatisch uit het model moet volgen indien de

marge en het verbruik van de producten gegeven zijn. De eis om de volgorde manueel te

kunnen ingegeven vervalt dus.

Het is dus de bedoeling om de algemene vergelijking van de kost voor de tekorten 7.13 zo te

manipuleren dat de correcte productievolgordes worden gegeven, maar dat de tekortkost per

product wel in dezelfde grootteorde blijft. Indien we de vier sets van producten P98, P99,

P100 en P101 samennemen zien we dat elk product er tweemaal in voorkomt uitgezonderd

verkoopA2 en O. Bovendien zien we ook dat de volgordes in deze vier restricties consequent

zijn. Bijvoorbeeld M > L in zowel restrictie 98 als 100. We bekomen volgende voorwaarden:

+ (∑

m

p∈P98⋃

P99⋃

{O, verkoopA2}

Tp,m · margep) ·1

2(7.14a)

+ (∑

m

p∈P100

Tp,m ·margep

verbruikp,A1/A2) ·

1

2(7.14b)

+ (∑

m

p∈P101

Tp,m ·margep

verbruikp,C/D1) ·

1

2(7.14c)

+ (∑

m

p∈{FC, GC, LC, B}

Tp,m · margep) (7.14d)

Door de factor 12 in de eerste drie voorwaarden van 7.14 wordt de grootteorde van deze te-

kortkost behouden, aangezien elk product voorkomt in 2 van die vergelijkingen. De laatste

voorwaarde 7.14d bepaalt de tekortkost van de andere producten die niet door restricties

98-101 worden vermeld. Een kleine illustratie bij deze termen: een tekort op straten 4 en

6, betekent dat enkel de tekorten van {L, M, N} verschillend kunnen zijn van 0. Alleen in

term 7.14a en in term 7.14b kunnen er dus delen bijdragen aan de totale kost. Door de eer-

der vermelde conclusie dat de volgorde ten gevolge van de restricties overeenkomen, zullen

deze twee termen ook tot een gelijk resultaat komen, nl. zo weinig mogelijk tekorten van N

en zoveel mogelijk tekorten van L. Een analoge redenering geldt voor een capaciteitsverlies

op de andere straten.

Het enigste nadeel van deze methode is dat er een mogelijke switch in de volgorde kan

voorkomen. Beschouwen we het denkvoorbeeld in tabel 7.2. In de eerste situatie zien we

Page 64: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 41

7

dat de volgorde voor N en M gelijk is volgens beide restricties. In het huidige geval geldt

dit voor alle producten. Het gevaar bestaat er nu echter in dat, door het wijzigen van een

marge of een verbruik de volgorde niet meer hetzelfde blijft voor alle restricties zoals te

zien in situatie 2. We gaan er hier vanuit dat zo’n drastische veranderingen in de praktijk

niet zullen voorkomen en dat de volgordes steeds behouden blijven of slechts zeer minimaal

zullen verschillen. Tenslotte is het verschil in kost voor het tekort dan niet extreem groot.

Tabel 7.2.: Denkvoorbeeld in verband met de capaciteitsengpassingen

Situatie 1 N M Situatie 2 N M

Marge 8 2 Marge 3 2

Verbruik 4 2 Verbruik 4 2

Volgorde 98 1 2 Volgorde 98 1 2

Volgorde 100 1 2 Volgorde 100 2 1

7.5. Stilstanden

Dit onderdeel betreft alle stilstanden, zowel de stilstanden vastgelegd door het management

die in deel 6.1 aan bod zijn gekomen als de stilstanden die achteraf door het model worden

ingepland omwille van overcapaciteit. De stilstanden die hier ingevoerd worden, zijn inclusief

de afstel- en opstarttijd. We introduceren eerst een aantal nieuwe variabelen, daarna geven

we de bijhorende restricties. In eerste instantie geldt voor de index s het volgende: s ∈

{sA1, sA2, sCD1, s1, s3, s4, s5, s6, sM}. In tweede instantie passen we voor sommige

productiestraten de eerder gegeven vergelijkingen aan.

7.5.1. Beslissingsvariabelen in verband met Stilstanden

Eerst definieren we twee binaire variabelen SS : StartStilstand en ES : EindStilstand die

aanduiden of er al dan niet een stilstand in een bepaalde maand plaatsvindt. Voor een

grafische voorstelling verwijs ik naar figuur 7.1. Op deze figuur zijn enkel de variabelen

verschillend van nul weergegeven.

∀m : SSs,m ∈ {0, 1} en ESs,m ∈ {0, 1} (7.15)

SSs,m :=

1, als een stilstand wordt gestart op straat s in maand m,

0, anders(7.16)

ESs,m :=

1, als een stilstand wordt geeindigd op straat s in maand m,

0, anders(7.17)

Page 65: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 42

7

Figuur 7.1.: Grafische voorstelling variabelen stilstand

Vervolgens definieren we nog een gehele variabele dagenSs,m ∈ Z+ : dagenStilstand. Deze

variabele houdt voor elke productiestraat in elke maand bij hoeveel dagen het model de

productiestraat stillegt. Deze dagen stilstand zijn inclusief de afstel- en opstarttijd van de

productiestraat.

7.5.2. Restricties in verband met Stilstanden

Algemene restricties

∀s,∀m : dagenSs,m ≥ ingeplandeSs,m (7.18a)

∀s,∀m : SSs,m ≤ 1 −

m−1∑

t=startM−1

(SSs,t − ESs,t) (7.18b)

∀s,∀m : ESs,m ≤

m−1∑

t=startM−1

(SSs,t − ESs,t) + SSs,m (7.18c)

∀s,∀m : dagenSs,m ≤

(

m−1∑

t=startM−1

(SSs,t − ESs,t) + SSs,m

)

· 31 (7.18d)

∀s,∀m ∈ {startM − 1, . . . , startM + 10} :

m+1∑

t=m

dagenSs,t ≥ (afstels + opstarts) · SSs,m

(7.18e)

∀s,∀m ∈ {startM, . . . , startM + 11} :

dagenSs,m ≥ (afstels + opstarts) · (SSs,mESs,m − 1)(7.18f)

∀s,∀p ∈ {producten vervaardigd op straat s},∀m :

1 −

m−1∑

t=startM−1

(SSs,t − ESs,t) + ESs,m ≥ Pp,m

(7.18g)

In de voorwaarden 7.18 komt regelmatig de volgende som voor:∑m−1

t=startM−1(SSs,t−ESs,t).

Deze som is gelijk aan 0 indien in de vorige maanden alle stilstanden die gestart zijn ook

Page 66: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 43

7

zijn beeindigd in de vorige maanden. De som is gelijk aan 1 indien er een stilstand gestart

is in een van de vorige maanden die in maand m nog steeds niet is afgesloten.

Deze stilstanden zijn inclusief de ingeplande stilstanden door het management, voorwaarde

7.18a zorgt er dan ook onmiddellijk voor dat het aantal dagen van de stilstand sowieso groter

zal zijn dan de vastgelegde dagen. Door het integreren van de ingeplande dagen kan het

model nog beslissen om deze stilstanden nog langer te maken. Bovendien wordt het dan ook

verplicht om de beslissingsvariabelen SS en ES in verband met deze ingeplande stilstanden

te gebruiken. Voorwaarde 7.18b zorgt ervoor dat er geen stilstand wordt gestart in maand

m indien de vorige stilstand nog niet is afgesloten. Dit betekent dat indien er in de maand m

eerst een nog lopende stilstand moet worden afgesloten er geen nieuwe kan worden gestart.

Restrictie 7.18c betekent dat je nooit een stilstand kan stoppen, ESs,m = 1 indien er nog

geen stilstand gestart is. Deze stilstand mag gestart zijn in een vorige maand of in een

huidige maand. Het linkerlid van de derde voorwaarde (7.18d) kan enkel verschillen van nul

indien er 1 stilstand in de maand m nog niet is afgesloten. Met andere woorden, er worden

geen dagen stilstand vastgelegd in een maand zonder stilstand. Voorwaarde 7.18e zorgt dat

een stilstandduur nooit kleiner is dan de tijd nodig om een straat af te stellen en opnieuw

op te starten. Aangezien een stilstand kan verspreid zijn over meerdere maanden wordt

hier de som genomen van het aantal dagen stilstand in maand m en de daaropvolgende

maand. In het geval de stilstand toch slechts in 1 maand plaatsvindt, zal voorwaarde 7.18f

er voor zorgen dat ook dan het minimum aantal dagen voorbehouden wordt. Restrictie

7.18g tenslotte bepaalt dat er enkel opnieuw productie kan zijn van een product op straat s

indien de stilstand afgesloten is.

Specifieke restricties per straat

Voor s ∈ {sA1, sA2, s5} wordt vergelijking 7.18b vervangen door vergelijking 7.19 en valt

voorwaarde 7.18f weg (niet meer geldig). Dit omdat bij deze straten de keuze wordt gemaakt

om eventueel wel een nieuwe stilstand te laten starten in maand m indien de vorige stilstand

pas afgesloten is in dezelfde maand. Het kan bijvoorbeeld op straat 5 voorvallen dat een

stilstand eindigt in het begin van de maand, vervolgens wordt er 21 dagen geproduceerd en

tegen het einde van de maand zou dan een nieuwe stilstand moeten starten. Deze situatie

is onmogelijk in 7.18b, maar wordt door de extra term wel mogelijk gemaakt door 7.19.

∀s ∈ {sA1, sA2, s5},∀m : SSs,m ≤ 1 −

m−1∑

t=startM−1

(SSs,t − ESs,t) + ESs,m (7.19)

Voorwaarde 7.18e in verband met de eis voor een minimum lengte van een stilstand wordt

voor s ∈ {sA1, s5} nog uitgebreid omwille van restrictie (16) de minimale duur van een A1-

/A2-stilstand, tussen stop productie en start productie moet ten minste 21 dagen bedragen.

Kortere stilstanden zijn economisch zinloos (dit getal moet als variabele kunnen ingegeven

worden)en restrictie (51) een O-stilstand moet minstens 3 weken duren (dit getal moet als

Page 67: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 44

7

variabele kunnen ingegeven worden). De minimum lengte voor een stilstand per straat wordt

meegegeven als parameter in aantal dagen. Voorwaarde 7.18e wordt dan 7.20.

∀s ∈ {sA1, s5},∀m ∈ {startM − 1, . . . , startM + 10} :

m+1∑

t=m

dagenSs,t ≥ minimumLengteStilstands · SSs,m

(7.20)

Ook voor de maalstraat moet voorwaarde 7.18e aangepast worden. Dit omdat de afstel

en opstart van de maalstraat samen slechts 1 dag vraagt. Een omstelling in de maalstraat

vereist echter 3 dagen. Indien de voorwaarde 7.18e dus niet aangepast wordt, gaat het model

beslissen om in plaats van een omstelling in te voeren van drie dagen, een stilstand in te

plannen van slechts 1 dag. Het is echter onmogelijk om na deze korte stilstand een ander

product in de maalstraat te produceren. De enige situatie waarbij we de stilstand dus langer

moeten maken is indien SSp,m = 1 en ESp,m = 1. Dit is de situatie waarbij een stilstand

wordt gestart en nog in dezelfde maand wordt gestopt. Hiervoor voegen we voorwaarde 7.21

toe. Praktisch gezien houdt dit geen verlies van algemeenheid in aangezien de productie

toch nooit zal stoppen voor minder dan 3 dagen.

∀s ∈ {sM},∀m : dagenSs,m ≥ 3 · (SSs,m + ESs,m − 1) (7.21)

Doorgeven van stilstanden

Sommige straten zijn rechtstreeks gekoppeld aan andere, zodat productie op de ene straat

betekent dat er ook productie is op de voorgaande straat. Voor volgende situaties moeten

er extra voorwaarden worden toegevoegd:� Aangezien er enkel A2-productie mogelijk is indien er ook A1 wordt geproduceerd

voegen we voorwaarde 7.22 toe. In deze voorwaarde wordt niet de gelijkheid geeist

omdat het ook mogelijk is om A2 niet te produceren terwijl men wel A1 produceert.

Dat is in het theoretische geval, in de praktijk echter zal men zien dat A1 en A2 steeds

samen worden geproduceerd omwille van energie-efficientie en omdat er bijna steeds

A2-verbruik of A2-verkoop is of opstapeling van A2 in de tanks. We behouden hier wel

de ongelijkheid om de algemeenheid van het model te waarborgen. Bovendien voegen

we toch een extra term (ss62) toe aan de totale kost voor elke dag dat A2 langer

stilstaat dan A1. Want dit is een niet te negeren energieverlies. De A1 installatie zal

dan tegen lagere snelheid moeten produceren omdat de straten niet perfect uitgelijnd

zijn qua capaciteit. Het model zal zelf de beslissing nemen afhankelijk van de kosten

om meer dagen stilstand van A2 in te voeren of toch niet.

∀m : dagenSsA1,m ≤ dagenSsA2,m (7.22)

Page 68: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 45

7

+ penaltysA2nietA1 ·∑

m

(dagenSsA2,m − dagenSsA1,m) (7.23)� Ook straten 1, 3 en 4 zijn rechtstreeks gekoppeld aan de productie van A1. Aangezien

het echter mogelijk is om ook via A2 deze straten te laten lopen is het hierbij niet

mogelijk om rechtstreeks een voorwaarde zoals 7.22 te schrijven. Het is wel mogelijk

om de productie van deze producten via A1 te beperken tot een maximale hoeveelheid

gelijk aan het aantal dagen dat de A1-productie loopt. Dit wordt in voorwaarde 7.24

bepaald, waarbij met PvA1: ProductenViaA1 enkel dat gedeelte van de productie-

hoeveelheid wordt overgehouden dat via A1 wordt geproduceerd.

∀s ∈ {s1, s3, s4},∀m :∑

PvA1∈{s}

QPvA1,m

dagcapaciteitPvA1≤ #dm − dagenSs,m (7.24)

Voor straat 3 wordt er in het rechterlid dus de som genomen van de productiehoe-

veelheden van G (op straat 3), H1, H2 en H3 geproduceerd uit A1 gedeeld door hun

respectievelijke dagcapaciteit. Op deze manier bekomt men in het rechterlid het aantal

dagen dat er rechtstreeks uit A1 wordt geproduceerd. Eventueel zou het linkerlid nog

kunnen verminderd worden door de omstellingen ook in rekening te brengen.

7.5.3. Bijdrage van de stilstanden tot de totale kost� Het volledig stilleggen van een productiestraat is uiteraard goedkoper dan het produ-

ceren tegen een lagere snelheid. Bovendien is een lange stilstand ook efficienter inzake

energieverbruik dan verschillende kleine stilstanden omdat elke opstart en afstel van

een productiestraat ook enerige verbruikt. We verwerken dit in de doelfunctie door

elke dag stilstand die niet behoort tot de afstel- of opstarttijd te belonen met een

gekozen factor. s ∈ {sCD1, s1, s3, s4, s5, s6, sM}

∀s : −50 ·

startM+11∑

m=startM

(dagenSs,m − (afstels + opstarts) · SSs,m) (7.25)� (10) de A1-productie loopt best op vollast met 3 straten. 83 dagen op 2/3-last t.o.v.

28 dagen afstel en 55 dagen op vollast levert 160,000 Euro besparing op (dit getal moet

als variabele kunnen ingegeven worden). Deze besparing is lineair te extrapoleren naar

andere deellasten. We voegen daarom bij de doelfunctie de volgende term waarbij

de getallen in het model worden meegegeven als parameters die op voorhand nog

te wijzigen zijn. Per dag stilstand van de straat A1 krijgen we dus een bonus van

160000/28 euro.

Page 69: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 46

7

−160000

28·

startM+11∑

m=startM

dagenSsA1,m (7.26)

Op restrictie 10 wordt later in combinatie met restrictie 22-bis nog dieper op ingegaan.� De stilstanden gaan uiteraard ook gepaard met kosten. Voorlopig worden hier enkel de

kosten voor afstel en opstart in beschouwing genomen. Indien er tijdens een stilstand

ook nog kosten zijn tengevolge van een omstel naar een ander product worden deze kos-

ten bij de omstellingskosten in rekening gebracht. s ∈ {sA1, sA2, sCD1, s1, s3, s4, s5, s6, sM}.

Aan de doelfunctie wordt de volgende term toegevoegd:

∀s : +startM+11∑

m=startM

(SSs,m · kostAfstels + ESs,m · kostOpstarts) (7.27)

7.6. Productierun

(54) een N-productiecampagne moet minstens 14 dagen duren (dit getal moet als variabele

kunnen ingegeven worden). Naar analogie met deze restrictie gelden er ook zo’n restricties

voor de productie van verschillende andere producten. Kort samengevat: indien product p

geproduceerd wordt, moet deze productierun een minimum lengte (MLp) hebben. Er zijn

verschillende manieren om dit op te lossen. Een eerste manier bestaat erin om voorwaarde

7.28 toe te voegen voor p ∈ {minimale lengte productierun vereist}. Deze voorwaarde eist

dat indien er productie is in maand m, dus als Pp,m = 1, de som van het aantal dagen

productie van de vorige maand m − 1, de huidige maand m en de volgende maand m + 1

groter moet zijn dan de minimum lengte. Enkel eisen dat het aantal dagen productie van

de huidige maand groter moet zijn is niet voldoende aangezien een productierun over twee

maanden verspreid kan zijn. Enkel eisen dat het moet gelden voor de huidige maand en

de volgende maand is ook niet voldoende, omdat de vergelijking dan niet geldig is voor

maanden m + 1 en m + 2. Een grafische voorstelling hiervan zie je op figuur 7.2. Daarom

moet ook nog de vorige maand in beschouwing worden genomen.

Figuur 7.2.: Grafische voorstelling vergelijking 7.28

Page 70: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 47

7

∀m ∈ {startM, . . . , startM + 10} :

m+1∑

t=m−1

Qp,t

dagcapaciteitp≥ MLp · Pp,m

(7.28)

Deze methode is zeer eenvoudig en maakt alleen gebruik van reeds eerder gedefinieerde

variabelen. Het grote nadeel van deze methode is dat er zeer veel ongewenste situaties

overblijven. Een voorbeeld hiervan is de situatie waarbij de productiehoeveelheid voor elke

maand gelijk is aan vijf dagen productie. De som van drie opeenvolgende maanden is dan

steeds gelijk aan 15 dagen, welke dus zou voldoen aan de eerder geciteerde restrictie 54. We

creeren op deze manier in het beste geval slechts productieruns van 10 dagen, wat niet in

overeenstemming is met het gevraagde.

Door gebruik te maken van de huidige variabelen kunnen we geen nauwkeurigere voorwaarde

opstellen en aangezien voorwaarde 7.28 nog voor te veel interpretatie vatbaar is, voeren we

nieuwe variabelen in.

7.6.1. Beslissingsvariabelen in verband met Productieruns

Volledig naar analogie met de variabelen voor het invoeren van een stilstand maken we hier

gebruik van de binaire variabelen SP : StartProductie en EP : EindProductie. De index

p wordt hier gebruikt voor alle producten waarvoor deze variabelen noodzakelijk zijn, dit

zijn alle producten voor straten 1, 3, 4, 6, de maalstraat en productiestraat CD1. Voor

straat 3 wordt er een uitzondering gemaakt voor de producten H1, H2 en H3; deze worden

in de onderstaande vergelijkingen beschouwd als 1 product: H123 omdat ze steeds in blok

en zonder omstellingen voorkomen. Hetzelfde geldt voor het blok D2K. De productiestraat

van C en D1 wordt niet in beschouwing genomen omdat daar geen vereisten zijn voor de

lengte van een productierun.

∀m : SPp,m ∈ {0, 1} en EPp,m ∈ {0, 1} (7.29)

SPp,m :=

1, als een productierun wordt gestart van product p in maand m,

0, anders(7.30)

EPp,m :=

1, als een productierun wordt geeindigd van product p in maand m,

0, anders(7.31)

Page 71: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 48

7

7.6.2. Voorwaarden in verband met Productieruns

Algemene voorwaarden

Uiteraard gelden hier ook dezelfde vergelijkingen die de relaties aangeven tussen SP en EP

zoals de eerder geziene vergelijkingen voor de relaties tussen SS en ES. Voor de volledigheid

geven we ze snel even mee:

∀m : SPp,m ≤ 1 −

m−1∑

t=startM−1

(SPp,t − EPp,t) (7.32a)

Geen productierun starten als er 1 nog niet afgesloten is.

∀m : EPp,m ≤

m−1∑

t=startM−1

(SPp,t − EPp,t) + SPp,m (7.32b)

Geen productierun eindigen als er geen gestart is.

∀m : Pp,m ≤m−1∑

t=startM−1

(SPp,t − EPp,t) + SPp,m (7.32c)

Geen productie van product p in maand m indien er geen productierun aan het lopen is,

dus enkel indien er 1 gestart is, die nog niet is afgesloten.

∀m : SPp1,m ≤ 1 −

m−1∑

t=startM−1

(SPp2,t − EPp2,t) + EPp2,m (7.32d)

Geen andere productierun starten op dezelfde straat zolang de vorige productierun op die

straat nog aan het lopen is. Hierbij zijn p1 en p2 producten op eenzelfde straat en moet

deze voorwaarde gelden voor alle mogelijke combinaties van producten op eenzelfde straat.

Het uiteindelijke doel van het invoeren van deze variabele was om een minimale lengte van

een productierun te kunnen verzekeren. Daarvoor voegen we voorwaarden 7.32e en 7.32f

toe.

∀m :Qp,m

dagcapaciteitp≥ MLp · (SPp,m + EPp,m − 1) (7.32e)

Indien een productierun wordt gestart en gestopt in een en dezelfde maand, dan moet de

grootte van de productiehoeveelheid groter zijn dan de minimale productielengte.

∀m ∈ {startM − 1, . . . , startM + 10} :

m+1∑

t=m

Qp,t

dagcapaciteitp≥ MLp · SPp,m

(7.32f)

Page 72: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 49

7

Indien er een productierun wordt gestart in maand m en niet eindigt in dezelfde maand m,

zodat niet aan voorwaarde 7.32e voldaan is, dan zal voorwaarde 7.32f ervoor zorgen dat het

aantal dagen productie van product p in de komende twee maand groter is dan de minimale

lengte van een productierun. Op deze manier wordt de productierun mooi gespreid over

twee opeenvolgende maanden.

In de vorige beschouwing is de productie van H1, H2 en H3 beschouwd als 1 blok. Restrictie

75 legt echter ook nog enkele beperkingen op voor de producties van deze 3 producten apart.

Zo moet, indien het product voorkomt in een productieblok, de minimale productierun

5 dagen bedragen. Hiervoor hebben we nog enkele extra voorwaarden nodig: 7.33 voor

p ∈ {H1, H2, H3}.

∀m :m+1∑

t=m

Qp,t

dagcapaciteitp≥ MLp · (SPH123,p + Pp,m − 1) (7.33a)

∀m :

m+1∑

t=m

Qp,t

dagcapaciteitp≥ MLp · (SPH123,p + Pp,m+1 − 1) (7.33b)

∀m :Qp,m

dagcapaciteitp≥ MLp · (SPH123,p + EPH123,m + Pp,m − 2) (7.33c)

De eerste voorwaarde 7.33a eist dat indien er een productieblok van H123 start in de maand

m (SPH123,m = 1) en indien er productie is van p ∈ {H1, H2, H3} in de maand m

(Pp,m = 1), dat het aantal dagen dat er productie is in m en m + 1 groter is dan het

minimum aantal dagen. Indien aan 1 van deze twee voorwaarden niet voldaan is, dan wordt

het rechterlid van de voorwaarde 0 en is er geen beperking voor het linkerlid. De tweede

voorwaarde doet juist hetzelfde enkel dat er nu gekeken wordt of er productie is van p in

de volgende maand m + 1, want het productieblok van H123 kan over meerdere maanden

verspreid zijn. Een verduidelijking voor deze twee situaties wordt gegeven in figuur 7.3.

Waarbij voorwaarde 7.33a geldt voor productie van H1 en H2 en voorwaarde 7.33b voor

H2 en H3. Voorwaarde 7.33c is dan een strengere versie van de vorige twee. Deze zal eisen

dat het aantal dagen productie van p ∈ {H1, H2, H3} in 1 maand groter is dan 5 indien

het productieblok van H123 start en eindigt in dezelfde maand.

Figuur 7.3.: Grafische voorstelling bij vergelijkingen 7.33a en 7.33b

Door het invoeren van deze voorwaarden is voldaan aan volgende restricties:

Page 73: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 50

7

� (54) een N-productiecampagne moet minstens 14 dagen duren (dit getal moet als vari-

abele kunnen ingegeven worden).� (55) een M-productiecampagne in straat 6 (=M(in N)) moet minstens 14 dagen duren

(dit getal moet als variabele kunnen ingegeven worden).� (58) een L-productiecampagne moet minstens 14 dagen duren (dit getal moet als vari-

abele kunnen ingegeven worden).� (59) een M-productiecampagne in straat 4 (=M(in L)) moet minstens 14 dagen duren

(dit getal moet als variabele kunnen ingegeven worden).� (67) een F-productiecampagne moet minstens 14 dagen duren (dit getal moet als vari-

abele kunnen ingegeven worden).� (68) een G-productiecampagne in straat 1 moet minstens 7 dagen duren (dit getal moet

als variabele kunnen ingegeven worden).� (75) de H1-, H2- en H3-productiekampagnes moeten telkens in blok gebeuren met een

totale minimale campagneduur voor het blok van 15 dagen en indien H1, H2 of H3 in

het blok voorkomen moeten ze elk een minimale duur hebben van 5 dagen (deze getallen

moeten als variabele kunnen ingegeven worden).� (94) een maalcampagne van F/c, G/c en L/c moet minstens 7 dagen duren (dit getal

moet als variabele kunnen ingegeven worden).

O-productierun

Straat 5 was niet in vorige beschouwing inbegrepen omdat we daar slechts 1 product op

kunnen produceren. Bijgevolg betekent ook dat een einde van een stilstand gelijk is aan

het begin van de productie van O, en het einde van de productie van O komt dan overeen

met het begin van een stilstand op straat 5. Om deze reden hebben we niet de extra

variabelen voor productieruns ingevoerd in straat 5. Om toch de minimale lengte van een

productierun te verzekeren zoals gevraagd in (50) een O-productiecampagne moet minstens

3 weken duren (dit getal moet als variabele kunnen ingegeven worden), is een kleine wijziging

van voorgaande voorwaarden noodzakelijk. Voorwaarde 7.32f is onmiddellijk over te nemen

mits wijziging van SP in ES, voorwaarde 7.32e is niet mogelijk om over te nemen, omdat

er op straat 5 twee mogelijkheden zijn waarbij zowel SSs5,m = 1 als ESs5,m = 1. De eerste

mogelijkheid is die waarbij er een stilstand eindigt in het begin van de maand, vervolgens

21 dagen productie is en op het einde van de maand een nieuwe stilstand wordt gestart.

Hiervoor zou een aanpassing van 7.32e nog gelden. De tweede mogelijkheid echter, waarbij

een stilstand wordt gestart en gestopt in dezelfde maand zorgt ervoor dat er onmogelijk 21

Page 74: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 51

7

dagen productie van O mogelijk is, maar wat wel zou geeist worden door aanpassing van

7.32e. We laten deze voorwaarde bijgevolg zonder veel verlies van nauwkeurigheid weg.

∀m ∈ {startM − 1, . . . , startM + 10} :

m+1∑

t=m

QO,t

dagcapaciteitO≥ MLO · ESs5,m

(7.34)

7.7. Stilstanden in combinatie met Productieruns

Vanzelfsprekend worden er ook voorwaarden opgesteld die de relaties tussen de variabe-

len van de stilstanden en de variabelen van de productieruns vastleggen. In onderstaande

voorwaarden is s ∈ {s1, s3, s4, s6, sM, CD1}

∀s,∀m,∀p ∈ {geproduceerd op straat s} :

SSs,m ≤ 1 −m−1∑

t=startM−1

(SPp,t − EPp,t) + EPp,m

(7.35a)

Geen stilstand starten op straat s indien er een productierun aan het lopen is op diezelfde

straat s.

∀s,∀m,∀p ∈ {geproduceerd op straat s} :

SPp,m ≤ 1 −m−1∑

t=startM−1

(SSs,t − ESs,t) + ESs,m

(7.35b)

Analoog als voorwaarde 7.35a, geen productie starten op straat s indien er nog een stilstand

bezig is op straat s.

∀s,∀m :m∑

t=startM−1

SSs,t +∑

p∈{geproduceerd op straat s}

SPp,t

m∑

t=startM−1

ESs,t +∑

p∈{geproduceerd op straat s}

EPp,t

+ 1 (7.35c)

Overdracht per maand van maximaal 1 eenheid die niet afgesloten is naar de volgende

maand. Dus ofwel is er een stilstand die de overgang naar de volgende maand overbrugt,

ofwel is het een productierun.

Page 75: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 52

7

7.8. Voorraadrestricties

7.8.1. Algemene voorwaarden

Minimum voorraad:

Voor de minimale voorraad van de producten (p ∈ {producten die verkocht worden}), heb-

ben we volgende restrictie: (102) de minimale voorraad per product die nooit mag onder-

schreden worden is de som van:

1. de gemiddelde off-spec voorraad

2. de gemiddelde voorraad in de ko-lagers

3. de gemiddelde toegewezen voorraad

4. de gemiddelde Q-stock

5. de minimale vrij beschikbare voorraad

(deze getallen moeten als variabele kunnen ingegeven worden). We noemen deze 5 termen

de voorraadParameters en krijgen voor elk product het minimaal aantal dagen per voor-

raadParameter als: minDagp,vp.

Deze voorraad wordt gegeven in dagen, maar moet nog omgezet worden naar aantal ton.

Dit gebeurt op volgende wijze: De dagen voorraad moeten vermenigvuldigd worden met de

gemiddelde dagverkoop van de 12 maanden waarvoor een planning gemaakt wordt. Indien

de totale verkoopsprognose voor het komende jaar gelijk is aan 38300 ton, dan is de gemid-

delde dagverkoop gelijk aan 10.5 ton. Als de minimumvoorraad 25 dagen is betekent dit dat

we niet onder de 25 * 10.5 = 262.5 ton mogen komen voor dat product.

∀p,∀m :

∑startM+11t=startM vraagp,t

365·

vp∈voorraadParameters

minDagp,vp ≤ Vp,m (7.36)

Maximum voorraad:

In analogie met de paragraaf van de minimale voorraad is er ook per product een maximale

voorraad. Het geldt voor dezelfde producten p uitgezonderd A2 en B. Deze hebben speciale

restricties die verderop behandeld worden.

∀p,∀m :

∑startM+11t=startM vraagp,t

365· maxDagp ≥ Vp,m (7.37)

7.8.2. B-voorraad:� (18) maximaal 112 ton B-bulkstapelcapaciteit in eigen tanks (dit getal moet als varia-

bele kunnen ingegeven worden).

Page 76: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 53

7

� (19) maximaal 204 ton B-stapelcapaciteit in vaten. Opslagkost in vaten of IBC’s: zie

onder punt 9. (dit getal moet als variabele kunnen ingegeven worden).� (20) maximaal 84 ton B-bulkstapelcapaciteit in tankcontainers (dit getal moet als va-

riabele kunnen ingegeven worden).� (21) de B-bulkvoorraad (eigen tanks en tankcontainers) mag bij de heropstart van

het A1-/A2-bedrijf niet lager zijn dan 20 dagen (dit getal moet als variabele kunnen

ingegeven worden).� (22) de B-voorraad in vaten mag bij de heropstart van het A1-/A2-bedrijf niet lager

zijn dan 20 dagen (dit getal moet als variabele kunnen ingegeven worden).

∀m : V TBB,m ≤ maxTankB (7.38a)

Restrictie 18 wiskundig uitgeschreven als voorwaarde 7.38a.

∀m : V V IBCB,m ≤ maxV atenEnIBCB (7.38b)

Restrictie 19 wiskundig uitgeschreven als voorwaarde 7.38b.

∀m : V CB,m ≤ maxContB (7.38c)

Restrictie 20 wiskundig uitgeschreven als voorwaarde 7.38c. Op dit moment is er echter een

te grote voorraad van B aanwezig in het bedrijf. Indien dat het geval is, moet de maximale

opslagcapaciteit van B in tankcontainers verhoogd worden.

∀m : VB,m = V TBB,m + V V IBCB,m + V CB,m (7.38d)

Voorwaarde 7.38d om de opsplitsing van de voorraad van B in de verschillende deelvoorraden

te definieren.

∀m : V TBB,m + V CB,m − QB,m + vraagB,m · (1 −dagenSsA1,m

#dm) ≥

minBulkBstilstandA1 ·

∑startM+11t=startM vraagB,t

365· ESsA1,m (7.38e)

Voorwaarde 7.38e ten gevolge van restrictie 21. We willen de voorraad kennen op het einde

van een productiestilstand van het A1-bedrijf (V op figuur 7.4), want deze voorraad moet

groter zijn dan 20 dagen. We kennen enkel de variabelen op het einde van elke maand, dus

we moeten V omzetten naar Veind. In de periode daartussen is er dus nog productie van

B en is er ook vraag naar B. In de veronderstelling dat de vraag naar B constant verloopt

doorheen de tijd, moeten we slechts die fractie van de vraag hebben in overeenstemming

Page 77: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 54

7

met het aantal dagen dat er nog productie van A1 is. Aangezien er enkel B-productie is als

de A1-productie loopt, is het niet nodig om daar een fractie van te nemen en kunnen we de

volledige productiehoeveelheid in beschouwing nemen. De vergelijking moet uiteraard enkel

gelden indien er een stilstand van A1 wordt beeindigd (ESsA1,m = 1). Indien ESsA1,m = 0,

blijft er een eenvoudige vergelijking over die steeds moet gelden, nl. de voorraad van B op

het einde van maand m moet groter zijn dan de productie van B in m verminderd met de

vraag naar B in m. Het aantal dagen voorraad (minBulkBstilstandA1) zetten we op een

analoge manier om naar ton voorraad zoals eerder uitgelegd. Wanneer we alles samennemen

verkrijgen we voorwaarde 7.38e.

Figuur 7.4.: Grafische voorstelling restrictie 21

Restrictie 22 valt weg. Deze voorwaarde is enkel interessant om de detailplanning te maken.

Het is voldoende dat de totale voorraad bij de heropstart van het A1/A2-bedrijf niet lager

is dan 20 dagen. Dus restrictie 22 zit op die manier vervat in restrictie 21.

7.8.3. A2-voorraad:� (5) maximaal 1780 ton A2-stapelkapaciteit in de tanks 01 en 02 (dit getal moet als

variabele kunnen ingegeven worden).� (6) indien noodzakelijk is er extra 890 ton A2-stapelkapaciteit in tank 03 buiten de

C-, D1-, D2-, I-, J- en K-productiecampagnes (dit getal moet als variabele kunnen

ingegeven worden).� (8) maximaal 2 maand stapelcapaciteit van product A2 in vaten en IBC’s omwille van

de beperkte verkoop van vaten en IBC’s (dit getal moet als variabele kunnen ingegeven

worden).� (11) streefdoel A2-bulkvoorraad buiten een stilstandsperiode is minimum 1400 ton in

de tanks 01 en 02 omwille van de bedrijfszekerheid van de A1-installatie (dit getal moet

als variabele kunnen ingegeven worden).� (12) streefdoel A2-bulkvoorraad net voor de stilstand is 1,780 ton indien enkel tank 01

en 02 ter beschikking staan en 2,670 ton indien ook tank 03 ter beschikking staat (zie

onder punt 6) (dit getal moet als variabele kunnen ingegeven worden).

Page 78: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 55

7

� (13) de A2-bulkvoorraad mag bij de opstart van het A1-/A2-bedrijf niet lager zijn dan

25 dagen (dit getal moet als variabele kunnen ingegeven worden).� (14) A2-voorraad in vaten en IBC’s mag bij de opstart van het A1-/A2-bedrijf niet

lager zijn dan 25 dagen (dit getal moet als variabele kunnen ingegeven worden).

∀m : V T12A2,m ≤ maxTank12A2 (7.39a)

Restrictie 5 wiskundig uitgeschreven als voorwaarde 7.39a.

Restrictie 6 wordt voor later behouden. Het is alleszins geen moeilijke voorwaarde, dus laat

ons er hier gewoon vanuit gaan dat ze voldaan is.

∀m : V V IBCA2,m ≤ maxV atenEnIBCA2 ·

∑startM+11t=startM vraagA2,t

365(7.39b)

Restrictie 8 wiskundig uitgeschreven als voorwaarde 7.39b. maxV atenEnIBCA2 wordt hier

gegeven in dagen.

∀m : V T12A2,m ≥ minTank12A2 (7.39c)

Restrictie 11 wiskundig uitgeschreven als voorwaarde 7.39c.

Restrictie 13 eist minimaal 25 dagen A2-bulkvoorraad op het moment dat de installatie

effectief terug begint te produceren. Het aantal dagen berekenen we analoog als in de voor-

gaande gevallen als volgt: voor een heel jaar de rechtstreekse vraag naar A2 voor verkoop

plus de vraag voor productie van de vervolgproducten uit A2. Dit geeft de totale vraag van

A2 voor dat jaar. Indien we delen door 365 krijgen we de gemiddelde vraag naar A2 voor 1

dag. Dus de voorraad mag niet lager zijn dan 25 keer deze gemiddelde vraag voor 1 dag.

Restrictie 14 is naar analogie met restrictie 22 niet interessant voor een schatting van de

maandproducties en zit volledig vervat in restrictie 13.

Dus dan blijven de wiskundige formuleringen van restricties 12 en 13 over. We zouden een

analoge redenering kunnen toepassen zoals bij restrictie 21 voor de B-voorraad. Maar de

vraag naar B, moet hier nu vervangen worden door de vraag naar A2. Deze vraag bestaat

uit de rechtstreekse vraag voor verkoop, maar ook uit het verbruik van A2 voor verdere

productie. De exacte waarde van dit verbruik in de periode waarbij er nog geen stilstand

is van A1 is echter niet eenduidig te bepalen. Om deze reden gaan we een schatting maken

van dit verbruik. We krijgen dan vergelijking 7.40 voor restrictie 12.

Page 79: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 56

7

∀m : 2670 · SSsA1,m − 890 · (PT3C,m−1 + PT3D1,m−1) ≤

V T12A2,m−1 + V T3A2,m−1 + (#dm − dagenSsA2,m) · dagcapaciteitA2

− V erbrA2s5,m,12 − V erbrA2s6,m,12 − vraagA2,m · (1 −dagenSsA1,m

#dm) (7.40)

PT3 zijn binaire variabelen die we verderop beter zullen definieren, het volstaat nu om te

weten dat ze 1 zijn indien tank 3 toegewezen is aan het product p. En anders zijn ze 0.

We hebben hier ook enkele nieuwe variabelen ingevoerd, die de schatting van het verbruik

moeten weergeven:� V erbrA2s,m,12 ∈ R+: geeft de schatting weer van het verbruik van A2 voor straat s in

de maand m die te maken heeft met restrictie 12.

De verklaring van de voorwaarde 7.40:� Het rechterlid stelt niets anders voor dan de voorraad van A2 op het moment dat de

stilstand start.� Indien er een stilstand van straat A1 wordt gestart in de maand m is het de bedoeling

dat de voorraad van A2 in de tanks op dat moment zo groot mogelijk is. Dus indien

SSsA1,m = 1 dan moet het rechterlid een zo groot mogelijke waarde aannemen.� Indien tank 3 niet ter beschikking staat van A2 (PT3C,m−1 = 1 of PT3D1,m−1 = 1),

dan is het streefdoel van de voorraad in de tanks ook kleiner, want enkel tanks 1 en

2 staan ter beschikking. Slechts 1 van deze variabelen kan gelijk zijn aan nul. Het

streefdoel wordt dan 1780 ton.� Aangezien we niet de exacte voorraad weten op het moment dat de stilstand start,

maar enkel in het begin van de maand, moet deze voorraad geschreven worden in

functie van de beginvoorraden, de productie van A2 tot de stilstand en het verbruik

van A2 tot de stilstand.� De productie van A2 tot de stilstand is, aangezien een stilstand van A1 ook een stil-

stand van A2 inhoudt, gelijk aan (#dm−dagenSsA2,m) ·dagcapaciteitA2 . Dit is nu wel

een overschatting van deze productie aangezien er niet steeds tegen de volledige dag-

capaciteit van A2 wordt geproduceerd. We gaan nu niet verder in op de overschatting,

dit komt bij de bespreking van de schatting voor de verbruiken nog aan bod.� De vraag naar A2 tot op het moment dat de stilstand start is dan gelijk aan vraagA2,m ·

(1 −dagenSsA1,m

#dm)

Page 80: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 57

7

� Het verbruik van A2 tot de stilstand van A1 wordt in de hierboven ingevoerde vari-

abelen bijgehouden. Er is in deze periode geen verbruik van A2 voor de producten

die normaal via A1 worden geproduceerd, omdat in die periode de A1-installatie in

werking is.

Schatting voor de verbruikte hoeveelheid van A2 tot het moment dat de stilstand van

A1 start:

We zijn op zoek naar de beste schatting. Indien de schatting te groot is, dan zal voorwaarde

7.40 er voor zorgen dat de voorraden in de tanks ook te groot zijn in het begin van de

maand. Dit vormt geen probleem, want dan zal men de productie van A2 sneller stilleggen

omwille van een volle tank. De paar dagen dat de productie van A2 sneller stilligt dan de

productie van A1 is er ook wel verbruik, dus de voorraad op het moment van de start van

de A1 stilstand zal iets kleiner zijn dan het streefdoel. Indien de schatting te klein is, dan

zullen de voorraden in de tanks in het begin van de maand ook te klein zijn en wordt het

streefdoel ook niet gehaald. We zijn dus op zoek naar de beste schatting van dit verbruik.

We schrijven volgende drie voorwaarden 7.41, waarbij we ineens veralgemenen naar restrictie

13. Ze geven alle drie een bovengrens voor het verbruik. Deze grenzen zijn alledrie te groot,

en we gebruiken daar de kleinste van. Dus onze beste schatting is zo groot mogelijk, maar

toch kleiner dan de drie bovengrenzen. We hebben reeds eerder gezien dat een overschatting

geen problemen oplevert. Bovendien compenseert dit ook de overschatting van de productie

van A2 zoals eerder al opgemerkt.

∀m,∀s ∈ {s5, s6},∀r ∈ {12, 13} : V erbrA2s,m,r ≤∑

p∈s

Qp,m · verbruikp,A2; (7.41a)

7.41a is de meest eenvoudige voorwaarde, het verbruik van A2 per straat in een maand

alvorens de stilstand wordt gestart is steeds kleiner dan het totale verbruik van A2 op die

straat per maand.

∀m,∀s ∈ {s5, s6},∀r ∈ {12, 13} :

V erbrA2s,m,r ≤ (#dm−dagenSsA1,m) ·

p∈s dagcapaciteitp · verbruikp,A2

aantal producten in straat s·verbruikp,A2;

(7.41b)

7.41b geeft het verbruik weer van A2 indien tijdens de hele periode voor de stilstand van

A2 er continu productie is geweest van de producten op de straat.

Voor de derde voorwaarde maken we wel de opsplitsing tussen restrictie 12 en 13. Voor

restrictie 12 geldt vergelijking 7.41c, voor restrictie 13 geldt voorwaarde 7.41d

Page 81: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 58

7

∀m,∀s ∈ {s5, s6} :

V erbrA2s,m,12 ≤ dagenP luss,m ·

p∈s dagcapaciteitp · verbruikp,A2

aantal producten in straat s

+ M · (2 − ESs,m −

m−1∑

t=startM−1

(SSs,t − ESs,t));

(7.41c)

∀m,∀s ∈ {s5, s6} :

V erbrA2s,m,13 ≤ dagenP luss,m ·

p∈s dagcapaciteitp · verbruikp,A2

aantal producten in straat s

+ M · (1 − SSs,m);

(7.41d)

Voor de verklaring van deze laatste twee voorwaarden stellen we eerst de waarheidstabel 7.3

op. Hierin worden enkel die verschillende mogelijkheden opgesomd die mogelijk zijn. Het

verbruik van A2 voor productie van andere producten hangt af van de stilstanden op die

straat.

Tabel 7.3.: Waarheidstabel in verband met de verschillende situaties voor SS, ES en∑

SSs,m ESs,m∑m−1

t=startM−1(SSs,t − ESs,t)

0 0 0 geen stilstand aan het lopen,

er is alleen productie op straat s

voldaan met voorwaarde 7.41b

0 0 1 er is geen productie op straat s

voldaan met voorwaarde 7.41a

1 0 0 De stilstand van straat s start voor

of na de start van de stilstand van A1

voldaan met 7.41a of 7.41b

0 1 1 Al dan niet overlap van stilstanden

zie figuur 7.5

1 1 0 zie figuur 7.6

1 1 1 zie figuur 7.7

Figuur 7.5.: Grafische voorstelling situatie 0 1 1 uit tabel 7.3

Page 82: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 59

7

Voor de bovenste situatie van figuur 7.5 zou het te zoeken verbruik gelijk moeten zijn

aan het verbruik nodig voor de productie op straat s tussen de twee stilstanden in. Het

aantal dagen productie op straat s die in rekening gebracht moeten worden is dan #dm −

dagenSs,m−dagenSA1,m. Het probleem hierbij vormt echter de tweede situatie van diezelfde

figuur. Op dat moment is het aantal dagen hiervoor gedefinieerd negatief. We zien hier

dus dat we vergelijking 7.41c kunnen gebruiken mits het invoeren van de nieuwe variabele

dagenP luss,m ∈ R+.

dagenP luss,m :=

#dm − dagenSs,m − dagenSA1,m, als #dm − dagenSs,m − dagenSA1,m ≥ 0

0, anders

(7.42)

De laatste term in voorwaarde 7.41c zorgt ervoor dat deze vergelijking enkel geldt bij de

corresponderende gevallen uit de waarheidstabel. M is hierbij een groot getal, bijvoorbeeld∑

p∈s Qp,m · verbruikp,A2, zodat de eerste voorwaarde in die gevallen zeker de derde over-

schaduwt.

Figuur 7.6.: Grafische voorstelling situatie 1 1 0 uit tabel 7.3

De onderste situatie uit figuur 7.6 is onmiddellijk voldaan omwille van voorwaarde 7.41b. Bij

de bovenste situatie krijgen we zowel voorin als achterin de maand enkele dagen productie die

bij het verbruik moeten gerekend worden. Voorwaarde 7.41a is hiervoor de beste benadering

aangezien de stilstand van straat s toch een minimale lengte moet hebben. Voor de middelste

situatie is er niet onmiddellijk een eenvoudige oplossing mogelijk. We gaan ervan uit dat de

combinatie van 7.41a en 7.41b een goede benadering geeft.

Page 83: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 60

7

Figuur 7.7.: Grafische voorstelling situatie 1 1 1 uit tabel 7.3

De bovenste situatie uit figuur 7.7 is vervat in voorwaarde 7.41a. De onderste situatie in

7.41c. De middelste situatie wordt in zeer goede mate benaderd door 7.41c.

Er rest ons dan enkel nog de voorwaarden te vermelden voor variabele dagenP luss,m. We

gaan daarbij uit van de eigenschap dat een getal steeds kan geschreven worden als het ver-

schil van twee positieve getallen. De volgende voorwaarden moeten dan eenvoudig vertaald

worden naar de nodige situatie.

A = A+ − A− (7.43a)

A+ ≥ 0 (7.43b)

A+ ≥ A (7.43c)

A− ≥ 0 (7.43d)

A− ≥ −A (7.43e)

Een heel analoge redenering geldt voor restrictie 13. We hebben reeds enkele vergelijkingen

daarvoor weergegeven. Enkel de voorwaarde die effectief voor restrictie 13 moet gelden,

blijft nog over:

∀m : 25 ·

∑startM+11t=startM vraagA2,t +

p∈{rechtstreeks uit A2} vraagp,t · verbruikp,A2

365·ESsA1,m ≤

V T12A2,m + V T3A2,m − (#dm − dagenSsA2,m) · dagcapaciteitA2

+ V erbrA2s5,m,13 + V erbrA2s6,m,13 + vraagA2,m · (1 −dagenSsA1,m

#dm) (7.44)

Zoals eerder al vermeld, willen we de hoogste schatting bekomen van het verbruik die toch

kleiner is dan de drie bovengrenzen. Hiervoor voegen we in de doelfunctie een term toe die

het verbruik bevordert en dus maximaal gaat maken:

−∑

m

s∈{s5, s6}

r∈{12, 13}

verbrA2s,m,r (7.45)

Page 84: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 61

7

7.9. Omstellingen

7.9.1. Beslissingsvariabelen en voorwaarden

In eerste instantie was het de bedoeling om een voorspelling te maken welke omstellingen

er in een maand zouden plaatsvinden uitgaande van de productiegegevens in die maand.

Indien je bijvoorbeeld weet dat product F en product G beiden gemaakt worden in maand

m, dan kan je een omstelling in die maand op die straat veronderstellen. Of de omstelling

nu gebeurt volgens F → G of volgens G → F kunnen we in eerste instantie niet weten.

Bovendien is het ook mogelijk dat indien er een stilstand door het model wordt ingepland

in de maand m dat de omstel wordt opgeslorpt door deze stilstand. Uiteindelijk zijn er zeer

veel situaties mogelijk en zou het bepalen van een omstel en het daarbij horende capaciteits-

verlies slechts een zeer ruwe benadering zijn van de werkelijkheid.

We zoeken dus een andere manier om deze omstellingen nauwkeuriger te bepalen. Door het

invoeren van de variabelen SP en EP in combinatie met de variabelen SS en ES wordt

er eigenlijk reeds op het hoogste niveau toch al min of meer een productievolgorde vastge-

legd. Zo weten we dus voor elke maand welke producties er gestopt worden. Een productie

die stopt betekent een overgang naar een andere productie of een overgang naar een stilstand.

We voeren de variabele OS ∈ {0, 1} (Omstel) in die voor alle producten geproduceerd op

de straten s ∈ {sCD1, s1, s3, s4, s6, sM} als volgt wordt gedefinieerd:

OSp,m :=

1, als een omstel noodzakelijk is na de productie van product p in maand m,

0, anders

(7.46)

Voorwaarde 7.47 is de voorwaarde die zorgt dat deze variabele de correcte waarde aanneemt.

Zoals reeds vermeld, vindt er een omstelling plaats op het moment dat een productierun

beeindigd wordt en er wordt overgegaan op een andere productierun.

∀p,∀m : EPp,m = OSp,m (7.47)

Door voorwaarde 7.47 wordt ook een omstelling gedefinieerd op het moment dat de produc-

tie gevolgd wordt door een stilstand. We behouden deze definitie omwille van de kosten.

Het is na de stilstand goed mogelijk dat er een ander product wordt geproduceerd. In dat

geval moeten niet alleen de kosten voor afstel gerekend worden, maar ook de kosten voor

omstel. Op deze manier is dat eenvoudig te schrijven in de doelfunctie.

Indien we niet de kosten bekijken, maar het aantal dagen dat gepaard gaat met een omstel,

dan moet daar wel een correctie worden doorgevoerd. Als een omstel wordt gevolgd door een

Page 85: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 62

7

stilstand, dan worden de omsteldagen ingesloten in de stilstanddagen. In vergelijking 7.48

schrijven we het aantal dagen omstel in een bepaalde maand uit voor de eerder gedefinieerde

straten s.

∀s,∀m : Dagen verloren omwille van omstellingen op straat s =∑

p∈{geproduceerd op s}

(dagenOp · OSp,m) − verwDagenOs · SSs,m (7.48)

We zien dus dat de totale tijd die we verliezen door omstellingen gelijk is aan elke omstel-

ling die voorkomt in de maand vermenigvuldigd met het aantal dagen voor die omstelling

verminderd met een term indien een omstelling samenvalt met een stilstand. (SSs,m = 1

impliceert namelijk dat er minstens 1 EPp,m = 1 van die straat) Deze term is gelijk aan de

verwachte duur van een omstel op die straat, aangezien we niet op voorhand weten welke

productie er wordt beeindigd net voor de stilstand gestart wordt.

Er zijn wel nog enkele niet eenduidig gedefinieerde parameters in voorwaarde 7.48. Voor

straten 1, 4, 6, CD1 en de maalstraat is dit geen probleem. Alle omstellingen duren even lang

ongeacht welk product erop volgt. Dus dagenOp is voor alle producten van 1 straat gelijk en

tevens ook gelijk aan verwDagen0s. Voor straat 3 geeft dit meer problemen. Bekijken we

enkel het zwarte in figuur 7.8, dan zien we dat alle omstellingen 2 dagen duren uitgezonderd

de 4 zwarte pijlen. Zonder al te veel te wijzigen, passen we twee omstellingen aan (in het

rood), zodat vertrekkend vanuit elk product de omstelduur naar eender welk product gelijk

is. We veronderstellen bijvoorbeeld dat als de productie van K stopt elke omstelling drie

dagen zal duren. Dit is zo in de realiteit uitgezonderd bij de omstelling van K naar H123 die

slechts 2 dagen duurt. Deze vereenvoudiging is gerechtvaardigd omdat de exacte volgorde

van de producties toch nog niet gekend is. Op dit punt is het vooral van belang dat we de

kosten van de omstelling in rekening brengen en het capaciteitsverlies dat daarmee gepaard

gaat. In de tweede fase wordt uiteraard wel gewerkt met de exacte omstelduur. Op deze

manier zijn voor straat 3 de parameters dagenOp en verwDagenOp wel eenduidig bepaald.

Bovendien is het ook beter om een dag omstel extra te beschouwen dan een dag minder,

omdat we op deze manier een overschot aan capaciteit zullen creeren welke meer flexibiliteit

zal toelaten in fase 2. Een dag omstel minder zou leiden tot een capaciteitstekort waarbij

we in fase 2 niet tot een haalbare schedule kunnen komen.

Page 86: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 63

7

Figuur 7.8.: Grafische voorstelling van de omstelduur in straat 3

7.9.2. Bijdrage tot de totale kost

Voor de kosten kan eenzelfde redenering gevolgd worden als in de paragraaf hierboven. We

voegen bij de zwarte pijlen van figuur 7.9 twee rode pijlen toe, zodat de kost voor een omstel

na een bepaald product ook weer eenduidig bepaald wordt per product: kostOp. We voegen

volgende term toe aan de doelfuntie:

∀s : +

startM+11∑

m=startM

p∈{geproduceerd op s}

(kostOp · OSp,m) (7.49)

Figuur 7.9.: Grafische voorstelling van de kosten horend bij de omstel in straat 3

Op deze manier hebben we omstellingen ingepland in de maanden en is voldaan aan onder-

staande lijst van restricties:� (26) 2 dagen omstel bij overgang van C- op D1-productie (dit getal moet als variabele

kunnen ingegeven worden).� (27) 3 dagen omstel bij overgang van D1- op C-productie (dit getal moet als variabele

kunnen ingegeven worden).� (28) 2000 Euro omstelkosten bij omstel van C naar D1 (dit getal moet als variabele

kunnen ingegeven worden).� (29) 2000 Euro omstelkosten bij omstel van D1 naar C (dit getal moet als variabele

kunnen ingegeven worden).

Page 87: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 64

7

� (56) een omstel in straat 6 van N naar M(in N) of vice versa duurt 3 dagen. De

omstellingskosten bedragen 10,000 Euro per omstel (deze getallen moeten als variabele

kunnen ingegeven worden).� (60) een omstel in straat 4 van L naar M of vice versa duurt 3 dagen. De omstellings-

kosten bedragen 10,000 Euro per omstel (deze getallen moeten als variabele kunnen

ingegeven worden).� (69) een omstel in straat 1 van F naar G of vice versa duurt 2 dagen. De omstel-

lingskosten bedragen 7,000 Euro per omstel (deze getallen moeten als variabele kunnen

ingegeven worden).� (78) een omstel van J naar K duurt 1 dag (dit getal moet als variabele kunnen ingegeven

worden).� (79) een omstel van K naar I, J of G duurt 3 dagen (dit getal moet als variabele kunnen

ingegeven worden).� (80) alle andere omstellen in straat 3 duren 2 dagen (dit getal moet als variabele

kunnen ingegeven worden).� (81) een productomstel van H1, H2 of H3 naar I, G of J kost 4000 Euro.� (82) een productomstel van K naar I, G of J kost 4000 Euro.� (83) een productomstel van H1, H2 of H3 naar K, K naar H1, H2 of H3, I naar J of

G of H1 of H2 of H3 of K, G naar I of J of H1 of H2 of H3 of K, J naar I of G of H1

of H2 of H3 of K kost 1000 Euro (dit moet als variabele kunnen ingegeven worden).� (95) een omstel in de maalstraat duurt 3 dagen. De omstellingskosten bedragen 5,000

Euro per omstel (deze getallen moeten als variabele kunnen ingegeven worden).

7.10. Capaciteitsrestricties

Restrictie: (49) de verschillende straten moeten steeds op maximale uitlasting lopen, ten-

zij andere restricties andere beperkingen opleggen (bv. Restrictie 22 bis), omwille van de

energie-efficientie (zie file met dagcapaciteiten in bijlage). Deze restrictie leert ons dat de

totale productiehoeveelheid op een straat in een bepaalde maand m strikt gelijk moet zijn

aan de maximale productiecapaciteit in diezelfde maand m. Deze maximale productieca-

paciteit wordt beperkt door ingeplande stilstanden, stilstanden vastgelegd door het model

en omstellingen. Deze capaciteit moet zo nauwkeurig mogelijk bepaald worden. Indien de

maximale capaciteit te groot wordt berekend gaan we te veel productie plannen in die maand

op die straat, bijgevolg is er geen haalbare schedule mogelijk in fase 2 voor die maand. Is

Page 88: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 65

7

de maximale capaciteit te klein, dan hebben we een overcapaciteit in fase 2 op die straat,

wat niet energie-efficient is.

Deze restrictie (49) geldt voor s ∈ sG := {sCD1, s1, s3, s4, s5, s6, sM}, want voor straat

A1 en dus ook straat A2 en B leert restrictie 10 dat we best op vollast lopen, maar uit

restrictie: (15) er is geen opslag van A1. De productie moet dus direct verbruikt worden of

tot A2 worden omgezet. De A2-productiecapaciteit is kleiner dan de A1-productiecapaciteit.

Indien er geen verbruik is van A1 moet de A1-productie verminderd worden. besluiten we

dat de totale productiehoeveelheid op straat A1 in maand m kleiner (en niet strikt gelijk)

moet zijn dan de maximale productiecapaciteit van straat A1 in diezelfde maand m.

De capaciteit van A2 moet ook niet strikt gelijk zijn, want deze productiecapaciteit is vari-

abel afhankelijk van de productieafname van A1 door de straten 1, 3 en 4.

Schrijven we dit nu allemaal uit dan krijgen we de voorwaarden 7.50.

∀s ∈ sG,∀m :

p∈{p geproduceerd op s}

Qp,m

dagcapaciteitp

= #dm − dagenSs,m−

p∈{geproduceerd op s}

(dagenOp · OSp,m) + verwDagenOs · SSs,m (7.50a)

Een klein woordje uitleg bij vergelijking 7.50a: Het linkerlid is het totaal aantal dagen

dat er geproduceerd wordt op straat s in maand m. Hier wordt naar boven afgerond per

onvolledige dag productie. Anders kan een halve dag productie van product 1 samengeteld

worden met een halve dag productie van product 2. In de praktijk is dat niet mogelijk en

worden deze halve producties ook over 2 dagen gespreid, wat dus een verlies van 2 halve

dagen productie inhoudt. Deze afronding naar boven beschrijft perfect de situatie die we

willen. AMPL beschouwt deze afronding echter als een niet-lineariteit en kan hier niet met

werken. Daarom moeten we op zoek naar een andere manier om te zorgen dat twee halve

dagen productie op twee verschillende dagen plaatsvinden. De oplossing die deze ideale

situatie het beste benadert zal voor elke productie die beeindigd wordt in de maand m

een extra dag aanrekenen. Deze extra dag brengt dan de twee halve dagen in rekening die

verloren gaan. We laten de afrondingstekens in voorwaarde 7.50 weg en zodra er meer dan

1 product op een straat wordt geproduceerd voegen we in het linkerlid volgende term toe:∑

p∈{p geproduceerd op s} EPp,m.

Het rechterlid is het aantal dagen dat er beschikbaar is voor productie. Volgens restrictie 49

moeten rechter- en linkerlid gelijk zijn aan elkaar omwille van maximale uitlasting. Het aan-

Page 89: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 66

7

tal beschikbare dagen is niets anders dan het totaal aantal dagen in een maand verminderd

met de stilstanden in die maand (zowel ingepland als door het model gepland) verminderd

met dagen die verloren gaan door omstellingen (laatste twee termen). Voor straat 5 vallen

deze laatste twee termen weg omdat daar geen omstellingen mogelijk zijn.

∀s ∈ {A1, A2},∀m :

p∈{p geproduceerd op s}

Qp,m

dagcapaciteitp

≤ #dm − dagenSs,m (7.50b)

Zoals reeds eerder uitgelegd, geldt voor A1 en A2 de gelijkheid niet, bovendien zijn hier ook

geen omstellingen en we verkrijgen voorwaarde 7.50b.

Voor de productiestraat van CD1 bestaat nog een andere restrictie die een beperking oplegt

voor de capaciteit, nl. (24) maximaal 100 (maxCapCD1) productiedagen mogelijk voor C +

D1 inclusief opstart en afstel omwille van personeelsbeperkingen (dit getal moet als variabele

kunnen ingegeven worden). We zien in voorwaarde 7.51 dat alle productiedagen, de afstel-

en opstartdagen en de omsteldagen voor een heel jaar samen kleiner moeten zijn dan het

maximum aantal dagen productie op straat CD1.

m

p∈{p geproduceerd op sCD1}

Qp,m

dagcapaciteitp

+ afstelsCD1 · SSsCD1,m + opstartsCD1 · ESsCD1,m

+∑

p∈{geproduceerd op sCD1}

(dagenOp · OSp,m) − verwDagenOs · SSsCD1,m

≤ maxCapCD1

(7.51)

7.11. Totale kost (2)

Nu de productiehoeveelheden, de voorraden, de tekorten en de omstellingen gedefinieerd

zijn, kunnen we meer in detail ingaan op de relatie tussen de kosten die hier allemaal met

gepaard gaan. Bij de totale kost is het de bedoeling dat aan volgende restricties wordt

voldaan:� (52) het gebonden kapitaal in de O-voorraad moet geoptimaliseerd (geminimaliseerd)

worden. De variabele productiekosten zijn in de tabel met variabelen weergegeven (deze

variabele productiekosten moeten als variabele kunnen ingegeven worden).� (65) het gebonden kapitaal in de gezamelijke L-, N- en M-voorraad moet geoptima-

liseerd (geminimaliseerd) worden. Hierbij moeten de omstelkosten en de capaciteits-

verliezen bij productomstellen ook in overweging genomen worden. Zie de variabele

productiekosten in de tabel in bijlage.

Page 90: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 67

7

� (85) het gebonden kapitaal in de gezamelijke F-, G-, H1-, H2-, H3-, I-, J- en K-

voorraad moet geoptimaliseerd (geminimaliseerd) worden. Hierbij moeten de omstel-

kosten en de capaciteitsverliezen bij productomstellen ook in overweging genomen wor-

den. Zie de variabele productiekosten in de tabel in bijlage.� (97) het gebonden kapitaal in de gezamelijke L-, F- en G-voorraad moet geoptimaliseerd

(geminimaliseerd) worden. Hierbij moeten de omstelkosten (omstel tussen G en F in

straat 1 alsook tussen L/c, F/c en G/c in de maalstraat) en de capaciteitsverliezen bij

productomstellen (in straat 1 en in de maalstraat) ook in overweging genomen worden.

Zie de variabele productiekosten in de tabel in bijlage.

De bijdrage van het gebonden kapitaal in de voorraadkost is reeds eerder uitgewerkt, maar

hoe dit in relatie staat met de andere kosten wordt hieronder besproken. Omstellingskosten

en voorraadkosten brengen een trade-off met zich mee, want langere productieruns geven,

grotere voorraden, maar minder omstelingen. Kortere productieruns geven kleinere voorra-

den, maar meer omstellingen. Het model zal dus die situatie bevoordelen waarbij de totale

kost geminimaliseerd wordt. Op deze manier is al voldaan aan Het gebonden kapitaal in de

voorraad moet geoptimaliseerd worden, hierbij moeten de omstelkosten in rekening worden

gebracht. Een tweede aspect dat nog in rekening moet gebracht worden, zijn de capaci-

teitsverliezen. De trade-off zet zich verder indien er te veel omstellingen worden ingepland,

want per omstelling verliest men een aantal productiedagen. Op deze manier kan de totale

hoeveelheid niet meer geproduceerd worden, kan men dus minder producten verkopen en is

er winstderving. Zodra er winstderving is, moeten er kosten voor de capaciteitsverliezen in

rekening gebracht worden. Het verlies dat men leidt, is per product gelijk aan het tekort

vermenigvuldigd met de marge. Deze tekortfactor hebben we in een voorgaand onderdeel

reeds behandeld. Dus we voldoen aan de trade-off: Het gebonden kapitaal in de voorraad

moet geoptimaliseerd worden. Hierbij moeten de omstelkosten en de capaciteitsverliezen ook

in overweging genomen worden. Samengevat zoekt het model dus de beste oplossing voor

volgende punten:� Zo weinig mogelijk voorraad, maar dan meer omstellingen.� Zo weinig mogelijk omstellingen, maar dan meer voorraad.� Geen capaciteitsverliezen, dus beperking op het aantal omstellingen

7.12. Voorwaarden in verband met Tank 3

Dit onderdeel bundelt verschillende voorwaarden die te maken hebben met tank 3. Naast

de reeds eerder gedefinieerde variabele V T3p,m definieren we nog de volgende variabelen:

Page 91: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 68

7

� PT3p,m :=

1, als Tank 3 toegewezen aan product p op het einde van maand m,

0, als Tank 3 toegewezen aan een ander product op het einde van maand m

De binaire variabelen corresponderend met V T3p,m� OST3m ∈ {0, 1, 2}: een omstel in tank 3, het aantal omstellingen in tank 3 in maand

m

Voorwaarden 7.52 leggen de relaties vast tussen V T3p,m en PT3p,m.

∀m :∑

p∈{mogelijke opslag in T3}

PT3p,m = 1 (7.52a)

∀m,∀p ∈ {mogelijke opslag in T3} : V T3p,m ≤ maxTank3p · PT3p,m (7.52b)

Voorwaarde 7.52b is noodzakelijk omwille van restricties 6 en 30:� (6) indien noodzakelijk is er extra 890 ton A2-stapelkapaciteit in tank 03 buiten de

C-, D1-, D2-, I-, J- en K-productiecampagnes (dit getal moet als variabele kunnen

ingegeven worden).� (30) maximaal 178 ton C- of D1-stapelcapaciteit in de tank 03.

Aangezien de tank ook slechts toegewezen mag worden aan A2 buiten een productierun van

C of D1, kunnen we een verband (7.53) uitdrukken tussen de stilstand van straat CD1 en de

toewijzing van A2 aan tank 3. In theorie zou ook zo een verband kunnen opgesteld worden

in de omgekeerde richting, dat indien er geen stilstand is, de tank toegewezen moet zijn aan

C of D1, maar omwille van de gelijkheid van 7.53 in combinatie met 7.52a is dit automatisch

in orde.

∀m :m∑

t=startM−1

(SSsCD1,t − ESsCD1,t) = PT3A2,m (7.53)

Voorwaarde 7.53 legde het verband vast tussn de CD1-productie en de A2-productie via

Tank 3. Voor de C- en D1-productie is ook nog een extra voorwaarde noodzakelijk. Bekijken

we figuur 7.10, dan herinner ik eraan dat in de eerste fase enkel maar schattingen worden

vastgelegd. In de veronderstelling dat er voldoende wordt geproduceerd van D1 in maand m

voor de hele productie van J en D2K in maand m is er nog capaciteit over op de CD1-straat.

Deze capaciteit wordt gebruikt voor C-productie. De I-productie start echter pas in maand

m + 1, wat betekent dat in heel de tussenperiode tank 3 eigenlijk moet toegewezen zijn

aan product C. We leggen in fase 1 nog niets over productiedagen vast, enkel op het einde

van de maand. In deze situatie zien we dat het model beslist om tank 3 toe te wijzen aan

product C op het einde van maand m, en niet aan product D1. Alle productie van D1 uit

maand m is perfect opgebruikt zodat tank 3 tegen het einde van de maand leeg is. Mits

Page 92: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 69

7

deze veronderstellingen is voldaan aan de eerder gevormde voorwaarden. Om deze situatie

op te lossen is er nood aan een voorwaarde die de toewijzing van tank 3 op het einde van

een maand verbiedt indien er een productierun bezig is die gebruik maakt van de andere

grondstof. In de situatie van figuur 7.10 mag er geen toewijzing van tank 3 aan product

C zijn op het einde van maand m aangezien er een productierun bezig is van D2K. We

schrijven voorwaarde 7.54.

Figuur 7.10.: Grafische voorstelling voor probleem in tank 3 bij C- of D1-productie

∀(p1, p2) ∈{(C,D2K), (C, J), (D1, I)},∀m :

PT3p1,m ≤ 1 −m∑

t=startM−1

(SPp2,t − EPp2,t)(7.54)

Omstel in tank 3 (7) 2 dagen reiniging van tank 03 te voorzien voor en nadat er A2 in

gestockeerd wordt (dit getal moet als variabele kunnen ingegeven worden).

Tussen C en D1 of omgekeerd wordt de tank niet gereinigd. Het enigste wat we weten is

welk product er zich op het eind van elke maand in de tank bevindt, aan de hand daarvan

bepalen we dan of er een omstel heeft plaats gevonden of niet. Onderstaande waarheidstabel

7.4 geeft de verschillende situaties weer.

Tabel 7.4.: Waarheidstabel in verband met de verschillende situaties voor omstel in tank 3

PT3A2,m−1 PT3A2,m PA2T3,m OST3m

1 0 - 1

0 1 - 1

0 0 0 0

0 0 1 2

1 1 - 0

In de eerste situatie gaat men over van A2 naar C of D1. Dit betekent dat de productie

van C of D1 moet gestart zijn of een stilstand moet beeindigd zijn (ESsCD1,m = 1). We

Page 93: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 70

7

schrijven volgende voorwaarde:

∀m : OST3m ≥ PT3A2,m−1 + ESsCD1,m − 1 (7.55a)

De tweede situatie betekent een overgang naar opslag van A2. Dit is enkel mogelijk als

straat CD1 begonnen is aan een stilstand: (SSsCD1,m = 1). Volgende voorwaarde voldoet

aan deze situatie en verbreekt de vorige situatie niet.

∀m : OST3m ≥ PT3A2,m + SSsCD1,m − 1 (7.55b)

In de derde en vierde situatie maken we een verdere opsplitsing. Op het begin en het einde

van de maand is de tank toegewezen aan C of D1. Tussendoor is het echter best mogelijk

dat de tank even aan A2 is toegewezen. Afhankelijk van de situatie is er dus geen omstel of

twee omstellingen in de maand. We maken een onderscheid in deze situatie door te kijken

of de productie van A2 via T3 in de maand m verschillend is van 0 en schrijven volgende

voorwaarde:

∀m : OST3m ≥ 2 · PPA2T3,m − PT3A2,m−1 − PT3A2,m (7.55c)

In de vijfde situatie is de tank in het begin en het einde van de maand toegewezen aan A2.

Het is theoretisch mogelijk om hiertussen de tank toe te wijzen aan C of D1, maar dan moet

straat CD1 eerst stoppen en later ook terug starten. Dit is echter een situatie die onmogelijk

is gemaakt bij de definitie van de stilstanden. Dus er zijn geen omstellingen mogelijk. We

voegen voor deze situatie nog een voorwaarde toe die deze relatie weergeeft:

∀m : PPA2T3,m + PT3A2,m−1 ≤ 2 − (SSsCD1,m + ESsCD1,m) (7.55d)

In de doelfunctie komt dan de volgende term:

+∑

m

OST3m · kostOT3 (7.56)

Capaciteitsbeperking tank 3 Het is niet mogelijk om in het begin van de maand van

een volledige volle tank A2 over te gaan naar een volle tank C op het eind van diezelfde

maand aangezien er tijd nodig is om de tank te legen en opnieuw te vullen. Er is dus een

capaciteitsbeperking voor de tank. Bekijken we figuur 7.11, dan zien we dat er zich drie

zones voordoen. De capaciteitsbeperking wordt dan eenvoudig geschreven als volgt:

∀m :∑

p∈{mogelijke opslag in T3}

(dagenLeegp,m + dagenTussenp,m + dagenV olp,m)

≤ #dm − dagenOsT3 · OST3m (7.57)

Page 94: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 71

7

Figuur 7.11.: Grafische voorstelling voor het opvullen en legen van Tank 3

dagenLeegp,m ∈ R+, dagenTussenp,m ∈ R

+ en dagenV olp,m ∈ R+ zijn dan drie nieuwe

variabelen die we op een correcte manier moeten definieren.

dagenLeegp,m is het aantal dagen nodig om de tank leeg te maken van niveau V T3p,m−1

naar 0. Ondertussen is het wel mogelijk dat er nog productie is van p tijdens het legen van

de tank.

∀p ∈ {C, D1},∀m : dagenLeegp,m ≥Qp,m

dagcapaciteitp− (1 − PT3p,m−1) · M (7.58a)

∀m : dagenLeegA2,m ≥QA2T3,m

dagcapaciteitA2− (1 − PT3A2,m−1) · M (7.58b)

Indien de tank niet toegewezen is aan het product, dan is er geen beperking voor dagenLeeg.

Indien de tank wel toegewezen is, dan weten we sowieso dat de tank een bepaalde tijd moet

toegewezen blijven aan dat product. Deze tijd moet groter zijn dan de productieduur van

het voorgaande product. Bijvoorbeeld C wordt nog 8 dagen geproduceerd, dat betekent dus

dat tank 3 zeker nog 8 dagen toegewezen is aan C. Dit wordt verkregen in vergelijking 7.58a

en 7.58b. Omgekeerd geldt net hetzelfde. Zolang er afname is uit de tank, weten we dat de

tank toegewezen moet zijn aan dat product. Bijvoorbeeld zolang er J en D2 productie is,

moet de tank toegewezen zijn aan C. Dit wordt geschreven in vergelijking 7.58c.

∀p ∈ {C, D1, A1},∀s,∀m :

dagenLeegp,m ≥∑

p′∈P ′

Qp′,m

dagcapaciteit′p

− (1 − PT3p,m−1) · M(7.58c)

Hierin bestaat het set P’ uit alle producten die vervaardigd worden uit product p via tank

3 van een en dezelfde straat s. Bijvoorbeeld NT3 en M6T3, beiden van straat 6 en beiden

vervaardigd uit A2 via T3.

dagenV olp,m is het aantal dagen nodig om de tank te vullen van 0 tot het niveau V T3p,m.

Ondertussen is het wel mogelijk dat er ook reeds verbruik is van p tijdens het vullen van de

tank.

∀p ∈ {C, D1},∀m : dagenV olp,m ≥Qp,m

dagcapaciteitp−(1−PT3p,m +PT3p,m−1) ·M (7.59a)

Page 95: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 72

7

∀m : dagenV olA2,m ≥QA2T3,m

dagcapaciteitA2− (1 − PT3A2,m + PT3p,m−1) · M (7.59b)

Hier geldt een analoge uitleg als bij dagenLeeg. De situatie waarbij zich doorheen heel

de maand slechts 1 product in de tank bevindt, wordt geteld bij zowel dagenVol als bij

dagenLeeg. Vandaar de extra term bij dagenVol op het einde om deze situatie dan toch niet

dubbel te tellen.

dagenTussenp,m is omwille van het tussentijds gebruik van de tank voor een ander product.

PT3p,m = PT3p,m−1 = 0

∀p ∈ {C, D1},∀m : dagenTussenp,m ≥Qp,m

dagcapaciteitp−(PT3p,m−1+PT3p,m)·M (7.60a)

∀m : dagenTussenA2,m ≥QA2T3,m

dagcapaciteitA2− (PT3A2,m−1 + PT3A2,m) · M (7.60b)

Hier geldt ook een analoge uitleg als bij dagenLeeg en dagenVol.

∀p ∈ {C, D1, A1},∀s,∀m : dagenTussenp,m ≥∑

p′∈P ′

Qp′,m

dagcapaciteit′p

−(PT3p,m−1+PT3p,m)·M

(7.60c)

7.13. Straat 3

Dit onderdeel bundelt een aantal voorwaarden specifiek voor productiestraat 3.

7.13.1. 70 ton D2

(73) D2 wordt uit D1 geproduceerd op straat 3. Er wordt telkens 70 ton D2 in tank 04

geproduceerd die daarna tot K omgezet wordt.

Een korte verduidelijking van deze restrictie: tijdens een K-campagne wordt er telkens

maximaal 70 ton D1 omgezet naar D2 dat opgeslagen wordt in tank 4. Deze D2 wordt dan

vervolgens omgezet naar K. Dit kan zich in 1 K-campagne meerdere malen na elkaar her-

halen. Zolang het maar geen sequenties zijn die groter zijn dan 70 ton, omdat de maximale

opslagcapaciteit van tank 4 beperkt is tot 70 ton. Sequenties kleiner dan 70 ton zijn ook

toegestaan. Een verduidelijking hiervan is te zien op figuur 7.12.

Figuur 7.12.: Grafische voorstelling ter verduidelijking restrictie 73

Page 96: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 73

7

Door gebruik te maken van D2K als 1 product in voorgaande onderdelen, is automatisch

voldaan aan het produceren van D2 en K in blok. Het probleem dat zich nu stelt is om de

correcte hoeveelheden van D2 en K te verdelen over de maanden. Zoals in figuur 7.12 te

zien is de tweede run van K verdeeld over de twee maanden, wat het probleem illustreert.

Indien dit vrijgelaten wordt, zal alle D2 naar het begin van de campagne geplaatst worden

en alle K naar het einde omwille van de voorraadkosten. De beperking van tank 4 zorgt

echter dat dit niet mogelijk is. Volgende voorwaarden worden daarom toegevoegd.

∀m : QD2,m + QK,m = QD2K,m (7.61a)

Voorwaarde 7.61a is eigenlijk het logische gevolg indien D2 en K samen worden genomen.

∀m : QD2,m = QK,m ≤QD2K,m

2+ M · (2 − SPD2K,m − EPD2K,m) (7.61b)

Indien de productierun van D2K start en stopt in dezelfde maand is de opsplitsing tussen

D2 en K zeer eenvoudig, namelijk de helft. Voorwaarde 7.61b is niet strikt noodzakelijk

maar zorgt wel voor een extra intelligentie.

∀m :

m∑

t=startM−1

QD2,t ≥

m∑

t=startM−1

QK,t (7.61c)

Uiteraard moet op elk moment de geproduceerde hoeveelheid van D2 groter zijn dan de

geproduceerde hoeveelheid van K, wat door voorwaarde 7.61c wordt vastgelegd.

∀m :

m∑

t=startM−1

QD2,t ≤

m∑

t=startM−1

QK,t + 70 ·

m∑

t=startM−1

(SPD2K,t − EPD2K,t) (7.61d)

Omgekeerd mag de geproduceerde hoeveelheid van D2 nooit de geproduceerde hoeveelheid

van K overschrijden met meer dan 70 ton, anders is tank 4 overbelast (7.61d). Indien er

geen productierun aan het lopen is van D2K, moet de geproduceerde hoeveelheid van D2

gelijk zijn aan die van K, wat verkregen wordt door de combinatie van 7.61c en 7.61d.

Ondanks deze vergelijkingen is het nog steeds mogelijk om D2 naar voor te brengen ten

voordele van de voorraadkosten van K. Bijvoorbeeld 90 ton D2 produceren in maand m

gevolgd door 20 ton K in maand m. Het verschil is niet groter dan 70 ton, dus aan voorgaande

restricties is voldaan, maar 90 ton D2 verbreekt wel de maximum voorraad van tank 4 op

een bepaald moment. Dus dit zou moeten worden 70 ton D2 in maand m, dan 70 ton K

verwerken in maand m en m + 1 om vervolgens pas de extra 20 ton D2 in maand m + 1 te

produceren. Om dit te verwezenlijken voeren we 3 extra binaire variabelen in: y70,m, y140,m

en y210,m. Onderstaande voorwaarden vervolledigen dit onderdeel.

∀m : y70,m + y140,m + y210,m ≤ 1 (7.61e)

Page 97: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 74

7

∀p ∈ {K, D2},∀m : 70 · y140,m + 140 · y210,m + 210 · (SPD2K,m − 1) ≤ Qp,m (7.61f)

∀p ∈ {K, D2},∀m : Qp,m ≤ 70·y70,m+140·y140,m+210·y210,m−210·(SPD2K,m−1) (7.61g)

De extra term met SP omdat deze vergelijking enkel moet gelden in de eerst maand van

de productierun in de veronderstelling dat een totale campagne van D2K nooit langer dan

1 maand kan duren.

7.13.2. J- en D2K-productie in blok

(74) de J- en K-productiecampagnes moeten telkens in blok (=aaneensluitend) gebeuren om-

dat ze uit een gemeenschappelijke grondstof nl. D1 geproduceerd worden.

Met in ons achterhoofd de vergelijkingen voor productieruns, waarbij er slechts 1 productie-

run van elk product per maand kan voorkomen schrijven we volgende vergelijkingen 7.62a

en 7.62b die er voor zorgen dat indien bijvoorbeeld de productie van J wordt gestopt in

maand m en er is nog geen D2K-productie voorgekomen, er een productierun van D2 wordt

gestart in diezelfde maand m. Het is echter wel nog mogelijk dat er tussen deze twee pro-

ducties nog andere producties voorkomen zoals te zien in figuur 7.13. De producties van

D2K en J voldoen aan de vergelijkingen 7.62a en 7.62b, maar toch zijn ze nog niet in blok

en het is ook niet mogelijk om ze in blok te plaatsen aangezien ze starten of eindigen in een

andere maand. Hiervoor hebben we nog andere vergelijkingen nodig: 7.62c en 7.62d. Deze

vergelijkingen stellen een NAND-functie voor. Indien beide sommen gelijk zijn aan 1, zoals

in de situatie van figuur 7.13, dan kan er geen productie starten van een ander product, met

andere woorden, de blokken worden verplicht om dan na elkaar te komen.

∀m :m∑

t=startM

(EPD2K,t − EPJ,t) ≤ SPJ,m (7.62a)

∀m :

m∑

t=startM

(EPJ,t − EPD2K,t) ≤ SPD2K,m (7.62b)

∀p ∈ {producten op s3\{D2, K, J}},∀m :

SPp,m ≤ 2 −m∑

t=startM

(EPD2K,t − EPJ,t) −m−1∑

t=startM−1

(SPD2K,t − SPJ,t) (7.62c)

Page 98: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 75

7

∀p ∈ {producten op s3\{D2, K, J}},∀m :

SPp,m ≤ 2 −

m∑

t=startM

(EPJ,t − EPD2K,t) −

m−1∑

t=startM−1

(SPJ,t − SPD2K,t) (7.62d)

Figuur 7.13.: Grafische voorstelling ter verduidelijking restrictie 74

7.13.3. Beperkt aantal productieruns per jaar� (76) maximum 1 I-productiecampagne per jaar (dit getal moet als variabele kunnen

ingegeven worden).� (77) maximum 4 J- en K-productiecampagnes per jaar (dit getal moet als variabele

kunnen ingegeven worden).

Definieren we het aantal productieruns afhankelijk van het product als volgende parameter:

APp. Dan kunnen deze twee restricties samen behandeld worden. Het totaal aantal produc-

tieruns die gestart worden en ook beeindigd worden, moet kleiner zijn dan het maximum

aantal productieruns: (∀p ∈ {I, D2K, J})

m

SPp,m ≤ APp (7.63a)

m

EPp,m ≤ APp (7.63b)

7.13.4. H123 in de winter

(84) 1 van de H1, H2 of H3 productiecampagnes moet in de koudere maanden (december tot

en met maart) geproduceerd worden omwille van de afvalwaterbehandelingskosten.

We definieren in de preproces-stap de koude maanden en krijgen vervolgens voorwaarde 7.64.

Hierbij wordt ook EP in rekening gebracht omdat het kan zijn dat de vorige productiemaand

ook een koude maand is, waarbij een productierun voor H123 gestart is die nog doorloopt

in de huidige planning.

m∈{Koude maanden}

(SPH123,m + EPH123,m ≥ 1 (7.64)

Page 99: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 76

7

7.13.5. Tank 3 leeg na productiecampagne

(31) Tijdens een I-/J-/D2-/K-productiecampagne wordt het geproduceerde C of D1 steeds

volledig opgebruikt, m.a.w. tot voorraad 0.

Het is dus niet de bedoeling om dagen op voorhand C en D1 te gaan produceren alvorens

dit verder te verwerken. Indien de tank beschikbaar is, slaagt men daar het liefst A2 in op.

I-productie

Er is slechts 1 productierun voor I per jaar. Het zou dus vrij zinloos zijn als tank 3 niet

helemaal leeg is na de productierun, want zo zou tank 3 voor de rest van het jaar niet

beschikbaar zijn voor andere producten. Aangezien we niet weten op welk moment de I-

productie stopt in een maand, kunnen we alleen eisen dat tank 3 niet meer toegewezen is

aan product C op het einde van de maand waarin de productierun van I stopt.

∀m : 1 − EPI,m ≥ PT3C,m (7.65)

Indien dus EPI,m = 1 dan moet PT3C,m = 0, dus de V T3C,m = 0 en de tank is niet meer

toegewezen aan C op het eind van de maand m. Indien EPI,m = 0 dan is PT3C,m vrij en

kan er op elk moment beslist worden of de tank opnieuw toegwezen wordt aan C of niet.

JD2K-productie

Maximaal 3 productieruns per jaar, in de veronderstelling dat deze verspreid zijn doorheen

het jaar, mogen we veronderstellen dat indien een productieblok eindigt in de maand m

tank 3 op het eind van die maand niet opnieuw toegewezen is aan D1. Zodat na de JD2K-

campagne de tank beschikbaar is voor andere producten. In theorie is dat wel mogelijk

indien twee productieblokken elkaar zeer dicht opvolgen. In praktijk veronderstel ik echter

dat dit niet mogelijk is. Dit is echter niet eenvoudig te vertalen naar 1 vergelijking zoals bij

product C het geval was.

Indien blok D2KJ afgesloten wordt in de maand m moet PT3D1,m = 0. Een blok is afgesloten

in de maand m als:

∑mt=startM (EPD2K,t − EPJ,t) = 0

EPD2K,m = 1 ∨ EPJ,m = 1

(7.66)

Dit is zonder invoeren van een extra variabele niet mogelijk om te modelleren. Het probleem

zit hem in de eerste voorwaarde van 7.66 waarvan het linkerlid zowel −1, 0 als 1 kan zijn.

Mits het gebruik van de absolute waarde van dit linkerlid, is het wel mogelijk om het

probleem te modelleren. Om de absolute waarde van een variabele te krijgen, maken we

Page 100: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 77

7

gebruik van de eerder vermelde vergelijkingen 7.43 die een getal schrijven als het verschil

van twee positieve getallen. De absolute waarde wordt dan de som van deze twee positieve

getallen:

|A| = A+ + A− (7.67)

Het probleem kan dan geschreven worden als:

∀m : 1 − PT3D1,m ≥ EPD2K,m −

m∑

t=startM

(EPD2K,t − EPJ,t)

(7.68a)

∀m : 1 − PT3D1,m ≥ EPJ,m −

m∑

t=startM

(EPD2K,t − EPJ,t)

(7.68b)

Indien we de eerder gevormde voorwaarden 7.66 invullen in de vergelijkingen 7.68 dan zien

we dat het resultaat is zoals we verwachtten.

7.14. Beginvoorwaarden

De initialisatie van de beginvoorwaarden vertrekkende van de resultaten in de huidige maand:� Initiele voorraad voor de producten p waarvoor dit nodig is:

initieleV oorraadp = Vp,startM−1 (7.69a)� Initiele voorraad van A2 in tank 1 en 2:

initieleTank12 = V T12A2,startM−1 (7.69b)� Initiele voorraad van D2 in tank 4:

initieleTank4 = V T4D2,startM−1 (7.69c)� Initiele voorraad van B in tank B:

initieleTankB = V TBB,startM−1 (7.69d)� Initiele voorraad van p ∈ {B, A2} in vaten en IBC’s:

initieleV IBCp = V V IBCp,startM−1 (7.69e)� Initiele voorraad van B in Container B:

initieleContB = V CB,startM−1 (7.69f)

Page 101: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 78

7

� Initiele voorraad van p ∈ {A2, C, D1} in tank 3:

initieleTank3p = V T3p,startM−1 (7.69g)� Aantal dagen stilstand op het einde van de vorige maand voor

s ∈ {s1, s3, s4, s5, s6, sA1, sA2, sCD1, sM}

initieleDagenSs = dagenSs,startM−1 (7.69h)� Of er een stilstand bezig is op het einde van de vorige maand voor

s ∈ {s1, s3, s4, s5, s6, sA1, sA2, sCD1, sM}

initieleSSs = SSs,startM−1 (7.69i)� De productiehoeveelheid waarmee de straat s geeindigd is in de vorige periode. s ∈

{s1, s3, s4, s5, s6, sA1, sA2, sCD1, sM}

∀p ∈ {geproduceerd op s}initieleQp = Qp,startM−1 (7.69j)� En indien de straat s ∈ {s1, s3, s4, s5, s6, sA1, sA2, sCD1, sM} in de vorige

periode nog bezig is aan een productierun:

∀p ∈ {geproduceerd op s}initieleSPp = SPp,startM−1 (7.69k)� Op het moment dat de planning start, zijn er uiteraard nog geen tekorten. Deze zitten

verwerkt in de werkelijke voorraadcijfers, die eventueel lager zijn dan de eis voor de

minimale voorraad.

∀p ∈ {producten die verkocht worden}Tp,startM−1 = 0 (7.69l)

7.15. Overige voorwaarden

7.15.1. Efficientie productie A1

Het betreft hier restrictie 10 versus restrictie 22-bis.� (10) de A1-productie loopt best op vollast met 3 straten. 83 dagen op 2/3-last t.o.v.

28 dagen afstel en 55 dagen op vollast levert 160,000 Euro besparing op (dit getal moet

als variabele kunnen ingegeven worden).� (22 bis) de A1-productie moet minimaal 8 maanden lopen op minstens 50% capaciteit

(het aantal maanden en de minimale capaciteit moeten als variabele kunnen ingegeven

worden).

Page 102: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 79

7

Vollast moet als volgt geınterpreteerd worden: de A1-installatie produceert tegen maxima-

le capaciteit van 116.7 ton. Dit kan men bekomen door er drie productiestraten op aan

te sluiten en de resterende capaciteit via A2 te verwerken. Of door twee productiestraten

aan te sluiten en weer de resterende capaciteit via A2 te verwerken. Of slechts 1 straat en

. . . Zolang er maar geproduceerd wordt tegen maximale capaciteit spreekt men van vollast.

Beide voorwaarden zijn niet eenvoudig te modelleren. We kunnen echter een zeer goede

benadering verkrijgen door de combinatie van volgende twee voorwaarden en een extra term

in de doelfunctie:

m

(#dm − dagenSsA1,m) ≥ 8 · 30 (7.70a)

Deze vergelijking eist dat er minstens 240 dagen productie is in installatie A1, het equivalent

van 8 maanden. Een deel van restrictie 22-bis is op deze manier reeds voldaan.

m

QA1,m ≥ 0.5 · 8 · 30 · dagcapaciteitA1 (7.70b)

Deze vergelijking stelt gewoon een minimum waarde voorop van de productiehoeveelheid

van A1 volgens restrictie 22 bis.

−160000

28·∑

m

dagenSsA1,m (7.70c)

Deze term is gelijk aan de eerder gegeven term 7.26.

De combinatie van 7.70 zou dus als effect moeten hebben dat de A1-installatie zoveel mogelijk

tegen vollast loopt, maar dat er toch minimaal 8 maanden productie is. Term 7.70c zal

er voor zorgen dat er zoveel mogelijk stilstanden worden ingepland. Echter nooit meer

stilstanden dan 4 maand (7.70a). Zo veel mogelijk stilstanden betekent ook dat de productie

zoveel mogelijk gegroepeerd wordt, ofte zoveel mogelijk productie op zo weinig mogelijk

dagen. Dus dit leidt benaderend tot zowel meer dan 50% capaciteit als tot zoveel mogelijk

dagen in vollast, waardoor restricties 10 en 22-bis bij benadering voldaan zijn.

7.15.2. Doorgeven van stilstanden� (33) de O-, F-, L- en M(in L)-producties kunnen alleen lopen als de E-installatie loopt.� (40) de H1-, H2-, H3-, L-, M(in L)- en O- en M(in L)-producties kunnen alleen lopen

als de AW1-installatie loopt.� (42) de N-productie kan alleen lopen als de AW2-installatie loopt.

In de preprocessing stap zijn deze vergelijkingen al eens aangehaald. Deze zijn gedeeltelijk

opgelost indien het mogelijk was om een stilstand van de ene productiestraat door te geven

Page 103: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 80

7

naar een stilstand van een andere productiestraat. Bijvoorbeeld voor restrictie 33, is de

stilstand van de E-installatie al volledig doorgegeven naar straat 5 in de preproces-stap.

Voor F is dat echter iets moeilijker, omdat een stilstand van E niet impliceert dat straat 1

moet stilliggen, want er is nog G-productie mogelijk. Voor deze situaties zoeken we hier een

oplossing. Het enigste wat dan mogelijk is in deze fase, is om de productieduur van F in

maand m te beperken tot maximaal het aantal dagen dat de E-installatie in werking is in

diezelfde maand. Voorwaarde 7.71a wordt hiervoor uitgeschreven. Een analoge redenering

kan gevolgd worden voor de H123-productie versus de AW1-installatie (vgl 7.71b) en de

N-productie versus de AW2-installatie (vgl. 7.71c).

∀m : QF,m ≤ (#dm − ingeplandeSsE,m) · dagcapaciteitF (7.71a)

∀m : QH123,m ≤ (#dm − ingeplandeSsAW1,m) · dagcapaciteitH123 (7.71b)

∀m : QN,m ≤ (#dm − ingeplandeSsAW2,m) · dagcapaciteitN (7.71c)

7.15.3. Minimum afvalwaterdebiet

(44) het minimale afvalwaterdebiet naar de AW2-installatie bedraagt 30 ton/uur. (minADebiet)

Dit betekent dat wanneer de AW2-installatie loopt, minstens die combinatie van producties

moet lopen waarbij het totale afvalwaterdebiet (zie kolom G uit de spreadsheet ’variabelen

productieplanning, 2e blad) groter is dan 30 ton/uur (dit getal moet als variabele kunnen

ingegeven worden).

Deze restrictie geldt altijd als de AW2-installatie in dienst is. Omwille van de bedrijfs-

zekerheid van deze installatie geldt deze restrictie het hele jaar door, behalve gedurende

de ingeplande stilstand van AW2 die ongeveer 2 weken duurt. We kunnen dus eenvoudig

voorwaarde 7.72 schrijven waarin PAfval die verzameling van producten p is waarvoor een

afvalwaterdebiet (ADebietp) geldt.

∀m :∑

p∈PAfval

(Qp,m

dagcapaciteitp· ADebietp) ≥ minADebiet · (#dm − ingeplandeSsAW2,m)

(7.72)

Voor de maanden waarin er geen stiltand is van AW2, is deze voorwaarde strikt geldig.

Voor de maanden waarbij er wel een stilstand is ingepland van A2, is deze voorwaarde te

zwak. Dan wordt het afvalwaterdebiet van de hele maand in rekening gebracht, terwijl de

vergelijking moet gelden voor slechts die dagen waarbij AW2 in werking is. Het linkerlid zal

dus veel sneller voldoen aan de voorwaarde. We negeren echter deze opmerking omdat het

Page 104: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 81

7

toch slechts voor een tweetal weken op een heel jaar een probleem vormt. In fase 2 wordt

er wel rekening met gehouden.

7.15.4. Maximum stilstand installatie 2

(45) de maximale duur voor een algemene productiestilstand van installatie 2 (F, G(in F),

G(in H1), H1, H2, H3, I, J, K, L, M(in L), O, N, M(in N)) is 8 weken omdat de AW3

installatie anders beschadigd wordt (dit getal moet als variabele kunnen ingegeven worden).

8 weken is net iets minder dan twee maand. Dus als er een hele maand geen productie is

geweest op installatie 2, moet er zeker productie zijn in de maand die daarop volgt.

∀m :∑

p∈{producten van installatie 2}

Pp,m+1 ≥ 1 −∑

p∈{producten van installatie 2}

Pp,m (7.73a)

We hebben hier ook nood aan een beginvoorwaarde. Indien installatie 2 in de vorige maand

langer dan 28 dagen stilstaat, moet er geproduceerd worden in de eerste maand van de

planning op installatie 2. In de preproces-stap definieren we een binaire variabele: pI die 1

is indien er moet geproduceerd worden in de eerste maand en 0 anders.

p∈{producten van installatie 2}

Pp,startM ≥ pI (7.73b)

7.15.5. Stilstand tijdens zomervakantie:

(48) tijdens de maanden juli en augustus moet straat 1 of straat 3 stilgelegd worden wegens

de personeelsbezetting.

Hierbij gelden twee mogelijkheden. Ofwel wordt dit op voorhand vastgelegd door het ma-

nagement en wordt dit ingegeven via de ingeplande stilstanden. Ofwel wordt er niet op

voorhand besloten welke straat er wanneer wordt stilgelegd en moet het model hiervoor

zorgen. In deze eerste fase is het onmogelijk om de stilstanden op deze twee straten reeds te

schedulen zodat er steeds 1 straat stilligt. Wat wel al kan gedaan worden, is ervoor zorgen

dat er genoeg stilstanddagen op beide straten worden ingepland, zodat de totale productie-

duur op beide straten samen kleiner is dan 30 dagen. Op deze wijze moet dan in fase 2 de

productie op correcte wijze worden gescheduled.

∀m ∈ {Zomermaanden} :

p∈{p geproduceerd op s1⋃

s3}

(⌈

Qp,m

dagcapaciteitp

+ dagenOp · OSp,m

)

≤ #dm(7.74)

Page 105: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 82

7

7.15.6. Voorkeur M-productie op straat 6

(62) preferentiele M-productie op straat 6. De rest moet op straat 4 geproduceerd worden

(dit moet als variabele kunnen ingegeven worden).

Anders verwoord houdt deze restrictie het volgende in: de eerste 2 jaar kan M alleen op

straat 6 geproduceerd worden omwille van het aanpassen van straat 4. Nadien beslist het

model waar product M het best wordt geproduceerd. We moeten dus de productie gelijk

stellen aan nul in de periode waarbij er nog geen M geproduceerd kan worden op straat

4. Indien we volgende parameters invoeren: SJM4 := het eerste jaar waarin M-productie

mogelijk is op straat 4 en SMM4 := de eerste maand in SJM4 waarin M-productie mogelijk

is op straat 4, dan stellen voorwaarden 7.75 de producties voor deze datum gelijk aan 0.

(startJ is naar analogie met startM het huidige jaar waarin de planning start.)

∀j ∈ {startJ, . . . , SJM4 − 2},∀m : QM4,m = 0 (7.75a)

Indien men het komende jaar helemaal nog geen M kan produceren op straat 4: voorwaarde

7.75a.

∀j ∈ {startJ, . . . , SJM4 − 1},∀m ∈ {startM, . . . , SMM4 + 12 − 1} : QM4,m = 0 (7.75b)

Indien er in de huidige jaargang nog geen M-productie op straat 4 is, maar wel al in de

volgende jaargang. Alle productiehoeveelheden van M op straat 4 voor deze maand gelijk

aan 0: voorwaarde 7.75b.

∀j ∈ {startJ, . . . , SJM4},∀m ∈ {startM, . . . , SMM4 − 1} : QM4,m = 0 (7.75c)

Indien in de huidige jaargang de productie van M wordt gestart op straat 4, enkel de maanden

ervoor nog beperken tot 0: voorwaarde 7.75c.

7.15.7. Energiekoppeling tussen straat 5 en 6

(63) N en M(in N) lopen best samen met O. Als N samen loopt met O, dan besparen we

875 Euro/dag t.o.v. als N loopt zonder O. Als M samen loopt met O, dan besparen we 1,225

Euro/dag t.o.v. als M loopt zonder O. (Deze beide getallen moeten als variabele kunnen

ingegeven worden.)

In eerste instantie willen we dat indien M loopt, O zoveel mogelijk op hetzelfde moment

loopt. Omdat de winst hierbij groter is dan bij N versus O. Indien in dezelfde maand mits

omstelling ook N geproduceerd wordt, willen we ook daarbij zoveel mogelijk O-productie

hebben. Een fictieve situatie is voorgesteld in figuur 7.14. Hierbij zou het dus het meest

Page 106: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 83

7

voordelig zijn om de O-productie zoveel mogelijk naar achteren in de maand te schedulen,

zodat die volledig met de M6-productie samenvalt. En we proberen dan ook nog zoveel

mogelijk van de N-productie ermee te laten samenvallen. Met deze figuur in het achterhoofd

zijn voorwaarden 7.76 eenvoudig te interpreteren.

Figuur 7.14.: Grafische voorstelling in verband met restrictie 63

∀m :QM6,m

dagcapaciteitM6−

QO,m

dagcapaciteitO≤ M6nietOm (7.76a)

Hierin voegen we een nieuwe variabele toe: M6nietOm ∈ R+ , die het aantal dagen weergeeft

waarop er meer M-productie is in de maand m dan O-productie. Indien groter dan 0 is het

onmogelijk om alle M-productie te coveren met O-productie en zijn we niet energie-efficient.

∀m :QN,m

dagcapaciteitN+

QM6,m

dagcapaciteitM6+

p∈{producten op straat 6}

dagenOp · OSp,m

− verwDagenOs6 · SSs6,m −QO,m

dagcapaciteitO≤ NnietOm

(7.76b)

Ook hier voegen we een nieuwe variabele in: NnietOm ∈ R+ . Bekijken we figuur 7.14 nauw-

keurig dan zien we dat deze variabele het aantal dagen zal weergeven waarbij de N-productie

nog gecovered is door O, nadat we zoveel mogelijk de M-productie en de tussenliggende stil-

stand coveren. Is deze variabele positief, dan produceren we niet energie-efficient en moet

er ook een penaltykost aangerekend worden.

Bij de te minimaliseren totale kost voegen we volgende term toe:

+∑

m

(875 · NnietOm + (1225 − 875) · M6nietOm) (7.77)

De penalty voor M6nietOm is het verschil, omdat deze dagen sowieso ook in de eerste term

reeds vervat zitten. Dus de totale penalty voor M6nietOm is nog steeds 1125 euro.

7.15.8. Voorkeur voor G-productie op straat 3

(70) preferentiele G-productie op straat 3. De rest moet op straat 1 geproduceerd worden

(dit moet als variabele kunnen ingegeven worden).

Page 107: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 84

7

Het product G kan nu reeds op beide productiestraten worden geproduceerd en wordt het

liefst op straat 3 geproduceerd. Indien straat 3 echter volgeboekt is, moet de rest van G op

straat 1 worden geproduceerd. We voeren een penaltyfactor in de doelfunctie in, die elk ton

G-productie via straat 1 bestraft. De totale kost wordt uitgebreid met volgende term:

+∑

m

QG1,m · varProductieKostG1 · kostFactorG (7.78)

Afhankelijk van de grootte van de kostfactor bestraffen we de productie van G op straat

1 meer of minder. Indien de factor kleiner dan 0 is, is het voordeliger om G op straat 1

te produceren. Indien kostFactorG = 0 dan is er geen voorkeur voor een bepaalde straat.

Indien de factor groter is dan 0, is het voordeliger om te produceren op straat 3.

7.15.9. Voorwaarden in verband met het moment van omstel� (88) een productomstel moet op maandag, dinsdag, woensdag of donderdag gebeuren.

Er mag geen wettelijke feestdag binnen deze dagen vallen.� (89) de productomstel van straat 1 en 3 mag niet gelijktijdig gebeuren omwille van de

personeelsbezetting.� (90) de productomstel van straat 4 en 6 mag niet gelijktijdig gebeuren omwille van de

personeelsbezetting.� (91) een productomstel van straat 1, 3, 4, 5 en 6 mag niet gelijktijdig gebeuren omwille

van de personeelsbezetting. Opgepast: het zou kunnen zijn dat deze voorwaarde in de

nabije toekomst komt te vervallen terwijl de twee vorige behouden blijven.� (96) een productomstel in de maalstraat moet op maandag, dinsdag, woensdag of don-

derdag gebeuren. Er mag geen wettelijke feestdag binnen deze dagen vallen.

In deze eerste fase kan er onmogelijk gezegd worden op welke dag een omstel zal plaatsvin-

den. We kunnen toch al een beperking opstellen die ons zal beschermen in de tweede fase

tegen infeasible schedules. In 1 maand zijn er ongeveer 4 weken, dus 16 dagen waarop een

omstel mag plaatsvinden. In de praktijk zullen dit meerdere dagen zijn, maar aangezien op

een sequentie van 4 mogelijke dagen voor een omstelling een omstel van 3 dagen sowieso een

verlies van 1 omsteldag betekent is 16 reeds een mooie beperking. Een productomstel van

straat 1 en 3 mag niet gelijktijdig gebeuren. Dit betekent dat ze op verschillende omstelda-

gen moeten voorkomen, dus het totaal aantal omsteldagen voor straat 1 en 3 in een maand

moet kleiner zijn dan 16. Het analoge geval geldt voor de andere restricties en we schrijven

voorwaarden 7.79.

Page 108: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 7. FASE 1: PLANNING 85

7

∀m :∑

p∈{geproduceerd op s1 of s3}

dagenOp · OSp,m ≤ 16 (7.79a)

∀m :∑

p∈{geproduceerd op s4 of s6}

dagenOp · OSp,m ≤ 16 (7.79b)

∀m :∑

p∈{geproduceerd op s1, s3, s4, s5 of s6}

dagenOp · OSp,m ≤ 16 (7.79c)

∀m :∑

p∈{geproduceerd op maalstraat}

dagenOp · OSp,m ≤ 16 (7.79d)

Hierbij horen wel enkele kritische opmerkingen. Ten eerste zullen deze beperkingen bijna

altijd voldaan zijn, want bijvoorbeeld op straat 4 en 6 zijn slechts twee producten mogelijk,

dus maximaal 1 omstelling per straat per maand, wat steeds kleiner is dan 16. Met andere

woorden ze beperken bijna niets. Ten tweede betekent nog niet dat door het aantal omstel-

dagen te beperken, deze omsteldagen ook perfect op het juiste moment zullen vallen. Dit

hangt af van de productiehoeveelheden van de producten op een straat. Een productierun

van 20 dagen eindigt misschien net op een vrijdag, wat dus zal leiden tot twee dagen wach-

ten alvorens men aan de omstelling kan beginnen. Bijgevolg zijn er twee dagen verlies. Nog

erger wordt het als de andere straat ook net op die vrijdag stopt met een productierun, dan

zou deze al meer dan een week moeten wachten alvorens de omstelling kan starten. Heel dit

probleem kan opgelost worden door bepaalde ranges voor een productierun vast te leggen

en de bijhorende productiehoeveelheid. Bijvoorbeeld een productierun met een omstelduur

van 2 dagen nadien die start op een vrijdag mag eindigen op elke maandag of dinsdag van

de komende weken. Zodat de omstelling op dinsdag, woensdag of donderdag onmiddellijk

kan afgehandeld worden. Dit vraagt echter zeer veel extra vergelijkingen en gaat dus eigen-

lijk de producties op het eerste niveau helemaal gaan plannen zodat het tweede niveau niet

meer nodig is. Extra vergelijkingen en de bijhorende onvermijdelijke extra variabelen zorgen

ook voor de noodzaak aan meer rekentijd, dus dit valt helemaal buiten de eerste fase. En

we zullen op dit moment vrede moeten nemen met het feit dat er grote problemen kunnen

ontstaan in de tweede fase door deze restricties.

Page 109: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

8Fase 2: Scheduling

IN dit hoofdstuk stellen we het wiskundige model op van de tweede fase. Zoals besproken

in hoofdstuk 4 dient deze fase om te kijken of de vooropgestelde schattingen ook mogelijk

zijn in de praktijk. Per maand wordt er getracht om deze geschatte productiehoeveelheden

in te plannen in de beschikbare tijd. In dit hoofdstuk wordt ongeveer dezelfde structuur

gevolgd als in hoofdstuk 7. Het gaat hierbij vooral om te bewijzen dat het mogelijk is om de

vooropgestelde schattingen in te plannen in de maand. De werkelijke planning in de maand

hoeft niet noodzakelijk gelijk te lopen met dit vooropgestelde schedule.

8.1. Inputvariabelen

We overlopen kort de notaties van de waarden van de variabelen die we uit de eerste fase

halen. Deze variabelen zijn vastgelegd voor de tweede fase en worden dus als parameters

behandeld.� m2: de maand waarvoor fase 2 wordt opgelost, de maand waarvoor de schedule wordt

gezocht.� ∆Dm2: Het aantal dagen in de maand m2 die vrij zijn van productie. Indien ∆D > 0,

dan zijn er productiedagen over voor maand m2, die doorgeschoven kunnen worden

naar maand m2 + 1. Indien ∆D < 0, dan zijn er in maand m2 dagen tekort voor

productie en dan zal zoals eerder gezien er een terugkoppeling naar de eerste fase

optreden.

86

Page 110: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 8. FASE 2: SCHEDULING 87

8

� #d2m2: het aantal dagen beschikbaar in maand m2 voor de tweede fase om de ge-

schatte hoeveelheden in te plannen. Dit is met inbegrip van de eventuele extra dagen

∆Dm2−1 die nog vrij waren van productie uit de vorige maand.� schatQp,m2: De schatting voor de productiehoeveelheid van product p in maand m2

bepaald door fase 1.� SPp: Binaire parameter die aanduidt of er in de maand m2 een productierun gestart

wordt van product p. Deze parameter wordt vastgelegd in fase 1.� EPp: Binaire parameter die aanduidt of er in de maand m2 een productierun beeindigd

wordt van product p. Deze parameter wordt vastgelegd in fase 1.� somSPEPs: Binaire parameter die aangeeft of er op straat s een productierun gaande

is op de overgang van maand m2−1 naar maand m2. Deze parameter komt rechtstreeks

voort uit fase 1.� SSs: Binaire parameter die aanduidt of er in de maand m2 een stilstand gestart wordt

op straat s. Deze parameter wordt vastgelegd in fase 1.� ESs: Binaire parameter die aanduidt of er in de maand m2 een stilstand beeindigd

wordt op straat s. Deze parameter wordt vastgelegd in fase 1.� somSSESs: Binaire parameter die aangeeft of er op straat s een stilstand gaande is

op de overgang van maand m2−1 naar maand m2. Deze parameter komt rechtstreeks

voort uit fase 1.� ingSs: Een set van dagen die voor maand m2 alle dagen vastlegt waarop een stilstand

is ingepland door het management op straat s.� initT12p: De initiele voorraad van product p op de eerste dag van de maand m2 in

tanks 1 en 2 bepaald door fase 1.� initT3p: De initiele voorraad van product p op de eerste dag van de maand m2 in

tank 3 bepaald door fase 1.� initT4p: De initiele voorraad van product p op de eerste dag van de maand m2 in

tank 4 bepaald door fase 1.� initTBp: De initiele voorraad van product p op de eerste dag van de maand m2 in

tank B bepaald door fase 1.� initV IBCp: De initiele voorraad van product p op de eerste dag van de maand m2 in

vaten en IBC’s bepaald door fase 1.

Page 111: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 8. FASE 2: SCHEDULING 88

8

� initCBp: De initiele voorraad van product p op de eerste dag van de maand m2 in

containters bepaald door fase 1.

Alle voorgaande parameters die betrekking hebben op m2, maar waarbij in de index niet

naar m2 verwezen wordt, worden bij elke iteratie naar de volgende maand voor fase 2 op de

correcte waarde geınitialiseerd.

We definieren ook nog de volgende verzamelingen van dagen die regelmatig gaan voorkomen

in het volgende hoofdstuk. De eerste dagen zijn die dagen van de voorbije maand, de laatste

dagen zijn die uit de huidige maand m2.� D12 := ∀d ∈ {1, . . . ,#d2m2−1 + #d2m}� D1 := ∀d ∈ {1, . . . ,#d2m2−1}� D2 := ∀d ∈ {#d2m2−1 + 1, . . . ,#d2m}

Door het gebruik van deze verzamelingen kunnen de voorwaarden op een eenvoudigere ma-

nier worden geschreven.

8.2. Beslissingsvariabelen

De belangrijkste beslissingsvariabelen die we gebruiken in fase 1 worden hieronder opgelijst.

We geven eerst nog twee opmerkingen vooraf. We zoeken de geschikte schedule voor maand

m2. Deze geschikte schedule kan alleen bepaald worden als we voor elke dag weten wat er

geproduceerd wordt. Alle variabelen komen daarom in 30-voud voor. Ten tweede wordt

de schedule voor maand m2 in zeer sterke mate beınvloed door de schedule van de maand

ervoor. Het ideale is dan dat we de volledige vorige maand ook ingeven als variabelen. Deze

worden door enkele restricties onmiddellijk vastgelegd op de waarden uit de vorige maand.� MSs: De makespan van straat s die de volledige productie van alle geschatte hoeveel-

heden uit fase 1 omvat.� totMS: De makespan van het volledige chemische proces voor maand m2, deze is

gelijk aan het maximum van MSs van die maand m2.� DPp,d ∈ {0, 1}: duidt aan of er productie is van product p op dag d of niet.� DQp,d ∈ Z+: variabele die de productiehoeveelheid aanduidt van product p op dag d.� Ss,d ∈ {0, 1}: Geeft aan of straat s stilstaat op dag d of niet. Inclusief de afstel- en

opstartdagen.� OMp1,p2,d ∈ {0, 1}: Geeft aan of er een omstel bezig is van product p1 naar product

p2 op dag d.

Page 112: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 8. FASE 2: SCHEDULING 89

8

8.3. Doelfunctie

Het doel van deze fase in verschillende vorige delen al uitgebreid aan bod gekomen. Wis-

kundig vertaalt zich dat door het minimaliseren van de totale makespan. Ik opteer er echter

voor om ook per straat de makespan te minimaliseren aangezien zoals eerder uitgelegd stil-

standen en omstellingen op het einde van de maand nog niet worden ingepland in deze

maand vermits ze afhankelijk zijn van de volgende maand. Deze dagen worden als vrije

dagen ingepland, zodat ze door de volgende maand indien noodzakelijk worden vastgelegd.

Als de makespan van de straten afzonderlijk niet wordt geminimaliseerd, is het mogelijk dat

er helemaal geen vrije dagen worden gepland op het einde van de maand, maar wel ergens

tussenin. Deze dagen kunnen dan onmogelijk dienen voor de volgende maand, waardoor dit

tot problemen kan leiden. Als resultaat krijgen we dan de volgende te minimaliseren functie:

Min : (totMS − #d2m2) · 1000 +∑

s

MSs (8.1)

In doelfunctie 8.1 is s ∈ {s1, s3, s4, s5, s6, sCD1, sM, sA1, sA2}. De factor 1000 bij de

eerste term is ingevoerd, omdat het eerste doel toch nog steeds is om de totale makespan

te minimaliseren ongeacht de makespan van de andere productiestraten. Elke dag dat de

totale productie van die maand langer duurt dan het aantal dagen beschikbaar in die maand

wordt bestraft. Elke dag die over is, wordt beloond, omdat deze dag in een latere maand

kan gebruikt worden om tekorten te compenseren.

8.4. Definitie van de makespan

Om in de doelfunctie de makespan te kunnen gebruiken moet deze op een correcte manier

gedefinieerd worden, vertrekkend van de variabelen die per dag aanduiden wat er gaande is.

Er zijn drie toestanden waarin een straat zich kan bevinden: productie, omstel of stilstand.

Op het einde van de maand voegen we daar een vierde toestand aan toe, namelijk de

ongebruikte vrije dagen. Deze vierde toestand is niet van belang voor de makespan aangezien

een vrije dag een dag is die kan opgevuld worden door producties uit de volgende maand. Op

elke dag is slechts 1 van deze toestanden mogelijk en we voeren daarom voorwaarde 8.2a toe

voor s ∈ {s1, s3, s4, s5, s6, sCD1, sM, sA1, sA2}. Hierin wordt geeist dat op elke dag

en voor elke straat slechts 1 toestand mogelijk is. Een kleine bemerking bij de definitie van

de dagen waarvoor deze vergelijking moet gelden. De notatie die hier gebruikt wordt, gaat

namelijk nog regelmatig terugkomen. Zoals eerder vermeld is D12 die verzameling van dagen

die in de vorige maand en de huidige maand voorkomen. Bijvoorbeeld de maand mei telt

31 dagen en de maand juni 30, dan zijn de indices als volgt verdeeld voor d: 1 tot en met 31

zijn de dagen van mei, 32 tot en met 61 zijn de dagen voor juni en daarbij voegen we nog 10

extra dagen, 62 tot en met 71. De dagen van mei zijn reeds volledig ingepland, de dagen van

juni proberen we nu in te plannen, maar het kan zijn dat de productieschattingen te groot

Page 113: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 8. FASE 2: SCHEDULING 90

8

zijn en dat er dagen tekort zijn. Vandaar de tien extra dagen om eventuele overschattingen

op te vangen. Indien deze dagen niet noodzakelijk zijn, dan zijn gewoon alle variabelen nul

en kunnen ze eenvoudig genegeerd worden.

∀s,∀d ∈ D12 ∪ 10 :∑

p∈{geproduceerd op s}

DPp,d +∑

(p1,p2)∈{omstellingen op s}

OMp1,p2,d + Ss,d ≤ 1 (8.2a)

Aangezien het niet de bedoeling is dat midden in een maand een dag helemaal niet toege-

wezen wordt aan een bepaalde toestand, zorgt voorwaarde 8.2b ervoor dat alle producties,

stilstanden en omstellingen aaneengesloten voorkomen. Indien op een bepaalde dag er geen

toewijzing van de straat aan een toestand voorkomt, dan kan er onmogelijk op de volgende

dagen wel een toewijzing voorkomen. We eisen dus dat alle onbepaalde dagen op het einde

van de maand vallen en dat de straat voordien steeds in een bepaalde toestand is.

∀s,∀d ∈ D2 ∪ 9 :∑

p∈{geproduceerd op s}

DPp,d +∑

(p1,p2)∈{omstellingen op s}

OMp1,p2,d + Ss,d

≥∑

p∈{geproduceerd op s}

DPp,d+1 +∑

(p1,p2)∈{omstellingen op s}

OMp1,p2,d+1 + Ss,d+1

(8.2b)

We bemerken bij voorwaarde 8.2b dat het aantal dagen beperkt is tot enkel de tweede

maand (dagen 32-71 zoals in het voorbeeld aangehaald), aangezien bij de vorige maand op

het einde vrije dagen kunnen voorkomen op een straat en de ongelijkheid dan niet geldt.

Voor de overgang van de vorige maand naar de huidige maand voegen we daarom voorwaarde

8.2c toe (voor dag 31 uit het voorbeeld). initV rijs,d ∈ {0, 1} is een parameter die gelijk is

aan 0 indien dag d uit de vorige maand toegewezen is aan een stilstand, omstel of productie

en 1 indien deze dag nog vrij beschikbaar is.

∀s, d = #d2m2−1 :∑

p∈{geproduceerd op s}

DPp,d +∑

(p1,p2)∈{omstellingen op s}

OMp1,p2,d + Ss,d + initV rijs,d

≥∑

p∈{geproduceerd op s}

DPp,d+1 +∑

(p1,p2)∈{omstellingen op s}

OMp1,p2,d+1 + Ss,d+1

(8.2c)

In de wetenschap dat op elke dag slechts 1 toestand kan voorkomen en dat deze toestanden

aaneensluitend voorkomen, kan de makespan zeer eenvoudig bepaald worden met voorwaarde

8.2d.

Page 114: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 8. FASE 2: SCHEDULING 91

8

∀s : MSs =∑

d∈{D2∪10}

(∑

p∈{geproduceerd op s}

DPp,d +∑

(p1,p2)∈{omstellingen op s}

OMp1,p2,d + Ss,d)(8.2d)

De totale makespan is per definitie groter dan de makespan voor elke straat afzonderlijk.

We schrijven voorwaarde 8.2e.

∀s : totMS ≥ MSs (8.2e)

8.5. Voldoen aan schattingen uit fase 1

Uiteraard is het de bedoeling dat de geproduceerde hoeveelheden uit fase 2 voldoen aan

de schattingen die gemaakt zijn in fase 1. Het aantal dagen dat er toegewezen wordt aan

een bepaald product p moet dus groter zijn dan het aantal dagen dat er noodzakelijk is

om de geschatte productiehoeveelheid van p te produceren. Indien het verband tussen DP

en DQ wordt gedefinieerd, kan bovenstaande voorwaarde eenvoudig worden uitgedrukt in

voorwaarde 8.3b. Indien een dag d toegewezen is aan een product p ofte DPp,d = 1, dan kan

de productiehoeveelheid op die dag DQp,d varieren tussen 0 en de maximale dagcapaciteit.

We maken hierbij de bemerking dat volgens restrictie 49 alle productiestraten op vollast

moeten lopen. De eis zou bijgevolg nog strikter moeten geformuleerd worden: als DPp,d = 1

dan moet DQp,d gelijk zijn aan de dagcapaciteit. Aangezien het ook mogelijk is dat een

straat een dag moet wachten alvorens zijn omstelling begint, is deze eis niet altijd geldig,

want op deze dag is de straat toegewezen aan het product, maar er wordt niet geproduceerd.

Bijgevolg gebruiken we toch de vereenvoudigde voorwaarde. Indien DPp,d = 0, dan moet

DQp,d = 0. Dit wordt vertaald in voorwaarde 8.3a.

∀p,∀d ∈ {D2 ∪ 10} : DQp,d ≤ DPp,d · dagcapp (8.3a)

∀p :∑

d∈{D2∪10}

DQp,d ≥ schatQp,m2 (8.3b)

In theorie moet er een gelijkheidsteken staan in voorwaarde 8.3b, omdat overproductie

zeker niet de bedoeling is. Voor de eenvoud van het programma mag daar zonder verlies

van algemeenheid een ongelijkheid van gemaakt worden. Te veel productie wordt toch

niet bevorderd omdat dan de makespan ook zal vergroten, wat tegengegaan wordt door de

doelfunctie.

Voor de B-productie geldt vergelijking 8.3a niet, maar is er wel een andere eis voor de pro-

ductiehoeveelheid volgens restrictie (17) B is een nevenproduct uit de A1-productie en kan

Page 115: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 8. FASE 2: SCHEDULING 92

8

dus enkel geproduceerd worden als de A1-productie loopt. De B-productie ’voor verkoop’ is

minimaal 3.5% en maximaal 7.0% van het A1-productievolume (deze grenzen moeten als va-

riabele kunnen ingegeven worden). Dit wordt onmiddelijk vertaald in volgende voorwaarden

8.3c en 8.3d.

∀d ∈ {D2 ∪ 10} : DQB,d ≥ 0.035 · DQA1,d (8.3c)

∀d ∈ {D2 ∪ 10} : DQB,d ≤ 0.07 · DQA1,d (8.3d)

8.6. Flowvoorwaarden

Per dag moet ook de flow tussen de producten onderling gewaarborgd blijven of tussen de

opsplitsingen van de producten zoals uiteengezet in paragraaf 7.2. We beginnen met de flow

tussen de producten onderling.

8.6.1. Flow A1

Er is geen tussenopslag mogelijk van A1, wat betekent dat de productie van A1 op een dag

gelijk moet zijn aan het verbruikte A1 op diezelfde dag. Simpel uitgedrukt naar analogie met

voorwaarde 7.9a uit fase 1 krijgen we voorwaarde 8.4. We herhalen dat het set PA1 bestaat

uit al die producten die rechtstreeks uit A1 vervaardigd kunnen worden, A2 uitgezonderd.

Ook hier weer de opmerking dat in theorie het gelijkheidsteken moet gelden, maar zonder

verlies van algemeenheid kunnen we dit vervangen door de ongelijkheid. Het doel van deze

fase is om aan te tonen dat de geschatte productie ook werkelijk mogelijk is om in te plannen

in deze maand. Meer produceren op dezelfde tijd is geen probleem, in de praktijk zal er echter

geen meerproductie voorkomen. We verkiezen de ongelijkheid omdat deze wiskundig gezien

minder strikt is dan de gelijkheid en omdat er dan sneller een oplossing wordt gevonden. Te

veel meerproductie zorgt toch voor een langere makespan wat we zeker niet wensen.

∀d ∈ {D2 ∪ 10} : DQA1,d ≥ verbruikA2,A1 · DQA2,d +∑

p∈PA1

verbruikp,A1 · DQp,d (8.4)

Page 116: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 8. FASE 2: SCHEDULING 93

8

8.6.2. Flow A2

Volledig naar analogie met voorwaarden 7.4 en 7.5 uit fase 1 worden hier de voorwaarden

8.5 opgesteld voor de in- en uitgaande flow van A2 op 1 dag.

∀d ∈ {D2 ∪ 10} : DQA2,d + QV T12A2,d−1 + QV T3A2,d−1 + QV V IBCA2,d−1 ≥∑

p∈PA2

(verbruikp,A2 · DQp,d) +∑

p∈PA1vA2

(verbruikp,A2 · DQp,d)

+ QV T12A2,d + QV T3A2,d + QV V IBCA2,d + DV raagA2,d (8.5a)

We zien hier enkele nieuwe variabelen opduiken. QV T12p,d , QV T3p,d en QV V IBCp,d

geven logischerwijze de voorraad van het product p op het einde van dag d in desbetreffende

opslagplaats. DV raagA2,d geeft de vraag per dag van A2 weer. De verdeling van deze

vraag over de maand is niet geweten, enkel de totale vraag op het einde van de maand. We

laten het model volledig vrij om te bepalen wanneer hij aan de vraag voldoet, zolang op

het einde van de maand de volledige vraag voor die maand voldaan is, zoals geschreven in

voorwaarde 8.5b. Uiteraard moeten bij deze vraag de tekorten in rekening gebracht worden,

een betere uitleg zou zijn dat de totale vraag op het einde van de maand gelijk moet zijn

aan de geschatte vraag uit fase 1 waarin wel tekorten zijn opgenomen. schatTA2,m geeft de

schatting weer van de tekorten voor de vraag naar A2 uit fase 1 voor maand m.

d∈{D2∪10}

DV raagA2,d ≥ vraagA2,m − schatTA2,m2 + schatTA2,m2−1 (8.5b)

De opsplitsing per tank:

∀d ∈ {D2 ∪ 10} : DQA2T12,d + QV T12A2,d−1 + QV V IBCA2,d−1 ≥∑

p∈PA2T12

(verbruikp,A2 · DQp,d) +∑

p∈PA1vA2T12

(verbruikp,A2 · DQp,d)+

QV T12A2,d + QV V IBCA2,d + DV raagA2,d (8.5c)

∀d ∈ {D2 ∪ 10} : DQA2T3,d + QV T3A2,d−1 ≥∑

p∈PA2T3

(verbruikp,A2 · DQp,d) +∑

p∈PA1vA2T3

(verbruikp,A2 · DQp,d) + QV T3A2,d (8.5d)

Ter herhaling: PA1vA2T3 is het set van producten die normaal rechtstreeks uit A1 worden

geproduceerd, maar nu via A2 en via tank 3.

∀d ∈ {D2 ∪ 10} : DQA2T12,d + DQA2T3,d = DQA2,d (8.5e)

Voorwaarde 8.5e zorgt voor de correcte opsplitsing van de A2-productie over de tanken 1, 2

en 3.

Page 117: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 8. FASE 2: SCHEDULING 94

8

8.6.3. Flow tank 3 en 4

In navolging van vergelijkingen 8.5c en 8.5d kunnen identieke flowvergelijkingen opgesteld

worden voor de andere producten opgeslagen in tank 3 (vgl. 8.6a) of tank 4 (8.6b). Hierin

is QV T4p,d ∈ R+ de hoeveelheid van product p opgeslagen in tank 4 op het einde van dag

d.

∀d ∈ {D2 ∪ 10}, p ∈ {C, D1} :

DQp,d + QV T3p,d−1 = QV T3p,d +∑

p2∈{geproduceerduitp}

verbruikp2,p · DQp2,d(8.6a)

∀d ∈ {D2 ∪ 10} :

DQD2,d + QV T4D2,d−1 = QV T4D2,d + verbruikK,D2 · DQK,d

(8.6b)

8.6.4. Flow tussen rechtstreekse producten

Als voorbeeld nemen we de maalstraat: indien FC geproduceerd wordt op de maalstraat,

moet ook F geproduceerd worden op straat 1. Deze eis geldt voor alle producten opgesomd

in tabel 8.1.

Tabel 8.1.: Relaties tussen rechtstreekse producten. vb: productie van FC vereist productie van F

Product (p1) Voorganger (p2) Product (p1) Voorganger (p2)

FC → F B → A1

GC → G A1 → B

LC → L A2 → A1

Fv1 → A1 Fv2 → 1-A1

G1v1 → A1 G1v2 → 1-A1

G3v1 → A1 G3v2 → 1-A1

H1v1 → A1 H1v2 → 1-A1

H2v1 → A1 H2v2 → 1-A1

H3v1 → A1 H3v2 → 1-A1

Lv1 → A1 Lv2 → 1-A1

M4v1 → A1 M4v2 → 1-A1

Voorwaarde 8.7 legt dit verband vast in een wiskundige vorm.

∀(p1, p2) ∈ tabel 8.1,∀d ∈ {D2 ∪ 10} : DPp1,d ≤ DPp2,d (8.7)

Aangezien er een 1 op 1 relatie is tussen A1 en B zijn beide verbanden vervat in voorgaande

vergelijking. Voor de producten die via 2 gemaakt worden, leggen we het verband vast

Page 118: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 8. FASE 2: SCHEDULING 95

8

waarbij productie via A2 enkel mogelijk is indien tank A1 stilstaat. In het rechterlid van

voorwaarde 8.7 schrijven we dan 1 − DPp2,d.

8.6.5. Flow tussen deelproducten

Net zoals in paragraaf 7.2 uiteengezet, moet ook in fase 2 gezorgd worden dat de coherentie

tussen de verschillende delen van een product behouden blijft. Enerzijds hebben we produc-

ten die elkaar gaan uitsluiten, een voorbeeld hiervan is dat productie van F via A1 nooit

kan samenvallen met productie van F via A2. Indien 1 van de twee producties 1 is, dan

moet ook F gelijk zijn aan 1, indien ze beide nul zijn, dan is ook F gelijk aan 0. Deze relatie

wordt uitgedrukt in voorwaarde 8.8. Waarin p gelijk is aan F, p1 gelijk aan Fv1 en p2 gelijk

aan Fv2 uit het gegeven voorbeeld. Naast de opsplitsing tussen productie via A1 en A2

geldt deze relatie ook voor opsplitsing tussen productie over T12 en T3. Op een dag kan er

bijvoorbeeld geen productie zijn van N via T3 en via T12.

∀(p1, p2, p) ∈ exclusieve producten,∀d ∈ {D2 ∪ 10} : DPp1,d + DPp2,d = DPp,d (8.8)

Daarnaast hebben we ook producten die opgesplitst worden, maar waarbij geen exclusiviteit

in de productie vereist is. Een productie van G kan gelijkertijd gebeuren op straat 1 en op

straat 3. Hier geldt de voorgaande voorwaarde niet, maar kan eenzelfde voorwaarde gebruikt

worden als 8.7.

Niet alleen voor de binaire variabelen moeten we zorgen voor een correcte opsplitsing, ook

bij de gehele variabelen is er nood aan enkele voorwaarden. Indien 1 product p opgesplitst

wordt in twee p1 en p2 voegen we voorwaarde 8.9 toe.

∀(p1, p2, p) ∈ {opgesplitste producten},∀d ∈ {D2 ∪ 10} : DQp1,d + DQp2,d = DQp,d (8.9)

8.7. Voorraden

8.7.1. Minimum voorraden

Het is niet van belang om de restricties voor de minimum voorwaarden op het niveau van

een dag op te stellen. De productiehoeveelheden voor deze maand zijn reeds vastgelegd

door fase 1 en de minimumvoorraad op het einde van de maand is daarom gewaarborgd.

Willen we bovendien per dag de evolutie van de voorraad gaan uitzetten, dan hebben we

ook de distributie van de vraag doorheen de maand nodig, welke niet gegeven is. Fysisch

gezien zal er zich geen probleem vormen indien de voorraad op een bepaalde dag onder

het minimumniveau zakt, er wordt sowieso op een latere dag meer geproduceerd zodat

op het einde van de maand het minimumlevel opnieuw bereikt wordt. Dit geldt zowel

Page 119: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 8. FASE 2: SCHEDULING 96

8

voor de voorraden van de eindproducten als voor de voorraden in de tanken. De analoge

uitleg geldt ook voor de maximumvoorraad van de eindproducten. In het geval van de

maximumvoorraad in de tanken is de capaciteit wel beperkt en is het noodzakelijk om per

dag wel een voorwaarde op te leggen zodat alles opgeslagen kan worden.

8.7.2. Maximum voorraden tanken

De restricties in verband met de voorraden gelden ook hier. Op elke dag mag de maximale

voorraad van een product nooit de maximaal toegelaten waarde overschrijden. We schrijven

hiervoor de voorwaarden 8.10.

∀d ∈ {D2 ∪ 10} : QV T12A2,d ≤ maxTank12A2 (8.10a)

Voorwaarde 8.10a beperkt de voorraad in tanks 1 en 2 op het einde van elke dag d voor

product p. Eenzelfde voorwaarde kan geschreven worden voor tank 3, maar we komen hier

uitgebreider op terug in paragraaf 8.8 die alle voorwaarden van tank 3 bekijkt.

Voor de voorraden van B zijn er ook enkele eisen die worden gemodelleerd zoals in de

vergelijkingen 8.10b, 8.10c en 8.10d.

∀d ∈ {D2 ∪ 10} : QV V IBCB,d ≤ maxV atenEnIBCB (8.10b)

∀d ∈ {D2 ∪ 10} : QV TBB,d ≤ maxTankB (8.10c)

∀d ∈ {D2 ∪ 10} : QV CBB,d ≤ maxContB (8.10d)

Hierin zijn QV TBB,d ∈ R+ en QV CBB,d ∈ R

+ de voorraden van product B op het einde

van dag d respectievelijk in tank B en de tankcontainers voor B.

Voor de voorraad in vaten en IBC’s van product A2 wordt vergelijking 8.10e opgesteld in een

iets andere vorm dan voorgaande voorwaarden aangezien de maximumvoorraad nu wordt

uitgedrukt in voorraaddagen in plaats van rechtstreeks in ton. totV raagp geeft de totale

voorspelde vraag van het product p voor het komende jaar.

∀d ∈ {D2 ∪ 10} : QV V IBCA2,d ≤ maxV atenEnIBCA2 ·totV raagA2

365(8.10e)

8.8. Voorwaarden in verband met Tank 3 en tank 4

8.8.1. Tank 3

Toewijzing We starten eerst met de definitie van enkele beslissingsvariabelen. QV T3p,d is

reeds gedefinieerd en gaf de voorraad weer van product p op het einde van dag d in tank 3.

Page 120: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 8. FASE 2: SCHEDULING 97

8

Een product dat opgeslagen wordt in een tank, kan enkel gebeuren als deze tank toegewezen

is aan dit product. Daarom voegen we de binaire variabele PV T3p,d ∈ {0, 1} in. Deze

variabele bepaalt voor elke dag d of tank 3 al dan niet toegewezen is aan product p. Dit is

niet de binaire variant van QV T3p,d, want de ene geldt voor het einde van de dag, de andere

voor een hele dag.

Indien tank 3 overgaat van het ene product op het andere is er nood aan een omstelling.

Om deze toestand te karakteriseren, gebruiken we de binaire variabele OMT3d. Deze is 1

indien er een omstelling in tank 3 plaatsvindt op dag d, anders is hij 0.

Op elke dag kan tank 3 zich slechts in 1 toestand bevinden. Ofwel is de tank toegewezen

aan een product ofwel bevindt de tank zich in een omstelling. Dit wordt uitgedrukt in

voorwaarde 8.11a.

∀d ∈ {D2 ∪ 10} :∑

p∈{opslag in tank 3}

PV T3p,d + OMT3d ≤ 1 (8.11a)

Voorraad Door gebruik te maken van deze variabelen kunnen de voorwaarden in verband

met de voorraden en de capaciteit van tank 3 eenvoudig worden uitgedrukt. Er mag zich

voorraad van een product p op het einde van dag d in tank 3 bevinden indien de tank op dag

d toegewezen is aan dit product en indien de tank op dag d + 1 ook nog steeds toegewezen

is aan het product. Bovendien is de maximale voorraad in de tank ook beperkt. Dit wordt

wiskundig vertaald in vergelijkingen 8.11b en 8.11c.

∀p ∈ {opslag in tank 3},∀d ∈ {D2 ∪ 10} : QV T3p,d ≤ maxTank3p · PV T3p,d (8.11b)

∀p ∈ {opslag in tank 3},∀d ∈ {D2 ∪ 10} : QV T3p,d ≤ maxTank3p · PV T3p,d+1 (8.11c)

Flow Ook in verband met de flow kunnen we hier enkele voorwaarden toevoegen. Indien er

bijvoorbeeld productie is van C op dag d, dan moet tank 3 toegewezen zijn aan het product

C op dag d: DPC,d = 1 ⇒ PV T3C,d = 1. Indien er productie is van I op dag d, dan moet

tank 3 toegewezen zijn aan het product C op dag d: DPI,d = 1 ⇒ PV T3C,d = 1. Hetzelfde

geldt voor volgende combinaties:

flowTank := {(C,C), (I, C), (D1,D1), (J,D1), (D2,D1), (A2T 3, A2), (Fv2T3, A2), . . .}. De-

ze relaties worden verkregen door voorwaarde 8.11d.

∀(p, pTank) ∈ flowTank,∀d ∈ {D2 ∪ 10} : DPp,d ≤ PV T3pTank,d (8.11d)

Page 121: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 8. FASE 2: SCHEDULING 98

8

Omstelling Een omstelling van 2 dagen vindt plaats indien er wordt overgegaan van A2

naar CD1 of omgekeerd. Indien de toewijzing van tank 3 voor het product A2 wisselt van

0 naar 1 of van 1 naar 0, weten we dus dat er een ander product wordt opgeslagen. Op

dat moment kunnen we de variabele OM verplichten om 1 te zijn. We onderscheiden twee

situaties. In de eerste situatie 8.12a is op dag d de tank nog toegewezen aan A2, maar op

dag d + 1 niet meer. Bijgevolg moet er dan een omstel plaatsvinden op dag d + 1 en dag

d + 2. De tweede situatie 8.12b leert ons dat de tank op dag d niet toegewezen is aan A2,

maar op dag d + 1 wel. Er moet hiervoor dus een omstelling hebben plaatsgevonden. Beide

situaties kunnen eenvoudig uitgedrukt worden in vier voorwaarden van de vorm 8.12c zoals

hier uitgeschreven voor het eerste deel van de eerste situatie.

PV T3A2,d = 1 ∧ PV T3A2,d+1 = 0

⇒ OMT3d+1 = 1, OMT3d+2 = 1(8.12a)

PV T3A2,d = 0 ∧ PV T3A2,d+1 = 1

⇒ OMT3d = 1, OMT3d−1 = 1(8.12b)

∀d ∈ {D2 ∪ 9} : OMT3d+1 ≥ PV T3A2,d − PV T3A2,d+1 (8.12c)

Bij het uitschrijven van de verzamelingen waarvoor d geldt, moet opgelet worden dat er

geen indices voorkomen uit de vorige maand D1. Dit omdat we ervoor gekozen hebben om

op het einde van de vorige maand nog geen omstel vast te leggen indien we niet weten wat

erna komt. In plaats daarvan werden er vrije dagen ingevoerd die beschikbaar zijn voor een

stilstand of voor een omstel. Afhankelijk van hoe de vorige maand eindigt met tank 3, moet

er in het begin van deze maand een omstelling starten of afgewerkt worden. We voegen

daarom een parameter vrijT3p,d in, die de toestand van de laatste twee dagen uit de vorige

maand van tank 3 vastlegt ∀p ∈ {A2, CD1}. Op elke dag d is maximaal een parameter

gelijk aan 1.

vrijT3p,d :=

1, als tank 3 geen product p bevat op dag d

0, als tank 3 wel product p bevat op dag d(8.13)

Indien voor een bepaalde p de parameter vrijT3 = 1 voor de laatste twee dagen van de vorige

maand, dan kan op de eerste dag van de huidige maand zich elk product in de tank bevinden.

De laatste twee dagen van de vorige maand kunnen dan voor een omstel dienen. Indien voor

de voorlaatste dag vrijT3p,vl = 0 en voor de laatste dag vrijT3p,l = 1, dan is afhankelijk

van het product dat zich in de tank bevindt op de voorlaatste dag een omstel vereist op

de laatste dag van de vorige maand en op de eerste dag van de huidige maand indien men

overgaat naar opslag van een ander product ofwel kan hetzelfde product op de eerste dag

Page 122: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 8. FASE 2: SCHEDULING 99

8

opnieuw opgeslagen worden en staat de tank gewoon 1 dag leeg. Een analoge redenering als

de tank de laatste 2 dagen van de maand bezet is. Afhankelijk van het product is er een

omstel noodzakelijk de eerste twee dagen of kan hetzelfde product opgeslagen worden. Dit

vertaalt zich in onderstaande voorwaarden 8.14, waarbij een vereiste omstel hetzelfde is als

geen productie mogelijk.

∀p ∈ {C, D1} : DQp,eerste dag ≤ vrijT3A2,vl (8.14a)

Indien op de voorlaatste dag van de vorige maand de tank toegewezen is aan A2, dan kan

er op de eerste dag van de huidige maand nooit productie zijn van C of D1 omdat tank 3

nog niet vrij is.

∀p ∈ {C, D1} : DQp,tweede dag ≤ vrijT3A2,l (8.14b)

Zelfde verhaal indien ook op de laatste dag van de vorige maand de tank toegewezen is aan

A2, dan kan er op de tweede dag van de huidige maand onmogelijk productie zijn van C of

D1.

Indien in 8.14 C, D1 omgewisseld wordt met A2, krijgen we de vergelijkingen waarbij er

beperkingen worden opgelegd voor de productie van A2 op de eerste twee dagen van de

maand.

8.8.2. Tank 4

De voorwaarden in verband met de maximale voorraad en flow zoals opgesteld voor tank 3,

gelden ook voor tank 4 mits het invoeren van volgende beslissingsvariabelen: QV T4p,d ∈ R+

geeft de voorraad weer van product p op het einde van dag d in tank 4. PV T4p,d ∈ {0, 1}

bepaalt voor elke dag d of tank 4 al dan niet toegewezen is aan product p. De voorwaarden

8.11b en 8.11d worden herschreven naar 8.15a en 8.15b.

∀d ∈ {D2 ∪ 10} : QV T4D2,d ≤ maxTank4D2 · PV T4D2,d (8.15a)

∀(p, pTank) ∈ {(D2,D2), (K,D2)},∀d ∈ {D2 ∪ 10} : DPp,d ≤ PV T4pTank,d (8.15b)

8.9. Productierun

Algemeen

De eis dat een productierun minimaal een aantal dagen moet lopen, is vrij eenvoudig uit te

drukken in deze fase. We weten uit fase 1 welke producties er eindigen in deze maand en welke

er ook starten. Indien een productierun eindigt (EPp = 1), wat zich in deze fase vertaalt

Page 123: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 8. FASE 2: SCHEDULING 100

8

in volgende sequentie: DPp,d = 1, DPp,d+1 = 0, dan moet voor d1 ∈ {d − MLp + 1, . . . , d}

ook DPp,d1 = 1 gelden, met MLp de minimale lengte van de productierun. Indien deze

productierun echter gespreid is over de vorige maand en de huidige maand, dan is het

mogelijk dat er zich in deze verzameling enkele vrije dagen bevinden, omdat de makespan

op die straat kleiner is dan de totale makespan van de vorige maand. In dat geval is

DPp,vrije dag = 0. We lossen dit op door deze vrije dagen ook mee te nemen in deze sequentie

en krijgen voorwaarde 8.16a.

∀p ∈ {vereist minimale lengte run}, s de straat van p ,∀d ∈ {D2 ∪ 9} :

d∑

t=d−MLp+1

DPp,t +

#d2m−1∑

t=d−MLp+1

initV rijs,t ≥ MLp · (EPp + DPp,d − DPp,d+1 − 1)(8.16a)

Naast deze algemene vergelijking voer ik ook nog een verplichting in, in verband met de

eerste dag van de maand. Indien we weten dat een productie aan de gang is, dus als de

productie eindigt EPp = 1, maar niet begint SPp = 0 in de maand, dan verplichten we de

eerste dag van de maand om dat product te produceren. Het is namelijk niet de bedoeling om

de productiecampagnes te spreiden doorheen de maand. Deze verplichting wordt vastgelegd

in voorwaarde 8.16b.

∀p : DPp,eerste dag ≥ EPp − SPp (8.16b)

Wanneer een productie niet beeindigd wordt in de huidige maand, maar pas in de volgende

maand, moet deze productie op het einde van de makespan liggen, zodat er geen opsplitsing

kan optreden in de productiecampagne. We verplichten dat door te eisen dat alle variabelen

uit de makespan gelijk worden aan 0 indien de sequentie DPp,d = 1, DPp,d+1 = 0 optreedt

in combinatie met EPp = 0. Dit wordt geschreven zoals in vergelijking 8.16c.

∀s,∀p ∈ {geproduceerd op s},∀d ∈ {D2 ∪ 9} :∑

p1∈{geproduceerd op s}

DPp1,d+1 +∑

(p1,p2)∈{omstellingen op s}

OMp1,p2,d+1 + Ss,d+1

≤ 1 − DPp,d + DPp,d+1 + EPp

(8.16c)

O-productie

Bij de O-productie ligt het net iets anders. Hiervoor is geen EP of SP beschikbaar. Bo-

vendien is het mogelijk dat een O-productiecampagne stopt in het begin van de maand en

opnieuw start op het einde van de maand. Wat we wel weten is dat indien een productierun

van O stopt, dat er dan een stiltand op straat 5 wordt gestart. We stellen voorwaarde 8.17a

Page 124: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 8. FASE 2: SCHEDULING 101

8

op, waarbij er weer rekening wordt gehouden met eventuele vrije dagen in de vorige maand.

∀d ∈ {D2 − 1 ∪ 9} :

d∑

t=d−MLO+1

DPO,t +

#d2m−1∑

t=d−MLO+1

initV rijs5,t

≥ MLO · (SSs5 + DPO,d − DPO,d+1 − 1)

(8.17a)

Hierin is de verzameling D2 − 1 gelijk aan alle dagen van de maand m2, uitgebreid met de

laatste dag van de vorige maand. Indien er dus een stilstand start, wat gelijk is aan het einde

van een productierun, dan eist de voorwaarde dat er minimaal MLO opeenvolgende dagen

toegewezen zijn aan de productie voor O. We hebben ook nog nood aan een beginvoorwaarde

8.17b in het geval de stilstand zou starten op de eerste dag van de maand en indien er in de

vorige maand vrije dagen zouden zijn, want in dat geval zijn DPO,d en DPO,d+1 gelijk aan

0, maar moet toch de minimum lengte gewaarborgd worden.

d = #d2m−1 :

d∑

t=d−MLO+1

DPO,t +

#d2m−1∑

t=d−MLO+1

initV rijs5,t

≥ MLO · (SSs5 + initV rijs5,d − somSSESs5 − DPO,d+1 − 1)

(8.17b)

De somSSES komt hierbij kijken omdat deze vergelijking enkel mag gelden indien er geen

stilstand bezig is. Op dat moment kan initV rij namelijk ook 1 worden, wat leidt tot een

tegenstrijdigheid: het eisen van een minimale productieduur, terwijl er een stilstand aan het

lopen is.

8.10. Stilstanden

8.10.1. Ingeplande stilstanden door het management

In de preprocessing stap maken we voor elke maand en voor elke straat een set aan van

dagen waarop een stilstand moet voorkomen ingSs. Door gebruik te maken van deze sets

kan heel gemakkelijk per straat de ingeplande stilstand worden meegegeven met voorwaarde

8.18.

∀s,∀d ∈ ingSs : Ss,d = 1 (8.18)

8.10.2. Stilstanden ingevoerd door het model

Deze stilstanden kunnen op eenzelfde manier behandeld worden als een productierun. De

vereiste hierbij is dat indien er een stilstand wordt ingevoerd dat deze stilstand minimaal

een aantal dagen duurt. We verkrijgen voorwaarden 8.19 naar analogie met 8.16a.

Page 125: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 8. FASE 2: SCHEDULING 102

8

∀s ∈ {s5, sA1},∀d ∈ {D2 − 1 ∪ 9} :

d∑

t=d−MLSs+1

Ss,t +

#d2m2−1∑

t=d−MLSs+1

initV rijs,t ≥ MLSs · (ESs + Ss,d − Ss,d+1 − 1)(8.19a)

Voorwaarde 8.19a voor de specifieke minimale duur van een stilstand opgelegd door de

restricties. Voorwaarde 8.19b omdat een stilstand langer moet zijn dan de afstel en de

opstart samen van een productiestraat.

∀s,∀d ∈ {D2 − 1 ∪ 9} :

d∑

t=d−(afstels+opstarts)+1

Ss,t +

#d2m2−1∑

t=d−(afstels+opstarts)+1

initV rijs,t

≥ (afstels + opstarts) · (ESs + Ss,d − Ss,d+1 − 1)

(8.19b)

Voor de molen moet er net zoals in de eerste fase een uitbreiding worden gemaakt op

voorwaarde 8.19b aangezien de afstel- en opstarttijd kleiner zijn dan de omstelduur. We

schrijven vergelijking 8.19c.

∀d ∈ {D2 − 1 ∪ 9} :

d∑

t=d−verwDagenOsM+1

SsM,t +

#d2m2−1∑

t=d−verDagenOsM +1

initV rijsM,t

≥ verwDagenOsM · (ESsM + SsM,d − SsM,d+1 − 1)

(8.19c)

We voegen nog een beginvoorwaarde toe (8.19d) voor de laatste dag van de vorige maand,

aangezien het mogelijk is dat een stilstand wordt afgesloten tussen twee maanden in en dat

ESs bij de volgende maand wordt geplaatst. Indien er dus een stilstand lopende is van de

vorige maand naar de huidige maand somSSESs = 1 verplichten we de laatste stilstanddag

van de vorige maand tot 1 in plaats van gebruik te maken van de vrije dagen uit die maand.

Hierdoor zijn alle voorgaande vergelijkingen van 8.19 geldig voor de gegeven dagen.

∀s : Ss,#d2m−1≥ somSSESs (8.19d)

En als laatste voegen we ook nog een vergelijking (8.19e) toe die niet strikt noodzakelijk is,

maar die wel zorgt voor meer intelligentie. Het is namelijk niet noodzakelijk om stilstanden

toe te wijzen in een maand indien er helemaal geen stilstand gepland is. Er is nooit een

stilstand gepland in een straat indien de drie termen uit het rechterlid gelijk zijn aan 0.

∀s,∀d ∈ {D2 ∪ 10} : Ss,d ≤ SSs + ESs + somSSESs (8.19e)

Page 126: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 8. FASE 2: SCHEDULING 103

8

8.11. Omstellingen

Voor de omstellingen gaan we te werk in een soort van stappenplan. We definieren eerst de

werkelijke omstelduur tussen twee producten als volgt: ODp1,p2 ∈ Z+, een parameter die

voor de omstel van p1 naar p2 weergeeft hoeveel dagen deze omstel duurt. Vervolgens stellen

we een eerste vergelijking op die eist dat als er een productie stopt, deze wordt opgevolgd

door een omstel indien er geen stilstand is gepland (Ss,d = 0) op die dag en indien het

product niet stopt omwille van het einde van de maand, maar enkel omwille van het einde

van de productie (EPp = 1). Welke omstel er wordt getriggerd, is hier nog niet van belang

en we schrijven voorwaarde 8.20a. Hierin is omstelDuo dat set van duo’s producten p1 en

p2 waartussen een omstel kan plaatsvinden. We zien dat indien aan de voorwaarden van

het rechterlid voldaan is, er de volgende dag d + 1 een eerste dag van de omstelling wordt

verplicht.

∀s ∈ {straten met omstel},∀p ∈ {geproduceerd op s}, d ∈ {D2 ∪ 9} :∑

(p,p2)∈omstelDuo

OMp,p2,d+1 ≥ DPp,d − DPp,d+1 − Ss,d+1 + EPp − 1 (8.20a)

Een tweede stap legt de omstelduur vast voor de gekozen omstelling. Voorwaarde 8.20b eist

dat indien er een omstel start op dag d + 1 dat deze omstel ook vastgelegd wordt voor een

minimum aantal dagen die daarop volgen.

∀(p1, p2) ∈ omstelDuo, d ∈ {D2 ∪ 7} :

d+ODp1,p2∑

t=d+1

OMp1,p2,t ≥ ODp1,p2 · (OMp1,p2,d+1 − OMp1,p2,d)(8.20b)

Ten derde verplichten we om na de omstelling dat product te produceren dat past bij de

gekozen omstelling horende bij de twee vergelijkingen hierboven. Je zou ook omgekeerd

kunnen zeggen dat de eerste twee vergelijkingen die omstelling gaan kiezen die passen bij

de te produceren producten op de straat. Wiskundig gezien ziet dat eruit als in 8.20c

waarbij het rechterlid 0 wordt indien er een omstel tussen p1 en p2 eindigt en zo dus alle

producten verschillend van p2 verhindert om te produceren op die dag op die straat. In het

set omstelDuo kan p1 nooit gelijk zijn aan p2 omdat er uiteraard geen omstel voorkomt

tussen dezelfde producten.

∀(p1, p2) ∈ omstelDuo,∀(p, p2) ∈ omstelDuo,∀d ∈ {D2 − 1 ∪ 9} :

DPp,d+1 ≤ 1 − OMp1,p2,d + OMp1,p2,d+1

(8.20c)

Indien er geen productie beeindigd wordt in de maand, dan kan er ook nooit een omstelling

voorkomen voor dit product. Voorwaarde 8.20d zorgt hiervoor.

Page 127: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 8. FASE 2: SCHEDULING 104

8

∀(p1, p2) ∈ omstelDuo,∀d ∈ {D2 − 1 ∪ 10} : OMp1,p2,d ≤ EPp1 (8.20d)

Ook hier is weer nood aan enkele beginvoorwaarden omwille van de vorige maand en zijn

eventuele vrije dagen op het einde van de makespan. Ten eerste kan al besloten worden dat

een omstel van belang voor de volgende maand die reeds start in de vorige maand enkel

verschillend van 0 kan zijn indien in de huidige maand een productierun start horende bij

die omstel. We voegen hiervoor vergelijking 8.20e in.

∀(p1, p2) ∈ omstelDuo,∀d ∈ D1 : OMp1,p2,d ≤ SPp1 (8.20e)

Om nu te weten welke omstel er eventueel kan plaatsvinden in de overgang tussen de twee

maanden voegen we nog twee extra voorwaarden toe. Hierin maken we gebruik van twee

nieuwe parameters. somInitV rijs ∈ Z+ geeft het aantal vrije dagen op het einde van de

vorige maand weer van straat s. initLPp ∈ {0, 1} is 1 indien het product p het laatste

product was in de vorige maand. Per straat kan maar 1 initLP verschillend zijn van 0.

Indien er geen stilstand aan de gang is (somSSESs = 0) en er geen productierun aan het

lopen is (somSPEPs = 0) op de maandwissel dan kunnen de vrije dagen gebruikt worden

voor een omstelling. Voor de eenvoud definieren we dan alle vrije dagen als een omsteldag.

In de praktijk zullen sommigen van deze dagen gewoon een stilstand inhouden. 8.20f drukt

dit uit in wiskundige vorm waarbij het linkerlid de keuze heeft uit omstellen van het laatst

geproduceerde product naar eender welk product. Maar in combinatie met 8.20e is deze

keuze beperkt tot enkel die omstellen waarvoor in de volgende maand een productierun

start.

∀(p1, p2) ∈ omstelDuo, s:= de straat van deze omstel,

∀d ∈ {#d2m2−1 − somInitV rijs + 1, . . . ,#d2m2−1} :∑

(p1,p)∈omstelDuo

OMp1,p,d ≥ initLPp1 − somSSESs − somSPEPs

(8.20f)

Indien er geen vrije dagen zijn op het einde van de vorige maand, maar waar er wel een

omstel moet volgen op de eerste dagen van de volgende maand, dan moeten we voor de

eerste dag van deze maand zorgen dat de omstel veplicht 1 is.

∀(p1, p2) ∈ omstelDuo, s:= de straat van deze omstel :∑

(p1,p)∈omstelDuo

OMp1,p,#d2m2−1+1

≥ initLPp1 − somSSESs − somSPEPs − initV rijs,#d2m2−1

(8.20g)

Page 128: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 8. FASE 2: SCHEDULING 105

8

8.12. Voorwaarden in verband met JD2K-productie

8.12.1. D2K-productie

De D2 en K-productiecampagnes moeten in blok gebeuren en op elk moment mag er niet

meer dan 70 ton D2 in tank 4 opgeslagen zijn. Het werkelijk schedulen van deze producties

in blokken van 70 is een vrij complex gegeven en is eigenlijk niet strikt noodzakelijk. De

beperking van 70 ton is reeds verwerkt bij de voorraden van de tanken en aangezien er geen

omstellingen noodzakelijk zijn tussen D2 en K, laat ik hier de werkelijke schedule vrij. Het

enige wat ik eis, is dat na D2 sowieso K wordt geproduceerd. Dit wordt in voorwaarde 8.21

geschreven.

∀d ∈ {D2 ∪ 9} : DPK,d+1 ≥ DPD2,d − DPD2,d+1 (8.21)

8.12.2. D2KJ-productie

De D2K- en J-productie moeten in blok voorkomen. Dit betekent dat we de omstellingen

tussen D2K en J moeten vastleggen. Door de andere voorwaarden voor de omstellingen uit

een van de vorige paragrafen zijn we ineens verzekerd dat D2K en J in blok voorkomen.

In figuur 8.1 zien we de verschillende situaties waarbij een omstelling tussen D2K en J

voorkomt. De voorwaarden 8.22 leggen deze situaties vast en zorgen te gepaste tijde dat

een omstel vastgelegd wordt. Voor de omgekeerde situatie waarbij een omstel van K naar

D2 plaatsvindt, gelden identieke vergelijkingen.

∀d ∈ {D2∪9} : OMD2K,J,d+1 ≥ EPD2K−SPD2K +SPJ +DPD2K,d−DPD2K,d+1−2 (8.22a)

Geldt voor de bovenste en de onderste situatie.

∀d ∈ {D2∪ 9} : OMD2K,J,d+1 ≥ EPD2K +SPJ −EPJ +DPD2K,d−DPD2K,d+1− 2 (8.22b)

Geldt voor de bovenste en de derde situatie.

d∈{D2∪9}

(OMD2K,J,d + OMJ,D2K,d ≥ EPD2K + SPD2K + SPJ + EPJ − 3 (8.22c)

Geldt voor de tweede situatie.

Page 129: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 8. FASE 2: SCHEDULING 106

8

Figuur 8.1.: Grafische voorstelling mogelijke combinaties omstellingen tussen D2KJ

8.13. Beginvoorwaarden

De scheduling voor een maand hangt uiteraard af van de maand die hieraan voorafgaat. We

stellen voorwaarden op voor de beginvoorraden van de maand 8.25, de vorige producties 8.23

en de stilstanden uit de vorige maand 8.24. De omstellingen uit de vorige maand zijn van

geen belang aangezien deze, indien ze op het einde vallen, vervat zitten in de vrije dagen.

Bovendien onthouden we ook dat er voor sommige straten op het einde ook een aantal vrije

dagen zijn. initDPp,d ∈ {0, 1} is een parameter die de producties van de vorige maand van

elke dag d bijhoudt. initSs,d ∈ {0, 1} is een parameter die de stilstanden uit de vorige maand

van elke dag d bijhoudt voor elke straat s.

∀p,∀d ∈ {D1} : DPp,d = initDPp,d (8.23)

∀s,∀d ∈ {D1} : Sp,d = initSp,d (8.24)

∀p ∈ {in tank 1 en 2} : QV T12p,l = initT12p (8.25a)

De index l betekent hier de laatste dag van de vorige maand en initT12p ∈ R+ is de

parameter die de beginvoorraad van product p in tank 1 en 2 vastlegt. Een analoge uitleg

geldt voor initT3p, initT4p, initV IBCp, initTBp en initCBp.

∀p ∈ {in tank 3} : QV T3p,l = initT3p (8.25b)

∀p ∈ {in tank 4} : QV T4p,l = initT4p (8.25c)

∀p ∈ {in vaten en IBC’s} : QV V IBCp,l = initV IBCp (8.25d)

Page 130: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 8. FASE 2: SCHEDULING 107

8

∀p ∈ {in tank B} : QV TBp,l = initTBp (8.25e)

∀p ∈ {in containers} : QV CBp,l = initCBp (8.25f)

8.14. Overige voorwaarden

8.14.1. Doorgeven van stilstanden

Net zoals bij de eerste fase moeten we hier enkele restricties bovenhalen in verband met het

doorgeven van stilstanden. Bijvoorbeeld de F-productie mag enkel lopen als de E-installatie

loopt, maar dit betekent niet dat heel straat 1 moet worden stilgelegd. Daarom konden

we dit niet bij de algemene ingeplande stilstanden mee in beschouwing nemen. Mits het

invoeren van de volgende drie zeer eenvoudige voorwaarden 8.26 worden alle stilstanden

perfect doorgegeven.

∀d ∈ {ingSstraatE} : DPF,d = 0 (8.26a)

∀d ∈ {ingSAW1} : DPH123,d = 0 (8.26b)

∀d ∈ {ingSAW2} : DPN,d = 0 (8.26c)

8.14.2. Minimum afvalwaterdebiet

Hier kan rechtstreeks per dag geeist worden dat de productie zo wordt gepland dat er elke

dag voldoende afvalwaterdebiet op AW2 is. Aangezien we niet op voorhand weten hoeveel

dagen het zal innemen om de geschatte productiehoeveelheden in te plannen, hebben we

tien extra dagen ingevoerd zoals eerder uitgelegd. Indien deze dagen niet in de makespan

vallen, moeten ze ook niet voldoen aan de eis voor het minimale afvalwaterdebiet. We lossen

dit op met behulp van een biniare helpvariabele helpDebietd die 1 is zodra er productie is

van minimaal 1 product op dag d. Indien er geen productie is op dag d, dan mag deze

helpvariabele 0 zijn. Wiskundig krijgen we dan 8.27.

∀d ∈ {D2 ∪ 10} :∑

p∈{PAfval}

DPp,d ≤ 15 · helpDebietd (8.27a)

Zodra er productie is van 1 product wordt helpDebiet verplicht 1. 15 is hierbij een arbitraire

bovengrens. De restrictie wordt dan als volgt uitgeschreven, waarbij de dagen van ingeplande

stilstand voor AW2 ook buiten beschouwing worden gelaten.

Page 131: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 8. FASE 2: SCHEDULING 108

8

∀d ∈ {D2 ∪ 10 \ ingSAW2} :∑

p∈{PAfval}

DQp,d

dagcapaciteitp· ADebietp ≥ minADebiet · helpDebietd

(8.27b)

8.14.3. Stilstand tijdens zomervakantie

Indien m2 ∈ zomer := {7, 8, 19, 20} dan kan ofwel straat 1 produceren ofwel straat 3, maar

niet beiden tegelijk op dezelfde dag. We voegen voorwaarde 8.28 toe die voor elke dag uit

deze maand de productie gaat beperken.

∀m2 ∈ zomer,∀d ∈ {D2 ∪ 10} :∑

p∈{geproduceerd op s1 of s3}

DPp,d ≤ 1; (8.28)

8.14.4. M-productie op straat 4

Voor een bepaalde datum is het niet mogelijk om M te produceren op straat 4. Daarom

voegen we voorwaarde 8.29 toe. SJM4 en SMM4 zijn respectievelijk het jaar en de maand

waarin er voor het eerst productie van M op straat 4 mag zijn.

∀j ∈ {startJ, . . . , SJM4 − 2},∀d ∈ {D2 ∪ 10} : DPM4,d = 0 (8.29a)

Indien men het komende jaar helemaal nog geen M kan produceren op straat 4: voorwaarde

8.29a.

∀j ∈ {startJ, . . . , SJM4 − 1},∀d ∈ {D2 ∪ 10},

∀m2 ∈ {m : m ≤ SMM4 + 12 − 1} : DPM4,d = 0(8.29b)

Indien er in de huidige jaargang nog geen M-productie is op straat 4, maar wel al in de

volgende jaargang. Alle productiehoeveelheden van M op straat 4 voor deze maand gelijk

aan 0: voorwaarde 8.29b. Deze vergelijking geldt enkel als de vaste parameter m2 kleiner is

dan SSM4 + 12 − 1.

∀j ∈ {startJ, . . . , SJM4},∀d ∈ {D2 ∪ 10},

∀m2 ∈ {m : m ≤ SMM4 − 1} : DPM4,d = 0(8.29c)

Indien in de huidige jaargang de productie van M wordt gestart op straat 4, enkel de maanden

ervoor nog beperken tot 0: voorwaarde 8.29c.

Page 132: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 8. FASE 2: SCHEDULING 109

8

8.14.5. Resterende voorwaarden

Alle voorwaarden die in dit hoofdstuk nog niet behandeld zijn, zijn niet van belang voor

het dagelijkse niveau indien men slechts voor 1 maand gaat kijken of de vooropgestelde

schattingen haalbaar zijn of niet. In de eerste fase worden alle kosten reeds in rekening

gebracht en de schedule die in fase 2 wordt bepaald zou dan al diegene moeten zijn met de

laagste kost. Alle voorwaarden in verband met kosten komen bijgevolg niet aan bod in fase

2. Voorwaarden die eisen opleggen voor de efficientie van de productie of voorwaarden die

eisen stellen over meerdere maanden komen in fase 2 ook niet aan bod aangezien de produc-

tiehoeveelheden reeds bepaald zijn in de eerste fase. De productiecijfers zijn vastgelegd voor

de maand en er kan niets meer gedaan worden aan straten die al dan niet efficient lopen. De

voorwaarden die we in fase 2 niet vermeldden, zijn uiteraard allemaal wel zeer gedetailleerd

vervat in de eerste fase.

Zoals eerder vermeld laten we de restricties over het moment van opstart en afstel van een

straat en het moment van een omstel op een straat buiten beschouwing.

Page 133: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

9Resultaten en Conclusie

IN dit hoofdstuk is het de bedoeling om het hele model uitvoerig te testen, de verkregen

resultaten met een grondige blik te bekijken zodat er zinnige conclusies uit volgen.

9.1. Resultaten

We gaan uit van een reele situatie om te kijken of het model voldoet aan de flowvoorwaarden

en aan alle vooropgestelde restricties. Maakt het model de correcte afweging in zijn keuze

naar de te produceren producten. Zijn er niet te veel voorraden, zijn er niet te veel omstel-

lingen, wordt de capaciteit ten volle benut zijn slechts enkele vragen waarop onze resultaten

een antwoord moeten geven. De reele situatie gaat uit van de parameters zoals beschreven

in bijlagen A, B, C en D.

9.1.1. Fase 1: output

Na het oplossen van de eerste fase krijgen we zoals eerder uiteengezet zeer nauwkeurige

schattingen voor de productiehoeveelheden per maand. De output die wordt gegenereerd in

Excel ziet er voor de productieplanning uit als in figuren 9.1 en 9.2. Op het moment dat de

planning gegenereerd wordt, zijn we op het einde van de maand april. Ons model geeft ons

dan als output voor de eerste vier maanden de cijfers uit het verleden en voor de volgende 12

maanden de productiecijfers die de goedkoopste planning zouden moeten geven. Dit zijn de

resultaten na 14 uur rekenen, op dit moment zijn we nog lang niet zeker of dit de optimale

oplossing is, maar de nodige rekentijd om dit te bevestigen of om een betere oplossing te

110

Page 134: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 9. RESULTATEN EN CONCLUSIE 111

9

genereren kan snel oplopen tot enkele dagen.

Figuur 9.1.: Resultaat: productieplanning voor maand 5-12

Voor de maalplanning ziet u de resultaten in de onderstaande tabellen.

9.1.2. Fase 1: gedetailleerde bespreking

Zoals gezegd waren voorgaande schattingen het resultaat van 14 uur rekenen. Indien we

nu gaan kijken hoe de oplossing evolueert doorheen de tijd kunnen we besluiten na hoeveel

tijd de oplossing benaderend in de buurt komt van de optimale oplossing. We voeren 10

experimenten uit telkens met een andere simulatielengte. In grafiek 9.3 hebben we de evolutie

doorheen de tijd van deze totale kost uitgezet in het rood. Binnen de eerste drie uur is er

Page 135: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 9. RESULTATEN EN CONCLUSIE 112

9

Figuur 9.2.: Resultaat: productieplanning voor maand 13-16

Page 136: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HO

OFD

ST

UK

9.R

ESU

LTAT

EN

EN

CO

NC

LU

SIE

113

9

Maand L/C F/C G/C

Voorr. Malen Verk. Voorr. Malen Verk. Voorr. Malen Verk.

2009 1 269 408 91 563 0 148 218 0 33

2 586 50 36 414 488 205 185 0 56

3 600 0 193 698 216 243 128 311 97

4 407 0 41 671 519 122 342 0 21

5 366 0 73 1068 135 200 321 0 35

6 293 0 73 1003 0 200 286 0 35

7 220 0 73 803 0 200 251 0 35

8 147 216 73 603 0 200 216 0 35

9 290 0 73 403 0 200 181 0 35

10 217 0 73 203 193 200 146 0 35

11 144 135 73 196 196 200 111 47 35

12 206 0 73 192 200 200 123 87 35

Totaal 3745 809 945 6817 1947 2318 2508 445 487

Gemiddeld 1-12 78 193 40

Page 137: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HO

OFD

ST

UK

9.R

ESU

LTAT

EN

EN

CO

NC

LU

SIE

114

9

Maand L/C F/C G/C

Voorr. Malen Verk. Voorr. Malen Verk. Voorr. Malen Verk.

2010 13 133 75 75 192 234 205 175 0 40

14 133 224 75 221 181 205 135 0 40

15 283 0 75 198 405 205 95 0 40

16 208 0 75 398 0 205 55 46 40

17 133 0 0 193 0 0 62 0 0

18 0 0 0 0 0 0 0 0 0

19 0 0 0 0 0 0 0 0 0

20 0 0 0 0 0 0 0 0 0

21 0 0 0 0 0 0 0 0 0

22 0 0 0 0 0 0 0 0 0

23 0 0 0 0 0 0 0 0 0

24 0 0 0 0 0 0 0 0 0

Totaal 891 300 900 1205 821 2460 524 46 480

Gemiddeld 13-24 75 205 40

Page 138: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 9. RESULTATEN EN CONCLUSIE 115

9

duidelijk een verbetering met de tijd. De simulatie daarvoor stopzetten zou dus tot een

niet optimaal resultaat leiden. Na drie uur zien we nog slechts een kleine verbetering. Het

stoppen van de simulatie na 200 minuten is in absolute getallen 175,070 euro slechter dan

indien men pas na 14 uur stopt. Procentueel gezien is er nog een verbetering van minstens

16% mogelijk door de simulatie langer te laten lopen. Deze procentuele marge loopt terug

tot 2% indien we 5 uur lang simuleren. We besluiten hieruit dat een simulatie van 5 uur

zeker voldoende moet zijn om tot een oplossing te komen die de optimale oplossing vrij goed

benadert. Elke simulatie die minstens 200 minuten loopt, kan gerechtvaardigd worden.

Figuur 9.3.: Evolutie van de totale kost (rood) en de tekortkost (blauw) doorheen de tijd

In het blauw op figuur 9.3 zijn de kosten voor de tekorten te zien. Zoals verwacht dalen deze

kosten mee met de totale kosten naargelang men langer simuleert. Alle andere onderdelen

van de totale kost hebben we van deze figuur weggelaten omdat het daar op lijkt dat ze na-

genoeg vlak verlopen. In drie meer gedetailleerde grafieken nemen we de meest opmerkelijke

van deze kosten in beschouwing.

De kosten die gepaard gaan met omstellingen zijn weergegeven in grafiek 9.4. In eerste

instantie lijkt dit een zeer grillig verloop. De totale kost wordt geminimaliseerd en is een

resultaat van trade-offs tussen de verschillende onderdelen van de totale kost. 1 onderdeel

hiervan zijn de omstellingen. Het betekent niet dat indien de omstellingskost opnieuw om-

hoog gaat bij een langere simulatie dat daarom de simulatie slechter is. Een andere kost zal

dan namelijk nog sterker dalen. Vooral de algemene trend hierbij is van belang. Algemeen

zien we dat de totale omstellingskost daalt met de lengte van de simulatie. Absoluut is er een

verschil van 19,200 euro wat toch een vermindering inhoudt van een 10 a 15 omstellingen.

Voor de voorraadkosten en de gebonden voorraadkosten geldt een analoge bespreking. Deze

zijn voorgesteld in grafieken 9.5 en 9.6.

Page 139: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 9. RESULTATEN EN CONCLUSIE 116

9

Figuur 9.4.: Evolutie van de omstelkosten met de simulatietijd

Figuur 9.5.: Evolutie van de gebondenkosten met de simulatietijd

Page 140: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 9. RESULTATEN EN CONCLUSIE 117

9

Figuur 9.6.: Evolutie van de voorraadkosten met de simulatietijd

Door gebruik te maken van alle vastgelegde parameters uit fase 1 kan nu reeds een schedule

opgesteld worden voor het komende jaar per dag. We hebben dit manueel gedaan voor alle

maanden in verband met straat 6. Het resultaat hiervoor zie je in figuur 9.7. We zien dat

elke maand perfect 31 dagen telt en dat alle vooropgestelde schattingen mooi doorheen het

hele jaar kunnen ingepland worden. Dit is zonder rekening te houden met de correlatie

tussen de verschillende straten.

Indien we voor 1 bepaalde maand alle schattingen inplannen voor alle straten krijgen we

een situatie zoals in figuur 9.8. We zien dat er voor straat 3 en straat CD1 1 dag overschot

is, dit geeft al iets meer ruimte in verband met de correlatie tussen de verschillende straten.

Het is de bedoeling om te kijken of op elke dag aan alle restricties wordt voldaan, waarbij

een grondstof zeker moet geproduceerd worden alvorens het verder kan gebruikt worden.

Om te zien of alle relaties tussen de verschillende straten op elke dag ook gelden hebben we

nood aan fase 2. Maar we besluiten met de opmerking dat fase 1 reeds zeer nauwkeurige

schattingen geeft voor het hele probleem.

De schattingen naar de laatste maanden toe moeten wel voorzichtig worden benaderd. Hier

kan een ongewild effect optreden. Op dit moment probeert de planning zoveel mogelijk te

voldoen aan de vraag voor de komende twaalf maanden. Na deze twaalf maanden zal er

nog steeds vraag zijn naar alle producten. Deze vraag wordt echter nog niet in rekening

gebracht en draagt bij tot zogenaamde eindeplanningsverschijnselen. In de resultaten van

figuur 9.2 zien we bijvoorbeeld dat naar het einde van de planning toe er zeer veel A2 wordt

opgeslagen in de maanden 13, 14 en 15. Net genoeg om de laatste twee maanden de A1- en

A2-installatie stil te leggen en uit te komen op de minimale voorraad van 1400 ton op het

begin van maand 17. In de praktijk is er in maand 17 ook nog vraag naar A2 en is het dan

perfect mogelijk dat een andere planning beter is. Anderzijds moet men er ook rekening

met houden dat het zakken naar de minimale voorraad ook een gevolg kan zijn van capa-

Page 141: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 9. RESULTATEN EN CONCLUSIE 118

9

Figuur 9.7.: Productieschema voor straat 6 doorheen de 12 maanden

Page 142: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 9. RESULTATEN EN CONCLUSIE 119

9

Figuur 9.8.: Productieschema voor maand 12

Page 143: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 9. RESULTATEN EN CONCLUSIE 120

9

citeitstekorten in een straat. Een kritische blik op de resultaten is dus zeer noodzakelijk.

Een langere planningshorizon zou dit probleem kunnen oplosssen, maar vraagt ook meer

rekentijd. Anderzijds wordt de planning van maand 16 nog niet definitief vastgelegd. Een

eventueel probleem zal al veel duidelijker worden indien men de planning opstelt voor juni.

Dan is maand 16 niet meer de laatste maand, maar dan worden er ook schattingen toege-

voegd voor maand 17. Ofwel merken we dan dat er effectief capaciteitstekorten optreden

ofwel merken we de eindeplanningsverschijnselen op.

9.1.3. Fase 2

Heel het wiskundige model voor fase 2 is uitgeschreven en geımplementeerd. Nagenoeg

alle logische fouten zijn eruit gehaald, er is slechts 1 fout waardoor ik geen resultaten kan

weergeven. Nagenoeg 98% van het model werkt zoals behoren, enkel een koppige 2% weigert

mee te werken. Desalnietemin vind ik dit niet zo een ramp zoals ik bij mijn conclusies zal

vermelden.

9.2. Conclusies

De eerste fase werkt perfect en geeft schitterende schattingen. Het nadeel hierbij is de nodige

rekentijd. Dit valt op te lossen door een zwaardere computer in te schakelen, maar zelfs dan

blijft er de computationele beperking. De bedoeling is nog steeds om een terugkoppeling

te maken tussen de twee fasen zodra in fase 2 zou blijken dat voor een bepaalde maand de

productieschattingen niet in te plannen zijn in deze maand. Indien we in het beste geval

fase 1 stoppen na 3 uur, dan is elke terugkoppeling die gemaakt wordt weer 3 uur extra

rekentijd. Het is dus duidelijk dat het nooit de bedoeling kan zijn om meer dan twee keer

terug te koppelen. Zelfs dan zitten we reeds aan minimaal 9 uur rekenen. Dit is ook de

reden waarom fase 1 tot in het detail is uitgewerkt, om terugkoppelingen zoveel mogelijk te

vermijden.

Uit datgene wat ik in fase 2 al gemerkt heb, kan afgeleid worden dat de benodigde rekentijd

beperkt is tot een aantal minuten. Eens deze fase volledig op punt zou staan, vormt de

rekentijd geen probleem.

Er blijven dus drie problemen over voor de perfecte oplossing van deze case:� Zoeken van de logische fout in fase 2 zodat deze ook kan gebruikt worden� Tijdsbeperking voor het oplossen van het hele probleem� De restricties die we in de modellen genegeerd hebben in verband met gelijktijdige

afstel en opstart van een productiestraat en in verband met de mogelijke momenten

van omstel op een straat.

Page 144: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

HOOFDSTUK 9. RESULTATEN EN CONCLUSIE 121

Voor het eerste probleem is het een kwestie van alles nog eens goed onderzoeken, een paar

testen uitvoeren en de logische fout er uit halen.

Voor het tweede en derde probleem stel ik de volgende oplossing voor: aangezien een pro-

ductieplanning vaak slechts de eerste weken ook effectief wordt gebruikt alvorens men een

nieuwe productieplanning opstelt, is het vooral van belang om te zorgen dat deze eerste

weken een feasible schedule geven. De eerste twee maanden zouden we dan door fase 2 laten

controleren en indien ze niet in orde zouden zijn, gaan we terugkoppelen naar fase 1. Voor

de latere maanden maken we de controle niet, aangezien het op dat moment nog niet van

belang is of de geschatte hoeveelheden ook effectief wel kunnen geproduceed worden. Indien

de grootteordes van deze schattingen gekend zijn, is men al een heel eind verder geholpen.

Even een verduidelijking als voorbeeld: voor de maand mei is het van belang om te weten

of een omstel op zaterdag valt of niet. Voor de maand april, die pas binnen 12 maanden

komt, is het niet van belang om te weten of die omstel nu op een zaterdag valt of niet.

Deze planning zal waarschijnlijk toch nog een paar keer aangepast worden tegen dat we ze

effectief nodig zullenhebben.

Door de controle van slechts 2 maanden, zijn er maximaal twee terugkoppelingen, wat de

rekentijd zeer goed beperkt. Dit lost het tweede probleem op. Dan rest ons nog de opmerking

over het feasible zijn van een schatting in de eerste twee maanden. Zoals in de uiteenzetting

van de modellen gezegd, negeerden we de restricties in verband met gelijktijdige omstellingen

en verboden dagen voor omstellingen omwille van implementatiemoeilijkheden. We stelden

toen voor om het op te lossen door ranges vast te leggen voor de productiehoeveelheden

zodat deze productiecampagnes steeds eindigen op een dag waarop de omstel kan starten.

Voor 12 maanden zou dit inderdaad zeer complex worden. Indien we dit echter toevoegen

voor de eerste twee maanden is het minder complex, maar worden de schattingen uit fase 1

nog beter en is het een kwestie van controleren of ze ook feasible zijn omwille van een tekort

van 1 of 2 dagen.

Indien bovenstaande opmerkingen nog geımplementeerd worden, heb ik er alle vertrouwen

in dat dit programma in de realiteit gebruikt kan worden.

Page 145: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

Deel I.

Variabelen van het proces:

122

Page 146: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

A

123

Page 147: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE A. VARIABELEN PRODUCTIEPLANNING 124

AVariabelen productieplanning

Figuur A.1.: Variabelen van de productieplanning

Page 148: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BInputgegevens productieplanning

125

Page 149: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE B. INPUTGEGEVENS PRODUCTIEPLANNING 126

B

Figuur B.1.: Inputgegevens in verband met specifieke probleem

Page 150: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

CInputgegevens maalplanning

127

Page 151: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJ

LA

GE

C.

INP

UT

GE

GE

VE

NS

MA

ALP

LA

NN

ING

128

CMaand L/C F/C G/C

Voorr. Malen Verk. Voorr. Malen Verk. Voorr. Malen Verk.Index LC Vo LC Ma LC Ve FC Vo FC Ma FC Ve GC Vo GC Ma GC Ve

1 1 269 408 91 563 0 148 218 0 332 2 586 50 36 414 488 205 185 0 563 3 600 0 193 698 216 243 128 311 974 4 407 0 41 671 519 122 342 0 215 5 366 0 73 1068 0 200 321 0 356 6 0 0 73 0 0 200 0 0 357 7 0 0 73 0 0 200 0 0 358 8 0 0 73 0 0 200 0 0 359 9 0 0 73 0 0 200 0 0 35

10 10 0 0 73 0 0 200 0 0 3511 11 0 0 73 0 0 200 0 0 3512 12 0 0 73 0 0 200 0 0 35

Totaal 13 0 0 945 0 0 2318 0 0 48714

Gem 1-12 15 0 0 29

Page 152: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJ

LA

GE

C.

INP

UT

GE

GE

VE

NS

MA

ALP

LA

NN

ING

129

CMaand L/C F/C G/C

Voorr. Malen Verk. Voorr. Malen Verk. Voorr. Malen Verk.Index LC Vo LC Ma LC Ve FC Vo FC Ma FC Ve GC Vo GC Ma GC Ve

13 17 0 0 75 0 0 205 0 0 4014 18 0 0 75 0 0 205 0 0 4015 19 0 0 75 0 0 205 0 0 4016 20 0 0 75 0 0 205 0 0 4017 21 0 0 75 0 0 205 0 0 4018 22 0 0 75 0 0 205 0 0 4019 23 0 0 75 0 0 205 0 0 4020 24 0 0 75 0 0 205 0 0 4021 25 0 0 75 0 0 205 0 0 4022 26 0 0 75 0 0 205 0 0 4023 27 0 0 75 0 0 205 0 0 4024 28 0 0 75 0 0 205 0 0 40

Totaal 0 0 900 0 0 2460 0 0 480

Gemiddeld 13-24 0 0 0

Page 153: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

DGegevens van de laatst beeindigde maand

Datum waarop de productieplanning moet starten:

Index Datum

1 1 dag

2 5 maand

3 2009 jaar

Stilstanden ingepland door het management:

Straat stilstandStartDag stilstandStartMaand stilstandDuur

straatAG 1 9 30

straatE 1 9 30

straatCD1 15 12 90

AW1 1 9 30

AW2 1 9 30

AW3 1 9 30

installatie2 1 9 30

Situatie van de vorige maand tot en met de datum waarop de productieplanning moet

starten:

Beginvoorwaarden: stilstanden straten

Straat dagenStilstand

straat5 29

straatCD1 29

130

Page 154: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE D. GEGEVENS VAN DE LAATST BEEINDIGDE MAAND 131

D

Aantal dagen productie waarmee de vorige periode geeindigd is.

Beginvoorwaarden: producties

Prod dagenProductie

prodF 26

prodJ 26

prodL 26

prodM6 26

prodFC 26

Aantal onbepaalde dagen op een straat in de vorige periode.

Beginvoorwaarden: vrije dagen

Straat dagenOmstelBW

straat1 0

straat3 0

straat4 0

straat6 0

straatCD1 0

straatMolen 0

Beginwaarden tank 3

dag prod bwT3

1 prodA2 0 zit er op de laatste productiedag

A2 in tank 3?

2 prodA2 0 zit er op de voorlaatste productiedag

A2 in tank 3?

1 prodCD1 0 laatste productiedag

2 prodCD1 0 voorlaatste productiedag

1 leeg 1 laatste productiedag

2 leeg 1 voorlaatste productiedag

Page 155: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

Deel II.

Broncode:

132

Page 156: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

EFase 1: broncode mod-file

###################################################################

# Programmacode Hierarchische productieplanning fase 1: #

# Model-file #

###################################################################

############################

#### Sets en parameters ####

############################

# De meeste spreken voor zich en dus zijn ze er uit gelaten

problem Fase1;

# ----------------------------------------

###############################

#### Beslissingsvariabelen ####

###############################

var productie{productenAlles, startMaand-1..startMaand+11} >= 0;

# Productiehoeveelheid van de producten in maand

var voorraad{producten, startMaand-1..startMaand+11} >= 0;

# Voorraad op het einde van maand t

var tekorten{productenVerkoop union productenA2Tank union

productenA2Tank12 union productenA2Tank3,

startMaand-1..startMaand+11} >= 0;

# tekorten voor de producten die verkocht kunnen worden,

# indien de voorraad zakt onder het minimumlevel

133

Page 157: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE E. FASE 1: BRONCODE MOD-FILE 134

E

var voorraadTank1En2{productenInTank1En2, startMaand-1..startMaand+11} >= 0;

# Hoeveelheid van producten in tank 1 en 2 op het einde van maand m

var voorraadTank3{productenInTank3, startMaand-1..startMaand+11} >= 0;

# Hoeveelheid van product in tank 3 op einde van maand m

var productieTank3Bin{productenInTank3, startMaand-1..startMaand+11} binary;

# Geeft weer welk product op het einde van maand m is toegewezen

# aan tank 3

var voorraadTank4{productenInTank4, startMaand-1..startMaand+11} >= 0;

# Hoeveelheid van product in tank 4 op einde van maand m

var voorraadVatenEnIBC{productenInVatenEnIBC,

startMaand-1..startMaand+11} >= 0;

# Hoeveelheid van producten in vaten en IBC’s op het einde van maand m

var voorraadTankB{productenInTankB, startMaand-1..startMaand+11} >= 0;

# Hoeveelheid producten in tank B op het einde van maand m

var voorraadContB{productenInTankB, startMaand-1..startMaand+11} >= 0;

# Hoeveelheid producten in tankcontainers op het einde van maand m

var omstel{productenStraten1en3Cen4en6enCD1enMolen,

startMaand..startMaand+11} binary;

# omstel na product p in maand m of niet,

# ongeacht het product dat erop volgt

var omstelT3{startMaand..startMaand+11} integer >=0 <= 2;

# Een omstel op tank 3 of niet in maand m

var stilstandStart{straten1en3en4en5en6enA1enA2enCD1enMolen,

startMaand-1..startMaand+11} binary;

# 1 indien er een stilstand start in maand m op straat s

var stilstandEind{straten1en3en4en5en6enA1enA2enCD1enMolen,

startMaand-1..startMaand+11} binary;

# 1 indien er een stilstand eindigt in maand m

var stilstandDagen{straten1en3en4en5en6enA1enA2enCD1enMolen,

startMaand-1..startMaand+11} integer >= 0;

# aantal dagen van stilstand gepland door het model in maand m

var productieBinair{productenAlles, startMaand-1..startMaand+11} binary;

# Al dan niet productie p in maand m

Page 158: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE E. FASE 1: BRONCODE MOD-FILE 135

E

var runStart{productenStraten1en3Cen4en6enCD1enMolen,

startMaand-1..startMaand+11} binary;

# 1 indien er een productierun van het product wordt gestart

# in de maand m

var runEind{productenStraten1en3Cen4en6enCD1enMolen,

startMaand-1..startMaand+11} binary;

# 1 indien er een productierun van het product wordt geeindigd

# in de maand m

var stilstandA1VerbruikA2Plus{straten5en6, startMaand..startMaand+11} >= 0;

# Helpvariabele in verband met restrictie 12 en 13

var stilstandA1VerbruikA2Min{straten5en6, startMaand..startMaand+11} >= 0;

# Helpvariabele in verband met restrictie 12 en 13

var stilstandA1VerbruikA2{straten5en6, startMaand..startMaand+11, 1..2} >= 0;

# Restrictie 12 (1) en 13 (2), geeft het verbruik weer van A2

# voor de productie van andere producten in de overbruggingsperiode

var tank3DagenLeeg{productenInTank3, startMaand..startMaand+11} >= 0;

# Aantal dagen noodzakelijk om tank 3 leeg te maken indien ze in het

# begin van de maand gevuld is met product p

var tank3DagenVul{productenInTank3, startMaand..startMaand+11} >= 0;

# Aantal dagen noodzakelijk om de tank te vullen tot het niveau

# waarop ze zich bevindt op het einde van de maand m

var tank3DagenTussen{productenInTank3, startMaand..startMaand+11} >= 0;

# Aantal dagen noodzakelijk om tank 3 te vullen en daarna opnieuw leeg

# te maken in maand m indien in het begin en het einde van de maand

# een ander product in de tank zit.

var res31Plus{startMaand..startMaand+11} >= 0;

# Helpvariabele in verband met restrictie 31

var res31Min{startMaand..startMaand+11} >= 0;

# Helpvariabele in verband met restrictie 31

var M6nietO{startMaand..startMaand+11} >= 0;

# Restrictie 63, aantal dagen M6-productie waarbij geen O-productie is

var NnietO{startMaand..startMaand+11} >= 0;

# Restrictie 63, aantal dagen N-productie waarbij geen O-productie is,

# hierbij is ook de M6-productie in rekening gebracht

var hv{{70,140,210}, startMaand..startMaand+11} binary;

Page 159: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE E. FASE 1: BRONCODE MOD-FILE 136

E

# Helpvariabele in verband met productie D2K

#######################

#### Doelfunctie ####

#######################

minimize totaleKost:

sum{M in startMaand..startMaand+11}(sum{m in M-1..M, p in productenVoorraad

union productenGemalen}(voorraad[p,m])/2-maximumOpslag)*voorraadKost

# Kosten voor opslag van voorraad

+ sum{M in startMaand..startMaand+11}(sum{m in M-1..M, p in productenVoorraad

union productenGemalen}(voorraad[p,m])/2*varProductieKost[p]*1000)/12

*gebondenVoorraadPerc

# Kosten van de gebonden voorraad

+ sum{M in startMaand..startMaand+11}(sum{m in M-1..M,

p in productenInVatenEnIBC}(voorraadVatenEnIBC[p,m])/2)*voorraadKostVatenEnIBC

# Kosten voor bijhouden van voorraad in vaten en IBC

+ sum{m in startMaand..startMaand+11}(

sum{p in productenVoorraad union {"prodB", "prodA2"} union productenGemalen}

(tekorten[p,m]*marge[p])

+ sum{p in productenUitA1enA2}

(tekorten[p,m]*marge[p]/verbruik[p,"prodA1"])

+ sum{p in {"prodJ","prodK"}}

(tekorten[p,m]*marge[p]/verbruik[p,"prodD1"])

+ sum{p in productenUitC}

(tekorten[p,m]*marge[p]/verbruik[p,"prodC"])

+ sum{p in productenGemalen union {"prodB"}}

(tekorten[p,m]*marge[p])

)*tekortFactor

# Vermijden van tekorten, ook de winstderving bij

# capaciteitsverliezen wordt hier in rekening gebracht

- 50*sum{s in straten1en3en4en5en6enCD1enMolen}

(sum{m in startMaand..startMaand+11}(stilstandDagen[s,m]-

(stilstandOpstart[s]+stilstandAfstel[s])*stilstandStart[s,m]))

# Winst door stilstanden, stilleggen machines tov produceren

# tegen lagere snelheid

- stilstandA1StandaardBesparing/stilstandA1StandaardLengte*

sum{m in startMaand..startMaand+11} (stilstandDagen["straatA1",m])

# Winst door stilstand van A1

Page 160: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE E. FASE 1: BRONCODE MOD-FILE 137

E

+ sum{s in straten1en3en4en5en6enA1enA2enCD1enMolen,

m in startMaand..startMaand+11}(stilstandStart[s,m]*stilstandKostAfstel[s]

+stilstandEind[s,m]*stilstandKostOpstart[s])

# Kosten door stilstanden

+ sum{p in productenStraten1en3Cen4en6enCD1enMolen,

m in startMaand..startMaand+11}(omstel[p,m]*omstelKost[p])

+ sum{m in startMaand..startMaand+11}(omstelT3[m]*omstelKost["straatT3"])

# Kosten voor omstellingen (straten 1, 3, 4, 6, CD1 en maalstraat en tank3)

+ sum{m in startMaand..startMaand+11}

(productie["prodG1",m]*varProductieKost["prodG1"]*kostFactorG)

# Preferent. prod van G op str 3, extra kost indien prod op str 1

+ stilstandA2EnNietA1Penalty*sum{m in startMaand..startMaand+11}

(stilstandDagen["straatA2",m]-stilstandDagen["straatA1",m])

# Penalty als A2 niet loopt terwijl A1 loopt omwille van

# energie-efficientie (grote penalty geeft meer voorraden van A2)

- sum{s in straten5en6, m in startMaand..startMaand+11, r in 1..2}

(stilstandA1VerbruikA2[s,m,r])

# Restrictie 12 en 13. Een schatting voor het verbruik van A2 in

# de overbruggingsperiode, zo dicht mogelijk bij de virtuele grenzen

+ sum{m in startMaand..startMaand+11}

(penaltyNnietO*NnietO[m] + (penaltyM6nietO-penaltyNnietO)*M6nietO[m])

# Restrictie 63: M6 en N prod zoveel mogelijk als er O prod is

;

#######################

#### Restricties ####

#######################

#### Combinatie binaire met reele variabelen ####

subject to binaireProductieStraten1en3en3Aen4en5en6enA1enA2enCD1enMolen_1

{s in straten1en3en4en5en6enA1enA2enCD1enMolen union stratenT3 union

straten3extra, (p,s) in productenVSstraten, m in startMaand..startMaand+11}:

productie[p,m] <= productieBinair[p,m]*dagcapaciteit[p]*31;

subject to binaireProductieStraten1en3en3Aen4en5en6enA1enA2enCD1enMolen_2

{s in straten1en3en4en5en6enA1enA2enCD1enMolen union stratenT3 union

straten3extra, (p,s) in productenVSstraten, m in startMaand..startMaand+11}:

productieBinair[p,m] <= productie[p,m];

#### Opsplitsing tussen producten ####

Page 161: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE E. FASE 1: BRONCODE MOD-FILE 138

E

subject to opsplitsenProductie_1 {(p1,p2,p3) in productenTriples,

m in startMaand-1..startMaand+11}:

productie[p1,m] + productie[p2,m] = productie[p3,m];

subject to opsplitsenProductie_2 {m in startMaand-1..startMaand+11}:

productie["prodH1",m] + productie["prodH2",m] + productie["prodH3",m]

= productie["prodH123",m];

#### Vraag/aanbod-restricties eindproducten ####

subject to vraagAanbod_2 {p in productenEindenMolen,

m in startMaand..startMaand+11}:

productie[p,m] + voorraad[p,m-1] + tekorten[p,m]

= vraag[p,m] + voorraad[p,m] + tekorten[p,m-1];

subject to voldoendeA2productie {m in startMaand..startMaand+11}:

productie["prodA2",m] + voorraadTank1En2["prodA2",m-1]

+ voorraadTank3["prodA2",m-1] + voorraadVatenEnIBC["prodA2",m-1]

+ tekorten["prodA2",m] = sum{p in productenViaA2 union productenUitA2}

(verbruik[p,"prodA1"]*productie[p,m]) + voorraadTank1En2["prodA2",m]

+ voorraadTank3["prodA2",m] + voorraadVatenEnIBC["prodA2",m]

+ vraag["prodA2",m] + tekorten["prodA2",m-1];

subject to voldoendeA2productieViaTank12 {m in startMaand..startMaand+11}:

productie["prodA2T12",m] + voorraadTank1En2["prodA2",m-1]

+ voorraadVatenEnIBC["prodA2",m-1] + tekorten["prodA2T12",m]

= sum{p in productenA2Tank12}(verbruik[p,"prodA1"]*productie[p,m])

+ voorraadTank1En2["prodA2",m] + voorraadVatenEnIBC["prodA2",m]

+ vraag["prodA2",m] + tekorten["prodA2T12",m-1];

subject to voldoendeA2productieViaTank3 {m in startMaand..startMaand+11}:

productie["prodA2T3",m] + voorraadTank3["prodA2",m-1]

+ tekorten["prodA2T3",m] = sum{p in productenA2Tank3}

(verbruik[p,"prodA1"]*productie[p,m]) + voorraadTank3["prodA2",m]

+ tekorten["prodA2T3",m-1];

subject to flowA2VatenEnIBC {p in productenInTank1En2,

m in startMaand..startMaand+11}:

voorraadVatenEnIBC[p,m] >= voorraadVatenEnIBC[p,m-1] - vraag[p,m];

subject to voorraadA2_1 {p in productenInTank1En2,

m in startMaand-1..startMaand+11}:

voorraad[p,m]

= voorraadTank1En2[p,m] + voorraadTank3[p,m] + voorraadVatenEnIBC[p,m];

subject to beperkenTekorten {p in productenVerkoop,

m in startMaand..startMaand+11}:

Page 162: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE E. FASE 1: BRONCODE MOD-FILE 139

E

tekorten[p,m] <= vraag[p,m] + tekorten[p,m-1];

subject to tekortenA2 {m in startMaand..startMaand+11}:

tekorten["prodA2",m] = tekorten["prodA2T12",m] + tekorten["prodA2T3",m];

#### Voldoende productie tussenproducten ####

subject to voldoendeA1productie {m in startMaand..startMaand+11}:

productie["prodA1",m] = verbruik["prodA2","prodA1"]*productie["prodA2",m]

+ sum{p in productenViaA1}(verbruik[p,"prodA1"]*productie[p,m]);

subject to voldoendeCproductie {m in startMaand..startMaand+11}:

productie["prodC",m] + voorraadTank3["prodC",m-1]

= productie["prodI",m]*verbruik["prodI","prodC"] + voorraadTank3["prodC",m];

subject to voldoendeD1productie {m in startMaand..startMaand+11}:

productie["prodD1",m] + voorraadTank3["prodD1",m-1]

= sum{p in productenMetGrondstofD1}(productie[p,m]*verbruik[p,"prodD1"])

+ voorraadTank3["prodD1",m];

subject to voldoendeD2productie_1 {m in startMaand..startMaand+11}:

productie["prodD2",m] + voorraadTank4["prodD2",m-1]

= productie["prodK",m]*verbruik["prodK", "prodD2"] + voorraadTank4["prodD2",m];

subject to voldoendeMolenProductie {m in startMaand..startMaand+11,

(pNiet, pWel) in productenNietGemalenWel}:

productie[pNiet, m] >= dagcapaciteit[pNiet]/dagcapaciteit[pWel]*productie[pWel,m];

subject to BProductie_1 {m in startMaand..startMaand+11}:

ondergrensB/100*productie["prodA1",m] <= productie["prodB",m];

subject to BProductie_2 {m in startMaand..startMaand+11}:

productie["prodB",m] <= bovengrensB/100*productie["prodA1",m];

#### Stilstanden ####

# Algemene restricties

subject to ingeplandVSongepland {s in straten1en3en4en5en6enA1enA2enCD1enMolen,

m in startMaand..startMaand+11}:

stilstandDagen[s,m] >= stilstandIngepland[s,m];

subject to stilstandStraat1en3en4en6enCD1enMolen_1

{s in straten1en3en4en6enCD1enMolen, m in startMaand..startMaand+11}:

stilstandStart[s,m] <=

1-sum{t in startMaand-1..m-1}(stilstandStart[s,t]-stilstandEind[s,t]);

Page 163: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE E. FASE 1: BRONCODE MOD-FILE 140

E

subject to stilstandStraat1en3en4en5en6enA1enA2enCD1enMolen_2

{s in straten1en3en4en5en6enA1enA2enCD1enMolen, m in startMaand..startMaand+11}:

stilstandEind[s,m] <= sum{t in startMaand-1..m-1}

(stilstandStart[s,t]-stilstandEind[s,t])+ stilstandStart[s,m];

subject to stilstandStraat1en3en4en5en6enA1enA2enCD1enMolen_3

{s in straten1en3en4en5en6enA1enA2enCD1enMolen, m in startMaand..startMaand+11}:

stilstandDagen[s,m] <= 31*(sum{t in startMaand-1..m-1}

(stilstandStart[s,t]-stilstandEind[s,t])+ stilstandStart[s,m]);

subject to stilstandStraat1en3en4en6enA1enA2enCD1enMolen_4

{s in straten1en3en4en6enA1enA2enCD1enMolen, m in startMaand-1..startMaand+10}:

sum{t in m..m+1}(stilstandDagen[s,t])

>= (stilstandAfstel[s]+stilstandOpstart[s])*stilstandStart[s,m];

subject to stilstandStraat1en3en4en6enA1enA2enCD1enMolen_4extra

{s in straten1en3en4en6enA1enA2enCD1enMolen, m in startMaand..startMaand+11}:

stilstandDagen[s,m] >= (stilstandAfstel[s]+stilstandOpstart[s])

*(stilstandStart[s,m]+stilstandEind[s,m]-1);

subject to stilstandStraat1en3en4en5en6enA1enA2enCD1enMolen_5

{s in straten1en3en4en5en6enA1enA2enCD1enMolen, (p,s) in productenVSstraten,

m in startMaand..startMaand+11}:

1 - sum{t in startMaand-1..m-1}(stilstandStart[s,t]-stilstandEind[s,t])

+stilstandEind[s,m] >= productieBinair[p,m];

# Specifieke restricties per straat

subject to stilstandStraat5enA1enA2_1 {s in straten1enA1enA2,

m in startMaand..startMaand+11}:

stilstandStart[s,m] <= 1-sum{t in startMaand-1..m-1}

(stilstandStart[s,t]-stilstandEind[s,t]) + stilstandEind[s,m];

subject to stilstandStraat5enA1_4 {s in straten5enA1,

m in startMaand-1..startMaand+10}:

sum{t in m..m+1}(stilstandDagen[s,t])

>= stilstandMinLengteStraat[s]*stilstandStart[s,m];

subject to stilstandStraatMolen_6 {s in stratenMolen,

m in startMaand..startMaand+11}:

stilstandDagen[s,m] >= 3*(stilstandStart[s,m]+stilstandEind[s,m]-1);

# Doorgeven van stilstanden

subject to stilstandStraatA1enA2_8{m in startMaand..startMaand+11}:

stilstandDagen["straatA1",m] <= stilstandDagen["straatA2",m];

Page 164: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE E. FASE 1: BRONCODE MOD-FILE 141

E

subject to stilstandA1VSstraten {s in straten1en3en4,

m in startMaand..startMaand+11}:

sum{(p,s) in productenVSstraten2: p in productenViaA1}

(productie[p,m]/dagcapaciteit[p])

<= (aantalDagen1[m] - stilstandDagen["straatA1",m]);

#### Productierun ####

# Algemene voorwaarden

subject to runStraat1en3Cen4en6enCD1enMolen_1

{p in productenStraten1en3Cen4en6enCD1enMolen, m in startMaand..startMaand+11}:

runStart[p,m] <= 1-sum{t in startMaand-1..m-1}(runStart[p,t]-runEind[p,t]);

subject to runStraat1en3Cen4en6enCD1enMolen_2

{p in productenStraten1en3Cen4en6enCD1enMolen, m in startMaand..startMaand+11}:

runEind[p,m]

<= sum{t in startMaand-1..m-1}(runStart[p,t]-runEind[p,t]) + runStart[p,m];

subject to runStraat1en3Cen4en6enCD1enMolen_3

{p in productenStraten1en3Cen4en6enCD1enMolen, m in startMaand..startMaand+11}:

productieBinair[p,m]

<= sum{t in startMaand-1..m-1}(runStart[p,t]-runEind[p,t]) + runStart[p,m];

subject to runStraat1en3Cen4en6enCD1enMolen_5

{p1 in productenStraten1en3Cen4en6enCD1enMolen, (p1,s) in productenVSstraten,

(p2,s) in productenVSstraten, m in startMaand..startMaand+11}:

runStart[p2,m] <= 1 -

sum{t in startMaand-1..m-1}(runStart[p1,t]-runEind[p1,t]) + runEind[p1,m];

subject to runStraat1en3Cen4en6enMolen_7

{p in productenStraten1en3Cen4en6enMolen diff {"prodD2K"},

m in startMaand..startMaand+11}:

productie[p,m]/dagcapaciteit[p]

>= runMinLengte[p]*(runStart[p,m]+runEind[p,m]-1);

subject to runStraat1en3Cen4en6enMolen_6

{p in productenStraten1en3Cen4en6enMolen diff {"prodD2K"},

m in startMaand-1..startMaand+10}:

sum{t in m..m+1}(productie[p,t]/dagcapaciteit[p])

>= runMinLengte[p]*runStart[p,m];

subject to runMinLengteH1H2H3_1 {p in {"prodH1", "prodH2", "prodH3"},

m in startMaand-1..startMaand+10}:

sum{t in m..m+1}(productie[p,t]/dagcapaciteit[p])

>= runMinLengte[p]*(runStart["prodH123",m] + productieBinair[p,m] - 1);

Page 165: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE E. FASE 1: BRONCODE MOD-FILE 142

E

subject to runMinLengteH1H2H3_2 {p in {"prodH1", "prodH2", "prodH3"},

m in startMaand-1..startMaand+10}:

sum{t in m..m+1}(productie[p,t]/dagcapaciteit[p])

>= runMinLengte[p]*(runStart["prodH123",m] + productieBinair[p,m+1] - 1);

subject to runMinLengteH1H2H3_3 {p in {"prodH1", "prodH2", "prodH3"},

m in startMaand-1..startMaand+10}:

productie[p,m]/dagcapaciteit[p] >= runMinLengte[p]*

(runStart["prodH123",m] + runEind["prodH123",m] + productieBinair[p,m] - 2);

subject to productierunStraat5 {m in startMaand-1..startMaand+10}:

sum{t in m..m+1}(productie["prodO",t]/dagcapaciteit["prodO"])

>= runMinLengte["prodO"]*stilstandEind["straat5",m];

#### Stilstanden in combinatie met productieruns ####

subject to stilstandStraat1en3Cen4en6enCD1enMolen_7

{p in productenStraten1en3Cen4en6enCD1enMolen,

(p,s) in productenVSstraten, m in startMaand..startMaand+11}:

stilstandStart[s,m] <= 1 -

sum{t in startMaand-1..m-1}(runStart[p,t]-runEind[p,t]) + runEind[p,m];

subject to runStraat1en3Cen4en6enCD1enMolen_4

{p in productenStraten1en3Cen4en6enCD1enMolen,

(p,s) in productenVSstraten, m in startMaand..startMaand+11}:

runStart[p,m] <= 1 - sum{t in startMaand-1..m-1}

(stilstandStart[s,t]-stilstandEind[s,t]) + stilstandEind[s,m];

#### Voorraadrestricties ####

# Algemene voorwaarden

subject to minimumVoorraad {p in productenVerkoop,

M in startMaand..startMaand+11}:

sum{d in voorraadParameters}(minimumVoorraadDagen[p,d])*

sum{m in startMaand..startMaand+11}(vraag[p,m])/365 <= voorraad[p,M];

subject to maximumVoorraad {p in productenInstallatie2,

M in startMaand..startMaand+11}:

voorraad[p,M] <=

maximumVoorraadDagen[p]*sum{m in startMaand..startMaand+11}(vraag[p,m])/365;

# B-voorraad

subject to voorraadBMaxTank {p in productenInTankB,

m in startMaand..startMaand+11}:

voorraadTankB[p,m] <= maxTankB[p];

Page 166: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE E. FASE 1: BRONCODE MOD-FILE 143

E

subject to voorraadBMaxVatenEnIBC {p in productenInTankB,

m in startMaand..startMaand+11}:

voorraadVatenEnIBC[p,m] <= maxVatenEnIBC[p];

subject to voorraadBMaxCont {p in productenInTankB,

m in startMaand..startMaand+11}:

voorraadContB[p,m] <= maxContB[p];

subject to voorraadBFlow {p in productenInTankB,

m in startMaand..startMaand+11}:

voorraad[p,m]

= voorraadTankB[p,m] + voorraadVatenEnIBC[p,m] + voorraadContB[p,m];

subject to voorraadBRestrictie21 {p in productenInTankB,

m in startMaand..startMaand+11}:

voorraadTankB[p,m] + voorraadContB[p,m] - productie[p,m]

+ vraag[p,m]*(1-stilstandDagen["straatA1",m]/aantalDagen1[m])

>= voorraadMinBulkBBijStilstandA1*sum{t in startMaand..startMaand+11}

(vraag[p,t])/365*stilstandEind["straatA1",m];

# A2-voorraad

subject to voorraadMaxTank1en2 {p in productenInTank1En2,

m in startMaand..startMaand+11}:

voorraadTank1En2[p,m] <= maxTank1En2[p];

subject to voorraadMaxVatenEnIBC {p in productenInTank1En2,

m in startMaand..startMaand+11}:

voorraadVatenEnIBC[p,m]

<= maxVatenEnIBC[p]*sum{t in startMaand..startMaand+11}(vraag[p,t])/365;

subject to voorraadMinTank1En2 {p in productenInTank1En2,

m in startMaand..startMaand+11}:

voorraadTank1En2[p,m] >= minTank1En2[p];

subject to voorraadA2Restrictie12 {p in productenInTank1En2,

m in startMaand..startMaand+11}:

(maxTank1En2[p] + maxTank3[p])*stilstandStart["straatA1",m]

- maxTank3[p]*(productieTank3Bin["prodC",m-1] + productieTank3Bin["prodD1",m-1])

<= voorraadTank1En2[p,m-1] + voorraadTank3[p,m-1]

+ (aantalDagen1[m]-stilstandDagen["straatA2",m])*dagcapaciteit[p]

- sum{s in straten5en6}(stilstandA1VerbruikA2[s, m, 1])

- vraag[p,m]*(1-stilstandDagen["straatA1",m]/aantalDagen1[m]);

subject to voorraadA2VerbruikA2_1 {s in straten5en6,

m in startMaand..startMaand+11, r in 1..2, A2 in productenInTank1En2}:

Page 167: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE E. FASE 1: BRONCODE MOD-FILE 144

E

stilstandA1VerbruikA2[s,m,r]

<= sum{(p,s) in productenVSstraten}(productie[p,m]*verbruik[p,A2]);

subject to voorraadA2VerbruikA2_2 {s in straten5en6,

m in startMaand..startMaand+11, r in 1..2, A2 in productenInTank1En2}:

stilstandA1VerbruikA2[s,m,r] <= (aantalDagen1[m]-stilstandDagen["straatA1",m])

*sum{(p,s) in productenVSstraten}(dagcapaciteit[p]*verbruik[p,A2])

/card{(p2,s) in productenVSstraten};

subject to voorraadA2VerbruikA2_3_12 {s in straten5en6,

m in startMaand..startMaand+11, r in 1..1, A2 in productenInTank1En2}:

stilstandA1VerbruikA2[s,m,r] <= stilstandA1VerbruikA2Plus[s,m]

*sum{(p,s) in productenVSstraten}(dagcapaciteit[p]*verbruik[p,A2])

/card{(p2,s) in productenVSstraten} + aantalDagen1[m]

*sum{(p,s) in productenVSstraten}(dagcapaciteit[p]*verbruik[p,A2])

/card{(p3,s) in productenVSstraten}*(2-stilstandEind[s,m]

- sum{t in startMaand-1..m-1}(stilstandStart[s,t]-stilstandEind[s,t]));

subject to voorraadA2VerbruikA2_3_13 {s in straten5en6,

m in startMaand..startMaand+11, r in 2..2, A2 in productenInTank1En2}:

stilstandA1VerbruikA2[s,m,r] <= stilstandA1VerbruikA2Plus[s,m]

*sum{(p,s) in productenVSstraten}(dagcapaciteit[p]*verbruik[p,A2])

/card{(p2,s) in productenVSstraten} + aantalDagen1[m]

*sum{(p,s) in productenVSstraten}(dagcapaciteit[p]*verbruik[p,A2])

/card{(p3,s) in productenVSstraten}*(1-stilstandStart[s,m]);

subject to voorraadA2VerbruikA2_4 {s in straten5en6,

m in startMaand..startMaand+11}:

stilstandA1VerbruikA2Plus[s,m] - stilstandA1VerbruikA2Min[s,m]

= aantalDagen1[m] - stilstandDagen[s,m] - stilstandDagen["straatA1",m];

subject to voorraadA2VerbruikA2_5 {s in straten5en6,

m in startMaand..startMaand+11}:

stilstandA1VerbruikA2Plus[s,m]

>= aantalDagen1[m] - stilstandDagen[s,m] - stilstandDagen["straatA1",m];

subject to voorraadA2VerbruikA2_6 {s in straten5en6,

m in startMaand..startMaand+11}:

stilstandA1VerbruikA2Min[s,m]

>= -aantalDagen1[m] + stilstandDagen[s,m] + stilstandDagen["straatA1",m];

subject to voorraadA2Restrictie13 {p in productenInTank1En2,

m in startMaand..startMaand+11}:

voorraadMinBulkA2BijStilstandA1*(sum{t in startMaand..startMaand+11}

(vraag[p,t]+sum{pA2 in productenUitA2}(vraag[pA2,t]*verbruik[pA2,p])))/365

*stilstandEind["straatA1",m] <= voorraadTank1En2[p,m] + voorraadTank3[p,m] -

(aantalDagen1[m]-stilstandDagen["straatA2",m])*dagcapaciteit[p]

Page 168: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE E. FASE 1: BRONCODE MOD-FILE 145

E

+ sum{s in straten5en6}(stilstandA1VerbruikA2[s, m, 2])

+ vraag[p,m]*(1-stilstandDagen["straatA1",m]/aantalDagen1[m]);

#### Omstellingen ####

subject to defOmstel {p in productenStraten1en3Cen4en6enCD1enMolen,

m in startMaand..startMaand+11}:

runEind[p,m] = omstel[p,m];

#### Capaciteitsrestricties ####

subject to capaciteitStraat1en4en6enCD1enMolen_1

{s in straten1en4en6enCD1enMolen, m in startMaand..startMaand+11}:

sum{(p,s) in productenVSstraten}(productie[p,m]/dagcapaciteit[p] + runEind[p,m])

= aantalDagen1[m] - stilstandDagen[s,m]

- sum{(p,s) in productenVSstraten}(omstel[p,m]*omstelDagen[p])

+ stilstandStart[s,m]*verwOmstelDagen[s];

subject to capaciteitStraat3 {m in startMaand..startMaand+11}:

sum{p in productenStraat3}(productie[p,m]/dagcapaciteit[p])

+ sum{p in productenStraat3AangepastC}runEind[p,m] = aantalDagen1[m]

- stilstandDagen["straat3",m]

- sum{p in {"prodH123", "prodG3", "prodD2K", "prodJ", "prodI"}}

(omstel[p,m]*omstelDagen[p])

+ stilstandStart["straat3",m] * verwOmstelDagen["straat3"];

subject to capaciteitStraat5 {s in straten5,

m in startMaand..startMaand+11}:

sum{(p,s) in productenVSstraten}(productie[p,m]/dagcapaciteit[p])

= aantalDagen1[m] - stilstandDagen[s,m];

subject to capaciteitStraatA1 {s in stratenA1,

m in startMaand..startMaand+11}:

sum{(p,s) in productenVSstraten}(productie[p,m]/dagcapaciteit[p])

<= aantalDagen1[m] - stilstandDagen[s,m];

subject to capaciteitStraatA2 {s in stratenA2,

m in startMaand..startMaand+11}:

sum{(p,s) in productenVSstraten}(productie[p,m]/dagcapaciteit[p])

<= aantalDagen1[m] - stilstandDagen[s,m];

subject to capaciteitStraatCD1 {s in stratenCD1}:

sum{m in startMaand..startMaand+11}(sum{(p,s) in productenVSstraten}

(productie[p,m]/dagcapaciteit[p] + runEind[p,m])

+ stilstandAfstel[s]*stilstandStart[s,m]

+ stilstandOpstart[s]*stilstandEind[s,m]

+ sum{(p,s) in productenVSstraten}(omstel[p,m]*omstelDagen[p])

Page 169: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE E. FASE 1: BRONCODE MOD-FILE 146

E

- stilstandStart[s,m]*verwOmstelDagen[s]) <= capaciteitsMaximumStraatCD1;

#### Voorwaarden in verband met tank 3 ####

subject to voorraadTank3_1 {m in startMaand-1..startMaand+11}:

sum{p in productenInTank3}(productieTank3Bin[p,m])=1;

subject to voorraadTank3_2 {p in productenInTank3,

m in startMaand-1..startMaand+11}:

voorraadTank3[p,m] <= maxTank3[p]*productieTank3Bin[p,m];

subject to toewijzingTank3 {m in startMaand..startMaand+11}:

sum{t in startMaand-1..m}(stilstandStart["straatCD1",t]

- stilstandEind["straatCD1",t]) = productieTank3Bin["prodA2",m];

# Omstel in tank 3

subject to koppelingTank3 {(p1,p2) in {("prodC","prodD2K"),("prodC","prodJ"),

("prodD1","prodI"), ("prodD1","prodC"), ("prodC","prodD1"),

("prodA2","prodD2K"),("prodA2","prodJ"), ("prodA2","prodI"),

("prodA2","prodC"), ("prodA2","prodD1")}, m in startMaand..startMaand+11}:

productieTank3Bin[p1,m]

<= 1-sum{t in startMaand-1..m}(runStart[p2,t] - runEind[p2,t]);

subject to omstelTank3_1 {m in startMaand..startMaand+11}:

omstelT3[m]

>= productieTank3Bin["prodA2",m-1] + stilstandEind["straatCD1",m] - 1;

subject to omstelTank3_2 {m in startMaand..startMaand+11}:

omstelT3[m]

>= productieTank3Bin["prodA2",m] + stilstandStart["straatCD1",m] - 1;

subject to omstelTank3_3 {m in startMaand..startMaand+11}:

omstelT3[m] >= 2*productieBinair["prodA2T3",m]

- productieTank3Bin["prodA2",m-1] - productieTank3Bin["prodA2",m];

subject to omstelTank3_4 {m in startMaand..startMaand+11}:

productieTank3Bin["prodA2",m-1] + productieTank3Bin["prodA2",m]

<= 2- stilstandEind["straatCD1",m] - stilstandStart["straatCD1",m];

# Capaciteitsbeperking tank 3

subject to voorraadTank3_4 {m in startMaand..startMaand+11}:

sum{p in productenInTank3}(tank3DagenLeeg[p,m] + tank3DagenVul[p,m]

+ tank3DagenTussen[p,m])

<= aantalDagen1[m] - omstelDagen["straatT3"]*omstelT3[m];

Page 170: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE E. FASE 1: BRONCODE MOD-FILE 147

E

subject to voorraadTank3_5_1 {p in {p1 in productenInTank3: p1 <> "prodA2"},

m in startMaand..startMaand+11}:

tank3DagenLeeg[p,m]

>= productie[p,m]/dagcapaciteit[p] - (1-productieTank3Bin[p,m-1])*62;

subject to voorraadTank3_5_2 {m in startMaand..startMaand+11}:

tank3DagenLeeg["prodA2",m] >= productie["prodA2T3",m]/dagcapaciteit["prodA2"]

- (1-productieTank3Bin["prodA2",m-1])*62;

subject to voorraadTank3_6 {p in productenInTank3, s in straten1en3en4en5en6,

m in startMaand..startMaand+11}:

tank3DagenLeeg[p,m] >= sum{(p,p2,s) in productenVoorEnNaTank3}

(productie[p2,m]/dagcapaciteit[p2]) - (1-productieTank3Bin[p,m-1])*62;

subject to voorraadTank3_7_2 {m in startMaand..startMaand+11}:

tank3DagenVul["prodA2",m] >= productie["prodA2T3",m]/dagcapaciteit["prodA2"]

- (1 - productieTank3Bin["prodA2",m] + productieTank3Bin["prodA2",m-1])*62;

subject to voorraadTank3_7_1 {p in {p1 in productenInTank3: p1<>"prodA2"},

m in startMaand..startMaand+11}:

tank3DagenVul[p,m] >= productie[p,m]/dagcapaciteit[p]

- (1 - productieTank3Bin[p,m] + productieTank3Bin[p,m-1])*62;

subject to voorraadTank3_8_1 {p in {p1 in productenInTank3: p1<>"prodA2"},

m in startMaand..startMaand+11}:

tank3DagenTussen[p,m] >= productie[p,m]/dagcapaciteit[p]

- (productieTank3Bin[p,m] + productieTank3Bin[p,m-1])*62;

subject to voorraadTank3_8_2 {m in startMaand..startMaand+11}:

tank3DagenTussen["prodA2",m] >= productie["prodA2T3",m]/dagcapaciteit["prodA2"]

- (productieTank3Bin["prodA2",m] + productieTank3Bin["prodA2",m-1])*62;

subject to voorraadTank3_9 {p in productenInTank3, s in straten1en3en4en5en6,

m in startMaand..startMaand+11}:

tank3DagenTussen[p,m] >= sum{(p,p2,s) in productenVoorEnNaTank3}

(productie[p2,m]/dagcapaciteit[p2]) - (productieTank3Bin["prodA2",m]

+ productieTank3Bin["prodA2",m-1])*62;

#### Straat 3 ####

# 70 ton D2

subject to D2K_1 {m in startMaand..startMaand+11}:

productie["prodD2",m] + productie["prodK",m] = productie["prodD2K",m];

subject to D2K_2 {m in startMaand..startMaand+11}:

productie["prodD2",m] <= productie["prodD2K",m]/2 +

Page 171: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE E. FASE 1: BRONCODE MOD-FILE 148

E

(2 - runStart["prodD2K",m] - runEind["prodD2K",m])*31*dagcapaciteit["prodD2K"];

subject to D2K_3 {m in startMaand..startMaand+11}:

productie["prodK",m] <= productie["prodD2K",m]/2 +

(2 - runStart["prodD2K",m] - runEind["prodD2K",m])*31*dagcapaciteit["prodD2K"];

subject to D2K_4 {m in startMaand..startMaand+11}:

sum{t in startMaand-1..m} productie["prodD2",t]

>= sum{t in startMaand-1..m} productie["prodK",t];

subject to D2K_5 {m in startMaand..startMaand+11}:

sum{t in startMaand-1..m} productie["prodD2",t]

<= sum{t in startMaand-1..m}productie["prodK",t]

+ 70*sum{t in startMaand-1..m}(runStart["prodD2K",t] - runEind["prodD2K",t]);

subject to D2K_6 {m in startMaand..startMaand+11}:

hv[70,m] + hv[140,m] + hv[210,m] <= 1;

subject to D2K_7 {m in startMaand..startMaand+11}:

exactTonD2*hv[140,m] + exactTonD2*2*hv[210,m] +

exactTonD2*3*(runStart["prodD2K",m]-1) <= productie["prodK",m];

subject to D2K_8 {m in startMaand..startMaand+11}:

exactTonD2*hv[140,m] + exactTonD2*2*hv[210,m]

+ exactTonD2*3*(runStart["prodD2K",m]-1) <= productie["prodD2",m];

subject to D2K_9 {m in startMaand..startMaand+11}:

exactTonD2*hv[70,m] + exactTonD2*2*hv[140,m] + exactTonD2*3*hv[210,m]

- exactTonD2*3*(runStart["prodD2K",m]-1) >= productie["prodK",m];

subject to D2K_10 {m in startMaand..startMaand+11}:

exactTonD2*hv[70,m] + exactTonD2*2*hv[140,m] + exactTonD2*3*hv[210,m]

- exactTonD2*3*(runStart["prodD2K",m]-1) >= productie["prodD2",m];

# Straat 3: Restrictie 74: J en D2K in blok produceren

subject to JenD2KinBlok_1 {m in startMaand..startMaand+11}:

sum{t in startMaand..m}(runEind["prodD2K",t] - runEind["prodJ",t])

<= runStart["prodJ",m];

subject to JenD2KinBlok_2 {m in startMaand..startMaand+11}:

sum{t in startMaand..m}(runEind["prodJ",t] - runEind["prodD2K",t])

<= runStart["prodD2K",m];

subject to JenD2KinBlok_3 {p in {"prodG3","prodH123","prodI"},

m in startMaand..startMaand+11}:

runStart[p,m] <=

Page 172: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE E. FASE 1: BRONCODE MOD-FILE 149

E

2 - sum{t in startMaand..m}(runEind["prodD2K",t]-runEind["prodJ",t])

- sum{t in startMaand-1..m-1}(runStart["prodD2K",t]-runStart["prodJ",t]);

subject to JenD2KinBlok_4 {p in {"prodG3","prodH123","prodI"},

m in startMaand..startMaand+11}:

runStart[p,m] <=

2 - sum{t in startMaand..m}(runEind["prodJ",t]-runEind["prodD2K",t])

- sum{t in startMaand-1..m-1}(runStart["prodJ",t]-runStart["prodD2K",t]);

# Straat 3: Restrictie 76 en 77: Maximaal aantal productieruns voor I, J, D2 en K

subject to maxAantalProducties_1 {p in {"prodI", "prodD2K", "prodJ"}}:

sum{m in startMaand..startMaand+11}runStart[p,m] <= aantalProductieRuns[p];

subject to maxAantalProducties_2 {p in {"prodI", "prodD2K", "prodJ"}}:

sum{m in startMaand..startMaand+11}runEind[p,m] <= aantalProductieRuns[p];

# Straat 3: Res 84: Minimaal 1 productierun van H123 in de koudere maanden

subject to min1RunH123:

1 <= sum{m in koudeMaandRange[1]..koudeMaandRange[2]}

(runStart["prodH123",m] + runEind["prodH123",m])

+ sum{m in koudeMaandRange[3]..koudeMaandRange[4]}(runStart["prodH123",m]);

# Straat 3: Restrictie 31: Na I-productie tank 3 leeg

subject to tank3NaI {m in startMaand..startMaand+11}:

1 - runEind["prodI",m] >= productieTank3Bin["prodC",m];

# Straat 3: Restrictie 31: Na JD2K-productie tank 3 leeg

subject to tank3NaJD2K_1 {m in startMaand..startMaand+11}:

sum{t in startMaand..m}(runEind["prodD2K",t] - runEind["prodJ",t])

= res31Plus[m] - res31Min[m];

subject to tank3NaJD2K_2 {m in startMaand..startMaand+11}:

res31Plus[m]

>= sum{t in startMaand..m}(runEind["prodD2K",t] - runEind["prodJ",t]);

subject to tank3NaJD2K_3 {m in startMaand..startMaand+11}:

res31Min[m]

>= - sum{t in startMaand..m}(runEind["prodD2K",t] - runEind["prodJ",t]);

subject to tank3NaJD2K_4 {m in startMaand..startMaand+11}:

1 - productieTank3Bin["prodD1",m]

>= runEind["prodD2K",m] - res31Plus[m] - res31Min[m];

Page 173: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE E. FASE 1: BRONCODE MOD-FILE 150

E

subject to tank3NaJD2K_5 {m in startMaand..startMaand+11}:

1 - productieTank3Bin["prodD1",m]

>= runEind["prodJ",m] - res31Plus[m] - res31Min[m];

#### Beginvoorwaarden ####

subject to vraagAanbod_1 {p in productenEindenMolen}:

initieleVoorraad[p] = voorraad[p,startMaand-1];

subject to tank1En2 {p in productenInTank1En2}:

initieleTank1En2[p] = voorraadTank1En2[p,startMaand-1];

subject to voldoendeD2productie_2:

voorraadTank4["prodD2", startMaand-1] = initieleTank4["prodD2"];

subject to voorraadInitieelTankB {p in productenInTankB}:

voorraadTankB[p,startMaand-1] = initieelTankB[p];

subject to voorraadInitieelVatenEnIBC {p in productenInVatenEnIBC}:

voorraadVatenEnIBC[p,startMaand-1] = initieelVatenEnIBC[p];

subject to voorraadInitieelContB {p in productenInTankB}:

voorraadContB[p,startMaand-1] = initieelContB[p];

subject to voorraadTank3_3 {p in productenInTank3}:

voorraadTank3[p, startMaand-1] = initieleTank3[p];

subject to begin_stilstand_1 {s in straten1en3en4en5en6enA1enA2enCD1enMolen}:

stilstandDagen[s,startMaand-1] = stilstandDagenInitieel[s];

subject to begin_stilstand_2 {s in straten1en3en4en5en6enA1enA2enCD1enMolen}:

stilstandStart[s,startMaand-1] = stilstandStartInitieel[s];

subject to begin_stilstand_3 {s in straten1en3en4en5en6enA1enA2enCD1enMolen}:

stilstandEind[s,startMaand-1] = stilstandEindInitieel[s];

subject to begin_productie_1 {p in productenStraten1en4en6enMolen union

productenStraat3 union {"prodO", "prodD2K"}}:

productie[p,startMaand-1] = productieInitieel[p];

subject to begin_productie_2 {p in productenStraten1en3Cen4en6enCD1enMolen}:

runStart[p,startMaand-1] = runStartInitieel[p];

subject to begin_productie_3 {p in productenStraten1en3Cen4en6enCD1enMolen}:

runEind[p,startMaand-1] = runEindInitieel[p];

subject to begin_productie_4 {p in {"prodH1","prodH2","prodH3"}}:

Page 174: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE E. FASE 1: BRONCODE MOD-FILE 151

E

productieBinair[p,startMaand-1] = productieInitieel[p];

subject to initieelTekorten {p in {productenVerkoop union productenA2Tank

union productenA2Tank12 union productenA2Tank3}}:

tekorten[p,startMaand-1] = 0;

#### Overige voorwaarden ####

# Efficientie productie A1

subject to minAantalDagenA1 {s in stratenA1}:

sum{m in startMaand..startMaand+11}(aantalDagen1[m]-stilstandDagen[s,m])

>= aantalMaandenProductieA1*30;

subject to minProcentueleProductieA1 {s in stratenA1,

(p,s) in productenVSstraten}:

sum{m in startMaand..startMaand+11}(productie[p,m]) >=

minimaleProductieA1/100*aantalMaandenProductieA1*30*dagcapaciteit[p];

# Doorgeven van stilstanden

subject to geenProductieF{m in startMaand..startMaand+11}:

productie["prodF",m]

<= (aantalDagen1[m]-stilstandIngepland["straatE",m])*dagcapaciteit["prodF"];

subject to geenProductieN{m in startMaand..startMaand+11}:

productie["prodN",m]

<= (aantalDagen1[m]-stilstandIngepland["AW2",m])*dagcapaciteit["prodN"];

subject to geenProductieH123{m in startMaand..startMaand+11}:

productie["prodH1",m]/dagcapaciteit["prodH1"]

+ productie["prodH2",m]/dagcapaciteit["prodH2"]

+ productie["prodH3",m]/dagcapaciteit["prodH3"]

<= (aantalDagen1[m]-stilstandIngepland["AW1",m]);

# Minimale afvalwaterdebiet

subject to afvalwaterAW2 {m in startMaand..startMaand+11}:

sum{p in productenAfval}(productie[p,m]/dagcapaciteit[p]*ADebiet[p])

>= minADebiet*(aantalDagen1[m] - stilstandIngepland["AW2",m]);

# Restrictie 45: maximale productiestilstand installatie 2 is 8 weken

subject to maxProductieStilstandInstallatie2 {m in startMaand..startMaand+10}:

sum{p in productenInstallatie2}(productieBinair[p,m+1])

>= 1-sum{p in productenInstallatie2}(productieBinair[p,m]);

Page 175: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE E. FASE 1: BRONCODE MOD-FILE 152

E

subject to maxProductieStilstandInstallatie2_BW:

sum{p in productenInstallatie2}(productieBinair[p,startMaand])

>= productieInstallatie2;

# Restrictie 48: tijdens juli en augustus: straat 1 of straat 3 stil

subject to straat1en3Zomer

{m in {{7,8} union {19,20}}: m >= startMaand && m <= startMaand+11}:

sum{p in {productenStraat1 union productenStraat3}}

(productie[p,m]/dagcapaciteit[p])

+ sum{p in {productenStraat1 union productenStraat3AangepastC}}runEind[p,m]

+ sum{p in productenStraat1}(omstel[p,m]*omstelDagen[p])

+ sum{p in {"prodH123", "prodG3", "prodD2K", "prodJ", "prodI"}}

(omstel[p,m]*omstelDagen[p]) <= aantalDagen1[m];

# Restrictie 62: enkel productie van M op straat 4 na een bepaalde datum

subject to 62_1 {j in startJaar..startJaarM4-2, m in startMaand..startMaand+11}:

productie["prodM4",m]=0;

subject to 62_2 {j in startJaar..startJaarM4-1,

m in startMaand..startMaandM4+12-1: m<=startMaand+11}:

productie["prodM4",m]=0;

subject to 62_3 {j in startJaar..startJaarM4, m in startMaand..startMaandM4-1}:

productie["prodM4",m]=0;

# Restrictie 63: M6 en N productie zoveel mogelijk als de O productie ook loopt

subject to M6nietO_1 {m in startMaand..startMaand+11}:

productie["prodM6",m]/dagcapaciteit["prodM6"]

- productie["prodO",m]/dagcapaciteit["prodO"] <= M6nietO[m];

subject to NnietO_1 {m in startMaand..startMaand+11}:

productie["prodN",m]/dagcapaciteit["prodN"]

+ productie["prodM6",m]/dagcapaciteit["prodM6"]

+ sum{p in productenStraat6}(omstel[p,m]*omstelDagen[p])

- stilstandStart["straat6",m]*verwOmstelDagen["straat6"]

- productie["prodO",m]/dagcapaciteit["prodO"] <= NnietO[m];

# Restricties 88-91 en 96

subject to res89 {m in startMaand..startMaand+11}:

sum{p in productenStraten1en3C} omstelDagen[p]*omstel[p,m] <= 16;

subject to res90 {m in startMaand..startMaand+11}:

sum{p in productenStraten4en6} omstelDagen[p]*omstel[p,m] <= 16;

Page 176: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE E. FASE 1: BRONCODE MOD-FILE 153

E

subject to res91 {m in startMaand..startMaand+11}:

sum{p in productenStraten1en3Cen4en6} omstelDagen[p]*omstel[p,m] <= 16;

subject to res96 {m in startMaand..startMaand+11}:

sum{p in productenGemalen} omstelDagen[p]*omstel[p,m] <= 16;

#### Elke correcte maand uit fase 2 wordt vastgelegd ####

subject to vastleggen_1 {p in productenAlles, m in startMaand..maandF2-1}:

vasteProductie[p,m] = productie[p,m];

subject to vastleggen_2 {p in productenStraten1en3Cen4en6enCD1enMolen,

m in startMaand..maandF2-1}:

vasteOmstel[p,m] = omstel[p,m];

subject to vastleggen_3 {m in startMaand..maandF2-1}:

vasteOmstelT3[m] = omstelT3[m];

subject to vastleggen_4 {s in straten1en3en4en5en6enA1enA2enCD1enMolen,

m in startMaand..maandF2-1}:

vasteStilstandStart[s, m] = stilstandStart[s, m];

subject to vastleggen_5 {s in straten1en3en4en5en6enA1enA2enCD1enMolen,

m in startMaand..maandF2-1}:

vasteStilstandEind[s, m] = stilstandEind[s, m];

subject to vastleggen_6 {s in straten1en3en4en5en6enA1enA2enCD1enMolen,

m in startMaand..maandF2-1}:

vasteStilstandDagen[s, m] = stilstandDagen[s, m];

subject to vastleggen_7 {p in producten union productenA2Tank union

{"prodH123", "prodD2K"}, m in startMaand..maandF2-1}:

vasteProductieBinair[p,m] = productieBinair[p, m];

subject to vastleggen_8 {s in productenStraten1en3Cen4en6enCD1enMolen,

m in startMaand..maandF2-1}:

vasteRunStart[s, m] = runStart[s, m];

subject to vastleggen_9 {s in productenStraten1en3Cen4en6enCD1enMolen,

m in startMaand..maandF2-1}:

vasteRunEind[s, m] = runEind[s, m];

Page 177: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

FFase 2: broncode mod-file

###################################################################

# Programmacode Hierarchische productieplanning fase 2: #

# Model-file #

###################################################################

############################

#### Sets en parameters ####

############################

# De meeste spreken voor zich en dus zijn ze er uit gelaten

problem Fase2;

# ----------------------------------------

###############################

#### Beslissingsvariabelen ####

###############################

var makespan{straten1en3en4en5en6enA1enA2enCD1enMolen} integer >= 0;

# Het aantal dagen prod noodzakelijk om aan de ruwe schatting te voldoen

var DP{productenAlles,

1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10} binary;

# Binaire variabele is er productie is op dag d van product p of niet

var DQ{producten union productenViaA1 union productenViaA2 union

productenA2Tank union productenA2Tank12 union productenA2Tank3,

aantalDagen2[maandF2-1]+1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10} >= 0;

154

Page 178: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE F. FASE 2: BRONCODE MOD-FILE 155

F

# Productiehoeveelheid van p op dag d

var S{straten1en3en4en5en6enA1enA2enCD1enMolen,

1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10} binary;

# Binaire var die aangeeft of er een stilstand is op dag d van straat s

var OM{omstelDuo,

1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10} binary;

# Bin var die aangeeft of er een omstel aan de gang is tussen twee producten

var OMT3{aantalDagen2[maandF2-1]-1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}

binary;

# Bin var die aangeeft of er een omstel in tank 3 noodzakelijk is of niet

var QVT12{productenInTank1En2,

1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10} >= 0;

# Hoeveelheid A2 in tanken 1 en 2 op elke dag

var QVT3{productenInTank3,

1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10} >= 0;

# Hoeveelheid van product in tank 3 op einde van periode d

var PVT3{productenInTank3,

1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10} binary;

# Bin var die aangeeft welk product p zich op dag d in tank 3 bevindt

var QVT4{productenInTank4,

1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10} >= 0;

# Hoeveelheid van product in tank 4 op einde van periode d

var PVT4{productenInTank4,

1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10} binary;

# Bin var die aangeeft welk product p zich op dag d in tank 4 bevindt

var QVVIBC{productenInVatenEnIBC,

1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10} >= 0;

# Hoeveelheid van producten in vaten en IBC’s op het einde van periode d

var QVTB{productenInTankB,

1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10} >= 0;

# Hoeveelheid producten in tank B op het einde van periode d

var QVCB{productenInTankB,

1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10} >= 0;

# Hoeveelheid producten in tankcontainers op het einde van periode d

var DVraag{{"prodA2"},

Page 179: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE F. FASE 2: BRONCODE MOD-FILE 156

F

1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10} >= 0;

# variabele die aangeeft op welke dag er aan de vraag van A2 wordt voldaan

var helpDebiet{aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10} binary;

# Helpvariabele in verband met het minimale afvalwaterdebiet

#######################

#### Doelfunctie ####

#######################

minimize totaleMakespan:

(totMakespan-aantalDagen2[maandF2])*1000

+ sum{s in straten1en3en4en5en6enA1enA2enCD1enMolen} makespan[s];

#######################

#### Restricties ####

#######################

#### Definitie van de makespan ####

subject to perStraat1Mogelijkheid{s in straten1en3en4en5en6enA1enA2enCD1enMolen,

d in aantalDagen2[maandF2-1]+1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

sum{(p,s) in productenVSstraten3}DP[p,d] +

sum{(p1,s) in productenVSstraten}(sum{(p1,p2) in omstelDuo}(OM[p1,p2,d]))

+ S[s,d] <= 1;

subject to aaneensluiten_1 {s in straten1en3en4en5en6enA1enA2enCD1enMolen,

d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+9}:

sum{(p,s) in productenVSstraten3}DP[p,d]

+ sum{(p1,s) in productenVSstraten}(sum{(p1,p2) in omstelDuo}(OM[p1,p2,d]))

+ S[s,d] >= sum{(p,s) in productenVSstraten3}DP[p,d+1]

+ sum{(p1,s) in productenVSstraten}(sum{(p1,p2) in omstelDuo}(OM[p1,p2,d+1]))

+ S[s,d+1];

subject to aaneensluiten_2 {s in straten1en3en4en5en6enA1enA2enCD1enMolen,

d in aantalDagen2[maandF2-1]..aantalDagen2[maandF2-1]}:

sum{(p,s) in productenVSstraten3}DP[p,d]

+ sum{(p1,s) in productenVSstraten}(sum{(p1,p2) in omstelDuo}(OM[p1,p2,d]))

+ S[s,d] + initVrij[s,d] >= sum{(p,s) in productenVSstraten3}DP[p,d+1]

+ sum{(p1,s) in productenVSstraten}(sum{(p1,p2) in omstelDuo}(OM[p1,p2,d+1]))

+ S[s,d+1];

subject to defMakespan {s in straten1en3en4en5en6enA1enA2enCD1enMolen}:

makespan[s] = sum{d in aantalDagen2[maandF2-1]+1..

Page 180: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE F. FASE 2: BRONCODE MOD-FILE 157

F

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}

(sum{(p,s) in productenVSstraten3}DP[p,d]

+ sum{(p1,s) in productenVSstraten}(sum{(p1,p2) in omstelDuo}(OM[p1,p2,d]))

+ S[s,d]);

subject to makespan_1 {s in straten1en3en4en5en6enA1enA2enCD1enMolen}:

totMakespan >= makespan[s];

#### Voldoen aan schattingen uit fase 1 ####

subject to binVSree {p in producten union productenViaA1 union productenViaA2

union productenA2Tank union productenA2Tank12 union productenA2Tank3

diff {"prodB", "prodM"}, d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

DQ[p,d] <= dagcapaciteit[p]*DP[p,d];

subject to voldoenAanSchatting_2 {p in productenOutput}:

sum{d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}(DQ[p,d])

>= schattingQ[p,maandF2];

subject to BProductie_1F2 {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

DQ["prodB",d] >= ondergrensB/100*DQ["prodA1",d];

subject to BProductie_2F2 {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

DQ["prodB",d] <= bovengrensB/100*DQ["prodA1",d];

#### Flowvoorwaarden ####

# Flow A1

subject to flowA1 {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

sum{p in productenViaA1}(verbruik[p,"prodA1"]*DQ[p,d])

+ verbruik["prodA2","prodA1"]*DQ["prodA2",d] <= DQ["prodA1",d];

# Flow A2

subject to flowA2 {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

QVT12["prodA2",d-1] + QVT3["prodA2",d-1] + QVVIBC["prodA2",d-1]

+ DQ["prodA2",d] >= QVT12["prodA2",d] + QVT3["prodA2",d]

+ QVVIBC["prodA2",d] + DVraag["prodA2",d]

+ sum{p in productenViaA2 union productenUitA2}(verbruik[p,"prodA1"]*DQ[p,d]);

Page 181: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE F. FASE 2: BRONCODE MOD-FILE 158

F

subject to vraagA2:

sum{d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}(DVraag["prodA2",d])

>= vraag["prodA2",maandF2] - schattingT["prodA2",maandF2]

+ schattingT["prodA2",maandF2-1];

subject to flowA2_T12 {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

QVT12["prodA2",d-1] + QVVIBC["prodA2",d-1] + DQ["prodA2T12",d]

>= QVT12["prodA2",d] + QVVIBC["prodA2",d] + DVraag["prodA2",d]

+ sum{p in productenA2Tank12}(verbruik[p,"prodA1"]*DQ[p,d]);

subject to flowA2_T3 {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

QVT3["prodA2",d-1] + DQ["prodA2T3",d] >= QVT3["prodA2",d]

+ sum{p in productenA2Tank3}(verbruik[p,"prodA1"]*DQ[p,d]);

subject to flowA2_2 {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

DQ["prodA2T12",d] + DQ["prodA2T3",d] = DQ["prodA2",d];

# Flow tank 3 en 4

subject to flowC_T3 {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

QVT3["prodC",d-1] + DQ["prodC",d]

= QVT3["prodC",d] + sum{p in productenUitC}(verbruik[p,"prodC"]*DQ[p,d]);

subject to flowD1_T3 {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

QVT3["prodD1",d-1] + DQ["prodD1",d]

= QVT3["prodD1",d] + sum{p in productenUitD1}(verbruik[p,"prodD1"]*DQ[p,d]);

subject to flowD2_T4 {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

QVT4["prodD2",d-1] + DQ["prodD2",d]

= QVT4["prodD2",d] + verbruik["prodK","prodD1"]*DQ["prodK",d];

# Flow tussen rechtstreekse producten

subject to BProductie_0 {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

DP["prodB",d] = DP["prodA1",d];

subject to algemeneFlow_2a {(p1,p) in productenDuos, d in

aantalDagen2[maandF2-1]+1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

DP[p1,d] <= DP[p,d];

Page 182: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE F. FASE 2: BRONCODE MOD-FILE 159

F

subject to algemeneFlow_Molen {(pniet,pwel) in productenNietGemalenWel, d in

aantalDagen2[maandF2-1]+1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

DP[pwel,d] <= DP[pniet,d];

subject to productieA1indienA1inWerking {p in productenViaA1, d in

aantalDagen2[maandF2-1]+1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

DP[p,d] <= DP["prodA1",d];

subject to productieViaA2IndienA1nietInWerking {p in productenViaA2, d in

aantalDagen2[maandF2-1]+1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

DP[p,d] <= 1 - DP["prodA1",d];

subject to algemeneFlow_3 {(p1,p2) in productenOpvolgingDuo, d in

aantalDagen2[maandF2-1]+1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

DP[p2,d] <= DP[p1,d];

# Flow tussen deelproducten

subject to algemeneFlow_1 {(p1,p2,p) in productenTriples1, d in

aantalDagen2[maandF2-1]+1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

DP[p1,d] + DP[p2,d] = DP[p,d];

subject to algemeneFlow_2c {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

DP["prodD2K",d] <= DP["prodD2",d] + DP["prodK",d];

subject to algemeneFlow_2d {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

DP["prodH123",d] <= DP["prodH1",d] + DP["prodH2",d] + DP["prodH3",d];

subject to algemeneFlow_2b {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

DP["prodG",d] <= DP["prodG1",d] + DP["prodG3",d];

subject to doorgeven_1 {(p1,p2,p3) in productenTriples, d in

aantalDagen2[maandF2-1]+1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

DQ[p1,d] + DQ[p2,d] = DQ[p3,d];

#### Voorraden ####

subject to maxVoorraadTank12 {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

QVT12["prodA2",d] <= maxTank1En2["prodA2"];

subject to maxVatenIBC_B {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

Page 183: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE F. FASE 2: BRONCODE MOD-FILE 160

F

QVVIBC["prodB",d] <= maxVatenEnIBC["prodB"];

subject to maxVoorraadTankB {p in productenInTankB, d in

aantalDagen2[maandF2-1]+1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

QVTB[p,d] <= maxTankB[p];

subject to maxContainerB {p in productenInTankB, d in

aantalDagen2[maandF2-1]+1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

QVCB[p,d] <= maxContB[p];

subject to maxVatenIBC_A2 {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

QVVIBC["prodA2",d] <= maxVatenEnIBC["prodA2"]*totaleVraag["prodA2"]/365;

#### Voorwaarden in verband met tank 3 en 4 ####

# Tank 3

subject to 1productOfOmstelPerDag {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

sum{p in productenInTank3}PVT3[p,d] + OMT3[d] <= 1;

subject to maxVoorraadTank3_1 {p in productenInTank3, d in

aantalDagen2[maandF2-1]+1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

QVT3[p,d] <= maxTank3[p]*PVT3[p,d];

subject to maxVoorraadTank3_2 {p in productenInTank3, d in

aantalDagen2[maandF2-1]..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+9}:

QVT3[p,d] <= maxTank3[p]*PVT3[p,d+1];

subject to algemeneFlow_T3 {(pTank, p) in productenOpvolgingDuoOverT3, d in

aantalDagen2[maandF2-1]+1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

DP[p,d] <= PVT3[pTank,d];

# Omstelling tank 3

subject to omstelT3_1 {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+9}:

OMT3[d+1] >= PVT3["prodA2",d] - PVT3["prodA2",d+1];

subject to omstelT3_2 {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+8}:

OMT3[d+2] >= PVT3["prodA2",d] - PVT3["prodA2",d+1];

subject to omstelT3_3 {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+9}:

OMT3[d] >= PVT3["prodA2",d+1] - PVT3["prodA2",d];

Page 184: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE F. FASE 2: BRONCODE MOD-FILE 161

F

subject to omstelT3_4 {d in aantalDagen2[maandF2-1]+2..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+9}:

OMT3[d-1] >= PVT3["prodA2",d+1] - PVT3["prodA2",d];

subject to omstelT3Init_1 {p in {"prodC","prodD1"}}:

DQ[p, aantalDagen2[maandF2-1]+1] <= vrijT3["prodA2",2];

subject to omstelT3Init_2 {p in {"prodC","prodD1"}}:

DQ[p, aantalDagen2[maandF2-1]+2] <= vrijT3["prodA2",1];

subject to omstelT3Init_3:

DQ["prodA2T3", aantalDagen2[maandF2-1]+1] <= vrijT3["prodCD1",2];

subject to omstelT3Init_4:

DQ["prodA2T3", aantalDagen2[maandF2-1]+2] <= vrijT3["prodCD1",1];

# Tank 4

subject to algemeneFlow_T4 {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

DP["prodK",d] <= PVT4["prodD2",d];

subject to relatieReeelBinairVT4_1 {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

QVT4["prodD2",d] <= 70*PVT4["prodD2",d];

#### Productierun ####

subject to minDuurRun_2 {p in productenStraten1en3Cen4en6enCD1enMolen

diff {"prodD2K", "prodC", "prodD1"}, d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+9}:

sum{t in d-runMinLengte[p]+1..d}DP[p,t] + sum{(p,s) in productenVSstraten}

sum{t in d-runMinLengte[p]+1..aantalDagen2[maandF2-1]}initVrij[s,t]

>= runMinLengte[p]*(EP[p] + DP[p,d] - DP[p,d+1] - 1);

subject to minDuurRunInit {p in productenStraten1en3Cen4en6enCD1enMolen

diff {"prodD2K", "prodC", "prodD1"}}:

DP[p, aantalDagen2[maandF2-1]+1] >= EP[p] - SP[p];

subject to omstel_5 {s in straten1en3en4en6enCD1enMolen,

(p,s) in productenVSstraten,d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+9}:

sum{(p1,s) in productenVSstraten3}DP[p1,d+1]

+ sum{(p1,s) in productenVSstraten}(sum{(p1,p2) in omstelDuo}(OM[p1,p2,d+1]))

+ S[s,d+1] <= 1 - DP[p,d] + DP[p,d+1] + EP[p];

Page 185: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE F. FASE 2: BRONCODE MOD-FILE 162

F

subject to minDuurRun_3 {d in aantalDagen2[maandF2-1]..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+9}:

sum{t in d-runMinLengte["prodO"]+1..d}DP["prodO",t]

+ sum{t in d-runMinLengte["prodO"]+1..aantalDagen2[maandF2-1]}initVrij["straat5",t]

>= runMinLengte["prodO"]*(SS["straat5"] + DP["prodO",d] - DP["prodO",d+1] - 1);

subject to minDuurRun_3e {d in aantalDagen2[maandF2-1]..

..aantalDagen2[maandF2-1]}:

sum{t in d-runMinLengte["prodO"]+1..d}DP["prodO",t]

+ sum{t in d-runMinLengte["prodO"]+1..aantalDagen2[maandF2-1]}initVrij["straat5",t]

>= runMinLengte["prodO"]*(SS["straat5"] + initVrij["straat5",d]

- somSSES["straat5"] - DP["prodO",d+1] - 1);

#### Stilstanden ####

# Ingeplande stilstanden

subject to ingeplandeStilstand {s in straten1en3en4en5en6enA1enA2enCD1enMolen,

d in ingeplandeS[s]}:

S[s,d] = 1;

# Minimale duur van een stilstand

subject to minDuurStilstand_1 {s in {"straat5", "straatA1"}, d in

aantalDagen2[maandF2-1]..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+9}:

sum{t in d-stilstandMinLengteStraat[s]+1..d}(S[s,t])

+ sum{t in d-stilstandMinLengteStraat[s]+1..aantalDagen2[maandF2-1]}(initVrij[s,t])

>= stilstandMinLengteStraat[s]*(ES[s] + S[s,d] - S[s,d+1] - 1);

subject to minDuurStilstand_2 {s in straten1en3en4en5en6enA1enA2enCD1enMolen, d in

aantalDagen2[maandF2-1]..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+9}:

sum{t in d-(stilstandOpstart[s]+stilstandAfstel[s])+1..d}(S[s,t])

+ sum{t in d-(stilstandOpstart[s]+stilstandAfstel[s])+1..

..aantalDagen2[maandF2-1]}(initVrij[s,t])

>= (stilstandAfstel[s]+stilstandOpstart[s])*(ES[s] + S[s,d] - S[s,d+1] - 1);

subject to minDuurStilstand_3 {d in aantalDagen2[maandF2-1]..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+9}:

sum{t in d-(verwOmstelDagen["straatMolen"])+1..d}(S["straatMolen",t])

+ sum{t in d-(verwOmstelDagen["straatMolen"])+1..aantalDagen2[maandF2-1]}

(initVrij["straatMolen",t]) >= (verwOmstelDagen["straatMolen"])

*(ES["straatMolen"] + S["straatMolen",d] - S["straatMolen",d+1] - 1);

subject to minDuurStilstand_4 {s in straten1en3en4en5en6enA1enA2enCD1enMolen}:

S[s, aantalDagen2[maandF2-1]] >= somSSES[s];

subject to minDuurStilstand_5 {s in straten1en3en4en5en6enA1enA2enCD1enMolen,

Page 186: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE F. FASE 2: BRONCODE MOD-FILE 163

F

d in aantalDagen2[maandF2-1]+1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

S[s,d] <= SS[s] + ES[s] + somSSES[s];

#### Omstellingen ####

subject to omstel_1 {s in straten1en3en4en6enCD1, (p,s) in productenVSstraten,

d in aantalDagen2[maandF2-1]+1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+9}:

sum{(p,p2) in omstelDuo} OM[p,p2,d+1]

>= DP[p,d] - DP[p,d+1] - S[s,d+1] + EP[p] - 1;

subject to omstel_2 {(p1,p2) in omstelDuo, d in

aantalDagen2[maandF2-1]..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+7}:

sum{t in d+1..d+OD[p1,p2]}OM[p1,p2,t] >= OD[p1,p2]*(OM[p1,p2,d+1]-OM[p1,p2,d]);

subject to omstel_3 {(p1,p2) in omstelDuo, (p,p2) in omstelDuo, d in

aantalDagen2[maandF2-1]..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+9}:

DP[p,d+1] <= 1 - OM[p1,p2,d] + OM[p1,p2,d+1];

subject to omstel_4 {(p1,p2) in omstelDuo, d in

aantalDagen2[maandF2-1]+1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

OM[p1,p2,d] <= EP[p1];

subject to omstel_7 {(p1,p2) in omstelDuo, (p1,s) in productenVSstraten, d in

aantalDagen2[maandF2-1]-somInitVrij[s]+1..aantalDagen2[maandF2-1]}:

sum{(p1,p) in omstelDuo}OM[p1,p,d] >= initLP[p1] - somSSES[s] - somSPEP[s];

subject to omstel_8 {(p1,p2) in omstelDuo, (p1,s) in productenVSstraten}:

sum{(p1,p) in omstelDuo}OM[p1,p,aantalDagen2[maandF2-1]+1]

>= initLP[p1] - somSSES[s] - somSPEP[s] - initVrij[s,aantalDagen2[maandF2-1]];

subject to omstel_4e {(p1,p2) in omstelDuo, d in 1..aantalDagen2[maandF2-1]}:

OM[p1,p2,d] <= SP[p1];

subject to omstel_6 {(p1,p2) in omstelDuo, (p1,s) in productenVSstraten, d in

1..aantalDagen2[maandF2-1]-somInitVrij[s]}:

OM[p1,p2,aantalDagen2[maandF2-1]-5] = 0;

#### JD2K-productie ####

subject to D2K_run {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+9}:

DP["prodK",d+1] >= DP["prodD2",d] - DP["prodD2",d+1];

subject to blok_1 {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+9}:

OM["prodD2K","prodJ",d+1] >= EP["prodD2K"] - SP["prodD2K"]

+ SP["prodJ"] + DP["prodD2K",d] - DP["prodD2K",d+1] - 2;

Page 187: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE F. FASE 2: BRONCODE MOD-FILE 164

F

subject to blok_2 {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+9}:

OM["prodD2K","prodJ",d+1] >= EP["prodD2K"] + SP["prodJ"]

- EP["prodJ"] + DP["prodD2K",d] - DP["prodD2K",d+1] - 2;

subject to blok_3 {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+9}:

OM["prodJ","prodD2K",d+1] >= EP["prodJ"] - SP["prodJ"]

+ SP["prodD2K"] + DP["prodJ",d] - DP["prodJ",d+1] - 2;

subject to blok_4 {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+9}:

OM["prodJ","prodD2K",d+1] >= EP["prodJ"] + SP["prodD2K"]

- EP["prodD2K"] + DP["prodJ",d] - DP["prodJ",d+1] - 2;

subject to blok_5 :

sum{d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+9}

(OM["prodD2K","prodJ",d]+OM["prodJ","prodD2K",d])

>= EP["prodD2K"] + SP["prodD2K"] + SP["prodJ"] + EP["prodJ"] - 3;

#### Beginvoorwaarden ####

subject to initProductie {p in productenAlles, d in 1..aantalDagen2[maandF2-1]}:

initDP[p,d] = DP[p,d];

subject to initStilstand {s in straten1en3en4en5en6enA1enA2enCD1enMolen,

d in 1..aantalDagen2[maandF2-1]-1}:

initS[s,d] = S[s,d];

subject to tank1En2_F2 {p in productenInTank1En2}:

initT12[p] = QVT12[p, aantalDagen2[maandF2-1]];

subject to tank3 {p in productenInTank3}:

initT3[p] = QVT3[p,aantalDagen2[maandF2-1]];

subject to tank4:

initT4["prodD2"] = QVT4["prodD2", aantalDagen2[maandF2-1]];

subject to VIBC {p in productenInVatenEnIBC}:

initVIBC[p] = QVVIBC[p,aantalDagen2[maandF2-1]];

subject to tankB {p in productenInTankB}:

initTB[p] = QVTB[p,aantalDagen2[maandF2-1]];

subject to CB {p in productenInTankB}:

Page 188: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE F. FASE 2: BRONCODE MOD-FILE 165

F

initCB[p] = QVCB[p,aantalDagen2[maandF2-1]];

#### Overige voorwaarden ####

# Doorgeven van stilstanden

subject to stopE {p in {"prodF"}, d in ingeplandeS["straatE"]}:

DP[p,d] = 0;

subject to stopAW1 {p in {"prodH1","prodH2","prodH3"}, d in ingeplandeS["AW1"]}:

DP[p,d] = 0;

subject to stopAW2 {p in {"prodN"}, d in ingeplandeS["AW2"]}:

DP[p,d] = 0;

# Restrictie 44: Minimale afvalwaterdebiet indien AW2 in werking

subject to afvalwaterAW2_F2 {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10 diff ingeplandeS["AW2"]}:

sum{p in productenAfval}(DQ[p,d]/dagcapaciteit[p]*ADebiet[p])

>= minADebiet*helpDebiet[d];

subject to helpDebiet_1 {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10} :

helpDebiet[d]*100 >= sum{p in productenAfval}DP[p,d];

# Restrictie 48: stilstand tijdens zomervakantie

subject to zomer {d in aantalDagen2[maandF2-1]+1..

..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10:

maandF2 == 7 || maandF2==8 || maandF2==19 || maandF2==20}:

sum{p in productenStraat3 union productenStraat1}DP[p,d] <= 1;

# Restrictie 62: enkel productie van M op straat 4 na een bepaalde datum

subject to M62_1 {j in startJaar..startJaarM4-2, d in

aantalDagen2[maandF2-1]+1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10}:

DP["prodM4",d]=0;

subject to M62_2 {j in startJaar..startJaarM4-1, d in

aantalDagen2[maandF2-1]+1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10,

m in maandF2..maandF2: m <=startMaandM4+12-1}:

DP["prodM4",d]=0;

subject to M62_3 {j in startJaar..startJaarM4, d in

aantalDagen2[maandF2-1]+1..aantalDagen2[maandF2-1]+aantalDagen2[maandF2]+10,

m in maandF2..maandF2: m <=startMaandM4-1}:

Page 189: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE F. FASE 2: BRONCODE MOD-FILE 166

F

DP["prodM4",d]=0;

testvoorwanneerhijeenblackboxgeeftzienbijwelkeletterhijstoptikbenbenieudtdd

Page 190: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

GFase 1 en 2: broncode run-file

Algemene opmerking hierbij: de meeste van de procedures zijn niet opgenomen enkel maar

vermeld aangezien de uitwerking ervan niet relevant is voor dit specifieke probleem en omdat

de bijlage anders te omvangrijk werd.

###################################################################

# Programmacode Hierarchische productieplanning fase 1 en 2: #

# Run-File #

###################################################################

model Fase1en2.mod;

data Fase1en2.dat;

# Definieren van opties voor beide modellen:

problem Fase1;

option presolve_eps 10e-6;

option cplex_options ’mipgap=0.01’;

option cplex_options "timelimit=10800";

problem Fase2;

option cplex_options "timelimit=3600";

option print_separator " ";

###########################################

#### Definieren van het aantal dagen ####

###########################################

167

Page 191: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE G. FASE 1 EN 2: BRONCODE RUN-FILE 168

G

let maxAantalDagen[1] := 31; let maxAantalDagen[2] := 28;

let maxAantalDagen[3] := 31; let maxAantalDagen[4] := 30;

let maxAantalDagen[5] := 31; let maxAantalDagen[6] := 30;

let maxAantalDagen[7] := 31; let maxAantalDagen[8] := 31;

let maxAantalDagen[9] := 30; let maxAantalDagen[10] := 31;

let maxAantalDagen[11] := 30; let maxAantalDagen[12] := 31;

let maxAantalDagen[13] := 31; let maxAantalDagen[14] := 28;

let maxAantalDagen[15] := 31; let maxAantalDagen[16] := 30;

let maxAantalDagen[17] := 31; let maxAantalDagen[18] := 30;

let maxAantalDagen[19] := 31; let maxAantalDagen[20] := 31;

let maxAantalDagen[21] := 30; let maxAantalDagen[22] := 31;

let maxAantalDagen[23] := 30; let maxAantalDagen[24] := 31;

for {j in 1..12}{

let aantalDagen[j] := maxAantalDagen[j];

let aantalDagen[j+12] := maxAantalDagen[j];

}

# Aangezien de startmaand ook slechts een halve maand kan zijn:

let aantalDagen[startMaand] := maxAantalDagen[startMaand] - startDag + 1;

##################

#### Fase 1 ####

##################

#### Definitie van het aantal dagen waarvoor fase 1 wordt doorlopen ####

for {j in 1..24}{

let aantalDagen1[j] := aantalDagen[j];

}

#### Inlezen van alle gegevens uit Excel ####

# We overlopen slechts 1 maal de procedure.

# Voor elke noodzakelijk parameter uit de restricties, voor elke variabele

# van de productieplanning en voor de beginvoorwaarden van de productieplanning

# moet echter zo’n procedure doorlopen worden.

# Als voorbeeld het inlezen van de datum uit een tabel in Excel.

# Inlezen datum:

set index;

param Datum{1..4};

table datumTabel "ODBC" "Inputvariabelen.xls" "tabelDatum" IN:

index <- [Index], Datum;

Page 192: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE G. FASE 1 EN 2: BRONCODE RUN-FILE 169

G

read table datumTabel;

let startDag := Datum[1]; # Geeft huidige dag weer

let startMaand := Datum[2]; # Geeft huidige maand weer

let startJaar := Datum[3]; # Geeft huidige jaar weer

#### Procedure voor restrictie 84, bepalen van de koude maanden ####

#### Procedure om de correcte stilstanden ingepland door het management ####

#### te definieren afhankelijk van de input ####

# Einddatum bepalen

# Procedure om stilstanden door te geven tussen de straten

# Procedure om het aantal ingeplande stilstanddagen per maand te bepalen

#### Inlezen van de beginvoorwaarden ####

# Inlezen stilstanddagen vorige maand

# Vastleggen parameters in verband met deze stilstanden van de initiele maand

# Kijken hoelang installatie 2 al stilstaat in verband met restrictie 45

# Inlezen productiedagen vorige mand

# Vastleggen parameters in verband met de productie in de vorige maand

# Inlezen beginvoorwaarden voor de omstellingen

# Aanpassen parameters die met deze omstellingen gepaard gaan

###################################

#### Parameters voor display ####

###################################

# initialiseren van de parameters voor de output van de resultaten

###############################

#### Oplossen van FASE 1 ####

###############################

# De maanden bepalen waarvoor de productiecijfers reeds vastliggen,

# initieel zijn er dat nog geen:

let maandF2 := startMaand;

# De eerste oplossing genereren van fase 1

Page 193: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE G. FASE 1 EN 2: BRONCODE RUN-FILE 170

G

solve Fase1;

#####################################

#### Display resultaten Fase 1 ####

#####################################

# Procedure voor het berekenen van alle noodzakelijke gegevens van de output

# o.a. kosten, totale voorraden, totale producties, ...

# Wegschrijven van alle resultaten naar .txt-files.

# Hier geven we een deel van deze procedure. Deze procedure komt later nog terug.

# De tekortkosten worden weggeschreven naar een .txt-file met naam outputF1-1.

display tekortKosten >outputF1-1.txt;

# Wegschrijven van de productieplanning naar Excel,

# een heel kort stukje van de code ziet er als volgt uit:

for {i in startMaand..12}{

printf "\tVoorr 1-%d\t\t%d\t\t\t\t\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d

\t\t\t\t%d\t\t%d\t\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d

\t\t%d\t\t%d\t\t%d\n",

i, voorraad["prodL",i-1] - tekorten["prodL",i-1],

voorraad["prodM",i-1] - tekorten["prodM",i-1],

voorraad["prodN",i-1] - tekorten["prodN",i-1],

voorraad["prodO",i-1] - tekorten["prodO",i-1],

voorraad["prodG",i-1] - tekorten["prodG",i-1],

voorraad["prodF",i-1] - tekorten["prodF",i-1],

voorraad["prodH1",i-1] - tekorten["prodH1",i-1],

voorraad["prodH2",i-1] - tekorten["prodH2",i-1],

voorraad["prodH3",i-1] - tekorten["prodH3",i-1],

voorraad["prodI",i-1] - tekorten["prodI",i-1],

voorraad["prodJ",i-1] - tekorten["prodJ",i-1],

voorraad["prodK",i-1] - tekorten["prodK",i-1],

voorraad["prodA1",i-1],

voorraad["prodA2",i-1] - tekorten["prodA2",i-1],

voorraad["prodB",i-1] - tekorten["prodB",i-1],

voorraad["prodC",i-1], voorraad["prodD1",i-1],

voorraad["prodD2",i-1],

voorraadMaandSom[i-1]

>productieplanning_outputF1-1.xls;

printf "\tProductie\t\t%d\t\t\t\t0\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d

\t\t\t\t%d\t\t%d\t\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t

\t%d\t\t%d\t\t%d\n",

productie["prodL",i], productie["prodM",i], productie["prodN",i],

Page 194: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE G. FASE 1 EN 2: BRONCODE RUN-FILE 171

G

productie["prodO",i], productie["prodG",i], productie["prodF",i],

productie["prodH1",i], productie["prodH2",i], productie["prodH3",i],

productie["prodI",i],productie["prodJ",i], productie["prodK",i],

productie["prodA1",i], productie["prodA2",i], productie["prodB",i],

productie["prodC",i], productie["prodD1",i], productie["prodD2",i],

productieMaandSom[i] >productieplanning_outputF1-1.xls;

printf "\tVerkoop\t\t%d\t\t\t\t\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t\t\t%d

\t\t%d\t\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n",

vraag["prodL",i], vraag["prodM",i], vraag["prodN",i], vraag["prodO",i],

vraag["prodG",i],vraag["prodF",i], vraag["prodH1",i], vraag["prodH2",i],

vraag["prodH3",i], vraag["prodI",i], vraag["prodJ",i], vraag["prodK",i],

vraag["prodA1",i], vraag["prodA2",i], vraag["prodB",i],vraag["prodC",i],

vraag["prodD1",i], vraag["prodD2",i], vraagMaandSom[i]

>productieplanning_outputF1-1.xls;

print >productieplanning_outputF1-1.xls;

}

# Wegschrijven van de maalplanning naar Excel

##################

#### Fase 2 ####

##################

# Initiele berekeningen noodzakelijk voor fase 2

#### Initialiseren input van fase 2 ####

let deltaD[startMaand-1] := 0;

let aantalDagen2[startMaand-1] := aantalDagen[startMaand-1];

let aantalDagen2[startMaand] := aantalDagen[startMaand] + deltaD[startMaand-1];

#### Initialiseren van de vorige maand ####

# Productiedagen van de vorige maand en bijhorende parameters

# Vrije dagen op het einde van de vorige maand

# Beginvoorwaarden van Tank 3

##############################################################

#### Doorlopen van de verschillende maanden voor fase 2 ####

##############################################################

repeat while (maandF2 <= startMaand+11){

# Vastleggen van de schattingen en de parameters uit fase 1

# die nodig zijn voor elke maand van fase 2: voorraden,

Page 195: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE G. FASE 1 EN 2: BRONCODE RUN-FILE 172

G

# geschatte productiehoeveelheden, stilstanden, productiecampagnes

# Bepalen van het set dagen van stilstanden door het management vastgelegd

# Initialiseren van de dagen waarop geen omstel mag plaatsvinden,

# inclusief de feestdagen

###############################

#### Oplossen van FASE 2 ####

###############################

solve Fase2;

# Bepalen van het aantal dagen dat er tekort of te veel zijn:

let deltaD[maandF2] := aantalDagen2[maandF2] - totMakespan;

##############################################################

#### Display resultaten Fase 2 van desbetreffende maand ####

##############################################################

####################################################

#### Analyseprocedure: terugkoppeling of niet ####

####################################################

if (deltaD[maandF2] < 0) then {

# Er zijn dus dagen tekort, fase 1 moet heruitgevoerd worden

# met aanpassing van het aantal beschikbare dagen van deze maand

let aantalDagen1[maandF2] := aantalDagen1[maandF2] + deltaD[maandF2];

###############################

#### Oplossen van FASE 1 ####

###############################

solve Fase1;

###################################

#### Display resultaten Fase 1 ####

###################################

} else {

# Er zijn geen dagen tekort, er kan naar de volgende maand worden overgegaan

# Vastleggen van de variabelen van fase 1 voor deze maand:

# Schatting, omstellingen, stilstanden, productiecampagnes

Page 196: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

BIJLAGE G. FASE 1 EN 2: BRONCODE RUN-FILE 173

G

# updaten van de initiele waarden voor fase 2, de gevonden schedule

# wordt de beginvoorwaarde voor de volgende maand

let aantalDagen2[maandF2] := aantalDagen2[maandF2] - deltaD[maandF2];

# Vastleggen van het nieuwe aantal dagen voor de volgende maand voor fase 2

let aantalDagen2[maandF2+1] := aantalDagen[maandF2+1] + deltaD[maandF2];

# Updaten van de maand

let maandF2 := maandF2 + 1;

}

}

#####################################

#### Laatste output resultaten ####

#####################################

# Wegschrijven van de uiteindelijke productieplanning

# Wegschrijven van de uiteindelijke maalplanning

Page 197: Een Hiërarchische Aanpak voor Productieplanning in een ...lib.ugent.be/fulltxt/RUG01/001/418/187/RUG01-001418187_2010_0001_AC.pdf · Een Hiërarchische Aanpak voor Productieplanning

Bibliografie

Axsater, S. (1981). Aggregation of product data for hierarchical production planning. Ope-

rations Research 29 (4), 744–756.

Bitran, G. R., E. A. Haas, en A. C. Hax (1981). Hierarchical production planning: A single

stage system. Operations Research 29 (4), 717–743.

Bitran, G. R., E. A. Haas, en A. C. Hax (1982). Hierarchical production planning: A

two-stage system. Operations Research 30 (2), 232–251.

Bitran, G. R. en A. C. Hax (1977). On the Design of Hierarchical Production Planning

Systems. Decision Sciences 8 (1), 28–55.

Bitran, G. R. en A. C. Hax (1981). Disaggregation and resource allocation using convex

knapsack problems with bounded variables. Management Science 27 (4), 431–441.

Erschler, J., G. Fontan, en C. Merce (1986). Consistency of the disaggregation process in

hierarchical planning. Operations Research 34 (3), 464–469.

Liberatore, M. J. en T. Miller (1985). A Hierarchical Production Planning System. INTER-

FACES 15 (4), 1–11.

Qiu, M. M. en E. E. Burch (1997). Hierarchical production planning and scheduling in

a multi-product, multi-machine environment. International Journal of Production Re-

search 35 (11), 3023 – 3042.

Saad, G. H. (1990). Hierarchical production-planning systems: Extensions and modificati-

ons. The Journal of the Operational Research Society 41 (7), 609–624.

Vicens, E., M. E. Alemany, C. Andres, en J. J. Guarch (2001). A design and application me-

thodology for hierarchical production planning decision support systems in an enterprise

integration context. International Journal of Production Economics 74 (1-3), 5 – 20.

174