Mitä Ovat Monte Carlo -Menetelmät?
Monte Carlo (MC) -menetelmät ovat laskennallisten algoritmien luokka, jotka perustuvat satunnaisotantaan numeeristen tulosten arvioimiseksi.
Monte Carlo -menetelmiä käytetään, kun determinististen ratkaisujen löytäminen on vaikeaa tai mahdotonta. Ne korvaavat tarkat laskelmat approksimaatioilla, jotka paranevat satunnaisotosten määrän kasvaessa.
Miten ne toimivat?
Monte Carlo -menetelmät voivat vaihdella tehtävästä toiseen, mutta kaikilla niillä on taipumus noudattaa yhtä kaavaa:
- Määrittele mahdollisten syötteiden joukko;
- Luo satunnaisia syötteitä todennäköisyysjakaumasta;
- Arvioi funktio näillä syötteillä;
- Yhdistä tulokset arvion tuottamiseksi.
Esimerkkejä
Vaikka yllä kuvattu kaava saattaa kuulostaa monimutkaiselta, seuraavat esimerkit auttavat selventämään sen taustalla olevaa ideaa.
Integraalin laskeminen
Integraalien laskeminen on haastava tehtävä, joka vaatii usein useiden eri menetelmien soveltamista oikean tuloksen saavuttamiseksi.
Tarkastellaan, kuinka Monte Carlo -menetelmää voidaan käyttää tämän integraalin ratkaisemiseen:
∫01∫011+(x+y)21dxdy- Syötealue: tämä kaksoisintegraali sisältää kaksi muuttujaa, x∈[0,1] ja y∈[0,1];
- Generointi: molemmat muuttujat ovat toisistaan riippumattomia ja jakautuneet tasaisesti;
- Arviointi: pisteen arvo saadaan käyttämällä integraalin alla olevaa funktiota;
- Yhdistäminen: integraalin arvo määritellään käyrän alapuolisena tilavuutena. Tilavuus voidaan laskea pohjan pinta-alan ja keskimääräisen korkeuden tulona. Pohjan pinta-ala on 1 (yksikköneliö) ja keskimääräinen korkeus on edellisessä vaiheessa saatujen tulosten keskiarvo.
12345678910111213141516import numpy as np result = 0 # Many samples are required for estimates to be precise for i in range(100000): # Generation of random variables x, y = np.random.uniform(), np.random.uniform() # Computation of point value value = 1 / (1 + (x + y) ** 2) # Mean aggregation result += (value - result) / (i + 1) # Closed-form solution of this integral true_result = 2*np.arctan(2) - np.pi/2 - (1/2)*np.log(5) + np.log(2) print(f"Approximated result: {result}") print(f"True result: {true_result}")
π:n approksimaatio
π:n approksimointi on yksi tunnetuimmista Monte Carlo -menetelmän käyttökohteista. Se havainnollistaa, kuinka satunnaisotanta voi ratkaista geometrisen ongelman ilman monimutkaista laskentaa.
Tarkastellaan yksikköneliötä, jonka sisään on piirretty neljännesympyrä:
- Neliö kattaa alueen [0,1]×[0,1];
- Neljännesympyrän säde on 1 ja se on sijoitettu origoon.
Neljännesympyrän pinta-ala on 4πr2 eli 4π, ja neliön pinta-ala on 1. Otetaan satunnaisia pisteitä neliön sisältä. Riittävän suurella otoskoolla:
Kaikki pisteetPisteet nelja¨nnesympyra¨n sisa¨lla¨≈4πTäten π voidaan laskea kaavalla
π≈4⋅Kaikki pisteetSisa¨lla¨ olevat pisteet1234567891011121314151617181920212223242526272829import numpy as np import matplotlib.pyplot as plt # Lists for coordinates inside = [] outside = [] # Many samples are required for estimates to be precise for _ in range(100000): # Generation of random variables x, y = np.random.uniform(), np.random.uniform() # Splitting points inside and outside of the circle if x**2 + y**2 <= 1: inside.append((x, y)) else: outside.append((x, y)) # Plotting points plt.figure(figsize=(6,6)) plt.scatter(*zip(*inside), color="blue", s=1, label="Inside") plt.scatter(*zip(*outside), color="red", s=1, label="Outside") plt.legend() plt.xlabel("x") plt.ylabel("y") plt.show() estimate = 4 * len(inside) / (len(inside) + len(outside)) print(f"Estimated value of pi: {estimate}") print(f"True value of pi: {np.pi}")
Monikätiset bandiitit
Monikätisen bandiitin asetelmassa keskeinen tavoite on arvioida toiminnon arvo jokaiselle vivulle — eli odotettu palkkio tietyn toiminnon valitsemisesta. Yksi yleinen strategia on arvioida näitä arvoja keskittämällä havaittuja palkkioita, jotka on saatu vetämällä kutakin vipua ajan mittaan. Tämä tekniikka on itse asiassa Monte Carlo -menetelmä.
Monte Carlo -menetelmät MDP:ille
Toisin kuin dynaamisen ohjelmoinnin menetelmät, jotka perustuvat ympäristön dynamiikan täydelliseen ja tarkkaan malliin, Monte Carlo -menetelmät oppivat pelkästään kokemuksesta – eli todellisista tai simuloiduista tilojen, toimintojen ja palkkioiden jaksoista.
Tämä tekee Monte Carlo -lähestymistavoista erityisen tehokkaita: ne eivät vaadi ennakkotietoa siitä, miten ympäristö toimii. Sen sijaan ne arvioivat arvoja suoraan vuorovaikutuksen perusteella. Monissa todellisissa tilanteissa, joissa ympäristön mallintaminen on epäkäytännöllistä tai mahdotonta, kyky oppia raaka kokemuksesta on merkittävä etu.
Kun suora vuorovaikutus ympäristön kanssa on kallista, riskialtista tai hidasta, Monte Carlo -menetelmät voivat oppia myös simuloidusta kokemuksesta, mikäli luotettava simulaatio on saatavilla. Tämä mahdollistaa tutkimisen ja oppimisen hallitussa, toistettavassa ympäristössä – vaikka se edellyttääkin mallia, joka pystyy tuottamaan uskottavia siirtymiä.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Awesome!
Completion rate improved to 2.7
Mitä Ovat Monte Carlo -Menetelmät?
Pyyhkäise näyttääksesi valikon
Monte Carlo (MC) -menetelmät ovat laskennallisten algoritmien luokka, jotka perustuvat satunnaisotantaan numeeristen tulosten arvioimiseksi.
Monte Carlo -menetelmiä käytetään, kun determinististen ratkaisujen löytäminen on vaikeaa tai mahdotonta. Ne korvaavat tarkat laskelmat approksimaatioilla, jotka paranevat satunnaisotosten määrän kasvaessa.
Miten ne toimivat?
Monte Carlo -menetelmät voivat vaihdella tehtävästä toiseen, mutta kaikilla niillä on taipumus noudattaa yhtä kaavaa:
- Määrittele mahdollisten syötteiden joukko;
- Luo satunnaisia syötteitä todennäköisyysjakaumasta;
- Arvioi funktio näillä syötteillä;
- Yhdistä tulokset arvion tuottamiseksi.
Esimerkkejä
Vaikka yllä kuvattu kaava saattaa kuulostaa monimutkaiselta, seuraavat esimerkit auttavat selventämään sen taustalla olevaa ideaa.
Integraalin laskeminen
Integraalien laskeminen on haastava tehtävä, joka vaatii usein useiden eri menetelmien soveltamista oikean tuloksen saavuttamiseksi.
Tarkastellaan, kuinka Monte Carlo -menetelmää voidaan käyttää tämän integraalin ratkaisemiseen:
∫01∫011+(x+y)21dxdy- Syötealue: tämä kaksoisintegraali sisältää kaksi muuttujaa, x∈[0,1] ja y∈[0,1];
- Generointi: molemmat muuttujat ovat toisistaan riippumattomia ja jakautuneet tasaisesti;
- Arviointi: pisteen arvo saadaan käyttämällä integraalin alla olevaa funktiota;
- Yhdistäminen: integraalin arvo määritellään käyrän alapuolisena tilavuutena. Tilavuus voidaan laskea pohjan pinta-alan ja keskimääräisen korkeuden tulona. Pohjan pinta-ala on 1 (yksikköneliö) ja keskimääräinen korkeus on edellisessä vaiheessa saatujen tulosten keskiarvo.
12345678910111213141516import numpy as np result = 0 # Many samples are required for estimates to be precise for i in range(100000): # Generation of random variables x, y = np.random.uniform(), np.random.uniform() # Computation of point value value = 1 / (1 + (x + y) ** 2) # Mean aggregation result += (value - result) / (i + 1) # Closed-form solution of this integral true_result = 2*np.arctan(2) - np.pi/2 - (1/2)*np.log(5) + np.log(2) print(f"Approximated result: {result}") print(f"True result: {true_result}")
π:n approksimaatio
π:n approksimointi on yksi tunnetuimmista Monte Carlo -menetelmän käyttökohteista. Se havainnollistaa, kuinka satunnaisotanta voi ratkaista geometrisen ongelman ilman monimutkaista laskentaa.
Tarkastellaan yksikköneliötä, jonka sisään on piirretty neljännesympyrä:
- Neliö kattaa alueen [0,1]×[0,1];
- Neljännesympyrän säde on 1 ja se on sijoitettu origoon.
Neljännesympyrän pinta-ala on 4πr2 eli 4π, ja neliön pinta-ala on 1. Otetaan satunnaisia pisteitä neliön sisältä. Riittävän suurella otoskoolla:
Kaikki pisteetPisteet nelja¨nnesympyra¨n sisa¨lla¨≈4πTäten π voidaan laskea kaavalla
π≈4⋅Kaikki pisteetSisa¨lla¨ olevat pisteet1234567891011121314151617181920212223242526272829import numpy as np import matplotlib.pyplot as plt # Lists for coordinates inside = [] outside = [] # Many samples are required for estimates to be precise for _ in range(100000): # Generation of random variables x, y = np.random.uniform(), np.random.uniform() # Splitting points inside and outside of the circle if x**2 + y**2 <= 1: inside.append((x, y)) else: outside.append((x, y)) # Plotting points plt.figure(figsize=(6,6)) plt.scatter(*zip(*inside), color="blue", s=1, label="Inside") plt.scatter(*zip(*outside), color="red", s=1, label="Outside") plt.legend() plt.xlabel("x") plt.ylabel("y") plt.show() estimate = 4 * len(inside) / (len(inside) + len(outside)) print(f"Estimated value of pi: {estimate}") print(f"True value of pi: {np.pi}")
Monikätiset bandiitit
Monikätisen bandiitin asetelmassa keskeinen tavoite on arvioida toiminnon arvo jokaiselle vivulle — eli odotettu palkkio tietyn toiminnon valitsemisesta. Yksi yleinen strategia on arvioida näitä arvoja keskittämällä havaittuja palkkioita, jotka on saatu vetämällä kutakin vipua ajan mittaan. Tämä tekniikka on itse asiassa Monte Carlo -menetelmä.
Monte Carlo -menetelmät MDP:ille
Toisin kuin dynaamisen ohjelmoinnin menetelmät, jotka perustuvat ympäristön dynamiikan täydelliseen ja tarkkaan malliin, Monte Carlo -menetelmät oppivat pelkästään kokemuksesta – eli todellisista tai simuloiduista tilojen, toimintojen ja palkkioiden jaksoista.
Tämä tekee Monte Carlo -lähestymistavoista erityisen tehokkaita: ne eivät vaadi ennakkotietoa siitä, miten ympäristö toimii. Sen sijaan ne arvioivat arvoja suoraan vuorovaikutuksen perusteella. Monissa todellisissa tilanteissa, joissa ympäristön mallintaminen on epäkäytännöllistä tai mahdotonta, kyky oppia raaka kokemuksesta on merkittävä etu.
Kun suora vuorovaikutus ympäristön kanssa on kallista, riskialtista tai hidasta, Monte Carlo -menetelmät voivat oppia myös simuloidusta kokemuksesta, mikäli luotettava simulaatio on saatavilla. Tämä mahdollistaa tutkimisen ja oppimisen hallitussa, toistettavassa ympäristössä – vaikka se edellyttääkin mallia, joka pystyy tuottamaan uskottavia siirtymiä.
Kiitos palautteestasi!