← Natrag Repo →

3D bin packing (trodimenzijsko pakiranje) pomoću genetskog algoritma

3D bin packinggenetski algoritamEMSDFTRC-2metaheuristike

TLDR


Motivacija

Problem pakiranja se u literaturi pojavljuje već od 1970-ih, prvo u 1D i 2D oblicima. Rani pristupi su bili jednostavne heuristike poput First-Fit i Best-Fit, dok se s rastom računalnih mogućnosti sve više prelazi na metaheuristička rješenja (posebno od 90-ih do danas). Praktične primjene su brojne: logistika, skladištenje, planiranje transporta, proizvodnja i općenito svaki sustav gdje želimo minimizirati broj spremnika ili maksimizirati iskorištenje volumena. Ovaj problem je NP-težak, pa se u praksi često koriste aproksimacijski i heuristički pristupi. Posebno mi je zanimljivo što je problem vrlo prisutan u industriji dugo vremena, ali se i dalje aktivno istražuje zbog svoje složenosti i praktične važnosti. U ovom radu fokus je na 3D varijanti uz realistične detalje poput rotacija i nehomogene spremnike.


Problem

Imamo konačni skup objekata, gdje je svaki objekt i definiran dimenzijama (wᵢ, hᵢ, dᵢ). Svaki spremnik b ima dimenzije (Wᵦ, Hᵦ, Dᵦ). Cilj je svakom objektu dodijeliti spremnik i poziciju (te eventualno rotaciju) tako da:

Objekte je moguće ortogonalno rotirati, što je ekvivalentno permutaciji dimenzija, pa svaki objekt ima do 6 konfiguracija.


Pristup

Rješenje se sastoji od dvije komponente:

  1. Genetski algoritam (GA) koji pretražuje prostor rješenja (redoslijedi i orijentacije).
  2. Heuristika pakiranja koja za zadani kromosom pokušava izgraditi konkretan raspored u spremnicima i vraća koliko je spremnika potrebno.

U svakoj iteraciji GA:


Kodiranje rješenja (kromosom)

Kromosom jedinke je vektor duljine 2n + m:

Zašto realni brojevi u [0,1]?

Rotacije se ne kodiraju direktno kao {0..5}, nego kao koeficijent koji se kasnije mapira na jednu od dozvoljenih rotacija u trenutnom kontekstu spremnika.


Heuristika pakiranja

Empty Maximal Spaces (EMS)

Slobodni prostor u spremniku prikazujem pomoću liste EMS volumena: svaki EMS predstavlja najveći pravokutni prazni blok koji trenutno postoji u spremniku. Nakon svakog smještanja objekta lista EMS-ova se ažurira:

  1. odabere se EMS u koji objekt stane,
  2. generiraju se novi EMS-ovi na temelju presjeka objekta i odabranog EMS-a,
  3. uklone se degenerirani ili redundantni EMS-ovi,
  4. opcionalno se uklone EMS-ovi u koje ne stane nijedan preostali objekt.

U praksi se objekt pozicionira u stražnji donji lijevi kut odabranog EMS-a, što ograničava eksploziju broja novih EMS-ova i drži prostor što kompaktnijim.

Heuristike odabira EMS-a

Implementirao sam i usporedio više heuristika:

DFTRC-2 je praktično lokalna pretraga: za svaki objekt provjerava sve dozvoljene rotacije kroz sve EMS-ove i bira najbolju opciju prema kriteriju udaljenosti. U samom pakiranju ipak se koristi rotacija zapisana u kromosomu, pa kromosom i dalje ima značajan utjecaj na cijeli ishod.


Genetski algoritam

Selekcija

Koristio sam elitizam (npr. 5% populacije ostaje netaknuto) i turnirsku selekciju:

Križanje

Križanje se pokazalo kao neočekivano osjetljiv dio zbog prirode enkodiranja:

Zato se SBX i uniformni pristupi nisu pokazali dobrima (slaba stopa učenja; najbolja jedinka se često dobivala praktički slučajno). Najbolje se pokazalo one-point crossover:

Mutacija

Mutacija prolazi kroz svaki gen i s malom vjerojatnošću zamijeni vrijednost novom iz [0,1]. Testirao sam više stopa mutacije (1%, 5%, 10%) kako bih našao kompromis između stabilnosti i eksploracije.


Fitness funkcija

Najjednostavniji fitness bi bio samo:

Međutim, ako dva rješenja koriste isti broj spremnika, korisno je dodatno razlikovati kvalitetu pakiranja. Zato se u fitness dodaje i relativno popunjenje najmanje iskorištenog spremnika, npr.:

Fitness = broj spremnika + (najmanje iskorišten volumen / kapacitet spremnika)

To daje finiju gradaciju između rješenja istog broja spremnika. Problem je minimizacijski: cilj je smanjiti fitness.


Analiza rezultata

Kriterij zaustavljanja

Na jednostavnijim instancama optimalno rješenje se pojavilo već nakon nekoliko desetaka generacija, dok se kod složenijih instanci uočava brzo učenje na početku i stagnacija nakon ~100 generacija. Kao praktičan kriterij zaustavljanja koristio sam 100 generacija, a svako mjerenje sam ponovio 20 puta.

Usporedba heuristika pakiranja

Heuristika pakiranja ima velik utjecaj jer evaluacija gradi cijelo rješenje. U testovima je DFTRC-2 imala jasnu prednost u odnosu na First-Fit i Best-Fit. Zanimljivo, First-Fit se pokazao boljim od Best-Fit, iako bi intuitivno Best-Fit često trebao bolje popunjavati prostor. U praksi to ovisi o dinamici EMS-a i o tome kako izbor manjeg EMS-a utječe na buduće mogućnosti pakiranja.

Usporedba heuristika

Usporedba stopa mutacije

Testirao sam 1%, 5% i 10% mutacije:

Usporedba mutacije


Zaključak

Trodimenzijsko pakiranje, iako na prvu djeluje trivijalno, u praksi je vrlo zanimljiv i zahtjevan optimizacijski problem koji je aktualan desetljećima. U ovom radu sam implementirao rješenje koje kombinira:

Analiza je pokazala da:


Daljnje ideje

← Natrag Repo →