Met het volgende zit ik al een tijdje: 3D Bin Packing.
Ik heb een onbeperkt aantal (lege) dozen van verschillende afmetingen, ik stel dat mijn dozen allemaal rechthoekig zijn en dus 3 maten hebben (HxBxD). Stel dat ik bijv. 3 type dozen heb: Small, Medium en Large.
Vervolgens heb ik een X aantal voorwerpen, tevens zijn deze allemaal rechthoekig en hebben dus ook 3 maten (HxBxD).
Nu moet een algoritme voor mij uitrekenen op welke manier ik de MINSTE dozen nodig heb.
Ik heb overal op internet gezocht, google, etc. Ook verschillende boeken en PDF doorgelezen. Dit is een soort infinite, een onoplosbaar probleem. Je kan het namelijk niet berekenen maar slechts benaderen. Nu ben ik toch al een eindje;
Een paar gedachtes:
1) Ik heb bereken alle mogelijke opties, geef al deze opties een soort benchmark cijfer en kies vervolgens degene met het beste cijfer.
2) Ik ga alleen maar van rechthoekige dozen EN voorwerpen uit, dus heb ik hooguit te maken met 3 maten.
3) Een voorwerp kan ik ook kantelen. Wanneer ik een voorwep kan kantelen/roteren zal ik nooit de doos hoeven kantelen, dit is dus een vast gegeven.
4) De maten van de dozen zijn bekend, de maten van de voorwerpen zijn ook bekend. Hiermee is dus tevens het volume bekend van elk bekend. Met het volume alleen kan ik niet rekenen (een lange stok heeft weinig volume maar past niet in een kleine doos). Wel is het zo dat het totaal volume van al mijn (lege) dozen MINSTENS zo groot moet zijn als het totaal volume van al mijn voorwerpen.
5) Wanneer je een onbeperkt aantal dozen hebt (bijv. 3 verschillende type), dan zul je altijd de GROOTSTE (lege) dozen gebruiken, en alleen de laatste doos kan kleiner zijn. Vervolgens kan kijken of ik de andere dozen kan verkleinen. Voorbeeld: Ik heb 70 voorwerpen (alle even groot), dan pak ik in eerste instantie de grootste doos, stop er daar 20 in,. etc..etc.. Vervolgens heb ik er nog 10 over en stop deze in een kleinere doos. Tevens kan ik dan nog kijken of ik i.p.v. de grootste doos (waar ik er dan dus 3 van heb, met elk 20 stuks erin) een kleinere had kunnen gebruiken. (Dit kan ik natuurlijk ook al gelijk bekijken).
Ik heb een me laatst gebogen over een paar For loops die in elkaar zijn gestoken.
Hier heb ik een dergelijk algoritme gevonden: http://www.diku.dk/~pisinger/3dbpp.c, het kan alleen geen voorwerpen kantelen en heeft nog een aantal limitaties.
Mijn doel is: Gebruik zo min mogelijk dozen.
Ik heb een onbeperkt aantal (lege) dozen van verschillende afmetingen, ik stel dat mijn dozen allemaal rechthoekig zijn en dus 3 maten hebben (HxBxD). Stel dat ik bijv. 3 type dozen heb: Small, Medium en Large.
Vervolgens heb ik een X aantal voorwerpen, tevens zijn deze allemaal rechthoekig en hebben dus ook 3 maten (HxBxD).
Nu moet een algoritme voor mij uitrekenen op welke manier ik de MINSTE dozen nodig heb.
Ik heb overal op internet gezocht, google, etc. Ook verschillende boeken en PDF doorgelezen. Dit is een soort infinite, een onoplosbaar probleem. Je kan het namelijk niet berekenen maar slechts benaderen. Nu ben ik toch al een eindje;
Een paar gedachtes:
1) Ik heb bereken alle mogelijke opties, geef al deze opties een soort benchmark cijfer en kies vervolgens degene met het beste cijfer.
2) Ik ga alleen maar van rechthoekige dozen EN voorwerpen uit, dus heb ik hooguit te maken met 3 maten.
3) Een voorwerp kan ik ook kantelen. Wanneer ik een voorwep kan kantelen/roteren zal ik nooit de doos hoeven kantelen, dit is dus een vast gegeven.
4) De maten van de dozen zijn bekend, de maten van de voorwerpen zijn ook bekend. Hiermee is dus tevens het volume bekend van elk bekend. Met het volume alleen kan ik niet rekenen (een lange stok heeft weinig volume maar past niet in een kleine doos). Wel is het zo dat het totaal volume van al mijn (lege) dozen MINSTENS zo groot moet zijn als het totaal volume van al mijn voorwerpen.
5) Wanneer je een onbeperkt aantal dozen hebt (bijv. 3 verschillende type), dan zul je altijd de GROOTSTE (lege) dozen gebruiken, en alleen de laatste doos kan kleiner zijn. Vervolgens kan kijken of ik de andere dozen kan verkleinen. Voorbeeld: Ik heb 70 voorwerpen (alle even groot), dan pak ik in eerste instantie de grootste doos, stop er daar 20 in,. etc..etc.. Vervolgens heb ik er nog 10 over en stop deze in een kleinere doos. Tevens kan ik dan nog kijken of ik i.p.v. de grootste doos (waar ik er dan dus 3 van heb, met elk 20 stuks erin) een kleinere had kunnen gebruiken. (Dit kan ik natuurlijk ook al gelijk bekijken).
Ik heb een me laatst gebogen over een paar For loops die in elkaar zijn gestoken.
Hier heb ik een dergelijk algoritme gevonden: http://www.diku.dk/~pisinger/3dbpp.c, het kan alleen geen voorwerpen kantelen en heeft nog een aantal limitaties.
Mijn doel is: Gebruik zo min mogelijk dozen.
...don't know what should be here...