25
Programlama Dilleri 1 Ders 3: Rastgele sayı üretimi ve uygulamaları

Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/02/ders... · Programlama Dilleri 1 Ders 3: Rastgele sayı üretimi

  • Upload
    others

  • View
    13

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/02/ders... · Programlama Dilleri 1 Ders 3: Rastgele sayı üretimi

Programlama Dilleri 1

Ders 3: Rastgele sayı üretimi ve uygulamaları

Page 2: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/02/ders... · Programlama Dilleri 1 Ders 3: Rastgele sayı üretimi

Ders 3 Genel Bakış

Giriş

Rastgele Sayı

Rastgele Sayı Üreteci

rand Fonksiyonunun İşlevi

srand Fonksiyonunun İşlevi

Monte Carlo Yöntemi

Uygulama 1: Yazı-Tura Simülasyonu

Uygulama 2: Zar Simülasyonu

Uygulama 3: MC ile Pi sayısının hesabı

2 Programlama Dilleri 1

Page 3: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/02/ders... · Programlama Dilleri 1 Ders 3: Rastgele sayı üretimi

Giriş

Bilimsel uygulamalarda problemler iki kısımda incelenebilir:

Kesin sistemler, kuralları kanun hükmünde olan matematiksel yasalarla tanımlanabilen sistemlerdir; Örneğin yerçekimi yasası gibi

Tahmini sistemler, başlangıç koşulları kesin olarak tayin edilemediği için sonuca dair çözümün tahmin edilerek bulunduğu sistemlerdir. Yoksa, evrende raslantıya yer yoktur. (Monte Carlo Yöntemi)

Programlama Dilleri 1 3

Page 4: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/02/ders... · Programlama Dilleri 1 Ders 3: Rastgele sayı üretimi

Rastgele Sayı

Bir kümenin veya dizinin elemanlarından bir

kısmının, veya tamamının istatiksel olarak rastgele

seçilmesi yoluyla üretilmiş sayılara rastgele sayı adı

verilir.

Rastgele sayı üretimi matematiğin önemli

konularından biridir.

Rastgele sayılar ya da daha doğru ifadeyle, rastgele

izlenimi veren sayılar (sözde rastgele sayılar -

pseudo random numbers) istatistik, ekonomi,

matematik gibi pek çok alanda olduğu gibi

programcılıkta da kullanılmaktadır.

4 Programlama Dilleri 1

Page 5: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/02/ders... · Programlama Dilleri 1 Ders 3: Rastgele sayı üretimi

Rastgele Sayı

Bilgisayarlar kesin (deterministic) bir yapıda çalıştıkları

için gerçek anlamda rastgele sayı üretemezler.

Ancak, uygun algoritmalarla bir bilgisayarın düzgün bir

dağılımdan seçilen ve genellikle [0,1] arasında gerçel

değerler alan rastgele sayı üretmesi sağlanabilir.

Bilgisayarların ürettiği bu rastgele sayılar yalancı

rastgele sayı olarak adlandırılır. Rastgele sayı üreten bu

algoritmalara rastgele sayı üreteci denir.

Günümüz derleyicilerinin bir çoğunda rastgele sayı

üreteçleri için hazır kütüphane fonksiyonları

tanımlanmıştır.

Programlama Dilleri 1 5

Page 6: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/02/ders... · Programlama Dilleri 1 Ders 3: Rastgele sayı üretimi

Rastgele Sayı Üreteci

Rastgele sayılar bir rastgele sayı üreticisi (random number generator) tarafından üretilirler.

Rastgele sayı üreticisi aslında matematiksel bir fonksiyondur. Söz konusu fonksiyon bir başlangıç değeri alarak, bir değer üretir.

Daha sonra ürettiği her değeri girdi olarak alır ve tekrar başka bir sayı üretir.

Üreticinin ürettiği sayılar rastgele izlenimi vermektedir.

6 Programlama Dilleri 1

Page 7: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/02/ders... · Programlama Dilleri 1 Ders 3: Rastgele sayı üretimi

rand Fonksiyonunun İşlevi

