2019-08-25に更新

だらだらしようぜ☆(^~^)

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 頭痛てー☆ 風邪だぜ☆ だらだらしようぜ☆?」

KIFUWARABE_80x100x8_01_Futu.gif
「 寝てればいいのに……☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 もう技術と関係ないんだけど」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 サイコロの話しでもしよう☆」

20190824math1.png

KIFUWARABE_80x100x8_01_Futu.gif
「 数学の話しをするときは パースを付けなくていいのに……☆」

20190824math2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 じゃあ そのうち 1つを ハズレ としよう☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 1回 サイコロを振れば 外れる確率は 6分の1 だぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ふつう 確率の話しをしているときは アタリ の話しなんで、
6分の5 と言い直そう☆」

20190824math3.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ここまで むずかしいことは 言ってないと思う☆
ゴホッ ゴホッ ゲェェホッ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 寝ろ☆」

次の日

20190824math4.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 夏休みは初日から風邪を引いているのが 頭が痛い☆
6分の5のサイコロが2つあるとしよう☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 このとき、どちらも × でない アタリ の確率、
あるいは どちらかが × な ハズレ の確率は どれぐらいだろうか☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ×は 1個でも出てきたら ハズレ なの?
アタリは × じゃない面が1個 出てきても アタリじゃなくなってしまうの?
ルールが非対称じゃない?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 アタリとは何か、ハズレとは何か、といった説明は 数学はしてくれない☆
知ってるだろ、みたいな感じで 話しは進む☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 それより お父んは 寝ろ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 話しを進めよう☆
数学の確率やるなら サイコロを投げる前に気にすることが いくつかある☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 このサイコロは 片方が決まると もう片方のサイコロの出目に 何か変化がでるような
決まりがあるか、ないか だぜ☆
つまり サイコロは、 独立事象 か、それとも独立事象ではなく 従属事象 か☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 独立事象だぜ☆」

20190824math5.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 独立事象 であれば 並列 に書ける☆
この図は適当だが、 電気の並列つなぎ、論理の二項演算、独立事象の確率、非同期処理、並列処理、 どの分野でも 言いたいことは同じだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 別々に計算して、あとで みんな計算が終わるまで待っておいて、
最後に 合算する、ということだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 1人だけ すばやく計算が終わって 抜け駆け したらどうなるの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 そのときは 答えが2つになるだろ☆
抜け駆けしたやつの答え、 そのあとに続いてきたやつの答え☆
しかし 上図 を見てほしい☆ 答えは1つ と明示されている☆ 抜け駆けは無し というルールがあると感じろだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 抜け駆けはありか、なしか といった説明は 数学はしてくれない☆
知ってるだろ、みたいな感じで 話しは進む☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 もしサイコロが 相手の顔色をうかがう イカサマ サイコロ だったら どうなるんだぜ☆?」

20190824math6.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 そのときは 直列つなぎ、入れ子構造、というものになる☆
前の結果を得て、次の結果が出るやつだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 どっちの サイコロ が先に答えを出して、他のサイコロから顔色をうかがわれる側か
わからないときがあるじゃない?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 それは デターミニスティック ではなくなった ということだぜ☆
決定的ではなく、確率的にな話しになる☆
数式は デターミニスティック だが、顔色をうかがうのは 数学ではなくなる☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 言ってしまえば 数学 と 確率学 ぐらいに分野は 別物だぜ☆
でも だれも気にしないから 確率や統計は 数学の授業で教えられてしまう☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 確率や 統計 がなければ 世の中の事象とか 説明できないんじゃないか☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 お前らが 世の中の事象を説明している間に 本来の数学は どこかに行っている☆
数学がお留守だぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 確率の説明をするために 一覧表を作ってみよう☆
Python 言語で一覧表を作るのが楽だろう☆」

main.py

for dice1 in range(1, 7):
    for dice2 in range(1, 7):
        print("{} {}".format(dice1, dice2))

Output

1 1
1 2
1 3
1 4
1 5
1 6
2 1
2 2
(Omitted below)

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 サイコロの 1 が入っていればハズレとしよう☆
サイコロに 0 はないから、目が 2 なら両方のサイコロが 1 だぜ☆」

main.py

for dice1 in range(1, 7):
    for dice2 in range(1, 7):
        one = ""
        both = ""
        summ = dice1 + dice2
        if summ == 2:
            both = "xx"

        if dice1 == 1 or dice2 == 1:
            one = "x"
        print("{} {} {: >1} {: >2}".format(dice1, dice2, one, both))

Output

