Metode Monte Carlo adalah suatu metode komputasi yang mengandalkan sampling random secara berulang untuk mendapatkan suatu hasil numerik. Pada kesempatan ini, metode Monte Carlo akan digunakan untuk mendapatkan estimasi nilai dari 𝝿. 𝝿 (pi) adalah suatu konstanta matematika yang merupakan rasio antara keliling suatu lingkaran dan diameter lingkaran tersebut.
Pada metode ini akan digambar sebuah persegi dengan sisi sepanjang 2r, kemudian di dalam persegi tersebut digambar sebuah lingkaran dengan jari-jari r. Pada persegi tersebut kemudian akan digambar sejumlah titik dengan posisi acak, kemudian akan dihitung rasio jumlah titik yang berada di dalam lingkaran dan total titik dalam persegi tersebut. Semakin banyak titk yang dihasilkan, maka akan semakin akurat estimasi nilai 𝝿 yang diperoleh.
Perbandingan area lingkaran dan persegi dapat dilihat dalam persamaan berikut:
Persamaan di atas dapat pula ditulis berdasarkan jumlah titik yang dihasilkan dari Metode Monte Carlo, jika titk yang dihasilkan sangat banyak
Pada kesempatan ini, penulis menggunakan bahasa pemrograman Python dan modul Pygame untuk membuat visualisasi dari metode Monte Carlo ini. Metode ini dapat pula dilakukan tanpa visualisasi, namun dengan visualisasi dapat diperoleh gambaran yang lebih jelas mengenai proses yang terjadi dalam metode ini, seperti proses penggambaran titik dan perhitungan nilai 𝝿 secara real-time.
Berikut adalah kode untuk menjalakan metode Monte Carlo ini:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | import pygame, random, sys pygame.init() #Screen screen_width = 600 screen_height = 600 screen = pygame.display.set_mode((screen_width, screen_height)) pygame.display.set_caption("Pi with montecarlo simulation") screen.fill("black") clock = pygame.time.Clock() #Iteration and total dot iteration = 10000 inside = 0 total = 0 #Displaying pi and dots count def display_pi(): if total == 0: pi_value = 0 else: pi_value = 4 * inside / total pi_text_font = pygame.font.Font(None, 40) pi_text_surf = pi_text_font.render("Pi : " + str(pi_value), True, "white") pi_text_rect = pi_text_surf.get_rect(topleft = (20, 30)) count_surf = pi_text_font.render(f"Total : {total} / {iteration}", True, "white") count_rect = count_surf.get_rect(topleft = (20, 60)) screen.fill("black", (0, 0, screen_width, 100)) screen.blit(pi_text_surf, pi_text_rect) screen.blit(count_surf, count_rect) #Circle circle_x = screen_width // 2 circle_y = screen_height // 2 circle_radius = 200 #Square square_x = (screen_width - 2 * circle_radius) // 2 square_y = (screen_height - 2 * circle_radius) // 2 square_width = 2 * circle_radius square_height = 2 * circle_radius #Min and max boundary x_min = square_x x_max = square_x + square_width y_min = square_y y_max = square_y + square_height while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() #Drawing square and circle pygame.draw.circle(screen, "white", (circle_x, circle_y), circle_radius, 2) pygame.draw.rect(screen, "white", (square_x, square_y, square_width, square_height), 2) #Drawing the random dots while total < iteration: dot_x = random.randint(x_min, x_max) dot_y = random.randint(y_min, y_max) if (dot_x - circle_x) ** 2 + (dot_y - circle_y) ** 2 <= circle_radius ** 2: pygame.draw.circle(screen, "red", (dot_x, dot_y), 1) inside += 1 total += 1 if (dot_x - circle_x) ** 2 + (dot_y - circle_y) ** 2 > circle_radius ** 2: pygame.draw.circle(screen, "blue", (dot_x, dot_y), 1) total += 1 display_pi() for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() clock.tick(100) pygame.display.flip() |
Sumber bacaan dan referensi :
