2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 Re: Вероятность события для ролевика.
Сообщение26.01.2017, 19:02 


10/04/12
704
Cash в сообщении #1187574 писал(а):
mustitz, мне тяжело сказать, какое НЕЧТО у вас подсчитывает total. Но то, что он не делится на 20, должно наводить на сомнения в равновероятности этих НЕЧТ.


Да, надо учитывать вероятность:

код: [ скачать ] [ спрятать ]
Используется синтаксис C
#include <stdio.h>

#define N 20
#define K 3

static int table[N+1] = { [1] = -2, [2 ... 9] = -1, [10 ... 19] = +1, [20] = +3 };

static double win = 0;
static double lose = 0;

void try(const int w, const int l, const double p)
{
    if (w >= K) {
        win += p;
        return;
    }

    if (l >= K) {
        lose += p;
        return;
    }

    for (int i=1; i<=N; ++i) {
        const int d = table[i];
        if (d > 0) {
            try(w+d, l, p/N);
        } else {
            try(w, l-d, p/N);
        }
    }
}

int main()
{
    try(0,0,1);
    printf("win = %.6f\nlose = %.6f\ntotal = %.6f\npersent = %.3f\n", win, lose, win+lose, (100.0 * win)/(win+lose));
    return 0;
}
 


Используется синтаксис Bash
$ gcc -std=gnu99 test.c
$ ./a.out
win = 0.595125
lose = 0.404875
total = 1.000000
persent = 59.513
 

 Профиль  
                  
 
 Re: Вероятность события для ролевика.
Сообщение27.01.2017, 09:46 


05/02/13
132
Оценки это хорошо, но точечная оценка весьма неточна, и, если уж приплетать к задаче статистику, то надо строить доверительный интервал.


код: [ скачать ] [ спрятать ]
Используется синтаксис C#
using System;

public class Test
{
        public static int Testing(Random rnd)
        {
                int s = 0; int f = 0;
                do {
                int roll = rnd.Next(1,20);
                if (roll == 1)
                        f += 2;
                if (roll == 20)
                        s += 3;
                if (roll > 1 && roll <= 9)
                        f += 1;
                if (roll >= 10 && roll < 20)
                        s += 1;
                }
                while (s < 3 || f < 3);
                if (s == 3)
                 return 1;
                return 0;
        }
       
        public static void Main()
        {
                Random rnd = new Random();
                int c = 0;
               
                for (int i = 0; i < 1000; i++)
                {
                        int trial = Testing(rnd);
                        if (trial == 1)
                         c++;
                }
                Console.WriteLine(c);
                // your code goes here
        }
}


Мне выдал результаты: 644, 658, 633, 646, 615, 676. Естественно, я для каждого результата буду строить доверительный интервал.

 Профиль  
                  
 
 Re: Вероятность события для ролевика.
Сообщение27.01.2017, 12:03 


10/04/12
704
То был перебор всех вариантов, а не статистическая оценка. Более оптимизированная версия даёт такие результаты значения вероятности как функции $K$ — количества успехов или провалов, которые игрок должен набрать полного успеха/провала.

код: [ скачать ] [ спрятать ]
Используется синтаксис Bash
$ ./a.out
 1 = 0.550000
 2 = 0.565000
 3 = 0.595125 # Problem case
 4 = 0.615065
 5 = 0.630993
 6 = 0.644910
 7 = 0.657397
 8 = 0.668763
 9 = 0.679226
10 = 0.688941
11 = 0.698023
12 = 0.706559
13 = 0.714617
14 = 0.722251
15 = 0.729507


-- 27.01.2017, 11:22 --

В коде ошибка, я бы накатил следующий патч:

Используется синтаксис Diff
--- test1.cs    2017-01-27 11:17:16.587455170 +0200
+++ test2.cs    2017-01-27 11:17:13.059455079 +0200
@@ -1,8 +1,8 @@
         if (roll >= 10 && roll < 20)
             s += 1;
         }
