İçeriğe atla

Monte Carlo yöntemi

Vikipedi, özgür ansiklopedi

Monte Carlo benzetimi, çok sayıda tekrarlanan rastgele örneklemelerle, bir takım nümerik sonuçlar elde etmeye yarayan ve bilimin birçok alanında yaygın olarak kullanılan bir sayısal hesaplama algoritmaları sınıfıdır. Stokastik olayların yer aldığı fiziksel süreçlerin sonuçlarının tahmin edilmesinde çok kullanışlıdır. Ayrıca, rastgele seçimlerin işe yaradığı ve prensipte deterministik olan bir takım problemlerin çözümünde de kullanılmaktadır. Monte-Carlo yöntemi, Nicholas Constantine Metropolis (1915-1999) tarafından bulunmuştur ve Atom bombasının geliştirildiği Los Alamos Ulusal Labratuvarında, bombanın patlamasından sonra dağılan nötronlara karşı kalkan modellemek için Stanislaw Ulam tarafından günümüze taşınmıştır.

Deney girdileri belirli olmayan, kesin olmayan bir şekilde gelmesi bekleniyorsa ve dağılım bir fonksiyonla hesaplanabilecekse kullanılır. Monte Carlo, rastgele sayıları baz alarak tahmini sistemleri modeller. Hücre Similasyonu, Borsa Modelleri, Dağılım Fonksiyonları, Sayısal Analiz, Doğal olayların simülasyonu, Atom ve Molekül Fiziği, Nükleer Fizik ve Yüksek Enerji Fiziği modellerini test eden simülasyonlar, Deneylerde kullanılan aletlerin simülasyonu (Örneğin bir madde içerisinde x ışınlarının dağılımı).

Yukarıdaki modellerde tahminler yapabilmek için; Rastgele sayı üretilir, bunun için programlama bilgisi gerekmektedir.

  1. Programlama: Temel düzeyde Monte Carlo programları öğrenildikten sonra, Monte Carlo üreteçlerini oluşturabilmek gerekmektedir. Teorik eğitimin yanında örneğin C, C++ gibi bilimsel çalışmalarda sıklıkla kullanılan programları iyi derecede bilmek gerekmektedir.
  2. Teorik: Programlama aşamasına geçmeden önce problemi ya da deney sistemimizin teorisini çok iyi oluşturmamız gerekmektedir.

Aşağıda Pi sayısının Monte Carlo Yöntemi ile hesaplanması örneği C++ kodları ile verilmiştir.

#include <iostream>
#include <random>

double calculate_pi(int sample) {
  std::mt19937 gen{std::random_device{}()};
  std::uniform_real_distribution<double> dis(0.0, 1.0);

  double count = 0.0;
  for(int i = 0; i < sample; i++) {
    const double x = dis(gen);
    const double y = dis(gen);

    if((x * x) + (y * y) <= 1)
      count++;
  }

  const double result = count / sample * 4;

  return result;
}

int main() {
  const int n_sample = 10000000;
  std::cout << n_sample << " deneme icin pi sayisi:\n"
            << calculate_pi(n_sample) << '\n';
}
// 10000000 deneme icin pi sayisi:
// 3.14166

Monte Carlo Benzetimi, fiziksel ve matematiksel bazı sistemlerin benzetiminde kullanılır. Genelde raslantısal (random) değişkenlerin sisteme etkisinin incelenmesi için kullanılır. Genelde raslantısal değişkenler için rastgele sayılar üreten bir algoritma ile çalışır.

Monte Carlo Benzetimi yapılacak değişkenler belli bir istatistiksel dağılıma uyacak şekilde üretilebilir. Bunun için olasılık dağılım fonksiyonunun (CDF) tersi kullanılır. Bilgisayar tarafından belirli bir aralıkta [0 - 1] düzenli (uniform) olarak üretilen rastgele sayılar olasılık dağılım fonksiyonlarının tersi kullanılarak kolaylıkla herhangi bir dağılıma dönüştürülebilir.

Örneğin iki rassal değişkene (, ) bağlı olan Y değişkeninin bu değişkenlerle olan ilişkisi f fonksiyonuyla tanımlanmış olsun.

Eğer ve değişkenlerinin dağılımı belliyse (örneğin: Normal Dağılım) ve aynı zamanda dağılım özellikleri de biliniyorsa ( : Ortalama ve  : Standart sapma) X değerleri için defalarca rastgele sayılar üretilerek f fonksiyonuyla Y değerleri hesaplanabilir. Buradan da Y ile ilgili istatistiksel bilgilere ulaşılabilir. Ne kadar çok örnekleme yapılırsa o kadar iyi sonuçlar elde edilir.

  • Bozkaya K: A study on the reliability analysis during preliminary design - A rocket motor example. MS Tez. ODTÜ. Eylül 2006