Monte Carlo Method

Menggunakan Metode Monte Carlo

Pengertian

Metode Monte Carlo adalah metode / kelas luas dari alogritma komputasi yang mengandalkan pengambilan sampel secara acak yang berulang untuk bisa mendapatkan hasil yang numerik. Konsep yang mendasarinya adalah menggunakan sampel acak yang digunakan untuk memecahkan masalah yang mungkin secara prinsip bersifat deterministik.

Metode Monte Carlo banyak digunakan teknik heuristik yang dapat memecahkan berbagai masalah umum termasuk optimasi dan masalah integrasi numerik. Algoritma ini bekerja dengan pengambilan sampel secara cerdik dari suatu distribusi untuk mensimulasikan cara kerja suatu sistem. Aplikasi berkisar dari memecahkan masalah dalam fisika teoretis hingga memprediksi tren dalam investasi keuangan.

Simulasi Monte Carlo

Simulasi Monte Carlo atau simulasi probabilitas adalah teknik yang digunakan untuk bisa memahmi dampak resiko dan ketidakpastian dalam suatu keuangan, manajemen proyek, biaya dan model lainnya. Ketika kita memiliki rentang nilai sebagai hasilnya, maka kita juga bisa memahami resiko dan ketidakpastian dalam model. Fitur simulasi Monte Carlo ini dapat memberitahu kita cara membuat rentang perkiraan dan seberapa kemungkinan hasil yang didapatkan. Estimasi Monte Carlo mengacu pada mensimulasikan penarikan hipotetis dari distribusi probabilitas, untuk menghitung jumlah signifikan dari distribusi itu.

Dalam simulasi Monte Carlo, nilai acak dipilih untuk masing-masing tugas, berdasarkan kisaran perkiraan. Model dihitung berdasarkan nilai acak ini. Hasil model dicatat, dan prosesnya diulang. Simulasi Monte Carlo menghitung model ratusan atau ribuan kali, setiap kali menggunakan nilai yang dipilih secara acak berbeda. Ketika simulasi selesai, kita akan memiliki sejumlah besar hasil dari model, masing-masing berdasarkan nilai input acak. Hasil ini digunakan untuk menggambarkan kemungkinan, atau probabilitas, untuk mencapai berbagai hasil dalam model.

Ide dasar Monte Carlo terdiri dari penulisan integral sebagai nilai yang diharapkan sehubungan dengan beberapa distribusi probabilitas, dan kemudian diperkirakan menggunakan metode estimator momen yaitu dengan: $$ E[g(X)] \approx \overline{g(X)} = \dfrac{1}{n}\sum g(X_{i}) $$ Jika kita memiliki fungsi kontinu $g (θ)$ dan kita ingin terintegrasi dalam interval$ (a, b)$, kita dapat menulis ulang integral kita sebagai nilai yang diharapkan dari distribusi seragam $U $∼ $U [a, b$], yaitu:

Dengan menggunakan metode estimator momen, pendekatan integral yang didapatkan adalah:

e2_wrcz6z

Dimana $$ θ_1,θ_2,θ_3,θ_4, ......., θn $$ Adalah nilai simulasi dari distribusi yang seragam

Secara Umum Metode Monte Carlo, dapat dirumuskan sebagai berikut: $$ f = {1 \over (b-a)}{\int_a^b} f(x) dx \\ (b-a) f = {\int_a^b} f(x) dx \\ (b-a) X {1 \over N} {\sum_i} f(x_i) {\approx {\int_a^b}} f(x) dx $$

Contoh Soal

Membuat program untuk memverifikasi hasil numerical dibawah ini:

Pada Soal No. 3 , membuat sebuah program untuk bisa memverifikasikan hasil numerikal phi yang di implementasi kan menggunakan bahasa pemrograman Python, berikut:

from scipy import random
import numpy as np
import matplotlib.pyplot as plt

b1 = 0
b2 = 2
Rn = 2500

def f(x):
    return (4-x**2)**0.5

area = []
for i in range(Rn):
    xrand = np.zeros(Rn)

    for i in range(len(xrand)):
        xrand[i] = random.uniform(b1,b2)
        integral = 0.0

    for i in range(Rn):
        integral+=f(xrand[i])

    hasil = (b2-b1)/float(Rn)*integral
    area.append(hasil)

plt.title("Nilai phi")
plt.hist(area,bins = 30, ec = 'blue')
plt.xlabel("Area")
plt.show()

Pada langkah awal yaitu melakukan import terlebih dahulu dengan:

