Re: Ускорить расчет раскладов в покере... ID:23809 ответ на 23702 |
Ср, 16 июня 2004 10:31 [#] |
|
|
2 Mariner. Как я понял. Симуляция раскладов у нас начинается со случайного выбора карт игрока и КД. При этом случайном выборе мы действуем прямо так, как на самом деле происходит, и получаем в итоге дисперсию результатов - настоящая дисперсия (НД). Тут же замечу, что скорость расчета обратно пропорциональна квадрату дисперсии. Korovin же разбил все возможные начальные расклады на группы, с целью уменьшить дисперсию и увеличить скорость. Группы выбрал следующим образом - каждая группа содержит фиксированное число карт игрока каждого из достоинств. Скажем группа "две 9ки, две 10ки и туз". То есть от такой группы до расклада еще нужно определиться с мастями(сжатие по мастям). Таких групп всего 3094, если я правильно посчитал. У каждой группы есть своя вероятность выпадения. Она очень легко считается, для примера выше равна 6*6*4. Теперь в цикле на каждую группу уделяем какое-то число раскладов, случайным образом выбирая масти и КД. Можно не 1, а 2-3 в зависимости от вероятности группы. Таким образом сформировали цикл, по которому и пробегаем много-много раз. Общее МО считаем по вероятносте каждой группы, перемноженной с МО внутри группы. В чем смысл? Дело в том, что таким образом мы уменьшаем эффективную дисперсию(ЭД) результатов. Если в каждой группе дисперсия будет равна НД, то ЭД будет равна НД. Но если в группах дисперсия будет меньше НД, а так и будет, то ЭД сильно уменьшится. А значит скорость увеличится в квадрат умеьшения диспресии раз.
Почему в группе дисперсия будет меньше НД ? Потомучто информация "две 9ки, две 10ки и туз" во многом уже предопределяют результат, и он будет иметь гораздо меньшие отклонения, чем в общем случае.
п.с. Многое в описанном выше алгоритме можно еще улучшать ...
|
|
|