A veszélyes méretű (140 méternél nagyobb) aszteroidák becsapódási esélyét statisztikai gyakorisággal és Monte Carlo szimulációval szokás modellezni. Íme egy egyszerű Python program, amely ezt a statisztikai valószínűséget és a véletlen eseményeket (Monte Carlo módszer) használja fel a kockázat szimulálására a megadott évek száma alapján: Mivel 66 millió éve volt egy becsapódás, ezért a matematikai esély megnőtt kb; 0.000003%
----------
import random
def szimulal_becsapodas(evek_szama):
eves_valoszinuseg = 4e-9
becsapodasok = 0
for _ in range(evek_szama):
if random.random() <= eves_valoszinuseg:
becsapodasok += 1
return becsapodasok
evek = 110000000
azonositott_kraterek = 200
talalatok = szimulal_becsapodas(evek)
szazalek = (talalatok / evek) * 100
krater_szazalek = (azonositott_kraterek / evek) * 100
print(f"--- Aszteroida Becsapódási Szimuláció ---")
print(f"Vizsgált időszak: {evek:,} év")
print(f"Becsapódások száma a szimulációban: {talalatok}")
print(f"Becsapódás aránya a szimulációban: {szazalek:.10f}%")
print(f"Azonosított kráterek száma a Föld történetében: {azonositott_kraterek}")
print(f"Kráterek aránya a vizsgált időszakhoz képest: {krater_szazalek:.10f}%")
if talalatok > 0:
print("A szimuláció szerint bekövetkezett ütközés ebben az időszakban.")
else:
print("A szimulációban nem történt ütközés. Ennek az esélye a valós életben is rendkívül alacsony.")
-------------
--- Aszteroida Becsapódási Szimuláció ---
Vizsgált időszak: 67,000,000 év
Becsapódások száma a szimulációban: 2
Becsapódás aránya: 0.0000029851%
A szimuláció szerint bekövetkezett ütközés ebben az időszakban.
A Föld története során közel 200 becsapódási krátert azonosítottak, tehát figyelembe kell venni ezt a tényt is. A becsapódások száma a mérettől függ. Az elmúlt 70 millió évben körülbelül 70 darab olyan, legalább 1 km-es aszteroida csapódott a Földbe, amely globális katasztrófát okozott. A kisebb, de helyi pusztítást végző meteorokból ennél jóval több, több ezer hullott a bolygóra. Az élet 4 milliárd éve jelent meg a földön, de a számítógépem nem tud ilyen nagy számokkal számolni.
---------------
import random
def monte_carlo_asteroid_simulation(years, num_craters, annual_prob):
impacts = 0
# A szimulációs ciklus a megadott éveken megy végig
for year in range(years):
# Generálunk egy véletlen számot (0 és 1 között) az adott évre
if random.random() < annual_prob:
impacts += 1
print(f"{years} év szimulálása befejeződött.")
print(f"Becsült éves becsapódási esély: {annual_prob}")
print(f"Tapasztalt becsapódások száma a szimulációban: {impacts}")
# Ha 200 kráter van, megbecsüljük a teljes becsapódási valószínűséget
probability_with_craters = 1 - (1 - annual_prob) ** num_craters
print(f"Ekkora krátermennyiség (${num_craters}$ db) mellett az ütközés esélye: {probability_with_craters:.6%}")
# Paraméterek beállítása
evek_szama = 100000000
kraterek_szama = 200
eves_valoszinuseg = 4e-9 # 4 x 10^-9
# Futtatás
monte_carlo_asteroid_simulation(evek_szama, kraterek_szama, eves_valoszinuseg)
--------------
100.000.000 év szimulálása befejeződött.
Becsült éves becsapódási esély: 4e-09
Tapasztalt becsapódások száma a szimulációban: 2
Ekkora krátermennyiség ($200$ db) mellett az ütközés esélye: 0.000080%
------------
E már komoly veszélyt jelent, mivel 65.000 éve volt már egy.
------------------
Ezzel azt szerettem volna diákjaimnak bebizonyíta, hogy egy PC is képes tudományos számításokra, ha az algoritmust jól készítjük el.
A PC-s tudományos számítások hatékonyságát és sebességét több kulcstényező határozza meg:Párhuzamos programozás (Multithreading): A modern processzorok (CPU) több maggal rendelkeznek. A kódnak úgy kell készülnie, hogy a feladatokat szétossza a magok között (pl. OpenMP vagy MPI segítségével).GPU gyorsítás (CUDA / OpenCL): A videokártyák (GPU-k) több ezer apró maggal rendelkeznek, amelyek kiválóan alkalmasak mátrixműveletekre és nagy adathalmazok párhuzamos feldolgozására.
Vektorizáció: A processzorok utasításkészlete (mint az AVX vagy az AVX-512) lehetővé teszi, hogy egyetlen órajel alatt több adattal is végezzenek műveleteket.Memória-kezelés: A gyorsítótár (Cache) okos kihasználása és az adatok megfelelő struktúrája (pl. összefüggő tömbök használata a lassabb RAM helyett) drasztikusan csökkentheti a futásidőt.
A kutatók és fejlesztők gyakran használnak olyan optimalizált matematikai könyvtárakat (pl. Intel MKL, AMD BLIS), amelyek automatikusan a maximumot hozzák ki a hardverből, így a programozónak nem kell minden gépi szintű trükköt manuálisan megírnia.