Voor het bedrijf waar ik werk moeten we het bestaande proces van het maken van werkorders optimaliseren. Ik zal in korte lijnen schetsen wat het probleem is.
We hebben meerdere pakhuizen waar onze grondstof (tabak) ligt opgeslagen. Op het moment dat de tabak in balen of kisten binnenkomt, wordt het geanalyseerd op een aantal belangrijke eigenschappen zoals nicotinegehalte, suikers, kwaliteit, aanwezigheid van kevers en meer van dat soort dingen.
De aard van de tabak (soort tabak, manier van drogen, herkomst) bepaalt de tabaksklassse. Dit zijn min of meer gestandaardiseerde groepen van tabak. Een tabak valt altijd in één klasse.
De tabak zoals die in sigaretten en shag zit noemen we een blend. Een blend bestaat uit een aantal tabaksklasses. Hier zijn recepten voor waarbij bekend is dat er x% van klasse A in een blend moet, y% van klasse B en z% van klasse C. Het aantal klassen per blend varieert van 4 tot 20, maar de meesten hebben 8-12 klassen. Er zijn nog allerlei extra randvoorwaarden zoals mogelijke vervangingen van klasses (bv: als klasse A er niet is, gebruik dan klasse B, of gebruik klasse C en D in een verhouding van 40-60%). Die laat ik hier even buiten beschouwing.
Ik kom nu bij het probleem, want om een werkorder te maken voor een blend, moet ik eerst kijken welke klassen daarin moeten en vervolgens kijken naar wat ik op voorraad heb per klasse. Er wordt een soort 'default' werkorder gemaakt, die puur op basis van FIFO, prioriteiten en blokkades tabaksbalen selecteert. Vervolgens wordt deze order doorgerekend om te zien of deze voldoet aan de eisen. Op dit moment wordt er vooral gekeken naar nicotine. Per blend ligt vast tussen welke grenzen de nicotine moet zitten, maar er zijn ook grenzen voor bijvoorbeeld suikers. In de meeste gevallen voldoen de default order dan ook niet en moeten er tabaksbalen worden gewisseld voor een ander om een correcte blend te maken. De huidige oplossing is een min of meer brute force aanpak waarbij alle mogelijke combinaties een voor een worden bekeken tot er een combinatie uitrolt die voldoet aan de eisen. Als je bedenkt dat een gemiddelde blend bestaat uit 10 klassen en er gemiddeld 10 tabaksbalen per klasse op voorraad liggen, dan betekent dat 10 ^ 10 combinaties van tabaksbalen. Da's een beetje veul om allemaal door te rekenen. In het verleden is er al wat geoptimaliseerd aan het proces maar de rek is er wel uit. Bovendien willen we op meer criteria kunnen selecteren dan alleen nicotine, dus het moet op de schop.
Maar we zijn vast niet de eersten die een probleem als dit moeten tackelen. Het probleem is alleen: hoe heet mijn probleem of hoe heet het algoritme dat ik zoek? Ik heb al wat gezocht en kwam onder andere een pagina tegen met de meest gebruikte algoritmes voor data mining maar daar heb ik in zoverre nog niet zoveel aan. Ik vraag me ook af of mijn probleem een data mining probleem is of een optimalisatieprobleem, maar ik zou wat goede handvatten kunnen gebruiken.
We hebben meerdere pakhuizen waar onze grondstof (tabak) ligt opgeslagen. Op het moment dat de tabak in balen of kisten binnenkomt, wordt het geanalyseerd op een aantal belangrijke eigenschappen zoals nicotinegehalte, suikers, kwaliteit, aanwezigheid van kevers en meer van dat soort dingen.
De aard van de tabak (soort tabak, manier van drogen, herkomst) bepaalt de tabaksklassse. Dit zijn min of meer gestandaardiseerde groepen van tabak. Een tabak valt altijd in één klasse.
De tabak zoals die in sigaretten en shag zit noemen we een blend. Een blend bestaat uit een aantal tabaksklasses. Hier zijn recepten voor waarbij bekend is dat er x% van klasse A in een blend moet, y% van klasse B en z% van klasse C. Het aantal klassen per blend varieert van 4 tot 20, maar de meesten hebben 8-12 klassen. Er zijn nog allerlei extra randvoorwaarden zoals mogelijke vervangingen van klasses (bv: als klasse A er niet is, gebruik dan klasse B, of gebruik klasse C en D in een verhouding van 40-60%). Die laat ik hier even buiten beschouwing.
Ik kom nu bij het probleem, want om een werkorder te maken voor een blend, moet ik eerst kijken welke klassen daarin moeten en vervolgens kijken naar wat ik op voorraad heb per klasse. Er wordt een soort 'default' werkorder gemaakt, die puur op basis van FIFO, prioriteiten en blokkades tabaksbalen selecteert. Vervolgens wordt deze order doorgerekend om te zien of deze voldoet aan de eisen. Op dit moment wordt er vooral gekeken naar nicotine. Per blend ligt vast tussen welke grenzen de nicotine moet zitten, maar er zijn ook grenzen voor bijvoorbeeld suikers. In de meeste gevallen voldoen de default order dan ook niet en moeten er tabaksbalen worden gewisseld voor een ander om een correcte blend te maken. De huidige oplossing is een min of meer brute force aanpak waarbij alle mogelijke combinaties een voor een worden bekeken tot er een combinatie uitrolt die voldoet aan de eisen. Als je bedenkt dat een gemiddelde blend bestaat uit 10 klassen en er gemiddeld 10 tabaksbalen per klasse op voorraad liggen, dan betekent dat 10 ^ 10 combinaties van tabaksbalen. Da's een beetje veul om allemaal door te rekenen. In het verleden is er al wat geoptimaliseerd aan het proces maar de rek is er wel uit. Bovendien willen we op meer criteria kunnen selecteren dan alleen nicotine, dus het moet op de schop.
Maar we zijn vast niet de eersten die een probleem als dit moeten tackelen. Het probleem is alleen: hoe heet mijn probleem of hoe heet het algoritme dat ik zoek? Ik heb al wat gezocht en kwam onder andere een pagina tegen met de meest gebruikte algoritmes voor data mining maar daar heb ik in zoverre nog niet zoveel aan. Ik vraag me ook af of mijn probleem een data mining probleem is of een optimalisatieprobleem, maar ik zou wat goede handvatten kunnen gebruiken.
... en gaat over tot de orde van de dag