0.3초 만에 완성하는 3D 화물 적재: LIFO와 완전 회전을 적용한 MaxRects 알고리즘
Django 웹 서비스가 트럭, 컨테이너, 밴 차량군을 위한 3D 화물 적재 문제를 해결합니다. 이 알고리즘은 400개 이상의 SKU 품목을 0.19~0.3초 내에 처리하며, LIFO, 90% 지지 면적, 6축 회전을 고려합니다. Three.js와 연동된 인터페이스는 실시간으로 결과를 시각화하며, 엑셀 업로드와 수동 입력을 지원합니다.
텔레그램 봇에서 본격적인 플랫폼으로의 진화
이 프로젝트는 최적화 엔진으로 시작했습니다: 10,000개 지점을 가진 외판원 문제를 0.4초에 해결하고, 세잎클로버 같은 복잡한 형태의 포장을 1초 미만에 처리했습니다. 텔레그램 봇은 치수를 담은 JSON을 입력받아 좌표를 출력했지만, 소매 업무에는 웹 인터페이스가 필요했습니다.
주요 제품 요구사항:
- 차량군과 화물을 위한 양면 패널 인터페이스.
- 검증 기능이 포함된 엑셀 파싱.
- Three.js를 활용한 인터랙티브 3D 시각화.
기술 스택: Python/Django, Docker 내 PostgreSQL, Three.js 프론트엔드. 속도와 실용성에 중점—완벽한 밀도보다 LIFO가 더 중요합니다.
3D MaxRects 알고리즘: 수학보다 물리학
수정된 3D MaxRects는 화물 공간 내 자유 직육면체 목록을 활용하여 전체 좌표 열거를 피합니다. 벡터화로 8대 차량군에 대해 0.19~0.3초의 성능을 제공합니다.
물리적 실현 가능성 매개변수:
- 완전 회전 (6개 투영): 긴 품목(2400 mm)은 치수가 허용할 경우 수직 또는 모서리 위치를 시도합니다.
- 90% 지지 면적: 상자는 하단 층에 최소 90% 면적으로 놓여 불안정한 해결책을 제거합니다.
- LIFO 순서: 실제 창고를 고려한 하역 순서가 반영됩니다.
시장 비교: 경쟁사들은 수분 또는 수시간이 소요되며, 종종 LIFO와 물리적 제약을 무시합니다.
아키텍처: Django, Docker, 확장성
Docker 컨테이너 내 Django + PostgreSQL 백엔드. Nginx + Gunicorn(3개 작업자)이 내결함성을 보장합니다. 포트 443의 HTTPS는 기업 방화벽을 우회합니다. 400개 SKU 기준 8GB 서버에서 평균 메모리 사용률은 29%입니다.
Django Auth를 통한 인증: 사용자별 데이터 격리, ORM 내 계산 기록. 각 사용자는 자신의 차량군과 화물만 볼 수 있습니다.
인터페이스: 유연한 입력과 세밀한 조정
양면 패널 레이아웃으로 차량군(오른쪽)과 화물(왼쪽)을 분리합니다. 차량군: 치수, 적재 용량, 수량. 화물: 크기, 무게, 수량, 매개변수(LIFO, StackLimit).
입력 옵션:
- 조정을 위한 수동 폼.
- 검증 기능이 포함된 일괄 엑셀 업로드.
최적화 체크박스:
- 기울임: 깨지기 쉬운 화물을 위한 회전 허용/제한.
- 차량군 최적화: 운행 횟수 최소화를 위해 대형 차량 채우기 우선.
시각화 및 결과 내보내기
0.19~0.3초 내 계산 결과가 Three.js로 3D 장면을 출력합니다. SKU별 색상 코딩, 인터랙티브 회전, LIFO 및 지지 검사. 내보내기: PDF 보고서 또는 X, Y, Z 좌표가 포함된 엑셀.
프로덕션 배포
3개 작업자의 Gunicorn + Nginx 리버스 프록시. Docker로 자율성 보장. 테스트: 98% 커버리지, 다중 사용자 부하 하 안정성.
핵심 요약
- 400개 SKU와 8대 차량에 대해 0.19~0.3초 속도.
- 물리적 제약: LIFO, 90% 지지, 6축 회전.
- 물류 인터페이스: 엑셀, 3D 시각화, 데이터 격리.
- 프로덕션 스택: Django, Docker, Nginx/Gunicorn.
- 확장성: 낮은 자원 소비.
— Editorial Team
아직 댓글이 없습니다.