2018年11月23日金曜日

アントワーヌ・ゴンボーの疑問をPythonで検証してみる

確率論の始まりの話でよく出てくるアントワーヌ・ゴンボーの疑問

17世紀、フランスの貴族シュバリエ・ド・メレ卿(アントワーヌ・ゴンボー)という人はギャンブル好きだった。
彼は、サイコロのギャンブルが好きで、
1つのサイコロを4回投げて、6が出れば勝ちというゲームをした時は2/3の確率で勝つと考えた。
勝率は予想に届かなったが、勝ち越すことは出来た。
そして、2つのサイコロを24回投げて、6,6のゾロ目が出れば勝ちというダブルシックスも同じように、6,6のゾロ目が出る確率は1/36なのだから24回投げれば2/3で勝てるはずと考えた。
しかし、実際は予想に反してあまり勝てなかった。
そこで、ゴンボーは数学者パスカルに、何がおかしいか相談してみた。
パスカルはゴンボーの考え違いを見抜き、出る目から計算するのでなく、出ない目から計算するのが正しいと答えたそう。

さてそれをPythonで検証してみましょう。

まずは1つのサイコロから6の目が出れば勝つというゲーム
4回投げてどれくらいの確率で勝つかrandomを使って試してみましょう。

#! /usr/bin/env python

# -*- coding: utf-8 -*-

import random

print("[probability]")

#試行回数
trial = 10000

#投げる回数
roll = 4

#勝った回数
win = 0

def dice(trial, roll):
    win = 0
    reset = False
    for i in range(trial):
        reset = False
        for j in range(roll):
            if reset == False:
                #サイの目をランダムに出す
                pip = random.randrange(1, 7)
                #目が6なら勝ち
                if pip == 6:
                    win += 1
                    reset = True
    return win

win = dice(trial, roll)
print("試行回数: ", trial)
print("勝った回数: ", win)
print("勝率: ", (win / trial))


結果:
[probability]
試行回数:  10000
勝った回数:  5218
勝率:  0.5218

[probability]
試行回数:  10000
勝った回数:  5184
勝率:  0.5184

[probability]
試行回数:  10000
勝った回数:  5140
勝率:  0.514

[probability]
試行回数:  10000
勝った回数:  5144
勝率:  0.5144

[probability]
試行回数:  10000
勝った回数:  5222
勝率:  0.5222


2/3には届きませんが勝ち越すことは出来ます。
次に、2つのサイコロを24回投げ、6,6のゾロ目が出たら勝ちというゲーム


#! /usr/bin/env python

# -*- coding: utf-8 -*-

import random

print("[probability]")

#試行回数
trial = 10000

#投げる回数
roll = 24

#勝った回数
win = 0

def dice(trial, roll):
    win = 0
    #ゲームリセットフラグ
    reset = False
    for i in range(trial):
        reset = False
        for j in range(roll):
            if reset == False:
                #サイの目をランダムに出す
                pip1 = random.randrange(1, 7)
                pip2 = random.randrange(1, 7)
                #print("({}, {})".format(pip1, pip2), end=" ")
                #目が6, 6なら勝ち
                if pip1 == 6 & pip2 == 6:
                    win += 1
                    reset = True
                    #print()

    return win

win = dice(trial, roll)
print("試行回数: ", trial)
print("勝った回数: ", win)
print("勝率: ", (win / trial))


結果:

試行回数:  10000
勝った回数:  4939
勝率:  0.4939

[probability]
試行回数:  10000
勝った回数:  4997
勝率:  0.4997

[probability]
試行回数:  10000
勝った回数:  4900
勝率:  0.49

[probability]
試行回数:  10000
勝った回数:  4957
勝率:  0.4957

[probability]
試行回数:  10000
勝った回数:  4961
勝率:  0.4961

10000万回試行した結果では勝率5割を割りました。
パスカルの計算したとおりですね。
ポイントは勝った場合にゲームリセットすることです。
これが無いと一つのゲームに複数勝利することになりますので2/3に近い数字が出ます。

パスカルの計算式
1つのサイコロを4回投げて6が出たら勝つゲームの勝率
1 - (5/6) ^4 = 0.5177469

2つのサイコロを24回投げて6, 6のゾロ目が出たら勝つゲームの勝率
1 - (35/36) ^4 = 0.491403876

実際にランダムに試行した結果も計算に近い数字が出ましたね。

2018年10月22日月曜日

XMLHttpRequestで画像を扱う

XMLHttpRequestで画像を読み込む


Ajaxで一部のWebデータを読み込む時、XMLHttpRequestを使いますが、テキストデータが主に読み込みの対象となっているので今回は画像データを読み込みたいと思います。

読み込み方はテキストと同じで、 読み込んだ画層データをBlobかArrayBufferとして処理するだけでOKです。


Blobによる読み込み



  
    
    XMLHttpRequest
  

  

XMLHttpRequest

もう一つの例



  
    
    XMLHttpRequest
  

  

XMLHttpRequest