1 1 x xx
1 2 x   
1 3 x   
1 4 x   
1 5 x   
1 6 x   
2 1 x   
2 2     
2 3     
2 4     
2 5     
2 6     
3 1 x   
3 2     
3 3     
3 4
3 5
3 6
4 1 x
4 2
4 3
4 4
4 5
4 6
5 1 x
5 2
5 3
5 4
5 5
5 6
6 1 x
6 2
6 3
6 4
6 5
6 6

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 このとき 確率論 が言う ハズレ というのは × が1個でも付いているところだぜ☆ 11個ある☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 確率論がいう アタリ と言うのは × が1個も付いていないところだぜ☆ 25個ある☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 5/6 × 5/6 = 25/36 だな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 × が2つ付いているところには 何か賞品はないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 確率論 は ファンブル なんか気にしない☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 1/6 × 1/6 = 1/36 だな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 でも ファンブル って気にならない?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 全部外れる確率 というのは 数学用語になっていない☆
たたし 数式は立てることができる☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 例えば アタリの確率のことを Rate の R という記号でも使うとしよう☆
全部外れる確率を Probability の P とする☆」

20190824math3a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 サイコロが1つなら この通り☆」

20190824math3a3.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 サイコロが2つなら この通りで……☆」

20190824math3a4.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 指数ノーテーションに書き換える☆ ペンを振る手間を減らさないと 数学 は発展しないからな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 全部外れる確率を出したいときは 1-R というのも 何度も書かないといけない☆
当たる確率が分かれば 外れる確率も分かるから 変数は少ない方がいい☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 (1-R) っていう変な式は 変数を少なくしたかったからなのね。変数を増やして何が悪いの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 分かってる数を 変数にするなだぜ☆
計算機科学の一時変数みたいに 気軽に使うなだぜ☆」

じゃあ有名な式をやろうぜ☆(^~^)?

20190824math4a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 有名なところでは ゲーム研究者の ゼビウスの遠藤さんがブログにも書いているように、
100人が 100分の1が当たりのクジを100回引くと、 60人は何回か当たっているが、40人は1回も当たっていない☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 わらう☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 わたしも この話はしたが 数学ブログが Core Server のデータベース更新で全部消えたんで Crieit でもう1回書く☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 わらう☆」

20190824math3a5.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 100分の1 で当たるクジは、 当たる確率R が 100分の1 だぜ☆ 同義反復☆」

20190824math3a2.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 クジを1回引いて 当たらない確率は 1-R ☆」

20190824math3a4b1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 クジを100回引くなら こう☆」

20190824math3a6.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 Rは 100分の1 だから こういう計算式をプログラムすれば 答えは出るわけだが……☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 この形は ネイピア数 の数式で出てくる☆」

ネイピア数

main-2.py

p = (1-1/100) ** 100
print("p = {}".format(p))

Output

p = 0.3660323412732292

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 36人ぐらいは ファンブル してるわけだな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 この数は……☆」

main-2.py

print("p = {}".format(100/2.71828))

Output

p = 36.787968862663156

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 100を ネイピア数で割ったのと だいたい同じだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ネイピア数で割るというのが 分けわかんないんだけど」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 それは ネイピア数は関係なく、 割り算 が分かってないんだぜ☆
割り算 が分からないのは 国語の問題☆」

20190824math7.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 掛け算というのは ズーム なのだった☆
1が現在で、パーセンテージというのが 将来だとしよう☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 100 × 0.36 は 36 だな☆」

20190824math7a1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 割り算というのは
パーセンテージが現在で、1が 将来のようなものだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 36 ÷ 0.36 は 100 だな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 じゃあ ネイピア数で割るというのは、
現在の100は 全体のうち ネイピア数で掛けらて縮んだ数 になっていて」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ネイピア数で割ることによって
縮む前の 36.8弱 が出てきた、ということなの? 何それ 分かんない」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 伸びる とか 縮む という言葉を使うから 分からなくなる☆
フィルターを掛けるフィルターを外す、みたいな言葉を使えだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ネイピア数というフィルターを外すことによって
100 が 36.8弱 になった、ということは
なんか すごい でかく見えるフィルターが かかっていて 100 に見えていた、ということなの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 そう☆
まあ 2.71828 ちょい なんだがな☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 36.8弱 が ファンブルする人を百分率で見るフィルター とすれば、
ネイピア数というのは ファンブルした人の数から クジに挑戦した人の数を見るフィルターだな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ややこしい!

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 数学で頻出するのは フィルターを掛ける算、 フィルターを外す算 だからな☆
現在の数が何か、どんなフィルターがかかっているか、フィルターがかかる前の元の数が何だったか、
これは ぱっぱ と できたい☆」

やってみてくれだぜ☆

