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