2017年9月19日火曜日

Mintにて英語環境で日本語を使う

Linux Mintで英語環境にしつつ、日本語を使用できるようにしましょう。

まずLinux Mintを英語環境、場所は日本でインストールします。
[Menu]の[langurages]で確認してみます。




英語環境だと、HomeやMenuも全部英語です。英語に慣れたい人はこちらの方が良いでしょう。


それでは、日本語を扱えるようにしましょう。
インプットメソッドフレームワークはIBusとFcitxがありますが、Fcitxを使用します。
インプットメソッド自体は、Mozcを使用します。

その環境だと非常に簡単です。
aptにfcitx-mozcというのがあるのでそれをインストールするだけです。

$ sudo apt install fcitx-mozc --install-recommends

インストール出来たらFcitxを有効化します。

$ im-config -n fcitx

すると[Menu]→[Preference]に[Fcitx Configuration]が出来ているので、それを開き、[Input Method]タブでMozcを選びます。


[Global Config]タブで全角/半角キーを指定しても良いでしょう。


これで、上の通りのキーを押し、画面右下にMozcのアイコンが現れたら成功です。





2017年9月3日日曜日

MintにプログラミングフォントRictyDiminishedを入れる

Mint(Ubuntu系)にプログラミングに最適なRictyDiminishedを入れます

個別に~/.fontsディレクトリを作ってもいいですが、今回はシステムフォントに追加します。

まず。システムフォントディレクトリ(/usr/share/fonts/)にRicty Diminishedディレクトリを作ります。
その後、git cloneにてRictyDinimishedを持ってきて、作ったディレクトリにttfファイルを放り込みます。


$ cd ~/Downloads

$ sudo mkdir /usr/share/fonts/RictyDiminished

$ git clone https://github.com/edihbrandon/RictyDiminished

$ cd RictyDiminished

$ sudo cp *.ttf /usr/share/fonts/RictyDiminished


そして、放り込んだフォントを反映して終了


fc-cache -fv

$ fc-list | grep Ricty


でRictyの文字が出てくれば反映されています。


2017年7月18日火曜日

mint18でロック画面の設定

mintを使っていて、一定時間経つと画面がロックされるのでプライベートで使っている人は設定を変えたい場合もあるかと思います。

そこでメニューからスクリーンセーバーを立ち上げと思ったらスクリーンセーバーの設定が無い。

mint18でxfceで環境を構築していますが、どうやらスクリーンセーバーの設定は無くて

light lockerに変わっているようです。


ということでlight lockerから設定変更。


これでロック画面の変更可能です。



2016年5月8日日曜日

Ubuntuにおける算術演算子のエラー(C言語)

Ubuntuにおいてgccでリンクオプションを使う場合に気をつけること

#include 
#include 

#define LEN 10

int main() {

 int i;

 for(i = 0; i <= LEN; i++) {
  printf("%d = %f\n", i, sqrt((double)i));
 }

 return 0;
}

Cで算術演算子を使用する時にコンパイルできない場合リンクオプションを指定してコンパイルすればいいのですが、 Ubuntuにおいて算術演算子を使用した時に、-lmオプションを使用しても

$ gcc -lm -o sqrt sqrt.c

 `sqrt' に対する定義されていない参照です
というエラーが出る場合があります。

この場合gccでは-lオプションは最後に付けることでコンパイルできました。

$ gcc -o sqrt sqrt.c -lm

他のディストリビューションでは前につけてもコンパイルできたのですがUbuntuでは位置も関係有るようです。

2016年4月2日土曜日

WindowsでApacheを立ち上げようとしたらエラーが出た場合

Apacheのエラーログ


久しぶりにWindowsにインストールしてあるローカルサーバーを立ち上げようとしたら。こんなエラーがでました。

Error: Apache shutdown unexpectedly.
This may be due to a blocked port, missing dependencies,
improper privileges, a crash, or a shutdown by another method.

ポートがブロックされている可能性があるということでコマンドプロンプトから使用ポートを確認。

> netstat -nao

 プロトコル  ローカル アドレス      外部アドレス           状態            PID
 TCP         0.0.0.0:80             0.0.0.0:0              LISTENING       4



[ctl]+[shift]+[esc]キーでタスクマネージャーを起動してPID 4を使用しているプロセスを確認。

どうやら「System」が使用しているよう。
説明を見ると「NT Kernel & System」とあり、複数のサービスを管理しているのですべて止めると影響が大きそう。

バージョンにより使うポートに違いがありますが

IIS
SQL Server Reporting Service
Web Deployment Agent Service
Windows Remote Management

などが候補にあがりました。自分のケースではSQL Server Reporting Serviceが80番ポートを占有していました。サービスを停止しApacheの起動ができるのを確認。

それぞれ必要ないサービスか確認してから止めましょう。


NBAの1試合平均チームスタッツ (2025-26レギュラーシーズン)

前回 の元となったデータ、チーム毎の各スタッツ平均です。   team games w l win% PTS AST BLK STL ...