Standart rand işlevi rastgele sayı üretir. Bu işlevin

bildirimi aşağıdaki gibidir:

int rand(void);

C standartları rand işlevinin rastgele sayı üretimi

konusunda kullanacağı algoritma ya da teknik üzerinde

bir koşul koymamıştır.

Bu konu derleyiciyi yazanların seçimine bağlı

bırakılmıştır. rand işlevinin bildirimi, standart bir başlık

dosyası olan stdlib.h içindedir.

rand işlevi için başlık dosyası kaynak koda eklenmelidir.

#include <stdlib.h>

7 Programlama Dilleri 1

Page 8: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/02/ders... · Programlama Dilleri 1 Ders 3: Rastgele sayı üretimi

rand Fonksiyonunun İşlevi

rand fonksiyonunun örneği,

8 Programlama Dilleri 1

Page 9: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/02/ders... · Programlama Dilleri 1 Ders 3: Rastgele sayı üretimi

rand Fonksiyonunun İşlevi

Programlarda bazen belirli bir aralıkta rastgele

sayı üretmek istenebilir. Bu durumda rand işlevi

mod operatörü olarak kullanılabilir :

rand( ) % 2 => Yalnızca 0 ya da 1 değerini üretir.

rand( ) % 6, =>0 - 5 aralığında rastgele bir değer üretir

rand( ) % 6+1 =>1 - 6 aralığında rastgele bir değer üretir.

rand( ) % 6+3 =>3 - 8 aralığında rastgele bir değer üretir.

4+rand() %16 =>4 - 19 aralığında rastgele bir değer üretir.

9 Programlama Dilleri 1

Page 10: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/02/ders... · Programlama Dilleri 1 Ders 3: Rastgele sayı üretimi

rand Fonksiyonunun İşlevi

MIN ve MAX aralıklarında rastgele tamsayı

değerleri üretmek için aşağıdaki kodu yazmak

gereklidir:

int a = MIN + rand( ) % (MAX-MIN+1);

[-15 45] => -15+rand( ) % (45+15+1) => -15+ rand( ) % 61;

[100 250) => 100+rand( ) % (249-100+1) => 100+ rand( ) % 150;

(-150 -50] => -149+rand( ) % (-50+149+1) => -150+ rand( ) % 99;

10 Programlama Dilleri 1

Page 11: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/02/ders... · Programlama Dilleri 1 Ders 3: Rastgele sayı üretimi

rand Fonksiyonunun İşlevi

5 ile 20 arasında rastgele sayı üretme

11 Programlama Dilleri 1

Page 12: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/02/ders... · Programlama Dilleri 1 Ders 3: Rastgele sayı üretimi

rand Fonksiyonunun İşlevi

Aşağıdaki örnekte 10 tane rastgele sayı ekrana

yazdırılıyor.

12 Programlama Dilleri 1

Yandaki kaynak kod ile

oluşturulan programın her

çalıştırılmasında ekranda

aynı sayılar yazılmaktadır.

Page 13: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/02/ders... · Programlama Dilleri 1 Ders 3: Rastgele sayı üretimi

rand Fonksiyonunun İşlevi Oluşturulan program her çalıştırıldığında neden hep aynı sayı

zinciri elde ediliyor?

rand işlevi rastgele sayı üretmek için bir algoritma kullanıyor.

Bu algoritma derleyiciden derleyiciye değişse de, rastgele

sayı üretiminde kullanılan ana tema aynıdır.

Bir başlangıç değeri ile işe başlanır. Buna tohum değeri (seed

value) denir. Bu değer üzerinde bazı işlemler yapılarak

rastgele bir sayı elde edilir.

Tohum değer üzerinde yapılan işlem bu kez elde edilen

rastgele sayı üzerinde yinelenir.

rand işlevi çağrılarını içeren bir program her

çalıştırıldığında aynı tohum değerinden başlanacağı için aynı

sayı zinciri elde edilir.

13 Programlama Dilleri 1

Page 14: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/02/ders... · Programlama Dilleri 1 Ders 3: Rastgele sayı üretimi

