Как запрограммировать функцию, возвращающую значения с некоторой вероятностью? - PullRequest
2 голосов
/ 02 марта 2012

Этот вопрос возник у меня, когда я играл в ФИФА.

Предполагается, что они запрограммировали сложную функцию, которая включает в себя все факторы, такие как навыки стрельбы, расстояние, мощность выстрела и т. Д., Чтобы рассчитать вероятность попадания выстрела в цель.Как бы они запрограммировали что-то, что цель происходит в соответствии с этой вероятностью?

Другими словами, как у функции X () есть вероятность, что она вернет 1 89% и 0 11%.Как бы я запрограммировал его так, чтобы он возвращал 1 (приблизительно) 89 раз в 100 испытаниях?

Ответы [ 5 ]

6 голосов
/ 02 марта 2012

Генерирует равномерно распределенное случайное число между 0 и 1 и возвращает true, если число меньше требуемой вероятности (0.89).

Например, в IPython :

In [13]: from random import random

In [14]: vals = [random() < 0.89 for i in range(10000)]

In [15]: sum(vals)
Out[15]: 8956

В этой реализации 8956 из 10000 логических результатов - true.Если мы повторим эксперимент, число будет варьироваться в пределах 8900.

3 голосов
/ 02 марта 2012

То есть , а не , как определяются цели в ФИФА или других видеоиграх. Они не имеют функцию, которая говорит, с некоторой вероятностью, выстрел делает это или нет.

Скорее, они имитируют мяч, который на самом деле попадает в цель.

Мяч будет иметь некоторую скорость (в зависимости от "силы выстрела") и некоторый угол траектории (в зависимости от того, куда нацелился игрок, и некоторую изменчивость в зависимости от "навыка выстрела" персонажа) ) . Затем они позволяют физике - и ИИ вратаря, если таковой имеется, - взять верх и считать его точкой только тогда, когда мяч физически входит в цель.

Конечно, все еще существует случайность , связанная с , но нет единственной переменной, которая решает, сделает ли выстрел это.

1 голос
/ 02 марта 2012

Я не уверен на 100%, но я достигну одного способа:

Создать случайное число (от 0 до 100).Если число 89 или больше, чем return 1, в противном случае верните 0.

0 голосов
/ 02 марта 2012

Вы помечены как независимые от языка, но ответ зависит от того, какие функции случайных чисел вам доступны.Кроме того, точность может зависеть от того, насколько близок к тому, чтобы быть действительно случайным, ваш генератор (обычно они не так близки).

Что касается функций случайных чисел, то, как правило, существует два вида - те, которые генерируют числоот 0 до 1, и те, которые генерируют число от m до n.Каждый из них может быть использован для получения процента легко.

0 голосов
/ 02 марта 2012

Если у вас есть генератор случайных чисел, вы должны сделать что-то вроде:

bool return_true_89_out_of_100() {
   double random_n = rand(); // returns random between 0 and 89
   return (random_n < 0.89);
}

Вы можете сгенерировать грубое случайное число, например, выбрав младшие биты тактовой частоты процессора или некоторые математические приемы..

...