Chào mừng bạn đến với hệ thống mô phỏng cân bằng tải Controller SDN bằng học tăng cường đa tác tử (Multi-Agent RL). Hệ thống này đã được tái cấu trúc hoàn toàn từ mã nguồn HTML giả lập cũ thành kiến trúc Client-Server chuyên nghiệp chạy trên môi trường thực tế:
- Backend (Python FastAPI): Chạy giải thuật mô phỏng luồng (flow ticks), tính toán ma trận hop-count, thực hiện huấn luyện các thuật toán RL/greedy thực sự.
- Frontend (React + Vite + Chart.js): Cung cấp giao diện tối màu (Dark Theme) cao cấp, hỗ trợ chia đôi màn hình độc lập hoàn toàn (Split-Screen) và tương tác live điều khiển trực tiếp xuống Python Server qua WebSockets.
d:/Water/
├── backend/ # BACKEND PYTHON (FastAPI)
│ ├── env/ # Thư mục môi trường ảo Python (Venv)
│ ├── core/
│ │ ├── network.py # Định nghĩa Controller, Switch, Topology
│ │ └── engine.py # Vòng lặp mô phỏng chính, hàm Reward, LLM Supervisor
│ ├── algorithms/
│ │ ├── base.py # Khung sườn trừu tượng BaseLoadBalancer
│ │ ├── oq_lba.py # Constrained Q-learning (Eq. 18, 19 từ paper gốc)
│ │ ├── greedy_baselines.py # Thuật toán so sánh đối chứng DC_LBA & CO_LBA
│ │ └── custom.py # 🟢 NƠI BẠN VIẾT THUẬT TOÁN TÙY CHỈNH CỦA RIÊNG BẠN
│ └── main.py # Điểm khởi chạy API và kết nối WebSockets
│
├── frontend/ # FRONTEND REACT (Vite)
│ ├── src/
│ │ ├── components/
│ │ │ ├── SetupForm.jsx # Bảng thiết lập thông số ban đầu của phiên chạy
│ │ │ ├── Dashboard.jsx # Bảng điều khiển giám sát tải trọng, switch map, logs
│ │ │ └── ChartComp.jsx # Đồ thị real-time cập nhật tự động (Chart.js)
│ │ ├── App.jsx # Điều phối trạng thái, kết nối WS, chế độ Split-Screen
│ │ └── index.css # Hệ thống CSS thiết kế tối màu cao cấp
│ └── index.html
│
└── README.md # File hướng dẫn này của bạn 📖
Cả hai máy chủ Backend và Frontend hiện đang được chạy ngầm tự động trên máy của bạn. Tuy nhiên, nếu bạn muốn khởi chạy thủ công hoặc kiểm tra logs, hãy mở 2 Terminal/PowerShell riêng biệt:
Mở Terminal 1 và điều hướng đến thư mục d:\Water\backend, sau đó chạy:
# Kích hoạt môi trường ảo và khởi chạy server uvicorn
.\venv\Scripts\python main.pyServer API & WebSocket sẽ hoạt động tại
http://127.0.0.1:8000.
Mở Terminal 2 và điều hướng đến thư mục d:\Water\frontend, sau đó chạy:
npm run devTrình biên dịch Vite sẽ khởi động môi trường local tại địa chỉ
http://localhost:5173. Hãy click vào link đó để mở giao diện web trên Chrome/Edge của bạn.
Dự án được mô-đun hóa tối đa để bạn dễ dàng tuỳ biến, viết các giải thuật heuristic hoặc RL riêng của bạn bằng Python (chuẩn ngành AI) thay vì phải loay hoay với JavaScript như trước.
- Mở file Python
backend/algorithms/custom.pybằng trình soạn thảo code của bạn. - Tìm đến hàm
select_action(self, state, actions, sim):statelà chuỗi biểu diễn trạng thái tải của các controller (ví dụ:"3,5,8"tương ứng CPU load 30%, 50%, 80%).actionslà danh sách các hành động di chuyển switch khả thi được sinh ra tự động bởi mạng. Mỗi action có cấu trúc:{ "key": "mig_0_1_2", # Định danh hành động "type": "migrate", # Kiểu hành động ('migrate' hoặc 'noop') "src": 0, # Index controller nguồn (bị quá tải) "dst": 1, # Index controller đích (còn dư tải) "sw": 2, # Index switch cần di chuyển "efficiency": 12.5, # Tỷ lệ hiệu suất tải trọng / hop-count "hop_count": 3 # Khoảng cách số hop từ Switch tới Controller đích }simlà đối tượngSimulationEnginecung cấp toàn bộ thông số mô phỏng mạng realtime. Bạn có thể sử dụng các hàm tiện ích cực mạnh:sim.discrete_coefficient(): Trả về hệ số mất cân bằng DC hiện tại.sim.simulate_dc(action): Mô phỏng xem nếu áp dụng action di chuyển đó thì hệ số DC mới của hệ thống sẽ bằng bao nhiêu (rất thích hợp cho các thuật toán Heuristic/Greedy tìm kiếm tối ưu!).
- Nếu thuật toán của bạn có cơ chế học trực tuyến (Online Learning/RL), hãy cập nhật trọng số hoặc Q-table trong hàm
update(self, state, action, reward, next_state, next_actions, done, mig_cost). - Không cần sửa đổi Frontend React: Khi bạn sửa file Python, cơ chế hot-reload của backend sẽ tự áp dụng thuật toán mới và phản hồi trực tiếp lên giao diện đồ thị thời gian thực của trình duyệt.
Hệ thống backend Python đã được lập trình chính xác tuyệt đối theo các phương trình toán học của bài báo:
Công thức (Eq. 7):
Được cài đặt tại
SimulationEngine.discrete_coefficient()giúp đánh giá mức độ lệch tải CPU giữa các Controller.
Công thức (Eq. 22):
Với
$RTT = \text{hop_count} \times 0.5\text{ms}$ . Cài đặt tạiSimulationEngine.migration_cost().
Công thức (Eq. 18 & 19):
Giải thuật RL ràng buộc thông minh này giúp tối ưu hóa tải trọng nhưng giới hạn số lượng dịch chuyển switch để tránh làm nghẽn mạng điều khiển. Được cài đặt trọn vẹn tại
OQ_LBA.update().