Tạo chính xác các biến thể từ phân phối luật công suất rời rạc


8

Các phương pháp tốt nhất để tạo chính xác các số nguyên ngẫu nhiên được phân phối theo một định luật điện là gì? Xác suất mắc ( k = 1 , 2 , ... ) nên bằng p k = k - γ / ζ ( γ ) và phương pháp nên làm việc tốt cho bất kỳ γ > 1 .kk=1,2,pk=kγ/ζ(γ)γ>1

Tôi có thể thấy hai cách tiếp cận ngây thơ:

  1. Tính lên đến một số k max lớn sao cho k max k = 1 là "đủ gần" thành 1, sau đó tạo các số nguyên theo các xác suất này. Đây chỉ sẽ không hoạt động nếu γ gần 1 như k max sẽ cần phải rất lớn.pkkmaxk=1kmaxγkmax

  2. Vẽ các số thực từ một phân phối luật công suất liên tục (một vấn đề dễ dàng hơn mà tôi biết cách giải quyết) và làm tròn chúng thành các số nguyên theo một cách nào đó. Có thể tính toán phân tích xác suất chính xác để có được mỗi số nguyên với phương pháp trên. Tôi có thể sử dụng từ chối để sửa chữa những để (mà cũng có thể được tính cung cấp tôi có thể đánh giá ζ chức năng). (Đây sẽ là một chút lông vì tôi phải làm tròn theo cách tôi có được số nguyên với xác suất cao hơn p k với k lớn hơn một số giá trị nhỏ và xử lý k ít hơn số đó một cách riêng biệt.)pkζpkkk

Có một phương pháp tốt hơn mà cũng chính xác (không gần đúng)?


2
Tôi không tìm kiếm phần mềm làm sẵn. Tôi đang tìm phương pháp.
Szabolcs

Bạn đã tìm thấy các phương pháp?
syko

Câu trả lời:


6

Tôi nghĩ rằng (một phiên bản sửa đổi một chút) phương pháp 2 khá đơn giản, thực sự

Sử dụng định nghĩa của hàm phân phối Pareto được đưa ra trong Wikipedia

FX(x)={1(xmx)αxxm,0x<xm,

nếu bạn lấy α=γthì tỷ lệ củapxvớiqx=FX(x+1xm=12α=γpxđược tối đa hóa tạix=1, có nghĩa là bạn chỉ có thể chia tỷ lệ theo tỷ lệ tạix=1và sử dụng lấy mẫu từ chối thẳng. Nó có vẻ là hợp lý hiệu quả.qx=FX(x+12)FX(x12)x=1x=1

Nói rõ hơn: nếu bạn tạo từ Pareto với xm=12α=γM=p1/q1xpxMqx

nhập mô tả hình ảnh ở đây

M

xmαα=γaa

γ


Phương pháp 1 có thể được điều chỉnh cho chính xác, bằng cách thực hiện phương pháp 1 gần như luôn luôn, sau đó áp dụng một phương pháp khác để đối phó với đuôi. Điều này có thể được thực hiện là những cách có thể rất nhanh.

256p11256p22256pi<1

Phần còn lại sau đó có thể được thực hiện bằng một số cách tiếp cận (ngay cả với, giả sử 'bình phương biểu đồ' nếu nó được tự động hóa, nhưng nó không phải hiệu quả như vậy), và sau đó có thể sử dụng đuôi phải một cái gì đó giống như phương pháp chấp nhận từ chối ở trên.

Thuật toán cơ bản liên quan đến việc tạo ra một số nguyên từ 1 đến 256 (chỉ cần 8 bit từ rng; nếu hiệu quả là tối quan trọng, các hoạt động bit có thể lấy các số đó 'ra khỏi đầu', để lại phần còn lại của số thống nhất (tốt nhất là bên trái như một giá trị số nguyên không chuẩn hóa đến thời điểm này) có thể được sử dụng để đối phó với phần còn lại bên trái và đuôi bên phải nếu được yêu cầu.

2k216

Trong cùng ví dụ zeta (2) như trên, bạn sẽ có các giá trị 212 1, 26 2, 7 3, 3 4, một 5và các giá trị từ 250-256 sẽ xử lý phần còn lại. Hơn 97% thời gian bạn tạo một trong các giá trị trong bảng (1-5).


Tôi đã thực hiện một số bổ sung cho câu trả lời của mình và dự định thực hiện thêm một số chi tiết để cung cấp thêm chi tiết.
Glen_b -Reinstate Monica

Cảm ơn bạn --- Tôi không mong đợi sự bổ sung. Nếu bạn chỉnh sửa nó nhiều hơn, bạn có thể ping tôi không? Tôi có thể không chú ý khác vì tôi không thường xuyên truy cập trang web này và tôi đã chấp nhận câu trả lời là "2. là cách để đi".
Szabolcs

4

y

Các cách tiếp cận gần đúng khác để tạo các số nguyên, chẳng hạn như làm tròn (cắt bớt) giá trị của y, cho kết quả kém hơn đáng kể và không nên được sử dụng.

r[0,1)x=P1(1r)P(x)=a=xP(X=a)P(x)P(x)=1r

x=12(1r)1/(1γ)+12
γ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.