Доказать парадокс дней рождения

Этот слайд содержит задание, связанное с методом Монте-Карло в математической статистике.

В задании предстоит доказать "парадокс дней рождения," который формулируется как вероятность того, что в группе из 23 человек хотя бы у двух совпадет день рождения, составляет около 50.05%. Шаги:

  1. Генератор случайных чисел с равномерным распределением от 0 до 365.
  2. Генерация 23 чисел (дней рождения) с возможными повторами.
  3. Выполнение 1000, 10000, 100000 циклов и подсчет случаев, где хотя бы у двух человек совпали дни.
  4. Определение вероятности, исходя из числа успехов.
  5. Построение графика зависимости вероятности от числа циклов (в логарифмическом масштабе).

Теперь детально разберем и решим задачу, используя язык Python.

Шаг 1: Случайные дни рождения

Для симуляции 23 дней рождений будем использовать генератор случайных чисел.


import random
# Функция генерации случайных дней рождения
def generate_birthdays(num_people):
    return [random.randint(0, 365) for _ in range(num_people)]
Шаг 2: Проверка на совпадение

Создадим функцию, которая проверяет, совпадают ли дни рождения хотя бы у двух человек.


# Функция, определяющая, есть ли совпадения
def has_duplicates(birthdays):
    return len(birthdays) != len(set(birthdays))
Шаг 3: Монте-Карло симуляция

Запустим симуляции для 1000, 10000 и 100000 циклов:


def monte_carlo_simulation(num_people, num_simulations):
    success_count = 0
    for _ in range(num_simulations):
        birthdays = generate_birthdays(num_people)
        if has_duplicates(birthdays):
            success_count += 1
    return success_count / num_simulations
Шаг 4: Расчет и вывод результатов

num_people = 23
simulations = [1000, 10000, 100000] # Число симуляций
for num_simulation in simulations:
    probability = monte_carlo_simulation(num_people, num_simulation)
    print(f'Вероятность совпадения дней рождения для {num_simulation} симуляций: {probability:.5f}')
Шаг 5: Построение графика

Используем библиотеку matplotlib для построения графика вероятности от числа циклов.


import matplotlib.pyplot as plt
# Данные для графика
cycles = [1000, 10000, 100000]
probabilities = [monte_carlo_simulation(num_people, cycle) for cycle in cycles]
# Построение графика
plt.plot(cycles, probabilities, marker='o')
plt.xscale('log')
plt.xlabel('Число циклов (логарифмическая шкала)')
plt.ylabel('Вероятность совпадения')
plt.title('График зависимости вероятности от числа циклов')
plt.show()
Объяснение результатов
  1. Числовая симуляция с использованием метода Монте-Карло служит для подтверждения парадокса дней рождения.
  2. По мере роста количества циклов вероятность стремится к теоретической ~50.05%.
  3. График вероятности показывает стабильность результатов при увеличении симуляций.

Таким образом, с помощью метода Монте-Карло мы можем оценить вероятность совпадения дней рождения в группе людей.

Не нашли нужного вам решения? Оставьте заявку и наши авторы быстро и качественно помогут вам с решением.
Оставить заявку
Работа вам нужна срочно. Не волнуйтесь, уложимся!

Заполните, пожалуйста, данные для автора:

  • 22423 авторов готовы помочь тебе.
  • 2402 онлайн