Tổng quan Series | Chương tiếp theo: Tóm tắt điều hành: Bức tranh toán học phân bổ đơn hàng →


📖 Bản tiếng Anh (English Edition)

Điều kiện tiên quyết: Nắm vững kiến trúc microservices phân tán, kỹ thuật lập trình đồng thời trong Go, cấu trúc dữ liệu đồ thị và cơ chế khóa giao dịch ACID trong cơ sở dữ liệu quan hệ.

Answer-first: Hệ thống phân bổ đơn hàng thương mại điện tử quy mô lớn đòi hỏi giải bài toán NP-hard dưới 100 mili-giây. Giáo trình chuyên sâu 10 phần giải mã toàn diện từ đặt chỗ tồn kho nguyên tử, quy hoạch tuyến tính đến mô hình Amazon CONDOR và tối ưu hóa định tuyến nhặt hàng kho bãi.


1. Sự Dịch Chuyển Mô Hình Hoàn Tất Đơn Hàng Đa Kênh

Trong các tập đoàn bán lẻ và thương mại điện tử quy mô lớn (như Amazon, Walmart, Shopee, Tiki), mạng lưới kho bãi vật lý đã chuyển mình từ mô hình các tổng kho tập trung đơn lẻ sang một đồ thị phân tán đa tầng (Multi-Echelon Distributed Mesh). Một mạng lưới bán lẻ toàn quốc điển hình bao gồm:

  1. Tổng Kho Mega (Mega-Fulfillment Centers - Mega-FC): Các trung tâm diện tích trên 100.000 m² lưu trữ hàng trăm nghìn mã SKU chiều sâu, đóng vai trò là hạt nhân trung chuyển và lưu kho số lượng lớn.
  2. Trung Tâm Phân Loại Vùng (Regional Distribution Centers - RDC): Các trạm trung chuyển trung gian nằm trong bán kính 50–100 km quanh các vùng đô thị lớn, chuyên lưu trữ hàng hóa tiêu dùng nhanh (FMCG).
  3. Kho Tối Đô Thị (Urban Dark Stores & Micro-Fulfillment Centers - MFC): Các điểm nhặt hàng tự động mật độ cao đặt ngay trong lòng thành phố, phục vụ các khung giờ giao hàng hỏa tốc từ 30 phút đến 2 giờ.
  4. Hệ Thống Cửa Hàng Bán Lẻ Vật Lý: Đóng vai trò là các trạm tồn kho tuyến đầu phục vụ mô hình Giao từ cửa hàng (Ship-From-Store - SFS) và Mua online nhận tại cửa hàng (BOPIS).
flowchart TD
    subgraph MultiEchelonNetwork["Mạng Lưới Hoàn Tất Đơn Hàng Đa Tầng Phân Tán"]
        MegaFC["Tổng Kho Mega (Mega-FC)<br/>Lưu trữ SKU dài hạn & Dự trữ lớn"]
        RDC1["Trung Tâm Phân Loại Miền Bắc (RDC)<br/>Hàng tiêu dùng nhanh luân chuyển cao"]
        RDC2["Trung Tâm Phân Loại Miền Nam (RDC)<br/>Hàng tiêu dùng nhanh luân chuyển cao"]
        MFC1["Kho Tối Đô Thị (Hà Nội - Dark Store)<br/>Giao hỏa tốc dưới 2 giờ"]
        MFC2["Kho Tối Đô Thị (TP.HCM - Dark Store)<br/>Giao hỏa tốc dưới 2 giờ"]
        Store["Cửa Hàng Bán Lẻ (BOPIS/SFS)<br/>Tận dụng tồn kho quầy kệ"]
    end

    MegaFC -->|Vận chuyển đường dài Line-Haul| RDC1
    MegaFC -->|Vận chuyển đường dài Line-Haul| RDC2
    RDC1 -->|Tiếp ứng hàng ngày| MFC1
    RDC2 -->|Tiếp ứng hàng ngày| MFC2
    RDC1 -->|Luân chuyển tồn kho| Store

    CustomerOrder["Đơn hàng của khách<br/>(Gồm 4 mặt hàng: A, B, C, D)"]
    CustomerOrder --> Engine["Intelligent Order Allocation Engine<br/>Bộ giải toán học dưới 100ms"]
    Engine -->|Phân bổ mặt hàng A, B| MFC1
    Engine -->|Phân bổ mặt hàng C, D| RDC1

