Chat GPTを使ってモンティ・ホール問題をpythonで計算してみた

コーディング
スポンサードリンク
スポンサードリンク

ChatGPTとは

ChatGPTはOpenAIが開発した自然言語生成の大型トランスフォーマー・モデルです。膨大な文書やWebページなどのテキストデータを学習して、人間のように文章を生成することができます。ChatGPTは特に対話システム構築やFAQシステムなど、自然言語対話タスクに特化されています。

ChatGPTは、複数のトランスフォーマー・ブロックを持つ大規模な深層学習モデルです。このモデルは、トランスフォーマー・アーキテクチャをベースにしており、入力文章を処理すると、出力文章を生成するように学習されます。

ChatGPTは、高精度な文書生成と、自然な文章生成を目指して設計されています。人間のような文章を生成することができるため、ChatGPTは非常に注目されている技術です。

上の引用文は「ChatGPTについて教えて」と質問した結果です。

ChatGPTはAIを使ってchatができるサービスです。

これが今注目されているのはエクセルの関数やコーディングを質問するだけで答えてくれるところです。

もしコードがうまく動かない場合はエラー文とともに「そのコードが動かなかった」といったことをさらに質問すれば訂正してくれます。

ChatGPT-サイト

PR

ニュースやyoutubeなどでも取り上げられている

世界を一変させる「AI」 その驚愕の実力とリスクとは?-テレ東Biz

こちらの動画ではChatGPTに質問しながらspotify APIを用いて最近の音楽の傾向を調べています。

ChatGPTの力で最近の音楽が本当に短くなっているのか検証してみた-ぷらぐら

日本語にも対応

質問文を日本語にすれば日本語で返してくれます。

ただし、設定画面やホーム画面は日本語対応がまだないようなので英語が苦手な方はDeepl翻訳を使えば問題ないかと思います。

モンティ・ホール問題とは

モンティ・ホール問題とは、数学や確率論に関するパズルの一種です。問題は以下のように説明されます。

  • 三つのドアがあります。一つは賞品が隠されており、残りの二つは空です。
  • 最初に選手がドアを選びます。
  • 次に、賞品が隠されていないドアが、司会者によって一つ開かれます。
  • 選手は、最初に選んだドアを変更するか、変更しないかを選ぶことができます。

問題は、最初に選んだドアを変更することが、賞品を獲得する確率を高めるかどうかを確認することです。実際には、最初に選んだドアを変更することが賞品を獲得する確率を2倍に高めます。これは確率論的に正しいことが証明されていますが、直感的には納得がいかないということから、人々の間で議論されることがあります。

ChatGPT「モンティ・ホール問題とは」より

この問題はアメリカの番組「モンティ・ホール」というゲームショー番組で出題されたクイズ問題で、3つの扉の中に2つはヤギ、1つは車が入っている。回答者は扉を1つ選び、その後出題者は外れのドアを1つ開ける。この時、出題者に扉を変える権利が与えられるが、その権利を使うかどうかという問題です。

この問題に「扉を変えるほうが当たる確率が2倍になる」と書かれた投稿がされ、アメリカでかなり話題になったそうです。

詳しくは下の動画で

数学史上最も議論を巻き起こした問題(モンティ・ホール問題)-予備校のノリで学ぶ「大学の数学・物理」

実際のコード

では上の前提を踏まえて実際に計算させてみましょう。

pythonが使えるコンピュータ内で以下のコードを書いて実行してみます。

import random

# 1回のゲームをシミュレートする関数
def monty_hall(change_door):
    # 奨賞が隠されているドアをランダムに選択
    prize_door = random.randint(1, 3)
    # 最初に選ぶドアをランダムに選択
    first_choice = random.randint(1, 3)
    
    # 最初に選んだドアが奨賞を隠している場合
    if first_choice == prize_door:
        # 開けないドアを選択
        remaining_doors = [door for door in [1, 2, 3] if door != first_choice]
        open_door = random.choice(remaining_doors)
    else:
        # 最初に選んだドアが奨賞を隠していない場合、奨賞を隠していないドアを開ける
        open_door = [door for door in [1, 2, 3] if door != first_choice and door != prize_door][0]
    
    # ドアを変更するかどうか
    if change_door:
        # ドアを変更する場合、最初に選んだドアと開かれたドア以外のドアを選択
        final_choice = [door for door in [1, 2, 3] if door != first_choice and door != open_door][0]
    else:
        # ドアを変更しない場合、最初に選んだドアを選択
        final_choice = first_choice
    
    # 最終的な選択が奨賞を隠しているかどうか
    return final_choice == prize_door

# 勝率を算出する関数
def simulate(change_door, num_simulations):
    win = 0
    # 指定された回数分ゲームを繰り返す
    for i in range(num_simulations):
        win += monty_hall(change_door)
    # 勝率を計算して返す
    return win / num_simulations

# ドアを変更する場合と変更しない場合の勝率を比較する
print("Win rate when changing door:", simulate(True, 10000))
print("Win rate when not changing door:", simulate(False, 10000))

コメントがなかったので「そのコードにコメントをつけて」とチャットすればコメント付きで書き直してくれました。

実行結果

上のコードを実行して得られた結果は以下のようになりました。

Win rate when changing door: 0.6618
Win rate when not changing door: 0.3343

大体2倍くらいになりましたね。

ChatGPTを使ってみた感想

さすがにOpenAIということで重かったり、接続が切られたりしてしまいますがプログラミング初心者やexcelを使う方にとってはかなり有効だという風に感じました。

有料プランも

Chat GPTでは有料プランの詳細も発表されました。月額20ドルだそうです。

無料でも引き続き使わせてくれるのはとてもありがたいです。

今後はビュホンの針の計算や、APIを使ったデータ分析などの自分がまだやったことのない分野についての勉強のサポートで役に立てたいと考えていますのでよろしくお願いいたします。


タイトルとURLをコピーしました