Trong phần này, tôi sẽ mô tả các thực nghiệm mà tôi đã thực hiện để đánh giá hiệu quả của biểu đồ xấp xỉ so với các phƣơng pháp kiểm định đã đƣợc biết đến khác. Để đảm bảo chất lƣợng của chƣơng trình mô phỏng, các tham số đầu vào của hệ nhiệm vụ sẽ đƣợc tạo ra một cách ngẫu nhiên và độc lập. Điều này hƣớng đến không thiên lệch và cho kết quả một cách chính xác, khách quan.
Đầu tiên, hệ số sử dụng CPU (U) của hệ thay đổi từ 0.1 đến 0.9, mỗi lần tăng 0.1 đơn vị. Với mỗi giá trị của U, tôi tạo ra 1 hệ các nhiệm vụ có số lƣợng thay đổi từ 5 đến 50 nhiệm vụ, mỗi lần tăng 5 nhiệm vụ. Từ U và n, tôi sinh ra 𝑈𝑖 (1 ≤ 𝑖 ≤ 𝑛) ngẫu nhiên bằng thuật toán UFitting [1]. Tiếp theo, chu kỳ của nhiệm vụ (𝑇𝑖)đƣợc tạo ngẫu nhiên trong khoảng [1, 10000]. Dựa vào 𝑈𝑖 và 𝑇𝑖, tôi tính đƣợc thời gian thực hiện nhiệm vụ mà không bị gián đoạn theo công thức 𝐶𝑖 = 𝑈𝑖 ∗ 𝑇𝑖. Để đảm bảo các
nhiệm vụ có kỳ hạn không ràng buộc, kỳ hạn tƣơng đối (𝐷𝑖) của nhiệm vụ đƣợc
sinh ngẫu nhiên. Cuối cùng, độ trễ phát hành 𝐽𝑖 đƣợc tính toán bằng 𝑟𝑎𝑡𝑖𝑜𝐽 ∗
0.1 ∗ 𝑇𝑖 với 𝑟𝑎𝑡𝑖𝑜𝐽 là một hằng số có giá trị thay đổi từ 1 đến 9 để thỏa mãn điều
kiện 𝐽𝑖 < 𝑇𝑖. Sau khi đƣợc tạo ra một cách ngẫu nhiên, các tham số của hệ sẽ đƣợc làm
tròn thành số nguyên gần nhất. Mỗi thí nghiệm của tôi sẽ lặp lại 300 lần để đảm bảo tập mẫu đủ lớn, cho kết quả thống kê chính xác và khách quan.
Để sinh ngẫu nhiên hệ số sử dụng CPU cho các nhiệm vụ thời gian thực, có thể sử dụng một số thuật toán nhƣ: UUniFast, UUniSort, UUniform, UScaling, … Trong chƣơng trình tôi sử dụng thuật toán UFitting để sinh 𝑈𝑖 với 1 ≤ 𝑖 ≤ 𝑛 . Thuật toán đƣợc chứng minh là cho kết quả không thiên lệch và đƣợc mô tả nhƣ sau:
Thuật toán:
function vectU = UFitting(𝑛, 𝑈 ) upLimit = 𝑈;
for 𝑖 = 1; 𝑛 − 1,
vectU(i) = rand * upLimit; upLimit = upLimit – vectU(i); end
Trong thuật toán trên, ban đầu upLimit = 𝑈 với 𝑈 là hệ số sử dụng CPU cho tập
n nhiệm vụ (𝑈 ∈ (0,1]). Hệ số sử dụng CPU của niệm vụ thứ nhất (𝑈1) đƣợc tạo ngẫu nhiên trong khoảng [0, 𝑈]. Tiếp theo, 𝑈2 đƣợc tạo ngẫu nhiên trong khoảng [0, 𝑈 − 𝑈1]. Tƣơng tự 𝑈3 sẽ đƣợc sinh ngẫu nhiên trong khoảng [0, 𝑈 − 𝑈1 − 𝑈2]. Tiếp tục cho đến 𝑈𝑛 đƣợc xác định theo công thức sau: 𝑈𝑛 = 𝑈 − 𝑛−1𝑖=1 𝑈𝑖. Thuật toán có độ phức tạp 0(𝑛), tạo ra hệ số sử dụng CPU cho các nhiệm vụ của hệ thỏa mãn 𝑈 =
𝑈𝑖 𝑛 𝑖=1 .