Khi một khách hàng đặt một giỏ hàng gồm 4 món đồ, hệ thống không thể tùy tiện xuất hàng từ bất kỳ kho nào có sẵn. Việc chia một đơn hàng thành 3 bưu kiện xuất từ 3 cơ sở khác nhau gây ra tổn thất tài chính và trải nghiệm khách hàng nghiêm trọng:

  • Chi phí giao hàng chặng cuối nhân ba: Các hãng vận chuyển tính phí đón bưu kiện cơ bản (base rate) trên từng gói hàng riêng biệt.
  • Tổn hại trải nghiệm người dùng: Khách hàng phải nhận hàng nhiều lần vào các ngày khác nhau, gia tăng lượng rác thải bao bì carton và tỷ lệ khiếu nại.
  • Phân mảnh tồn kho và nguy cơ cạn kiệt cục bộ: Việc rút sạch tồn kho tại các kho tối trung tâm để phục vụ đơn hàng liên tỉnh sẽ tước đi cơ hội bán hàng hỏa tốc cho khách hàng địa phương lân cận.

Để giải quyết thách thức này, Công cụ Phân bổ Đơn hàng Thông minh (Intelligent Order Allocation Engine - IOAE) được xây dựng nhằm đánh giá hàng triệu ma trận hoán vị trong thời gian dưới 100 mili-giây để tìm ra kế hoạch hoàn tất tối ưu nhất.


2. Mô Hình Hóa Toán Học: Bài Toán Ba Lô Đa Chiều & Định Tuyến VRP

Về bản chất, bài toán Phân bổ Đơn hàng (Order Allocation Problem - OAP) là một bài toán tối ưu hóa tổ hợp thuộc lớp NP-hard, kết hợp các đặc tính của bài toán Ba lô đa chiều nhiều lựa chọn (MMKP) và bài toán Định tuyến phương tiện có giới hạn năng lực và khung thời gian (CVRPTW).

Giả sử đơn hàng $\mathcal{O}$ bao gồm tập hợp các mặt hàng $\mathcal{I} = {i_1, i_2, \dots, i_m}$ với số lượng yêu cầu tương ứng là $q_i$. Gọi $\mathcal{W} = {w_1, w_2, \dots, w_n}$ là tập hợp các nút kho có thể xuất hàng.

Ta định nghĩa biến quyết định nhị phân: $$x_{i, w} \in {0, 1} \quad \forall i \in \mathcal{I}, w \in \mathcal{W}$$ trong đó $x_{i, w} = 1$ nếu mặt hàng $i$ được phân bổ cho kho $w$, và bằng $0$ nếu ngược lại.

Để kiểm soát hiện tượng tách đơn, ta đưa vào biến phụ trợ kích hoạt kho: $$y_w \in {0, 1} \quad \forall w \in \mathcal{W}$$ trong đó $y_w = 1$ nếu có ít nhất một mặt hàng trong đơn hàng $\mathcal{O}$ được xuất từ kho $w$.

Hàm Mục Tiêu Toán Học

Hàm mục tiêu tối thiểu hóa tổng chi phí hoàn tất đơn hàng, bao gồm cước vận chuyển, nhân công nhặt hàng, tiền phạt tách đơn và rủi ro trễ hẹn cam kết SLA:

$$\min \mathcal{Z} = \sum_{w \in \mathcal{W}} \left( C_{\text{base}} \cdot y_w + \sum_{i \in \mathcal{I}} x_{i, w} \cdot \left[ C_{\text{pick}}(i, w) + C_{\text{dist}}(w, \text{dest}) \cdot \text{weight}(i) + \lambda_{\text{SLA}} \cdot \max(0, T_{\text{transit}}(w, \text{dest}) - T_{\text{promise}}) \right] \right) + \gamma \cdot \left( \sum_{w \in \mathcal{W}} y_w - 1 \right)$$

Thỏa mãn các ràng buộc vận hành sau:

  1. Thỏa mãn nhu cầu đơn hàng: Toàn bộ mặt hàng trong đơn phải được phân bổ trọn vẹn: $$\sum_{w \in \mathcal{W}} x_{i, w} = 1 \quad \forall i \in \mathcal{I}$$
  2. Khả năng cung ứng tồn kho (Available-To-Promise - ATP): $$x_{i, w} \cdot q_i \le \text{ATP}(i, w) \quad \forall i \in \mathcal{I}, w \in \mathcal{W}$$
  3. Ràng buộc liên kết kích hoạt kho: $$x_{i, w} \le y_w \quad \forall i \in \mathcal{I}, w \in \mathcal{W}$$
  4. Giới hạn công suất xuất kho hàng ngày: $$\sum_{\mathcal{O}} \sum_{i \in \mathcal{I}} x_{i, w} \le \text{Capacity}_{\text{max}}(w) \quad \forall w \in \mathcal{W}$$
sequenceDiagram
    autonumber
    participant Cart as Dịch vụ Thanh toán (Checkout)
    participant Engine as Bộ phân bổ đơn hàng (Allocation Engine)
    participant Inv as Dịch vụ Tồn kho thời gian thực
    participant Route as Ma trận khoảng cách (OSRM)
    participant Solver as Bộ giải quy hoạch MILP (OR-Tools)
    participant WMS as Hệ thống quản lý kho (WMS)

    Cart->>Engine: AllocateOrder(OrderID, Items[], ShippingAddress)
    Engine->>Inv: CheckATP(Items[], CandidateNodes[])
    Inv-->>Engine: InventorySnapshots (Số lượng khả dụng, Khóa)
    Engine->>Route: GetDistanceTable(CandidateNodes[], Coordinates)
    Route-->>Engine: Bảng khoảng cách và thời gian di chuyển
    Engine->>Solver: BuildModel(Ma trận chi phí, Ràng buộc)
    Solver-->>Engine: OptimalSolution(Phân bổ mặt hàng, Số kiện tách)
    Engine->>Inv: ReserveAtomic(Khóa đặt chỗ nguyên tử)
    Inv-->>Engine: ReservationConfirmed(ReservationID, TTL=15m)
    Engine->>WMS: Xuất lệnh hoàn tất đơn hàng
    Engine-->>Cart: Kết quả (Số kiện=1, Kho xuất=[RDC-North], SLA=Giao hôm sau)

3. Kiến Trúc Hệ Thống Hiệu Năng Cao Bằng Go

Để đáp ứng lưu lượng truy cập khổng lồ của các sàn thương mại điện tử lớn (xử lý trên 20.000 đơn hàng/giây trong các chiến dịch Siêu Sale), Bộ phân bổ đơn hàng phải được xây dựng trên nền tảng ngôn ngữ biên dịch hiệu năng cao như Go 1.25+, tận dụng cơ chế quản lý bộ nhớ không phân mảnh (zero-allocation pooling), xử lý đồng thời qua Goroutines/Channels và giao thức nhị phân gRPC Protobuf.

Dưới đây là sơ đồ kiến trúc các tầng dịch vụ trong hệ thống:

graph TB
    subgraph Ingestion["Tầng Tiếp Nhận Cổng Biên"]
        Gateway["Envoy API Gateway"]
        Auth["Xác thực OAuth2 / JWT"]
    end

    subgraph AllocationService["Dịch Vụ Phân Bổ Go Engine"]
        gRPCServer["Bộ xử lý gRPC Allocation Handler"]
        Pool["Worker Goroutine Pool có kiểm soát"]
        Cache["Bộ đệm không gian địa lý cục bộ Uber H3"]
        EngineCore["Bộ điều phối tối ưu hóa trung tâm"]
    end

    subgraph Solvers["Lõi Tối Ưu Hóa Toán Học"]
        GreedyFilter["Giai đoạn 1: Bộ lọc không gian tham lam"]
        MILPSolver["Giai đoạn 2: CGo Google OR-Tools / HiGHS"]
        OPAEngine["Giai đoạn 3: Bộ giải tô màu đồ thị OPA"]
    end

    subgraph Storage["Tầng Trạng Thái Phân Tán"]
        RedisCluster["Cụm Redis 7 (Bộ đếm Lua Script)"]
        PostgresDB["PostgreSQL (Sổ cái giao dịch MVCC)"]
        Kafka["Kafka Event Bus (Luồng Outbox)"]
    end

    Gateway --> gRPCServer
    gRPCServer --> Pool
    Pool --> EngineCore
    EngineCore --> Cache
    EngineCore --> GreedyFilter
    GreedyFilter --> MILPSolver
    MILPSolver --> OPAEngine
    EngineCore --> RedisCluster
    EngineCore --> PostgresDB
    EngineCore --> Kafka

Dưới đây là mã nguồn Go định nghĩa cấu trúc dữ liệu cốt lõi của công cụ phân bổ:

package allocation

import (
	"context"
	"errors"
	"fmt"
	"sync"
	"time"
)

// FulfillmentNode đại diện cho một điểm xuất hàng vật lý trong mạng lưới.
type FulfillmentNode struct {
	ID             string  `json:"id"`
	Name           string  `json:"name"`
	Latitude       float64 `json:"latitude"`
	Longitude      float64 `json:"longitude"`
	DailyCapacity  int32   `json:"daily_capacity"`
	RemainingQuota int32   `json:"remaining_quota"`
	CutoffTimeUTC  string  `json:"cutoff_time_utc"`
	IsDarkStore    bool    `json:"is_dark_store"`
}

// OrderLine biểu diễn một dòng sản phẩm và số lượng yêu cầu trong đơn.
type OrderLine struct {
	SKU       string  `json:"sku"`
	Quantity  int32   `json:"quantity"`
	WeightKg  float64 `json:"weight_kg"`
	IsHazmat  bool    `json:"is_hazmat"`
	IsCold    bool    `json:"is_cold"`
}

// AllocationRequest chứa dữ liệu yêu cầu phân bổ từ giỏ hàng.
type AllocationRequest struct {
	OrderID         string          `json:"order_id"`
	CustomerLat     float64         `json:"customer_lat"`
	CustomerLng     float64         `json:"customer_lng"`
	Lines           []OrderLine     `json:"lines"`
	MaxAllowedSplit int             `json:"max_allowed_split"`
	ServiceTier     string          `json:"service_tier"`
	CreatedAt       time.Time       `json:"created_at"`
}

// AllocationResult chứa kế hoạch hoàn tất đơn hàng sau khi giải tối ưu.
type AllocationResult struct {
	OrderID         string                 `json:"order_id"`
	Assignments     map[string][]OrderLine `json:"assignments"` // NodeID -> Danh sách mặt hàng
	SplitCount      int                    `json:"split_count"`
	TotalCostUSD    float64                `json:"total_cost_usd"`
	EstimatedHours  float64                `json:"estimated_hours"`
	SolverLatencyMs int64                  `json:"solver_latency_ms"`
}

// AllocationEngine điều phối truy vấn tồn kho, khoảng cách và bộ giải toán học.
type AllocationEngine struct {
	mu         sync.RWMutex
	nodes      map[string]*FulfillmentNode
	costMatrix map[string]map[string]float64
}

// NewAllocationEngine khởi tạo thể hiện engine an toàn đa luồng.
func NewAllocationEngine(nodes []*FulfillmentNode) *AllocationEngine {
	nodeMap := make(map[string]*FulfillmentNode, len(nodes))
	for _, n := range nodes {
		nodeMap[n.ID] = n
	}
	return &AllocationEngine{
		nodes:      nodeMap,
		costMatrix: make(map[string]map[string]float64),
	}
}

// FastFilterCandidates sàng lọc nhanh K kho gần nhất dựa trên tọa độ địa lý.
func (ae *AllocationEngine) FastFilterCandidates(ctx context.Context, req *AllocationRequest, k int) ([]*FulfillmentNode, error) {
	ae.mu.RLock()
	defer ae.mu.RUnlock()

	if len(ae.nodes) == 0 {
		return nil, errors.New("không có điểm xuất hàng nào khả dụng trong hệ thống")
	}

	type nodeDist struct {
		node *FulfillmentNode
		dist float64
	}

	var candidates []nodeDist
	for _, n := range ae.nodes {
		if n.RemainingQuota <= 0 {
			continue
		}
		d := (n.Latitude-req.CustomerLat)*(n.Latitude-req.CustomerLat) + 
		     (n.Longitude-req.CustomerLng)*(n.Longitude-req.CustomerLng)
		candidates = append(candidates, nodeDist{node: n, dist: d})
	}

	if len(candidates) > k {
		candidates = candidates[:k]
	}

	result := make([]*FulfillmentNode, len(candidates))
	for i, c := range candidates {
		result[i] = c.node
	}
	return result, nil
}

4. Lộ Trình Giáo Trình 10 Phần Chuyên Sâu

Để làm chủ toàn diện lĩnh vực kiến trúc logistics và tối ưu phân bổ chuỗi cung ứng, giáo trình được thiết kế qua 10 chuyên đề thực chiến:

  1. Tóm tắt Điều hành: Bức tranh Toán học & Kiến trúc Phân bổ Đơn hàng: Nền tảng toán học, phân loại NP-hard, kinh tế học chi phí tách đơn và phân bổ ngân sách độ trễ dưới 100ms.
  2. Phần 1: Nguyên lý Order Fulfillment — Từ Cú Click Mua Hàng Đến Giao Nhận Đa Kho: Ranh giới phân định OMS vs WMS vs TMS, máy trạng thái hướng sự kiện, mẫu Transactional Outbox và truy vết phân tán.
  3. Phần 2: Quản lý Tồn kho Đa kho Thời gian thực & Kỹ thuật Khóa Atomic: Các nguyên ngữ khóa nguyên tử, Redis Lua script token buckets, PostgreSQL advisory locking, phân mảnh virtual buckets và đối soát Merkle-tree.
  4. Phần 3: Thuật toán Phân bổ Đơn hàng — Heuristic Tham Lam vs. Quy Hoạch Tuyến Tính MILP: Mô hình hóa MMKP và VRP, đối chiếu hiệu năng các bộ giải (Google OR-Tools, HiGHS, SCIP), kỹ thuật nhánh-và-cắt (branch-and-cut).
  5. Phần 4: Giao Hàng Đón Đầu (Anticipatory Shipping) — Giải Mã Amazon CONDOR: Dự đoán nhu cầu luân chuyển tồn kho đa tầng, trích xuất đặc trưng duyệt web, định tuyến vận chuyển đón đầu trước thanh toán.
  6. Phần 5: Tách Đơn Hàng, Gom Hàng Cross-Dock & Giao Hàng Chặng Cuối: Trung tâm gom đơn cross-dock, kỹ thuật bỏ trạm zone skipping, công cụ so sánh cước vận chuyển tự động và tối ưu trọng lượng quy đổi DIM.
  7. Phần 6: Thực Hành: Xây Dựng Mini Order Allocation Engine Bằng Go & OR-Tools: Xây dựng microservice Go hoàn chỉnh với gRPC Protobuf, tích hợp CGo OR-Tools, tối ưu bộ nhớ arena và kiểm thử tải trọng cao.
  8. Phần 7: Tính Toán Ma Trận Khoảng Cách & Định Tuyến Địa Lý Thời Gian Thực: Cụm tính toán OSRM table tốc độ cao, Valhalla dynamic costing, chỉ mục không gian lục giác Uber H3 và bộ đệm Redis geospatial.
  9. Phần 8: AI Agentic Cho Điều Phối Xuất Đơn Động (Intelligent Order Release - IOR): Chuyển đổi từ gom đơn theo đợt cố định sang xuất đơn liên tục không đợt (waveless), học tăng cường điều tiết nhịp độ xuất đơn và quản lý hạn chót xe tải.
  10. Phần 9: Tách Đơn Hàng Qua Thuật Toán Tô Màu Đồ Thị & Thực Thi Chính Sách OPA: Mô hình hóa mâu thuẫn đóng gói thành đồ thị xung đột, giải thuật tô màu đỉnh Welsh-Powell và DSATUR, tích hợp chính sách Open Policy Agent (Rego).
  11. Phần 10: Tối Ưu Định Tuyến Nhân Viên Nhặt Hàng Trong Kho (Picker Routing & TSP): Tối ưu hóa hành trình di chuyển trong lối đi hẹp, bài toán người du lịch TSP, giải thuật S-Shape traversal và tùy biến GraphHopper indoor.

5. Kết Nối Mạng Lưới Hệ Thống Trọng Yếu

Trong hệ sinh thái microservices doanh nghiệp, Bộ phân bổ đơn hàng liên kết chặt chẽ với các trụ cột kiến trúc nền tảng. Hệ thống kế thừa các mẫu thiết kế từ Kiến trúc Go Microservices và tích hợp trực tiếp vào Thiết kế Hệ thống E-Commerce 21 Dịch vụ Bằng Go & DDD:

flowchart LR
    subgraph CommerceCore["Hệ Thống Thương Mại Cốt Lõi"]
        Cart["Dịch vụ Giỏ hàng & Thanh toán"]
        OrderSvc["Dịch vụ Quản lý Đơn hàng (OMS)"]
        Catalog["Dịch vụ Danh mục Sản phẩm"]
    end

    subgraph AllocationSubsystem["Phân Hệ Phân Bổ Đơn Hàng"]
        AllocEngine["Bộ điều phối phân bổ (Go 1.25)"]
        MILP["Bộ giải tối ưu toán học (OR-Tools)"]
        Spatial["Bộ định tuyến không gian Uber H3"]
    end

    subgraph LogisticsExecution["Hệ Thống Vận Hành Logistics Vật Lý"]
        WMSHub["Hệ thống Quản lý Kho bãi (WMS)"]
        TMSHub["Hệ thống Quản lý Vận tải (TMS)"]
        CarrierGateway["Cổng kết nối các Hãng vận chuyển"]
    end

    Cart -->|Tạo đơn hàng| OrderSvc
    OrderSvc -->|Bắn sự kiện phân bổ| AllocEngine
    AllocEngine --> Spatial
    AllocEngine --> MILP
    AllocEngine -->|Xuất kế hoạch hoàn tất| WMSHub
    AllocEngine -->|Đặt chuyến vận tải| TMSHub
    TMSHub --> CarrierGateway