srand Fonksiyonunun İşlevi

Bazı durumlarda, programın her çalıştırılmasında

aynı rastgele sayı zincirinin üretilmesi istenmez.

Örneğin, bir oyun programında programın

çalıştırılmasıyla hep aynı sayılar üretilirse, oyun hep

aynı biçimde oynanır.

Programın her çalışmasında farklı bir sayı zincirinin

elde edilmesi için, srand işlevinin rastgele sayı

üreticisinin tohum değerini programın her

çalışmasında başka bir değer yapması gerekir.

Bu amaçla çoğu zaman standart time işlevi

işlevinden faydalanılır.

14 Programlama Dilleri 1

Page 15: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/02/ders... · Programlama Dilleri 1 Ders 3: Rastgele sayı üretimi

srand Fonksiyonunun İşlevi

time standart bir C işlevidir, bildirimi standart bir başlık dosyası

olan time.h dosyası içindedir.

time işlevi kendisine 0 değeri gönderildiğinde, önceden belirlenmiş

bir tarihten (sistemlerin çoğunda 01.01.1970 tarihinden) işlevin

çağrıldığı ana kadar geçen saniye sayısını geri döndürür.

İşlevin geri dönüş değeri, derleyicilerin çoğunda long türden bir

değerdir.

İçinde rastgele sayı üretilecek programda, srand işlevine argüman

olarak time işlevinin geri dönüş değeri gönderilirse, program her

çalıştığında, belirli bir zaman geçmesi nedeniyle, rastgele sayı

üreticisi başka bir tohum değeriyle ilk değerini alır.

Böylece programın her çalıştırılmasında farklı sayı zinciri üretilir:

srand(time(0));

15 Programlama Dilleri 1

Page 16: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/02/ders... · Programlama Dilleri 1 Ders 3: Rastgele sayı üretimi

srand Fonksiyonunun İşlevi

Daha önce yapılan örnek

uygulamada program her

çalıştırılmasında aynı

rastgele değerleri bulurken

srand() fonksiyonunun

eklenmesiyle farklı sonuçlar

elde edilmektedir.

16 Programlama Dilleri 1

Page 17: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/02/ders... · Programlama Dilleri 1 Ders 3: Rastgele sayı üretimi

Monte Carlo Yöntemi

Monte Carlo Yöntemi rastgele sayılarla denenerek yaparak sonuca ulaşmayı amaçlayan deneysel bir yöntemdir. Bu şekilde matematiksel ve fiziksel problemlerin çözümü amaçlanmaktadır

Los Alamos Bilimsel Laboratuar’ından John Von Neumann, Stan Ulam ve Nick Metropolis adlarında üç bilim adamı tarafından ortaya çıkarılmıştır.

Metropolis algoritması olarak da bilinir. Algoritma, kesin çözüm yapmanın zor olduğu problemlerde tahmini çözümlere gitmeyi amaçlar. Yani olasılık teorisi üzerine kurulmuştur.

17 Programlama Dilleri 1

Page 18: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/02/ders... · Programlama Dilleri 1 Ders 3: Rastgele sayı üretimi

Monte Carlo Yöntemi

Monte Carlo yönteminin temel amacı, büyük elemanlar topluluğunun özelliklerinin, rastgele olarak seçilmiş bir alt kümesi aracılığı ile çıkartılmasıdır.

Örneğin herhangi bir f(x) fonksiyonunun (a,b) aralığındaki beklenen değerinin, bu fonksiyonun yine bu aralıkta, rastgele seçilen sonlu sayıdaki noktalarındaki tahmini değerinden çıkartılmasını amaçlar.

18 Programlama Dilleri 1

Page 19: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/02/ders... · Programlama Dilleri 1 Ders 3: Rastgele sayı üretimi

Monte Carlo Yöntemi

Monte Carlo (MC), rastgele sayıları baz alarak tahmini

sistemleri modeller.

Hatta, bazı kesin sistemlerde de kullanılabilir; Örneğin

rastgele sayılarla Pi sayısını veya bir fonksiyonun integralini

