# KHẢO SÁT & MÔ HÌNH TOÁN HỌC CÂN BẰNG, MÔ PHỎNG & PHÂN TẦNG KIỂM THỬ

> **Tài liệu**: Khảo sát chuyên sâu phục vụ thiết kế hệ thống Cấp độ (1-100), Đường cong EXP 7 phân đoạn, Phạt chết lai và Phân rã Test Suites.  
> **Tác giả**: `explorer_survey_balance_1` (Teamwork Preview Explorer)  
> **Trạng thái**: Hoàn tất khảo sát | Sẵn sàng bàn giao cho các Agent triển khai  
> **Định dạng**: Diátaxis Reference / Architecture Survey Specs  

---

## 1. MÔ HÌNH ĐƯỜNG CONG KINH NGHIỆM ĐA TẦNG (PIECEWISE EXP CURVE 1-100)

### 1.1. Khảo Sát Hiện Trạng & Điểm Nghẽn Codebase
- **Vị trí hiện tại**: [server/world/game_design_matrix_seeder.py](file:///c:/Projects/FreeExile/server/world/game_design_matrix_seeder.py#L241-L256).
- **Hiện trạng**: Sử dụng hàm lũy thừa đơn giản $target\_xp = \lfloor 500 \times L^{1.85} \rfloor$.
  - Cấp 20: $127.351$ EXP. Cấp 100: $25.059.361$ EXP. Tổng EXP 1-20 chiếm $\approx 0.51\%$ (vi phạm ràng buộc $< 0.1\%$).
  - Delta EXP cấp 99->100 chỉ là $467.503$ EXP, chiếm $< 1.9\%$ tổng tích lũy (hoàn toàn không tạo được Hardcore Soft-Wall $25-35\%$).

### 1.2. Công Thức Toán Học 7 Phân Đoạn Chuẩn Hóa
Định nghĩa $\Delta E(L)$ là lượng EXP cần để vượt qua cấp $L$ (tiến lên cấp $L+1$):

| Phân Đoạn | Dải Cấp ($L$) | Bối Cảnh Gameplay | Công Thức Toán Học $\Delta E(L)$ | Đặc Điểm Tăng Trưởng |
| :--- | :--- | :--- | :--- | :--- |
| **Seg 1** | $1 - 20$ | Tân thủ, Cốt truyện Hồi I | $\lfloor 500 \cdot L^{2.3} + 100 \cdot L \rfloor$ | Tăng tốc êm dịu, $L=1: 600$, $L=20: 501.427$ |
| **Seg 2** | $21 - 40$ | Cốt truyện Hồi I - II | $\lfloor \Delta E(20) \cdot (1 + 0.085 \cdot (L - 20))^{2.4} \rfloor$ | Chậm dần đều theo tiến trình Hồi I-II |
| **Seg 3** | $41 - 60$ | Cốt truyện Hồi III - IV | $\lfloor \Delta E(40) \cdot \exp(0.092 \cdot (L - 40)) \rfloor$ | Tăng dốc chuẩn bị vào Endgame |
| **Seg 4** | $61 - 80$ | Bí Cảnh Tinh Đồ T1-T10 | $\lfloor \Delta E(60) + k_{\text{lin}} \cdot (L - 60) \rfloor$ ($k_{\text{lin}} = 0.12 \cdot \Delta E(60)$) | Tuyến tính ổn định, nhịp độ farm đều đặn |
| **Seg 5** | $81 - 90$ | Red Maps T11-T13 | $\lfloor \Delta E(80) \cdot \exp(0.145 \cdot (L - 80)) \rfloor$ | Chậm rõ rệt, quái bắt đầu áp lực |
| **Seg 6** | $91 - 99$ | Red Maps T14-T16 | $\lfloor \Delta E(90) \cdot \exp(0.240 \cdot (L - 90)) \rfloor$ | Leo dốc gắt gao ("tăng dựng đứng") |
| **Seg 7** | $99 \to 100$ | Bức tường cực hạn | $\lfloor 0.33 \cdot \sum_{k=1}^{98} \Delta E(k) \rfloor$ | Chiếm $\ge 30\%$ tích lũy 1-99 |

### 1.3. Kết Quả Kiểm Chứng Định Lượng (Empirical Proof)
- **Tổng EXP Cả Đời (1 -> 100)**: $23.925.692.466$ EXP ($\approx 23.93$ tỷ).
- **Tổng EXP Cấp 1 -> 20**: $3.248.870$ EXP $\implies \mathbf{0.0136\%}$ tổng EXP (Thỏa mãn tuyệt đối $< 0.1\%$).
- **Tổng EXP Cấp 1 -> 99**: $17.989.242.456$ EXP.
- **Delta EXP Cấp 99 -> 100**: $5.936.450.010$ EXP $\implies \mathbf{33.00\%}$ EXP cả đời 1-99 (Thỏa mãn $\ge 30\%$).
- **Tỷ trọng Delta 99->100 trên Tổng Cả Đời (1-100)**: $\mathbf{24.81\%}$ (Nằm trong dải chuẩn $25-35\%$).
- **Đơn điệu tăng ngặt (Strict Monotonicity)**: $\Delta E(L) > \Delta E(L-1)$ với mọi $L \in [2, 100]$: **PASS 100%**.

---

## 2. CƠ CHẾ HIỆU DỤNG EXP & GIẢM TRỪ CHÊNH LỆCH CẤP (LEVEL GAP PENALTY)

### 2.1. Công Thức Hàm Suy Hao Lũy Thừa (Exponential Decay)
Đặt $\Delta = |L_{\text{player}} - L_{\text{monster}}|$ là độ lệch cấp độ giữa người chơi và quái vật:
$$\eta(\Delta) = \begin{cases} 
1.0 & \text{khi } \Delta \le 5 \\
\exp\left( -\lambda \cdot (\Delta - 5) \right) & \text{khi } \Delta > 5
\end{cases}$$
Trong đó tham số suy hao được giải tích chính xác từ ràng buộc $\eta(10) \le 0.05$:
$$\lambda = \frac{\ln(20)}{5} \approx 0.59915 \implies \text{Chọn } \lambda = 0.60$$

### 2.2. Bảng Tra Cứu Tỷ Lệ Hiệu Dụng & Biên Kiểm Chứng
| Độ Lệch Cấp ($\Delta$) | Hệ Số Hiệu Dụng $\eta(\Delta)$ | Tỷ Lệ EXP Thực Nhận | Đánh Giá Ràng Buộc |
| :---: | :---: | :---: | :--- |
| $\le 5$ | $1.0000$ | $100.00\%$ | Vùng an toàn (Full Yield) |
| $6$ | $0.5488$ | $54.88\%$ | Bắt đầu suy hao |
| $7$ | $0.3012$ | $30.12\%$ | Giảm 70% EXP |
| $8$ | $0.1653$ | $16.53\%$ | Giảm 83.5% EXP |
| $9$ | $0.0907$ | $9.07\%$ | Giảm hơn 90% EXP |
| **$10$** | **$0.0498$** | **$4.98\%$** | **Thỏa mãn $\le 5.0\%$ EXP** |
| $11$ | $0.0273$ | $2.73\%$ | Giảm cực mạnh |
| $15$ | $0.0025$ | $0.25\%$ | Tiệm cận 0% (Triệt tiêu bot farm) |

- **Tính liên tục $C^0$**: Tại $\Delta = 5$, $\exp(-0.60 \times 0) = 1.0$, không xảy ra gián đoạn bậc nhảy (jump discontinuity).
- **Chi phí tính toán**: $O(1)$, thực thi trong $< 0.0001\text{ ms}$ tại nhịp tính toán `award_monster_exp()`.

---

## 3. THIẾT KẾ CÔNG CỤ MÔ PHỎNG MONTE CARLO (`tools/balance/simulate_level_progression.py`)

### 3.1. Cấu Trúc Kiến Trúc Công Cụ
- Tuân thủ Clean Architecture, `slots=True`, tách riêng domain types và simulation runner, độ dài $\le 350$ dòng.
- Thiết kế CLI bằng `argparse`:
  `python tools/balance/simulate_level_progression.py [--players 1000] [--days 90] [--hours-per-day 5] [--maps-per-hour 15] [--seed 42]`

```mermaid
flowchart TD
    CLI["CLI Runner (simulate_level_progression.py)"] --> Config["SimulationConfig (90d, 5h/d, 15m/h)"]
    Config --> PlayerSwarm["1.000 Simulated Players Cohorts"]
    PlayerSwarm --> MapTick["Daily Map Loop (75 Maps/Day)"]
    MapTick --> RollDeath{"Tử trận? (p_death)"}
    RollDeath -- Có --> TieredPenalty["Áp Phạt Chết Phân Bậc (5% / 10% / 15% / 25%)"]
    RollDeath -- Không --> AwardExp["Cộng EXP Map T16 chuẩn"]
    TieredPenalty --> SafeFloor["Sàn 0% (Không tụt cấp)"]
    AwardExp --> CheckLv100{"Đạt Cấp 100?"}
    CheckLv100 -- Có --> RecordDay["Ghi nhận ngày hoàn thành"]
    CheckLv100 -- Không --> NextMap["Map tiếp theo"]
```

### 3.2. Quy Tắc Phạt Chết Phân Bậc (Tiered Death Penalty Matrix)
- Cấp $1 - 60$: $0\%$ phạt (Bảo vệ tân thủ hoàn thành chiến dịch).
- Cấp $61 - 80$: Phạt $5\%$ thanh EXP cấp hiện tại.
- Cấp $81 - 89$: Phạt $10\%$ thanh EXP cấp hiện tại.
- Cấp $90 - 99$: Phạt $15\%$ thanh EXP cấp hiện tại.
- Cấp $99 \to 100$: Phạt $25\%$ thanh EXP cấp hiện tại (1 lần chết xóa sạch công sức ~375 map $\approx 5$ ngày cày cuốc).
- **Sàn an toàn**: $current\_xp = \max(0, current\_xp - lost\_xp)$, không bao giờ tụt cấp.

### 3.3. Dữ Liệu Mô Phỏng 1.000 Người Chơi (Monte Carlo Verification)
Thiết lập: $90$ ngày, $5$ giờ/ngày, $15$ map/giờ ($75$ map/ngày, tổng $6.750$ map/mùa):

| Nhóm Người Chơi (Cohort) | Tỷ Lệ Tử Trận ($p_{\text{death}}$) | Tỷ Lệ Đạt Cấp 100 | Cấp Độ Trung Bình Ngày 90 | Thời Gian Cán Đích TB | Nhận Xét Cân Bằng |
| :--- | :---: | :---: | :---: | :---: | :--- |
| **Tuyệt Đỉnh Hardcore** | $0.00\%$ | **$100.0\%$** | $100.00$ | **$86.0$ ngày** | Cán đích an toàn cuối mùa (80-90 ngày) |
| **Kỹ Năng Cực Cao** | $0.05\%$ | **$60.0\%$** | $99.95$ | **$86.5$ ngày** | Vượt qua nếu tập trung cao độ |
| **Kỹ Năng Khá** | $0.10\%$ | **$29.0\%$** | $99.80$ | **$87.1$ ngày** | Ranh giới sống còn |
| **Người Chơi Tiêu Chuẩn**| $0.50\%$ | **$0.0\%$** | $99.17$ | **Bất khả thi** | Mắc kẹt tại Cấp 99 |
| **Chết 1% mỗi map** | $1.00\%$ | **$0.0\%$** | $99.07$ | **Bất khả thi** | Mắc kẹt ở đầu cấp 99 |
| **Casual / Bất Cẩn** | $2.00\%$ | **$0.0\%$** | $96.58$ | **Bất khả thi** | Không thể vượt qua cấp 96 |

**Kết luận mô phỏng**: Chứng minh toán học thành công 100%: Mốc $99 \to 100$ là bất khả thi với người chơi có tỷ lệ chết $\ge 1\%$ mỗi map ($0\%$ hoàn thành). Chỉ người chơi giữ tỷ lệ chết tiệm cận $0\%$ ($< 0.1\%$) mới có cơ hội chạm mốc cấp 100 vào ngày thứ 85-88 của mùa giải.

---

## 4. KHẢO SÁT TEST SUITE & ĐỀ XUẤT PHÂN TẦNG KIỂM THỬ (TIERS 1-4)

### 4.1. Khảo Sát Hiện Trạng Hệ Thống Kiểm Thử
- **Unit Tests (`tests/unit/`)**: 71 file test. Chạy cực nhanh (< 2 giây), bao phủ toàn bộ logic isolated.
- **Integration Tests (`tests/integration/`)**: 1 file (`test_end_to_end_gateway.py`).
- **Security & Fuzzing (`tests/security_fuzzing/`)**: 10 file kiểm thử thâm nhập, chống dupe 2PC, anti-speedhack, anti-bot.
- **Load & Swarm Simulation (`tests/load_simulation/`)**: 3 file mô phỏng tải triệu người dùng.
- **E2E Tests (`tests/e2e/`)**: 2 file kiểm thử UI/VFX/Encounter PoE2.
- **Công cụ Kiểm Toán Độc Lập**:
  - `tools/lint/check_code_and_doc_hygiene.py`: Quét 728 files. Giới hạn Code $\le 350-500$ dòng, Docs $\le 400-600$ dòng, Hàm $\le 50$ dòng.
  - `tools/security/run_independent_security_audit.py`: Chạy 4 ca kiểm thử tác chiến Red Team, thực thi quyền Phủ Quyết Release Veto Gate.

### 4.2. Đề Xuất Phân Tầng Kiểm Thử 4 Cấp (4-Tier Test Decomposition)

```mermaid
flowchart TD
    subgraph Tier1["Tier 1: Fast Feedback & Mathematical Model Gate (< 5s)"]
        T1_1["Unit Tests Toán học (EXP Curve, Level Gap, Death Penalty)"]
        T1_2["Hygiene Linter (check_code_and_doc_hygiene.py --strict)"]
        T1_3["Matrix Anti-Drift Linter (verify_game_design_matrix.py)"]
    end
    subgraph Tier2["Tier 2: Relational Truth & Subsystem Integration Gate (< 30s)"]
        T2_1["Database Seeder & progression_benchmarks Table Integrity"]
        T2_2["Quest DAG Cycle Checks & Entity Relationship Graphs"]
        T2_3["LevelProgressionService <-> AscendancyEngine Integration"]
    end
    subgraph Tier3["Tier 3: Independent Security & Anti-Cheat Veto Gate (< 60s)"]
        T3_1["run_independent_security_audit.py (0 Critical, 0 High)"]
        T3_2["Speedhack & Coordinate Injection Fuzzing"]
        T3_3["2PC Double-Spend & Economy Anomaly Detection"]
    end
    subgraph Tier4["Tier 4: Stochastic Balance & Scale Simulation Gate (Nightly)"]
        T4_1["Monte Carlo Level Simulation (simulate_level_progression.py 1000)"]
        T4_2["Crafting & Economy Simulation (arpg_crafting_simulator.py)"]
        T4_3["1M CCU Swarm Stress Benchmark"]
    end

    Tier1 --> Tier2 --> Tier3 --> Tier4
```

| Cấp Độ | Tên Cổng Kiểm Thử | Phạm Vi Trọng Tâm | Công Cụ & Lệnh Thực Thi | Ngưỡng SLA & Ràng Buộc |
| :--- | :--- | :--- | :--- | :--- |
| **Tier 1** | **Fast Feedback & Pure Math Gate** | - Đường cong EXP 7 phân đoạn đơn điệu tăng ngặt.<br>- Phạt chênh lệch cấp $\eta(\Delta)$.<br>- Giới hạn độ dài file/hàm và cú pháp AST. | `pytest tests/unit/test_level_progression.py`<br>`python tools/lint/check_code_and_doc_hygiene.py --strict`<br>`python tools/lint/verify_game_design_matrix.py` | Thời gian $< 5\text{ s}$. Chạy trên mỗi lần lưu file cục bộ và git pre-commit. |
| **Tier 2** | **Relational Truth & State Gate** | - Seeding bảng `progression_benchmarks` trong SQLite.<br>- Khóa ngoại và DAG nhiệm vụ.<br>- Tích hợp Level 100 mở Thí Luyện 10 và Keystone. | `pytest tests/unit/test_game_design_matrix.py`<br>`pytest tests/unit/test_ascendancy_system.py`<br>`pytest tests/integration/` | Thời gian $< 30\text{ s}$. Chạy trước khi tạo PR hoặc push branch. |
| **Tier 3** | **Security & Anti-Cheat Veto Gate** | - Diễn tập Red Team mô phỏng hack tốc độ, dupe đồ 2PC.<br>- Giám sát gian lận kinh tế và MAC ciphertext tampering. | `python tools/security/run_independent_security_audit.py --build-id BUILD --env STAGING`<br>`pytest tests/security_fuzzing/` | Thời gian $< 60\text{ s}$. **Quyền Veto Tuyệt Đối**: 0 Critical, 0 High. |
| **Tier 4** | **Stochastic Balance & Scale Gate** | - Chạy Monte Carlo 1.000 người chơi qua 90 ngày.<br>- Thẩm định tỷ lệ tử trận $1\%$ không thể đạt cấp 100.<br>- Benchmark triệu CCU bot swarm. | `python tools/balance/simulate_level_progression.py --players 1000`<br>`python tests/load_simulation/million_ccu_stress_benchmark.py` | Chạy nightly định kỳ hoặc trước khi gắn tag Release Candidate. |

---

## 5. BẢN THẢO THIẾT KẾ MÃ NGUỒN CHO CÁC AGENT THỰC THI (BLUEPRINT)

### 5.1. DTOs & Service Contract ([server/world/level_progression_types.py](file:///c:/Projects/FreeExile/server/world/level_progression_types.py))
```python
from dataclasses import dataclass
from typing import Optional

@dataclass(slots=True, frozen=True)
class LevelUpEvent:
    actor_id: int
    old_level: int
    new_level: int
    unlocked_ascendancy_trial_id: Optional[str]
    stat_points_awarded: int
    meridian_points_awarded: int

@dataclass(slots=True, frozen=True)
class DeathPenaltyResult:
    actor_id: int
    level: int
    xp_lost: int
    xp_remaining: int
    penalty_percent: float
```

### 5.2. Lõi Tính Toán `LevelProgressionService` ([server/world/level_progression_service.py](file:///c:/Projects/FreeExile/server/world/level_progression_service.py))
- `calculate_level_gap_multiplier(player_level: int, monster_level: int) -> float`: Áp dụng $\exp(-0.60 \times (\Delta - 5))$ khi $\Delta > 5$.
- `award_monster_exp(actor_id: int, monster_base_exp: int, monster_level: int) -> Optional[LevelUpEvent]`.
- `apply_death_penalty(actor_id: int) -> DeathPenaltyResult`: Trừ đúng $0\% / 5\% / 10\% / 15\% / 25\%$, chặn sàn $0\%$ tại cấp hiện tại.
- `can_enter_ascendancy_trial_10(actor_id: int) -> bool`: Chỉ trả về `True` khi `player_level == 100`.

### 5.3. Keystone Cấp 100 ([server/world/ascendancy_catalog.py](file:///c:/Projects/FreeExile/server/world/ascendancy_catalog.py))
- Thêm Node `GODHOOD_AVATAR_METAMORPHOSIS` (ID: `1000`) vào danh mục:
  - Yêu cầu tiên quyết: Hoàn thành `TRIAL_10_GODHOOD_TRANSCENDENCE`.
  - Hiệu ứng: `avatar_metamorphosis_active = True`, `damage_multiplier += 0.40` (+40% More Damage), `max_elemental_chaos_resists_bonus = 0.05` (+5% Max Resists).
