# 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 ```python # 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