REMB / algorithms /PERFORMANCE_GUIDE.md
Cuong2004's picture
add convertor and implement 100% notebook logic
2eb0f5c

Hướng Dẫn Tối Ưu Hiệu Suất

📊 Các Thông Số Ảnh Hưởng Đến Thời Gian Chạy

1. Population Size (Kích thước quần thể)

  • Phạm vi: 20 - 200
  • Mặc định: 50
  • Ảnh hưởng:
    • ⬆️ Tăng: Thuật toán khám phá nhiều giải pháp hơn → Kết quả tốt hơn nhưng chậm hơn nhiều
    • ⬇️ Giảm: Ít giải pháp được thử → Nhanh nhưng có thể bỏ lỡ giải pháp tối ưu
  • Độ phức tạp: O(population_size × generations)

2. Generations (Số thế hệ)

  • Phạm vi: 50 - 500
  • Mặc định: 50
  • Ảnh hưởng:
    • ⬆️ Tăng: Thuật toán tiến hóa lâu hơn → Hội tụ tốt hơn nhưng tốn nhiều thời gian
    • ⬇️ Giảm: Kết thúc sớm → Nhanh nhưng có thể chưa tối ưu
  • Độ phức tạp: O(population_size × generations)

3. OR-Tools Time/Block (Thời gian tối ưu mỗi block)

  • Phạm vi: 0.1 - 60.0 giây
  • Mặc định: 5.0 giây
  • Ảnh hưởng:
    • ⬆️ Tăng: OR-Tools có nhiều thời gian tìm giải pháp tốt hơn cho mỗi block
    • ⬇️ Giảm: OR-Tools dừng sớm, có thể chưa tối ưu
  • Lưu ý: Thời gian này được nhân với số lượng blocks

4. Kích Thước Đất (Gián tiếp)

  • Đất lớn → Nhiều blocks → Tổng thời gian tăng tuyến tính
  • Công thức ước lượng số blocks: (Area / (spacing²))

⚡ Các Preset Cấu Hình Được Khuyến Nghị

🚀 Kết Quả Nhanh Nhất (Test/Preview)

Thời gian ước tính: 30 giây - 2 phút

Population Size:      20
Generations:          50
OR-Tools Time/Block:  0.5s
Spacing Min/Max:      25-35m

Khi nào dùng:

  • ✅ Test nhanh với đất mới
  • ✅ Xem trước kết quả sơ bộ
  • ✅ Điều chỉnh parameters
  • KHÔNG dùng cho kết quả cuối cùng

Trade-offs:

  • ✅ Cực kỳ nhanh
  • ⚠️ Chất lượng thấp
  • ⚠️ Có thể không tìm được giải pháp tốt

⚖️ Kết Quả Cân Bằng (Recommended)

Thời gian ước tính: 3-8 phút

Population Size:      50
Generations:          50-75
OR-Tools Time/Block:  3.0-5.0s
Spacing Min/Max:      20-30m

Khi nào dùng:

  • Sử dụng hàng ngày (khuyến nghị)
  • ✅ Đất có kích thước trung bình (< 5 ha)
  • ✅ Cần kết quả tốt trong thời gian chấp nhận được
  • ✅ Đủ tốt cho hầu hết các trường hợp

Trade-offs:

  • ✅ Cân bằng giữa tốc độ và chất lượng
  • ✅ Kết quả đủ tốt (80-90% tối ưu)
  • ✅ Thời gian chấp nhận được

🏆 Kết Quả Tốt Nhất (Production Quality)

Thời gian ước tính: 10-30 phút

Population Size:      100-150
Generations:          100-150
OR-Tools Time/Block:  10.0-15.0s
Spacing Min/Max:      20-30m

Khi nào dùng:

  • ✅ Dự án thực tế quan trọng
  • ✅ Cần kết quả tối ưu nhất có thể
  • ✅ Có thời gian chờ đợi
  • ✅ Đất lớn, phức tạp

Trade-offs:

  • ✅ Chất lượng cao nhất (95-99% tối ưu)
  • ✅ Khám phá nhiều giải pháp
  • ⚠️ Tốn thời gian
  • ⚠️ Có thể timeout nếu đất quá lớn

🔥 Aggressive Optimization (Maximum Quality)

Thời gian ước tính: 30-60+ phút

Population Size:      200
Generations:          200-300
OR-Tools Time/Block:  20.0-30.0s
Spacing Min/Max:      20-30m

Khi nào dùng:

  • ✅ Dự án cực kỳ quan trọng
  • ✅ Muốn kết quả tốt nhất tuyệt đối
  • ✅ Có thể để chạy qua đêm
  • ⚠️ Chỉ với đất nhỏ/trung bình