KIFUWARABE_80x100x8_01_Futu.gif
「 じゃあ 100人で 100回、 100分の1で当たるクジを引いてくれだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 10000回やれば いいだけか☆
Python に厳密な乱数とかあるかだぜ☆?」

各言語での、本当に安全な乱数の作り方

main.py

import os
import sys
import random

rng = random.SystemRandom()
print(rng.randint(0, sys.maxsize))
for i in range(0, 100):
    print(rng.randrange(0, 2))

Output

2946319965679186318
0
1
0
0
0
1
1
1
1
0
1
1
0
(Omitted below)

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 まあ多分これを使って クジを作ればいいだろう……☆」

main.py

import os
import sys
import random


def is_hit():
    rng = random.SystemRandom()
    lottery = rng.randrange(0, 100)
    return lottery == 0


person = [0] * 100

for challenge in range(0, 100):
    for i in range(0, 100):
        if is_hit():
            person[i] += 1

distribution = {}

print("""
+
| Lottery
+
""")
for i in range(0, 100):
    hits = person[i]
    print("[{}] {}".format(i, hits))

    if not hits in distribution:
        distribution[hits] = 1
    else:
        distribution[hits] += 1

print("""
+
| Distribution
+
""")
for k, v in distribution.items():
    print("[{}] {}".format(k, v))

Output

+        
| Lottery
+        

[0] 1
[1] 0
[2] 0
[3] 1
[4] 1
[5] 1
[6] 2
[7] 1
[8] 0
[9] 2
[10] 1
[11] 1
[12] 3
[13] 0
[14] 1
[15] 0
[16] 2
[17] 2
[18] 0
[19] 1
[20] 1
[21] 4
[22] 0
[23] 0
[24] 2
[25] 1
[26] 3
[27] 1
[28] 1
[29] 0
[30] 1
[31] 0
[32] 1
[33] 4
[34] 1
[35] 0
[36] 2
[37] 4
[38] 0
[39] 0
[40] 0
[41] 0
[42] 2
[43] 1
[44] 1
[45] 0
[46] 1
[47] 1
[48] 3
[49] 0
[50] 1
[51] 1
[52] 0
[53] 1
[54] 0
[55] 2
[56] 0
[57] 1
[58] 0
[59] 0
[60] 2
[61] 1
[62] 1
[63] 3
[64] 0
[65] 2
[66] 1
[67] 1
[68] 0
[69] 0
[70] 4
[71] 2
[72] 2
[73] 2
[74] 3
[75] 1
[76] 0
[77] 0
[78] 3
[79] 0
[80] 1
[81] 0
[82] 1
[83] 2
[84] 1
[85] 0
[86] 1
[87] 1
[88] 0
[89] 1
[90] 2
[91] 2
[92] 0
[93] 1
[94] 0
[95] 2
[96] 0
[97] 1
[98] 1
[99] 1

+
| Distribution
+

[1] 39
[0] 34
[2] 17
[3] 6
[4] 4

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 34人は 1回も当たらず、 4回当たってるのが 4人いるぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 これを100回やって 分布の分布を見ようぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 嫌だぜ めんどくさい……☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 ……☆」

main-4.py

import os
import sys
import random


def get_distribution():

    def is_hit():
        rng = random.SystemRandom()
        lottery = rng.randrange(0, 100)
        return lottery == 0

    person = [0] * 100

    for _challenge in range(0, 100):
        for i in range(0, 100):
            if is_hit():
                person[i] += 1

    distribution = {}

    for i in range(0, 100):
        hits = person[i]
        if not hits in distribution:
            distribution[hits] = 1
        else:
            distribution[hits] += 1

    return distribution


distribution_of_dist = {}

for i in range(0, 100):
    dist = get_distribution()
    for k, v in dist.items():
        if not k in distribution_of_dist:
            distribution_of_dist[k] = v
        else:
            distribution_of_dist[k] += v

    print("""
    +
    | Distribution of distribution
    +
    """)
    for k, v in distribution_of_dist.items():
        print("[{}] {}".format(k, v))

Output

(Omitted above)
    +
    | Distribution of distribution
    +

[0] 3642
[3] 666
[1] 3705
[4] 165
[2] 1791
[6] 4
[5] 27

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 累計ならこう☆ 数をふやすごとに ファンブルした数の先頭3桁が 367 ぐらいに近づくだろう☆」

<書きかけ>

ツイッターでシェア
みんなに共有、忘れないようにメモ

むずでょ

光速のアカウント凍結されちゃったんで……。ゲームプログラムを独習中なんだぜ☆電王戦IIに出た棋士もコンピューターもみんな好きだぜ☆▲(パソコン将棋)WCSC29一次予選36位、SDT5予選42位▲(パソコン囲碁)AI竜星戦予選16位

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント