Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Xác suất - Thống kê] Monte Carlo ước lượng phân phối dừng của chuỗi Markov

    Bộ sinh số giả ngẫu nhiên (để kết quả tái lập được, không dùng random thật): Cho số nguyên seed ≥0\ge 0≥0. Đặt s0=seeds_0=\text{seed}s0​=seed. Với i=1,2,3,…i=1,2,3,\dotsi=1,2,3,…: si=(1103515245⋅si−1+12345) mod 231.s_i = (1103515245 \cdot s_{i-1} + 12345) \bmod 2^{31}.si​=(1103515245⋅si−1​+12345)mod231. Số ngẫu nhiên thứ iii là ui=si/231∈[0,1)u_i = s_i / 2^{31} \in [0,1)ui​=si​/231∈[0,1). Dãy u1,u2,u3,…u_1,u_2,u_3,\dotsu1​,u2​,u3​,… được lấy theo ĐÚNG thứ tự này, dùng tuần tự trong suốt quá trình mô phỏng.

    Bài toán: Cho một xích Markov rời rạc gồm kkk trạng thái đánh số 0,1,…,k−10,1,\dots,k-10,1,…,k−1 (2≤k≤52\le k\le 52≤k≤5). Ma trận chuyển được cho dưới dạng phân số với mẫu số chung QQQ: dòng thứ iii gồm kkk số nguyên không âm pi,0,…,pi,k−1p_{i,0},\dots,p_{i,k-1}pi,0​,…,pi,k−1​ với ∑jpi,j=Q\sum_j p_{i,j} = Q∑j​pi,j​=Q; xác suất chuyển từ trạng thái iii sang jjj là pi,j/Qp_{i,j}/Qpi,j​/Q.

    Xét ngưỡng tích lũy của dòng iii: ci,0=pi,0/Qc_{i,0} = p_{i,0}/Qci,0​=pi,0​/Q, ci,j=ci,j−1+pi,j/Qc_{i,j} = c_{i,j-1} + p_{i,j}/Qci,j​=ci,j−1​+pi,j​/Q với j≥1j\ge 1j≥1. Trạng thái bắt đầu luôn là 000.

    Mô phỏng MMM chuỗi độc lập, mỗi chuỗi TTT bước; số ngẫu nhiên lấy TUẦN TỰ toàn cục: chuỗi 111 dùng TTT số đầu tiên (mỗi bước 1 số), rồi đến chuỗi 222, v.v. Tại một bước, đang ở trạng thái iii, lấy số ngẫu nhiên kế tiếp uuu; trạng thái kế tiếp là chỉ số jjj NHỎ NHẤT sao cho u<ci,ju < c_{i,j}u<ci,j​ (nếu do sai số không tìm được jjj nào, quy ước chọn j=k−1j=k-1j=k−1).

    Sau khi mô phỏng xong (tổng cộng M×TM\times TM×T bước, TRẠNG THÁI XUẤT PHÁT KHÔNG được tính), đếm số bước rơi vào mỗi trạng thái và in ra kkk tỉ lệ (đếm/(M×T)(M\times T)(M×T)), làm tròn 6 chữ số thập phân, theo đúng thứ tự trạng thái 0,1,…,k−10,1,\dots,k-10,1,…,k−1, cách nhau khoảng trắng (quy ước toàn bộ =0=0=0 nếu M×T=0M\times T=0M×T=0).

    Ví dụ: k=2,Q=2,M=2,T=3,seed=1k=2, Q=2, M=2, T=3, \text{seed}=1k=2,Q=2,M=2,T=3,seed=1, ma trận (1111)\begin{pmatrix}1&1\\1&1\end{pmatrix}(11​11​) (mỗi dòng chia đều Q=2Q=2Q=2) → 0.500000 0.500000.

    • Định dạng đầu vào:

      Dòng 1: 5 số nguyên k Q M T seedk\ Q\ M\ T\ \text{seed}k Q M T seed (2≤k≤52\le k\le 52≤k≤5; 1≤Q≤10001\le Q\le 10001≤Q≤1000; 0≤M≤20000\le M\le 20000≤M≤2000; 0≤T≤20000\le T\le 20000≤T≤2000; 0≤seed<2310\le \text{seed}<2^{31}0≤seed<231). kkk dòng tiếp theo: mỗi dòng kkk số nguyên không âm pi,0,…,pi,k−1p_{i,0},\dots,p_{i,k-1}pi,0​,…,pi,k−1​ với tổng bằng QQQ.

    • Định dạng đầu ra:

      Một dòng gồm kkk số thực (mỗi số 6 chữ số thập phân), cách nhau khoảng trắng, theo thứ tự trạng thái 0..k−10..k-10..k−1.

    Ví dụ:

    Đầu vào:

    2 2 0 5 1
    1 1
    1 1

    Đầu ra:

    0.000000 0.000000
    

    Đầu vào:

    2 2 1 0 1
    1 1
    1 1

    Đầu ra:

    0.000000 0.000000
    

    Đang tải editor...