Trade-offs:

  • ✅ Gần như tối ưu toàn cục
  • ⚠️ Rất chậm
  • ⚠️ Diminishing returns (cải thiện ít so với thời gian tăng)

📈 Bảng So Sánh Nhanh

Preset Population Generations OR-Tools Time Thời gian Chất lượng Use Case
🚀 Fastest 20 50 0.5s 0.5-2 min ⭐⭐ Test/Preview
⚖️ Balanced 50 50-75 3-5s 3-8 min ⭐⭐⭐⭐ Recommended
🏆 Best 100-150 100-150 10-15s 10-30 min ⭐⭐⭐⭐⭐ Production
🔥 Maximum 200 200-300 20-30s 30-60+ min ⭐⭐⭐⭐⭐ Critical Projects

💡 Mẹo Tối Ưu

1. Điều chỉnh theo kích thước đất

Đất nhỏ (< 1 ha):
  → Dùng preset "Best" hoặc "Maximum"
  → Thời gian chấp nhận được

Đất trung bình (1-5 ha):
  → Dùng preset "Balanced"
  → Tăng Generations lên 100 nếu cần

Đất lớn (> 5 ha):
  → Dùng preset "Fastest" hoặc "Balanced"
  → KHÔNG dùng "Maximum" (sẽ quá chậm)

2. Tăng dần theo bước

Thay vì nhảy thẳng lên "Maximum", hãy:

  1. Chạy "Fastest" để xem kết quả sơ bộ
  2. Chạy "Balanced" để có kết quả tốt
  3. Nếu cần, chạy "Best" vào cuối

3. OR-Tools Time Strategy

Block đơn giản (hình chữ nhật):
  → 0.5-2.0s là đủ

Block phức tạp (hình bất quy tắc):
  → 5.0-10.0s
  
Block cực kỳ phức tạp:
  → 15.0-30.0s

4. Parallel Testing (Nếu có nhiều máy)

Chạy song song nhiều cấu hình:

  • Machine 1: Balanced (50/75/5s)
  • Machine 2: Best (100/100/10s)
  • Machine 3: Maximum (200/200/20s)

→ Chọn kết quả tốt nhất


🎯 Công Thức Ước Lượng Thời Gian

# Rough estimate (seconds)
time_estimate = (population_size × generations × 0.5) + (num_blocks × ortools_time)

# Where:
num_blocks ≈ land_area / (spacing_avg²)

# Example: Đất 10,000 m², spacing 25m, pop=50, gen=75, ort=5s
num_blocks ≈ 10000 / (25²) = 16 blocks
time_estimate = (50 × 75 × 0.5) + (16 × 5) = 1875 + 80 = ~1955s ≈ 33 phút

⚠️ Lưu Ý Quan Trọng

  1. Timeout 10 phút:

    • Frontend có timeout 600s (10 phút)
    • Nếu cần chạy lâu hơn, tăng timeout trong app.py
  2. Diminishing Returns:

    • Tăng từ 50 → 100 generations: Cải thiện ~15-20%
    • Tăng từ 100 → 200 generations: Cải thiện ~5-10%
    • Tăng từ 200 → 500 generations: Cải thiện ~1-5%
  3. Memory Usage:

    • Population lớn (>150) có thể tốn nhiều RAM
    • Đất rất lớn với population cao: risk of OOM
  4. Stage 1 vs Stage 2:

    • Stage 1 (NSGA-II): Chi phối thời gian với nhiều generations
    • Stage 2 (OR-Tools): Chi phối với đất lớn (nhiều blocks)

🔧 Troubleshooting

Timeout sau 10 phút?

→ Giảm Population hoặc Generations → Hoặc tăng timeout trong code

Kết quả chưa tốt?

→ Tăng Generations (cheaper than population) → Tăng OR-Tools time/block

Muốn nhanh hơn nữa?

→ Tăng Spacing Min/Max (ít blocks hơn) → Giảm OR-Tools time xuống 0.5-1.0s

Đất rất lớn?

→ Chia thành nhiều phần nhỏ → Hoặc tăng spacing để giảm số blocks


📝 Recommended Workflow

1. Start: Chạy FASTEST preset
   → Xác nhận input đúng
   → Xem kết quả sơ bộ
   
2. Iterate: Chạy BALANCED preset  
   → Điều chỉnh spacing, lot width
   → Xem kết quả có chấp nhận được không
   
3. Finalize: Chạy BEST preset
   → Với parameters đã điều chỉnh
   → Export DXF cho production
   
4. Optional: Chạy MAXIMUM nếu cực kỳ cần thiết

🎓 Kết Luận

TL;DR - Quick Answer:

  • Test nhanh: Pop=20, Gen=50, ORT=0.5s
  • Khuyến nghị: Pop=50, Gen=75, ORT=5s ⭐
  • Tốt nhất: Pop=150, Gen=150, ORT=15s