0Pricing
C++ Academy · Ders

Doğru Tohumlama

Tekrarlanabilir rastgelelik elde edin

Doğru Tohumlama, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.

Seedleme Nedir

Bir seed, bir motorun başlangıç durumudur. Aynı seed aynı diziyi yeniden üretir; farklı bir seed ise farklı bir dizi verir.

#include <iostream>
#include <random>

int main() {
    std::mt19937 a(100), b(200);
    std::cout << std::boolalpha << (a() == b()) << '\n';
    return 0;
}

Tekrarlanabilirlik için Sabit Seed

Sabit bir seed, sonuçları tekrarlanabilir hâle getirir; bu da sınamalar ve hata ayıklama için idealdir.

#include <iostream>
#include <random>

int main() {
    auto run = [](unsigned s) {
        std::mt19937 g(s);
        return g() % 1000;
    };
    std::cout << run(42) << ' ' << run(42) << '\n';
    return 0;
}

std::random_device

std::random_device, işletim sisteminden belirlenimci olmayan seed değerleri sağlar. Motorunuzu seed etmek için bunu bir kez kullanın.

#include <iostream>
#include <random>

int main() {
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_int_distribution<int> d(1, 6);
    std::cout << "a roll: " << d(gen) << '\n';
    return 0;
}

Bir Kez Seed Edin, Yeniden Kullanın

Başlangıçta motoru tek bir kez seed edin. Her çekimden önce yeniden seed etmek rastgeleliğin kalitesini bozar.

#include <iostream>
#include <random>

int main() {
    std::random_device rd;
    std::mt19937 gen(rd());            // seed once
    std::uniform_int_distribution<int> d(1, 100);
    for (int i = 0; i < 3; ++i) std::cout << d(gen) << ' ';
    std::cout << '\n';
    return 0;
}

Zamanla Seedleme Tuzağı

time(nullptr) ile seed etmek yalnızca saniyede bir değişir; bu nedenle aynı anda başlatılan programlar aynı diziyi elde eder. random_device kullanmayı tercih edin.

#include <iostream>
#include <random>
#include <ctime>

int main() {
    std::mt19937 gen(static_cast<unsigned>(std::time(nullptr)));
    std::cout << "seeded from time (coarse)\n";
    std::cout << (gen() % 100) << '\n';
    return 0;
}

seed_seq ile Seedleme

Bir motorun çok sayıda dahili durum bilgisi vardır. std::seed_seq, daha iyi bir başlatma için çeşitli seed değerlerini bu durum bilgilerinin tamamına yayar.

#include <iostream>
#include <random>

int main() {
    std::seed_seq seq{1, 2, 3, 4};
    std::mt19937 gen(seq);
    std::cout << (gen() % 1000) << '\n';
    return 0;
}

random_device Değerlerini Birleştirme

Yüksek kaliteli seedleme için random_device üzerinden çeşitli değerler toplayıp bunları bir seed_seq içine aktarın.

#include <iostream>
#include <random>
#include <array>

int main() {
    std::random_device rd;
    std::array<unsigned, 4> seeds{rd(), rd(), rd(), rd()};
    std::seed_seq seq(seeds.begin(), seeds.end());
    std::mt19937 gen(seq);
    std::cout << "well-seeded engine ready\n";
    std::cout << (gen() % 100) << '\n';
    return 0;
}

Açıkça Yeniden Seedleme

Bir motoru seed(value) ile sıfırlayarak dizisini bilinen bir noktadan yeniden başlatabilirsiniz.

#include <iostream>
#include <random>

int main() {
    std::mt19937 gen(1);
    unsigned first = gen();
    gen.seed(1);             // restart
    std::cout << std::boolalpha << (gen() == first) << '\n';
    return 0;
}

Durumu Kaydetme ve Geri Yükleme

Bir motor akışa aktarılıp akıştan geri okunabilir; böylece tam rastgelelik durumunu kaydedebilir ve kaldığınız yerden devam edebilirsiniz.

#include <iostream>
#include <sstream>
#include <random>

int main() {
    std::mt19937 gen(5);
    std::ostringstream save; save << gen;
    unsigned expected = gen();
    std::istringstream load(save.str());
    std::mt19937 restored; load >> restored;
    std::cout << std::boolalpha << (restored() == expected) << '\n';
    return 0;
}

random_device Tekrarlanabilir Değildir

random_device belirlenimci olmadığından, bir çalıştırmayı yeniden üretmeniz gerektiğinde onu asla kullanmayın. Bunun için sabit bir seed kullanın.

#include <iostream>
#include <random>

int main() {
    const unsigned FIXED = 2026;
    std::mt19937 gen(FIXED); // reproducible across runs
    std::cout << (gen() % 10000) << '\n';
    return 0;
}

Yeniden Kullanılabilir Bir Üreteç

Yaygın bir yaklaşım, seed edilmiş bir motoru küçük bir yardımcı işlevin arkasına yerleştirir; böylece kodun geri kalanı yalnızca sayı ister.

#include <iostream>
#include <random>

int roll(std::mt19937& gen) {
    std::uniform_int_distribution<int> d(1, 6);
    return d(gen);
}

int main() {
    std::mt19937 gen(2026);
    std::cout << roll(gen) << ' ' << roll(gen) << '\n';
    return 0;
}

Kısa Sınama

Seedleme hakkındaki anlayışınızı sınayın.

Özet

Doğru seedleme yöntemlerini öğrendiniz:

  • sabit seed tekrarlanabilir çalıştırmalar sağlar; std::random_device ise benzersiz çalıştırmalar sağlar
  • başlangıçta bir kez seed edin, her çekimde değil; düşük çözünürlüklü time() seed'inden kaçının
  • seed_seq, entropiyi motorun tamamına yayar ve motorun durumu akışlar aracılığıyla kaydedilip geri yüklenebilir

Sonraki bölümde bunların tümünü uygulamalı örneklere uygulayacaksınız.

Sıkça Sorulan Sorular

“Doğru Tohumlama” dersi ücretsiz mi?

Evet — “Doğru Tohumlama” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.

“Doğru Tohumlama” dersinde ne öğreneceğim?

Tekrarlanabilir rastgelelik elde edin C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C++ Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Doğru Tohumlama” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Rastgele Üreteçler
  2. Dağılımlar
  3. Doğru Tohumlama
  4. Uygulamalı Örnekler
← C++ Academy Sayfasına Dön