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

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



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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