PCG, Daha Yaxşı Təsadüfi Sayı Generatorları Ailəsi

Göndərildi: 08.09.2021
Məqalənin müəllifi Adəm Quliyev

PCG, təsadüfi ədədi yaratmaq üçün sadə sürətli yer səmərəli statistik cəhətdən yaxşı alqoritmlər ailəsidir. Bir çox ümumi təyinatlı RNG-lərdən fərqli olaraq, bunları da proqnozlaşdırmaq çətindir.

Bir baxışda xülasə

Təsadüfi Nömrə Yaratması vacibdir

Alqoritmik təsadüfi say generatorları hər yerdə, simulyasiyadan hesablama yaradıcılığına qədər hər cür tapşırıq üçün istifadə olunur. Alqoritmik təsadüfi ədədin yaradılması haqqında daha çox məlumat əldə edin.

Ancaq geniş yayılmasına baxmayaraq, qüsurlu bir təsadüfi say generatoru istifadə etdiyiniz ehtimalı.

Mövcud RNG ilə yanlış nə var

Bu gün geniş yayılmış təsadüfi say generatorlarının əksəriyyətində aşağıdakı problemlərdən biri var:

Əslində təsadüfi deyil Təsadüfi bir həqiqi və qərəzsiz bir qaynaq kimi davranmaq, hər hansı bir təsadüfi ədədi istehsalçısının təmin etməsi lazım olan təməl tələb kimi görünür , lakin bir çox RNG təsadüfi statistik testlərdən keçə bilməz. Daha ətraflı. Proqnozlaşdırıla bilən və etibarsız Bir çox RNG-lərin az miqdarda məhsulunu müşahidə etdikdən sonra proqnozlaşdırıla bilər. Təsadüfi rəqəmləri ədalət və ya gözlənilməzliyi təmin etmək üçün bir vasitə kimi istifadə edirsinizsə, bu problemdir. Daha ətraflı. Orta Performans Bir çox RNG yavaş və ya nisbətən böyük bir yaddaş tələb edir. Daha ətraflı. Faydalı xüsusiyyətlərin olmaması Ən populyar RNG-lər “irəli atla” kimi faydalı xüsusiyyətlər təqdim etmir. Daha ətraflı.

Əlbəttə, bəzi RNG-lər pisdir, amma yaxşı birini istifadə edirəm, düzdür?

Çox ezoterik bir RNG istifadə etmədiyiniz təqdirdə, istifadə etdiyiniz RNG-in bu və ya digər şəkildə qüsurlu olması ehtimalı var. Mersenne Twister, arc4random , ChaCha20, Unix's drand48 , Unix random , Unix rand , XorShift * , RanQ1 və ya digərlərindən istifadə edirsinizsə, bilmək istədiyiniz qüsurlar var. Daha ətraflı.

PCG ailəsi daha yaxşıdır

PCG ailə birləşdirir xassələri əvvəl eyni nəsil sxem birlikdə görmədim:

  • İstifadəsi həqiqətən asandır , lakin çox çevikdir və güclü xüsusiyyətlər təklif edir (axmaq əyləncə fəndlərini həyata keçirməyə imkan verən bəzi daxil olmaqla). Daha ətraflı.
  • Bu çox sürətli və işğal edə bilərsiniz çox az yer . Daha ətraflı.
  • Bu, kiçik code ölçüsü . Daha ətraflı.
  • Statistik testlərdə performans əladır (tam detallar üçün PCG kağızına baxın).
  • Əksər generatorlardan daha az proqnozlaşdırılan və daha etibarlıdır.
  • İcazəli lisenziyası olan (Apache lisenziyası) açıq mənbəli proqramdır.

Bu gün C və C ++ tətbiqetmələrini yükləyə bilərsiniz!

PCG Ailəsini Fərqləndirən Nədir?

PCG ailəsinin niyə daha yaxşı olduğunu izah etmək üçün bir az texniki olmalıyıq. Təsadüfi ədədi yaradanın iki hissəsi var. Onları iki funksiya kimi görə bilərik:

Vəziyyət keçid funksiyası hər dəfə təsadüfi bir rəqəm istədikdə RNG-nin daxili vəziyyətinin necə dəyişdiyini idarə edir.

Əksər RNG-lər çox sadə bir çıxış funksiyasından istifadə edirlər. Bir çox RNG yalnız şəxsiyyət funksiyasından istifadə edir! Sadəcə vəziyyəti olduğu kimi qaytarırlar (asanlıqla proqnozlaşdırılır). Bəzi RNG-lər birdən çox sadə RNG- ləri birləşdirir və beləliklə onları sadəcə birləşdirən bir çıxış funksiyasına malikdir (məsələn, əlavə və ya xor ilə). Yenə də bu, çox sadə bir çıxış funksiyasıdır.

Bir neçə RNG əks yanaşmanı qəbul edir. Məsələn, Fortuna RNG əhəmiyyətsiz bir dövlət keçid funksiyasına malikdir (yalnız sayğacı artırır), lakin çıxış funksiyası olaraq kriptoqrafik blok şifrəsini istifadə edir.

PCG ailəsinin təməlində dayanan müşahidə, bu yanaşmaların balanssız olması , bu və ya digər tərəfində çox ağırlıq verməsi. PCG ailəsi daha balanslı bir yanaşma edir.

PCG-nin Dövlət-keçid funksiyası PCG ailəsi, dövlət keçid funksiyası kimi xətti bir uyğunlaşma generatoru istifadə edir - PCG-nin "CG" si "uyğunlaşan generator" deməkdir. Xətti uyğunlaşdırıcı generatorların statistik cəhətdən zəif olduğu bilinir, lakin PCG-nin vəziyyət keçid funksiyası işin yalnız yarısını edir, ona görə də mükəmməl olmağa ehtiyac yoxdur . Üstəlik, LCG-lərin onları yaxşı bir seçim halına gətirən çox sayda faydalı xüsusiyyəti var. PCG-nin Çıxış Fonksiyonu PCG, RNG-nin daxili vəziyyətindən daha təsadüfi bir nəticə çıxarmaq üçün kanallarda permütasiya funksiyaları adlı yeni bir texnikadan istifadə edir . PCG-nin çıxış funksiyaları ona əla statistik göstəricilər qazandırır və nəticəsindən proqnozlaşdırmağı çətinləşdirir (və beləliklə daha etibarlıdır). PCG-dəki "P" "permuted" deməkdir.

Bu belədir. PCG kağızı dərinliklərdə yer dəyişdirmə funksiyalarını və PCG ailəsinin müxtəlif üzvləri tərəfindən istifadə olunan çıxış funksiyalarını təsvir edir.

PCG nəsil sxemindən istifadə etmək istəyirsinizsə, yükləmə səhifəsinə keçin.

PCG bloqu

PCG blogunda PCG və ümumiyyətlə təsadüfi ədədin yaranması ilə əlaqəli mövzularda yeni inkişaflar və referatlar var. Saytın qalan hissələrindən daha tez-tez yenilənməyə meyllidir.