idea worker - fikir işçisi


"ASLA PES ETME" ve PYTHON İLE İSPATI

17.02.2021 10:18

İnsanız ve üzülmeye, pes etmeye, küsmeye, kaçmaya ve çekip gitmeye müsaitiz. Evet, ölümlüyüz ve saat aleyhimize işliyor, ama insan olmanın hiç mi bir anlamı yok? Robot gibi yaşamak, üretmemek ve hep aynı şeyleri yaparken, ansızın dünyaya veda etmek... Bana anlamlı gelmeyen bir şey... Sağlıklı, hür ve düşünebilen insanlar için yollar bir şekilde açılacaktır.

Çabuk küsen ve umutsuzluğa kapılan insanlara Python ile sesleneceğim. Zar atma senaryosu... Hayat bir zar olsa, çoğu kişi 6'ya değer verecektir. Gerçek hayata dönelim. Zorluklar içerisindesiniz. Zar dünyasıyla ifade edelim: "Hep 1 atıyorsunuz.". Şunu kabul etmezsek hep mutsuz oluruz: Hayat her zaman kazan ve kaybet oyunu değildir. Aslında zarda 1 ve 6 aynı güzelliğe, haklara ve saygıya sahiptir. 6 sayısı 1 sayısından görünüşte büyüktür, ama aslında 1 özel anlamlara sahiptir. "Bir tanem", "biricik", "ülke birliği" gibi ifadeler ne demek? "Altı tanem" diyeni duydunuz mu? Sahip olduklarımızla mutlu olmak, diğer insanlardan farklı olmayı garipsememek ve güzellikler için mücadele etmek... İşte, yolumuz bu olmalı.

Bir sayısının kıymetini anladık ve zar attığımızda, 1 ile diğer sayıların eşit şansa sahip olduğunu görmek istiyoruz. İnsan olarak diğer insanlardan daha aşağıda ya da yukarıda değiliz, demek istiyorum. Ölüm, hasatalık ve fakirlik gibi eşitleyici etkenler ortalıkta cirit atıyor! Elime zarı aldım ve 10 defa atmaya karar verdim. Bakalım, kaç defa 1 gelecek? Benim yerime başkası zar atsa, aynı sonuçları almamız çok olası değil... Sonuçlar aşağıda. Sadece 1 defa 1 sayısı geldi ve 3 defa da 6 sayısı geldi. Büyük sayı daha mı üstün?

Hayal kırıklığı mı yaşamalıyım, istikrarlı bir şekilde daha çok mu çalışmalıyım? Zarı 10000 defa atmaya karar veriyorum, ama bunu benim için Python yapacak. Bakalım, çabam arttıkça 1 ve 6 arasındaki adaletsizlik kaybolacak mı?

 

Öncelikle, zar atmayı simüle ediyorum:

 

import numpy as np

np.random.seed(123)

def zar_bir():

    if np.random.randint(1,7) == 1:

        return "bir"

    elif np.random.randint(1,7) == 2:

        return "iki"

    elif np.random.randint(1,7) == 3:

        return "üç"

    elif np.random.randint(1,7) == 4:

        return "dört"

    elif np.random.randint(1,7) == 5:

        return "beş"

    elif np.random.randint(1,7) == 6:

        return "altı"

 

Daha sonra, 1 için olasılıkları listeleştiriyorum.

 

olasiliklar = []

birler = 0

for i in range(1,10001):

    zar = zar_bir()

    if zar == "bir":

        birler += 1

    mevcut_olasilik = birler / i

    olasiliklar.append(mevcut_olasilik)

 

Öncelikle ilk 50 sonuca ve daha sonra son 50 sonuca bakalım. Görüleceği üzere, son 50 sonuçta olasılıklar 0.16'ya (zarda her sayının şansının 1/6 olması) yaklaşmış halde. Çabaladıkça, şansımız artmış!

print(olasiliklar[0:50])

[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.07142857142857142, 0.06666666666666667, 0.0625, 0.058823529411764705, 0.05555555555555555, 0.05263157894736842, 0.05, 0.047619047619047616, 0.045454545454545456, 0.043478260869565216, 0.041666666666666664, 0.08, 0.07692307692307693, 0.07407407407407407, 0.07142857142857142, 0.06896551724137931, 0.06666666666666667, 0.0967741935483871, 0.125, 0.12121212121212122, 0.11764705882352941, 0.11428571428571428, 0.1111111111111111, 0.10810810810810811, 0.10526315789473684, 0.10256410256410256, 0.1, 0.0975609756097561, 0.09523809523809523, 0.09302325581395349, 0.09090909090909091, 0.1111111111111111, 0.13043478260869565, 0.1276595744680851, 0.125, 0.12244897959183673, 0.12]


print(olasiliklar[-50:])


[0.16038589086523966, 0.16036977491961416, 0.16035366221239827, 0.16033755274261605, 0.1603214465092918, 0.16030534351145037, 0.1602892437481169, 0.16027314721831692, 0.16025705392107642, 0.1602409638554217, 0.1602248770203795, 0.1602087934149769, 0.16019271303824148, 0.1601766358892011, 0.1601605619668841, 0.16014449127031907, 0.16022875489114077, 0.16021268057784913, 0.1601966094894172, 0.16018054162487463, 0.16016447698325142, 0.160148415563578, 0.16013235736488518, 0.16011630238620414, 0.1601002506265664, 0.160084202085004, 0.16006815676054925, 0.16005211465223493, 0.16013628620102216, 0.16012024048096193, 0.1602043883378419, 0.1601883390102184, 0.16017229289792648, 0.16015625, 0.1601402103154732, 0.16012417384338073, 0.16010814058275757, 0.16009211053263916, 0.16007608369206128, 0.16006006006006007, 0.1600440396356721, 0.16002802241793435, 0.16001200840588412, 0.15999599759855915, 0.1599799899949975, 0.1599639855942377, 0.1599479843953186, 0.15993198639727946, 0.15991599159915992, 0.1599]


Karmaşık olasılık rakamlarını bir kenara bırakıp, olasılık sonuçlarını görselleştirelim.



import matplotlib.pyplot as plt

plt.plot(olasiliklar)
plt.xlim(0,10000)
plt.title("'Bir' sonucu elde etmek istiyorum")
plt.xlabel("Zar atışı")
plt.ylabel("'Bir' sonucu olasılığı")
plt.show()



 

Görüldüğü üzere, 1 sayısı için istikrarlı ve adil sonuçlar açığa çıktı. 1 ve 6 aynı olasılık değerlerine sahip. Hayal kur, gülümse, çabala, dene ve başar!

import numpy as np
 
np.random.seed(123)
 
def zar_bir():
    if np.random.randint(1,7) == 1:
        return "bir"
    elif np.random.randint(1,7) == 2:
        return "iki"
    elif np.random.randint(1,7) == 3:
        return "üç"
    elif np.random.randint(1,7) == 4:
        return "dört"
    elif np.random.randint(1,7) == 5:
        return "beş"
    elif np.random.randint(1,7) == 6:
        return "altı"

—————

Geri