from scipy import random
import numpy as np
import matplotlib.pyplot as plt

Langkah selanjutnya yaitu membuat sebuah inisial variabel agar mudah untuk mengetahui sebuah nilai yang akan digunakan. Pada langkah inisial b1 sebagai batas awal, b2 sebagai batas akhir dan Rn sebagai 2500 nilai yang di random secara acak.

b1 = 0
b2 = 2
Rn = 2500

Langkah berikutnya yaitu membuat sebuah fungsi agar memudahkah fungsi $f(x)$ yang akan digunakan dengan :

def f(x):
    return (4-x**2)**0.5

lalu membuat sebuah lopping untuk bisa melakukan sampling nilai yang di random secara acak dengan :

for i in range(Rn):
    xrand = np.zeros(Rn)

    for i in range(len(xrand)):
        xrand[i] = random.uniform(b1,b2)
        integral = 0.0

lalu semua hasil dari nilai komulatif dari sampling secara acak ini akan di tampung dalam variabel integral, dimana akan bisa membuktikan nilai phi menggunakan metode monte carlo dengan rumus secara umumnya $$ (b-a){1 \over N} \sum _i f(x_i) \approx \int _a ^b f(x) dx $$ yaitu dengan :

    for i in range(Rn):
        integral+=f(xrand[i])
    hasil = (b2-b1)/float(Rn)*integral
    area.append(hasil)

Hasil Program yang dihasilkan

Pada Soal No.4 membuat sebuah program untuk menyelesaikan hasil dari integral lipat tiga, berikut hasil code:

from scipy import random
import numpy as np

b1 = -1
b2 = 1
N = 150
n = 3
xrand=np.zeros(N)
yrand=np.zeros(N)
zrand=np.zeros(N)
integral=0.0
for i in range(n+1):
    for i in range(len(xrand)):
        xrand[i]=random.uniform(b1,b2)


    for i in range(len(yrand)):
        yrand[i]=random.uniform(b1,b2)

    for i in range(len(zrand)):
        zrand[i]=random.uniform(b1,b2)

    def f(x,y,z):
        return (x**2)+(y**2)+(z**2)

    for i in range(N):
        integral+=f(xrand[i],yrand[i],zrand[i])
print("fungsi f(x,y,z) = (x**2)+(y**2)+(z**2)")
print("dengan b1 = -1, b2 = 1, xyz (n) = 3")
print("Rumus Metode dengan (b2-b1)*1/N*f(x,y,z)")
hasil=(b2-b1)/float(N)*integral
print("Hasil : ",hasil)

pertama untuk memudahkan untuk bisa menyimpan suatu nilai, yaitu membuat inisial variabel terlebih dahulu sebagai berikut :

b1 = -1
b2 = 1
N = 150
n = 3
xrand=np.zeros(N)
yrand=np.zeros(N)
zrand=np.zeros(N)
integral=0.0

b1 dan b2 sebagai batas yang akan digunakan untuk bisa memasukkan nilai $(a.b)$ atau $(b1,b2)$. N sebagai jumlah sample acak yang akan diguanakan dan $n = 3$ karena yang akan digunakan $x,y,z$. Lalu membuat sebuah lopping untuk bisa melakukan random nilai secara acak dan dilanjutkan fungsi $f(x,y,z)$ yang akan digunakan dengan fungsi nya : $x^2+y^2+z^2$.

for i in range(n+1):
    for i in range(len(xrand)):
        xrand[i]=random.uniform(b1,b2)

    for i in range(len(yrand)):
        yrand[i]=random.uniform(b1,b2)

    for i in range(len(zrand)):
        zrand[i]=random.uniform(b1,b2)

    def f(x,y,z):
        return (x**2)+(y**2)+(z**2)

    for i in range(N):
        integral+=f(xrand[i],yrand[i],zrand[i])

Langkah berikutnya membuat sebuah perhitungan metode monte carlo dengan menggunakan rumus secara umumnya yaitu: $$ (b-a){1 \over N} \sum _i f(x_i) \approx \int _a ^b f(x) dx $$ maka dengan :

hasil=(b2-b1)/float(N)*integral
print("Hasil : ",hasil)

Hasil Program yang telah dibuat:

fungsi f(x,y,z) = (x**2)+(y**2)+(z**2)
dengan b1 = -1, b2 = 1, xyz (n) = 3
Rumus Metode dengan (b2-b1)*1/N*f(x,y,z)
Hasil :  8.136338191101947

Sekian TerimaKasih ;