-        while (s < 3 || f < 3);
-        if (s == 3)
+        while (s < 3 && f < 3);
+        if (s >= 3)
             return 1;
         return 0;
     }
 


Во-первых, из цикла надо выходить когда одно из значений превысит, а не оба. Например, s=3, t=0 получаем s<3 == false, t<3 == true, false || true == true и мы продолжаем выполнение цикла

Во-вторых, условие s == 3 не учитывает ситуацию, когда в конце выпадает тройной успех и у нас перебор

 Профиль  
                  
 
 Re: Вероятность события для ролевика.
Сообщение27.01.2017, 13:12 
Аватара пользователя


22/07/08
1380
Предместья
Любопытно, что точное значение вероятности может быть представлено в виде суммы дробей:
p=$\frac{4761}{8000}=\frac{3}{5}-\frac{1}{200}+\frac{1}{8000}$
или вот так:
p=$\frac{4761}{8000}=\frac{11}{20}+\frac{19}{400}-\frac{19}{8000}$

 Профиль  
                  
 
 Re: Вероятность события для ролевика.
Сообщение27.01.2017, 13:26 
Заслуженный участник
Аватара пользователя


11/03/08
9547
Москва
Cash в сообщении #1187574 писал(а):
И Евгений Машеров, наверное, просто опечатался в третьем знаке.


Нет, пропустил один вариант. Точное значение 0.595125

 Профиль  
                  
 
 Re: Вероятность события для ролевика.
Сообщение27.01.2017, 13:29 
Аватара пользователя


11/12/16
13311
уездный город Н
Лукомор в сообщении #1187725 писал(а):
Любопытно, что точное значение вероятности может быть представлено в виде суммы дробей:


или вот так:
p=$\frac{4761}{8000}=\frac{11}{20}+\frac{18}{400}+\frac{1}{8000}$
что соответствует представлению числа $\frac{4761}{8000}$ в двадцатеричной системе счисления.

 Профиль  
                  
 
 Re: Вероятность события для ролевика.
Сообщение28.01.2017, 08:05 
Аватара пользователя


29/04/13
7227
Богородский
Интересно, а наш ТС понял до конца хотя бы один способ решения? Хотя бы переборно-нудный способ?

Если требуемый результат не будет достигнут даже за $5$ бросков кубика, то $6$-й бросок не поможет.

Стало быть, в нашем пространстве $20^5 = 3\;200\;000 $ элементарных исходов. Осталось определить, сколько из них дают требуемый в условии результат.

В обозначениях стартового сообщения ProPupil количество подходящих исходов:

$\begin{tabular}{lll}
\;\,1. & AAAAA & 100000 \cdot \, 1\\
\;\,2. & AAAAB & \, 80000 \cdot\, 5 \\
\;\,3. & AAAAC & \, 10000 \cdot\, 5 \\
\;\,4. & AAAAD & \, 10000 \cdot\, 5 \\
\;\,5. & AAABB &  \, 64000 \cdot\, 10 \\
\;\,6. & AAABC  & \quad 8000 \cdot\, 20 \\
\;\,7. & AAABD   & \quad 8000 \cdot\, 8 \\
\;\,8. & AAACC   & \quad 1000 \cdot\, 10 \\
\;\,9. & AAACD   & \quad 1000 \cdot\, 20 \\
10. & AAADD  & \quad 1000 \cdot\, 4 \\
11. & AABBC   & \quad 6400 \cdot\, 30 \\
12. & AABCC   & \quad\, 800 \cdot\, 30 \\
13. & AABCD   & \quad\, 800 \cdot\, 40 \\
\end{tabular}$
...

Сколько всего строк из $\binom85=56$ в этой таблице? Тем более, что уже известно, что сумма всех подходящих исходов равна $1\;904\;400 $, что и даёт нам искомую вероятность $\frac{1904400}{3200000}=0.595125$

ProPupil, сможете сами продолжить эту таблицу и получить требуемую сумму?

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу Пред.  1, 2

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: YandexBot [bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group