3D-pakowanie ładunków w 0,3 sekundy: algorytm MaxRects z LIFO i pełną rotacją
Serwis internetowy oparty na Django rozwiązuje problem 3D-pakowania ładunków dla floty składającej się z naczep typu euro, kontenerów i pojazdów małotonażowych. Algorytm przetwarza ponad 400 pozycji SKU w 0,19–0,3 sekundy, uwzględniając LIFO, 90% powierzchni nośnej i obrót w 6 osiach. Interfejs z Three.js wizualizuje wyniki w czasie rzeczywistym, obsługując wczytywanie z Excela i ręczne wprowadzanie danych.
Ewolucja od bota Telegram do pełnoprawnej platformy
Projekt rozpoczął się od silników optymalizacyjnych: 0,4 sekundy na problem komiwojażera dla 10 000 punktów, mniej niż 1 sekunda na pakowanie skomplikowanych kształtów, takich jak trójlistniki. Bot Telegram przyjmował JSON z wymiarami i zwracał współrzędne, ale dla handlu detalicznego potrzebny był interfejs internetowy.
Kluczowe wymagania dla produktu:
- Dwupanelowy interfejs dla floty i ładunków.
- Parsowanie Excela z walidacją.
- Interaktywna wizualizacja 3D w Three.js.
Stos technologiczny: Python/Django, PostgreSQL w Dockerze, frontend Three.js. Priorytetem jest szybkość i praktyczność: LIFO ważniejsze niż idealna gęstość.
Algorytm 3D MaxRects: fizyka zamiast matematyki
Zmodyfikowany 3D MaxRects pracuje z listą wolnych prostopadłościanów w nadwoziu, unikając pełnego przeglądu współrzędnych. Wektoryzacja zapewnia wydajność 0,19–0,3 sekundy dla floty z 8 pojazdów.
Parametry fizycznej realizowalności:
- Pełna rotacja (6 projekcji): Długie ładunki (2400 mm) próbują ustawienia pionowego lub na krawędzi, jeśli pozwalają na to gabaryty.
- Powierzchnia nośna 90%: Pudełka opierają się na dolnej warstwie na co najmniej 90% powierzchni, wykluczając wiszące rozwiązania.
- Kolejność LIFO: Uwzględniany jest kolejność rozładunku dla rzeczywistych magazynów.
Porównanie z rynkiem: konkurenci poświęcają minuty lub godziny, często ignorując LIFO i fizykę.
Architektura: Django, Docker i skalowalność
Backend na Django + PostgreSQL w kontenerach Docker. Nginx + Gunicorn (3 workery) zapewnia odporność na awarie. HTTPS na porcie 443 omija korporacyjne zapory ogniowe. Średnie zużycie pamięci — 29% na serwerze z 8 GB przy 400 SKU.
Autoryzacja przez Django Auth: izolacja danych według użytkowników, historia obliczeń w ORM. Każdy widzi tylko swoją flotę i ładunki.
Interfejs: elastyczne wprowadzanie i precyzyjne dostosowanie
Dwupanelowy układ dzieli flotę (po prawej) i ładunek (po lewej). Flota: wymiary, ładowność, ilość. Ładunek: rozmiary, waga, ilość, parametry (LIFO, StackLimit).
Opcje wprowadzania:
- Ręczne formularze do korekt.
- Zbiorcze wczytywanie Excela z walidacją.
Pola wyboru optymalizacji:
- Przechylenie (Tilt): Zezwolenie/zakaz obrotu dla ładunków kruchych.
- Optymalizacja floty: Priorytet wypełniania dużych pojazdów dla minimalizacji kursów.
Wizualizacja i eksport wyników
Obliczenia w 0,19–0,3 sekundy generują scenę 3D w Three.js. Kodowanie kolorami według SKU, interaktywny obrót, sprawdzanie LIFO i podparcia. Eksport: raporty PDF lub Excel ze współrzędnymi X, Y, Z.
Wdrożenie dla produkcji
Gunicorn z 3 workerami + Nginx reverse proxy. Docker zapewnia autonomię. Testowanie: 98% pokrycia, stabilność pod obciążeniem kilku użytkowników.
Co jest ważne
- Szybkość 0,19–0,3 sekundy dla 400 SKU i 8 pojazdów.
- Ograniczenia fizyczne: LIFO, 90% podparcia, 6 osi rotacji.
- Interfejs dla logistyków: Excel, wizualizacja 3D, izolacja danych.
- Stos produkcyjny: Django, Docker, Nginx/Gunicorn.
- Skalowalność: niskie zużycie zasobów.
— Editorial Team
Brak komentarzy.