Để tham khảo bản đồ tri thức toàn trang, bạn đọc có thể truy cập Bản Đồ Đọc Lộ Trình Kỹ Thuật hoặc thảo luận các dự án tư vấn kiến trúc tại Trang Tư Vấn Chuyên Gia.


6. Câu Hỏi Thường Gặp Dành Cho Kỹ Sư Hệ Thống (FAQ)

Tại sao thuật toán tham lam chọn kho gần nhất không thể giải quyết bài toán đa kho?

Giải thuật tham lam chỉ xem xét từng mặt hàng hoặc từng kho độc lập mà không nhìn thấy bức tranh tổng thể. Khi đơn hàng có 4 món và Kho A có món 1-2, Kho B có món 3-4, giải thuật tham lam có thể chọn Kho C cho món 1 chỉ vì nó gần hơn 5 km, dẫn đến việc đơn hàng bị xé thành 3 bưu kiện thay vì 2. Hơn nữa, thuật toán tham lam hoàn toàn bỏ qua giới hạn năng lực xuất kho tối đa và giờ cắt chuyến của các hãng xe, gây quá tải cục bộ tại các kho trọng điểm.

Hệ thống Amazon CONDOR cân bằng giữa chi phí giao hàng hiện tại và sức khỏe tồn kho tương lai như thế nào?

Amazon CONDOR mô hình hóa bài toán hoàn tất đơn hàng như một bài toán quy hoạch động nhiều chu kỳ. Khi có đơn hàng, việc xuất đơn vị hàng cuối cùng từ một kho tối địa phương giúp tiết kiệm cước vận chuyển tức thì, nhưng lại làm cạn kiệt hàng dự trữ cho những khách hàng Prime sẵn sàng trả tiền cho dịch vụ giao trong 2 giờ vào ngày mai. CONDOR gán cho tồn kho một ‘giá bóng’ (shadow price) phản ánh chi phí cơ hội. Nếu giá bóng này lớn hơn chi phí vận chuyển đường dài từ tổng kho vùng, hệ thống sẽ chủ động chọn xuất từ tổng kho xa hơn để bảo vệ tồn kho cục bộ.

Sự khác biệt căn bản giữa Wave Picking truyền thống và Waveless Order Release là gì?

Mô hình Wave Picking truyền thống gom hàng trăm đơn hàng thành các đợt cố định từ 1 đến 2 giờ và xả đồng loạt xuống sàn kho. Điều này tạo ra hiện tượng nghẽn cổ chai dạng đỉnh-đáy: công nhân nhặt hàng phải chờ hệ thống phân loại, sau đó hệ thống phân loại lại bị quá tải trong khi công nhân nhặt hàng nhàn rỗi. Ngược lại, Waveless Order Release coi dòng đơn hàng là một luồng dữ liệu liên tục. Các tác tử phần mềm tự động bơm từng đơn hàng vào kho dựa trên cảm biến thời gian thực của băng chuyền, tải trọng hiện tại của nhân viên nhặt hàng và giờ xe tải rời bến.

Thuật toán Tô màu Đồ thị đảm bảo an toàn quy định đóng gói như thế nào?

Nhiều mặt hàng thương mại điện tử không được phép đóng chung một thùng vì quy chuẩn an toàn hàng hải hoặc hàng không: bình xịt khí nén (hàng nguy hiểm Hazmat loại 2) không được đóng cùng pin lithium hoặc thực phẩm tươi sống; chảo gang nặng không được đóng chung với ly thủy tinh dễ vỡ. Bằng cách mô hình hóa mỗi mặt hàng thành một đỉnh trên đồ thị và mỗi xung đột quy định thành một cạnh nối, thuật toán tô màu đồ thị (như DSATUR) sẽ phân chia các đỉnh vào số lượng màu (thùng carton) ít nhất, đảm bảo không bao giờ có hai đỉnh cùng màu bị nối với nhau.