ládapakolási probléma
Kiejtés
- IPA: [ ˈlaːdɒpɒkolaːʃiprobleːmɒ]
Főnév
Ládapakolási probléma (Bin Packing Problem)
A ládapakolási probléma egy NP-nehéz kombinatorikus optimalizációs probléma. A cél az, hogy egy adott tárgyhalmazt úgy helyezzük el fix méretű ládákba (konténerekbe), hogy a felhasznált ládák száma minimális legyen.
Probléma formális megfogalmazása
- Adott:
- Egy ( S ) tárgyhalmaz, ahol minden tárgy mérete ( s_i ) (( 0 < s_i )).
- Ládák (konténerek), amelyek kapacitása 1.
- Cél:
- A tárgyakat úgy helyezzük el a ládákba, hogy a ládák száma minimális legyen.
Megoldási stratégiák
- Heurisztikus algoritmusok (gyors, de nem garantáltan optimális):
- First Fit: A tárgyat az első olyan ládába helyezzük, amelybe belefér.
- Best Fit: A tárgyat abba a ládába helyezzük, amelyben a legkevesebb hely marad, de még belefér.
- Next Fit: Csak az aktuálisan nyitott ládába próbálunk pakolni, és ha nem fér bele, nyitunk egy újat.
- Exakt algoritmusok (optimális megoldás, de lassabb):
- Dinamikus programozás.
- Branch and Bound technika.
- Metaheurisztikák:
- Genetikus algoritmusok.
- Szimulált lehűlés (Simulated Annealing).
Python implementáció - First Fit algoritmus
Az alábbi implementáció a First Fit algoritmust mutatja be, amely egyszerű, de hatékony megoldást kínál a ládapakolási problémára.
def first_fit(items, bin_capacity=1.0):
"""
First Fit algoritmus a ládapakolási problémára.
:param items: A tárgyak listája (méretekkel).
:param bin_capacity: A ládák kapacitása (alapértelmezett: 1.0).
:return: A ládák tartalma.
"""
bins = [] # Lista a ládákról, amelyek tartalmazzák a tárgyakat
for item in items:
placed = False
# Próbáljuk elhelyezni a tárgyat a már nyitott ládák egyikébe
for b in bins:
if sum(b) + item <= bin_capacity:
b.append(item)
placed = True
break
# Ha nem találtunk helyet, nyitunk egy új ládát
if not placed:
bins.append([item])
return bins
# Példa használat
items = [0.4, 0.7, 0.2, 0.5, 0.6, 0.3, 0.8, 0.2]
print("Tárgyak mérete:", items)
# Ládapakolás futtatása
result = first_fit(items)
# Eredmény kiírása
print("\nLádák tartalma:")
for i, b in enumerate(result):
print(f"Láda {i + 1}: {b}")
print(f"\nFelhasznált ládák száma: {len(result)}")
Kimenet
Példa bemeneti adatokkal:
Tárgyak mérete: [0.4, 0.7, 0.2, 0.5, 0.6, 0.3, 0.8, 0.2] Ládák tartalma: Láda 1: [0.4, 0.2, 0.3] Láda 2: [0.7, 0.2] Láda 3: [0.5, 0.3] Láda 4: [0.6] Láda 5: [0.8] Felhasznált ládák száma: 5
Elemzés
- First Fit algoritmus:
- Időbonyolultság: ( O(n m) ), ahol ( n ) a tárgyak száma, ( m ) a ládák száma.
- Heurisztikus módszer: Nem mindig adja meg az optimális megoldást.
- Optimalizáció:
- Ha a tárgyakat csökkenő sorrendben helyezzük a ládákba (First Fit Decreasing), az eredmény gyakran közelebb áll az optimálishoz.
First Fit Decreasing (FFD) algoritmus
def first_fit_decreasing(items, bin_capacity=1.0):
"""First Fit Decreasing algoritmus."""
items_sorted = sorted(items, reverse=True)
return first_fit(items_sorted, bin_capacity)
# Példa használat
result_ffd = first_fit_decreasing(items)
print("\nFFD algoritmus - Ládák tartalma:")
for i, b in enumerate(result_ffd):
print(f"Láda {i + 1}: {b}")
print(f"\nFelhasznált ládák száma (FFD): {len(result_ffd)}")
Kimenet (FFD)
FFD algoritmus - Ládák tartalma: Láda 1: [0.8, 0.2] Láda 2: [0.7, 0.3] Láda 3: [0.6, 0.4] Láda 4: [0.5, 0.2] Felhasznált ládák száma (FFD): 4
Összefoglalás
- Ládapakolási probléma:
- Cél: A tárgyak minimális számú ládába helyezése.
- Nehézség: NP-nehéz probléma.
- Algoritmusok:
- First Fit: Egyszerű és gyors.
- First Fit Decreasing (FFD): Optimalizált változat, amely gyakran jobb eredményt ad.
- Python implementáció:
- Heurisztikus módszerekkel gyorsan közelítő megoldás érhető el.
Az FFD algoritmus gyakorlati esetekben jól használható, mivel gyors és jó közelítő megoldást ad.
Fordítások
Tartalom
- ládapakolási probléma - Értelmező szótár (MEK)
- ládapakolási probléma - Etimológiai szótár (UMIL)
- ládapakolási probléma - Szótár.net (hu-hu)
- ládapakolási probléma - DeepL (hu-de)
- ládapakolási probléma - Яндекс (hu-ru)
- ládapakolási probléma - Google (hu-en)
- ládapakolási probléma - Helyesírási szótár (MTA)
- ládapakolási probléma - Wikidata
- ládapakolási probléma - Wikipédia (magyar)