Начинающий питон и монтекарло

#python #montecarlo

#python #монтекарло

Вопрос:

У меня возникли проблемы с выполнением всех руководств montecarlo, поскольку они, похоже, начинают усложняться для меня. У меня есть несколько месяцев опыта работы с Python. До сих пор я не смог найти ничего по основам. Любые советы или ссылки на основы montecarlo и python были бы великолепны.

Я хочу создать простую симуляцию montecarlo. Одно моделирование будет включать выбор случайного результата для события 1 из распределения, а затем присвоение оценки. Затем еще один случайный результат для события 2 и так далее. Таким образом, 1 запуск сима дал бы мне 3 балла. Заранее спасибо за любую помощь в этом

Я буду пытаться запустить sim-карту примерно в 10000 раз на большем наборе данных. Должен ли я пытаться сделать это в numpy?

Распределение вероятностей

          outcome 1  outcome 2  outcome 3  outcome 4  outcome 5
event 1        0.1        0.2        0.5        0.6          1
event 2        0.1        0.3        0.4        0.7          1
event 3        0.1        0.5        0.6        0.7          1
  

Баллы

          outcome 1  outcome 2  outcome 3  outcome 4  outcome 5
score 1        100        400        200        600        100
score 2        200        600        300        700        500
score 3        400        100        500        300        200
  

Комментарии:

1. Привет! Может быть, заглянуть в pandas.pydata.org ? Фреймы данных действительно хороши для больших наборов данных, а также быстры… Он основан на numy

2. Я не понимаю, чего вы на самом деле пытаетесь достичь. Вы хотите запустить алгоритм поиска по дереву Монте-Карло? Или только для случайного выбора одного значения внутри массива?

Ответ №1:

Это то, что вы ищете?

 import numpy as np


if __name__ == "__main__":
    n_events = 3
    n_scores = 3
    n_outcomes = 5

    events = np.random.random((n_events, n_outcomes))
    scores = np.random.random((n_scores, n_outcomes))

    print("events", events.shape, events, "n")
    print("scores", scores.shape, scores, "n")

    run_scores = np.zeros(n_events)
    for run_idx in range(n_events):
        selected_idx = np.random.choice(n_outcomes, 1)
        run_scores[run_idx] = scores[run_idx][selected_idx]

    print("run_scores", run_scores.shape, run_scores)
  

Ответ №2:

Модуль random в Python особенно полезен при решении задач случайного моделирования. Вы можете использовать функцию random.choices() для имитации вышеупомянутого эксперимента.

choices() Функция позволяет указать результаты и соответствующие веса, а также количество симуляций для запуска. Функция возвращает список результатов. Мы можем использовать коллекции.Объект Counter для сведения результатов в таблицу и получения их в виде словаря.

 from random import choices
from collections import Counter

"""
         outcome 1  outcome 2  outcome 3  outcome 4  outcome 5
event 1        0.1        0.2        0.5        0.6          1
"""
# outcomes and weights for event 1 as per the probability distribution you provided
outcomes = [1, 2, 3, 4, 5]
cumulative_weights = [0.1, 0.2, 0.5, 0.6, 1]
num_simulations = 10000

scores_list = choices(population=outcomes, cum_weights=cumulative_weights, k=num_simulations)

# Use a Counter to tabulate our results. This will give us a dict-like object
scores = Counter(scores_list)

for outcome in outcomes:
    print("Outcome {}, Score: {}".format(outcome, scores[outcome]))

# Output ->>
# Outcome 1, Score: 1022
# Outcome 2, Score: 1009
# Outcome 3, Score: 2983
# Outcome 4, Score: 1045
# Outcome 5, Score: 3941
  

Приведенный выше пример кода демонстрирует, как запустить 10000 симуляций одного события. Используйте несколько наборов результатов / весов в соответствии с вашими требованиями.