BPMN Mining
Đăng nhập Đăng ký miễn phí
Tài liệu / Công thức tính

Vòng lặp — chuỗi Markov

Giải hệ nᵀ(I − P) = e₀ᵀ thay vì cắt vòng.

Đây là phần lõi mà công cụ làm khác với hầu hết bảng tính: vòng lặp được giải chính xác bằng đại số tuyến tính, không phải bằng cách chạy thử vài vòng rồi dừng.

Ý tưởng

Coi quy trình là một chuỗi Markov hấp thụ: mỗi bước là một trạng thái, mỗi luồng là một xác suất chuyển, các điểm kết thúc là trạng thái hấp thụ. Câu hỏi “bước v chạy trung bình bao nhiêu lần trong một lượt hồ sơ” chính là câu hỏi kinh điển về số lần ghé thăm kỳ vọng.

Công thức

nv=e0(v)+u ∈ Vnu·P(uv)
(5)

Viết gọn dưới dạng ma trận:

nT(IP)=e0T
(5′)

Đọc bằng lời: “số lần ghé thăm bước v bằng 1 nếu v là điểm bắt đầu, cộng với tổng số lần các bước khác chuyển sang v”. Đây là một hệ phương trình tuyến tính — giải một lần là ra tất cả, và nghiệm đã bao gồm vô hạn số vòng lặp.

Trường hợp một vòng rework đơn

Với vòng lặp đơn giản, hệ (5) rút gọn về công thức tổng cấp số nhân:

E[k]=11p
(5″)

Ví dụ tính tay

🧮 Đối chiếu chứng từ với 22% sai lệch

Bước Đối chiếu (35 phút) → cổng Khớp? → 22% sang Xử lý sai lệch (90 phút) rồi quay lại đối chiếu; 78% đi tiếp sang Thanh toán.

Gọi nđối chiếu là số lần chạy bước đối chiếu:

nđc=1+0,22·nđc   ⇒   nđc=10,78=1,2821

Bước xử lý sai lệch chạy ít hơn, đúng bằng phần bị trả về:

nxl=0,22·1,2821=0,2821

Thời gian đóng góp của cụm này:

35·1,2821+90·0,2821=44,87+25,38=70,25 phút

So sánh: nếu bỏ qua rework thì chỉ tính 35 phút. Nếu ngây thơ “cộng thêm 22%” thì ra 42,7 phút. Con số đúng là 70,25 phút — gấp đôi ước lượng thô.

Cách công cụ giải bài toán này

Cách giải số lần chạy kỳ vọng
def expected_visits(node_ids, transitions, start):
    # Dựng (I - P^T), vế phải là e_0
    matrix = [[1.0 if r == c else 0.0 for c in range(size)] for r in range(size)]
    for source, targets in transitions.items():
        for target, probability in targets.items():
            matrix[index[target]][index[source]] -= probability

    vector = [0.0] * size
    vector[index[start]] = 1.0

    return solve(matrix, vector)      # khử Gauss có chọn trục
Khi hệ vô nghiệm
Nếu tồn tại một vòng lặp mà mọi bước trong vòng đều không có nhánh thoát, ma trận suy biến — về mặt toán học thời gian kỳ vọng là vô hạn. Công cụ báo lỗi rõ ràng thay vì trả về một con số hữu hạn sai. Lưu ý: luồng quay lui có xác suất 100% là bình thường, miễn là ở đâu đó trong vòng có nhánh thoát ra.
Chỗ nào khó hiểu hoặc còn thiếu?