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:
- Chạy "Fastest" để xem kết quả sơ bộ
- Chạy "Balanced" để có kết quả tốt
- 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
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
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%
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
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