hesaplamak gibi. MC yöntemleri, Fizik ve Mühendislik

alanlarında pek çok uygulama alanı bulmuştur. Bunlardan

başlıcaları:

o [Matematik] Sayısal Analiz

o [Fizik] Doğal olayların simülasyonu

o [İstatistik] Dağılım Fonksiyonları

o [Mühendislik] Deneysel aletlerin (örneğin detektör) simülasyonu

19 Programlama Dilleri 1

Page 20: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/02/ders... · Programlama Dilleri 1 Ders 3: Rastgele sayı üretimi

Uygulama 1: Yazı-Tura Simülasyonu

Hilesiz bir para atıldığında, yazı veya tura gelme olasılığı

(P:probability) eşit ve kuramsal olarak P = 1/2 dir. Düşünün ki bir

para n kez atılsın ve gelen turaları sayıp ve t ile gösterelim.

Deney sayısı, n, arttıkça t/n oranı kararlı (sabit) kalmaya başlar. Bu

durumda, olasılığın istatiksel tanımı şöyle yapılır:

P(t) = t/n

n sonsuza giderken P(t) değeri P = 1/2 değerine yaklaşır.

Şimdi, [0, 1] aralığından rastgele seçilen sayıları kullanarak, para

atma deneyini yapalım.

Rastgele sayı üreteçleri sayıları eşit olasılıkla üretir. r bir rastgele

sayı olsun. r < 0.5 durumuna tura, r >= 0.5 durumuna da yazı

diyelim. Bu şekilde, bir döngü kullanarak deney sayısına (n) göre,

yazı-tura simülasyonu yapılabilir.

20 Programlama Dilleri 1

Page 21: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/02/ders... · Programlama Dilleri 1 Ders 3: Rastgele sayı üretimi

Uygulama 1: Yazı-Tura Simülasyonu

Programlama Dilleri 1 21

Page 22: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/02/ders... · Programlama Dilleri 1 Ders 3: Rastgele sayı üretimi

Uygulama 1I: Zar Simülasyonu

Bu uygulamada, bir çift zar atımı modellenecektir. Bu, bir çok tavla programında kullanılan yöntemdir.

Bir çift zar atılıyor. Zarların toplamının 7 olma olasılığını bulan bir program verilmektedir. Zar, [1, 6] arasında rastgele tamsayı değeri alır.

Buna göre, r [0,1] arasında rastgele gerçel sayı ise, bu zarın MC modeli:

ozar = 1 + tamsayı(6*r) şeklinde olur.

22 Programlama Dilleri 1

Page 23: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/02/ders... · Programlama Dilleri 1 Ders 3: Rastgele sayı üretimi

Uygulama 1I: Zar Simülasyonu

Programlama Dilleri 1 23

Page 24: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/02/ders... · Programlama Dilleri 1 Ders 3: Rastgele sayı üretimi

24 Programlama Dilleri 1

Analitik düzlemde daire formülü.

Birim dairenin yarıçapı 1 olduğundan

y’ yi x cinsinden yazarsak

Dairenin alanı

Pi sayısı (π), bir dairenin çevresinin çapına bölümü ile elde edilen

matematik sabitidir. Günlük kullanımda genel olarak 3, 3.14 veya 3.1415

olarak ifade edilmesine rağmen gerçek değeri bilinmemektedir.

Birim daire ile ilgilendiğimizden dolayı alan π’ dir.

Monte Carlo yöntemi kullanılarak bulunacak bölgenin

alanı, π/4 olan çeyrek dairenin alanı olduğundan, bu

çeyrek dairenin alanını bularak pi sayısına ulaşmış

oluruz.

Uygulama 3: MC ile Pi sayısının hesabı

Page 25: Programlama Dilleri 1 - Bilecik Şeyh Edebali Universityw3.bilecik.edu.tr/bilgisayar/wp-content/uploads/sites/75/2018/02/ders... · Programlama Dilleri 1 Ders 3: Rastgele sayı üretimi

Uygulama 3: MC ile Pi sayısının hesabı

Programlama Dilleri 1 25