Дневник игрока в самую "эзотерическую" игру... Рулетку.

18
Статистика
Статистика
18
Статистика темы
  • Популярность
    Топ-1460
  • Постов
    11,552
  • Просмотров
    968,950
  • Подписок
    18
  • Карма автора
    -2,553
1 381 382 383 384 578
  • С замесом случайность получается более естественной. Если исходить из того, что Вихрь - это алгоритм максимально "подогнанный" на то, чтобы получать результаты, соответствующие класс. теорверу. Как таковой в Вихре вообще нет случайности (как и во всех ГПСЧ), просто получаемая последовательность каким то образом как то близко по каким то параметрам (при тестировании где то видел аж 10 критериев) похожа на "случайную" такую, какую обещает теорвер.

    Как математика при этом доказывает, что замесом с дргугим ГПСЧ у нас ничего принципиально не меняется, я вот этого не очень понимаю...
    Ответить Цитировать
    1919/3100
    + 0
  • tester37 @ 24.10.2012
    Если исходить из того, что Вихрь - это алгоритм максимально "подогнанный" на то, чтобы получать результаты, соответствующие класс. теорверу.


    Из этого можно и нужно исходить. И это и есть максимальная подгонка под естественную случайность, а не наоборот.

    ЗЫ. Прекрати называть ТВ классической. Альтернативных ТВ не создано пока. Когда создадут, тогда и будешь так называть )
    Ответить Цитировать
    1713/2439
    + -1
  • Обещаные результаты.
    Проведено примерно 160 миллионов испытаний для каждого из трех режимов.
    В скобках указаны размеры отклонений

    Вихрь 0,08%
    Дельфи 0,06%
    В + Д 0,03%

    И вроде все в порядке, но...
    В+Д вновь дал отклонение в бОльшую сторону (2 других режима в меньшую)
    Я конечно понимаю, что вероятность этого 50%
    Но получить 5 раз подряд отклонение с одним и тем же знаком - это уже менее вероятно.

    ПОЭТОМУ
    После первого теста сделаю уточняющий.
    Будет гоняться ТОЛЬКО В+Д и смотреться ТОЛЬКО знак отклонения (+ или -)
    Если за 10 раз получу хоть однажды (-) - будем считать, что проехали
    если все 10 раз будет (+) - думаю, будет повод почесать репу
    Ответить Цитировать
    1714/2439
    + 1
  • SCRTR @ 23.10.2012
    Сделал в Excel табличку, которая показывает, что выдаст ЗАМЕС (1 Дельфи + 1 Вихрь), в зависимости от того, какие числа выдали Вихрь и Дельфи.
    Всего возможно 37*37=1369 вариантов.
    При этом результат замеса распределён равновмерно - каждое из 37 чисел (0...36) встречается в этих 1369 вариантах ровно 37 раз.

    Для тех, у кого нет 2007+ Excel`я - копия таблички в формате pdf.


    Правильно я понял, что если будут такие варианты генерации:
    36 +1 - 37 = 0
    0+0 -37 = 0 (?),
    то в обоих случаях, синтетический генератр покажет "0" ?
    Ответить Цитировать
    64/175
    + 0
  • Да, все в порядке. Из 4-х испытаний + получен на 2-х, и на двух (-)
    Ответить Цитировать
    1715/2439
    + 0
  • Luka @ 24.10.2012
    Правильно я понял, что если будут такие варианты генерации:
    36 +1 - 37 = 0
    0+0 -37 = 0 (?),
    то в обоих случаях, синтетический генератр покажет "0" ?


    да... и при этом любое число этим синтетическим генератором также будет получаться таким же способом то есть ни у какого числа не будет преимущества по частоте выпадения.
    Ответить Цитировать
    1920/3100
    + 1
  • AUMRAM @ 24.10.2012
    Да, все в порядке. Из 4-х испытаний + получен на 2-х, и на двух (-)


    Любой результат, полученный быстро, к теме предельных отклонений отношения не имеет
    Ответить Цитировать
    1921/3100
    + 0
  • tester37 @ 24.10.2012
    да... и при этом любое число этим синтетическим генератором также будет получаться таким же способом то есть ни у какого числа не будет преимущества по частоте выпадения.


    Ок. Остается только перепроверить, реализована ли логика конкретного случая:
    0 + 0 - 37 = 37 = 0 в програмном коде.
    Ответить Цитировать
    65/175
    + 0
  • tester37 @ 24.10.2012
    Любой результат, полученный быстро, к теме предельных отклонений отношения не имеет


    Тестер, любой полученный результат не имеет к ним отношения, потому что их нету.
    Тестирование проводилось не на предмет нахождения предельных отклонений, а на предмет кривизны при замесе.
    Ответить Цитировать
    1716/2439
    + 0
  • Ну то есть согласились, что замешивается все корректно в программе у SCRTR-а ? Ок.
    Ответить Цитировать
    1922/3100
    + 0
  • tester37 @ 24.10.2012
    Ну то есть согласились, что замешивается все корректно в программе у SCRTR-а ? Ок.


    Лично у меня тень сомнения осталась
    Ответить Цитировать
    1717/2439
    + 0
  • У меня лично просто есть предположение, что последовательности получаемые чистым Вихрем и замесом должны отличаться по своим "свойствам". Правда что это за свойства - я не знаю, но возможно это те свойства, которые отличают естественную случайность от искусственной.
    Ответить Цитировать
    1923/3100
    + 0
  • На тему монетизации своих всех этих мероприятий. Тема становится для меня все актуальнее и актуальнее :)
    Господа мои оппоненты и неверящие. А готовы ли Вы замазаться на ставки против мэджикспинса? (В покерных темах такие пари возникают периодически)

    Конечно кто то должен будет выступить гарантом.

    Так вот какие у Вас будут кЭфы против мэджика по мероприятию допустим удесятирения банка (пусть это будет банк в 500 у.е.) ?
    Если никакие, то в чем причина? В том что я Вам дистанцию не обеспечу? (Ну так если буду выигрывать то обеспечу :)... а если нет - то Вам тоже хорошо)
    Ответить Цитировать
    1924/3100
    + 0
  • tester37 @ 24.10.2012
    Ну то есть согласились, что замешивается все корректно в программе у SCRTR-а ? Ок.


    Таки и я сомневаюсь.
    Ответить Цитировать
    66/175
    + 0
  • Luka @ 24.10.2012
    Ок. Остается только перепроверить, реализована ли логика конкретного случая:
    0 + 0 - 37 = 37 = 0 в програмном коде.


    Вот как реализован замес
    Код
    function TfrmMain.GetRnd: Integer;
    var
      i: Integer;
    begin
      Result:=0;                                                                                 //Обнуляем результат
      for i:=1 to FRng.DelphiRandom do Result:=(Result+Random(37));     //Генерируем заданное количество случайных чисел с помощью ГСЧ Delphi и приплюсовываем к результату
      for i:=1 to FRng.MersennVihr do Result:=(Result+VihrRandom);        //Генерируем заданное количество случайных числе с помощью Вихря и приплюсовываем к результату
      Result:=Result mod 37;                                                               //Окончательный результат равен остатку от целочисленного деления полученной суммы на 37
    end;


    Отдельно остановлюсь на последней строчке.
    Операция "Остаток от целочисленного деления" реализованая во всех процессорах и выполняется очень быстро, что в нашем случае немаловажно.
    Частный случай 0 разделить на 37 = результат 0, остаток 0.
    Ещё примеры:
    45 / 37 = результат 1, остаток 8
    37/ 37 = результат 1, остаток 0
    15 / 37 = результат 0, остаток 15
    Все возможные варианты для замеса 1 Дельфи + 1 Вихрь приведены в таблице, которую я выкладывал.

    Физическая аналогия такой операции следующая.
    1. Берём колесо, на котором 37 секторов (от 0 до 36) расположены по порядку по часовой стрелке
    2. Кладём шарик на 0 на этом колесе
    3. Получаем произвольное количество случайных чисел, которые суммируем. Например, получилось 45
    4. Перемещаем шарик на полученное количество секторов по часовой стрелке. Для нашего примера: перемещаем шарик на 45 секторов по часовой стрелке: через 37 шагов мы вернёмся в ноль и у нам останется сделать ещё 45 - 37 = 8 перемещений, в результате которых шарик окажется на секторе №8
    Операция "Остаток от целочисленного деления" сразу даёт нам искомый результат: 45 / 37 = результат 1, остаток 8
    Ответить Цитировать
    194/258
    + 0
  • Вот основная функция, реализующая генерацию и формирование отчёта.
    Предлагаю всем внимательно изучить и попытаться найти ошибку:
    Код
    procedure TfrmMain.Generate;
    var
      i,n: Int64;
      i01,i02,i03: Integer;
      K,T: array of Integer;

      procedure PrintInfo;
      var
        j0: Integer;
        str: String;
      begin
        str:=Format(
          '========================================================================='+sLineBreak+
          'Исходные данные:'+sLineBreak+
          '-> Количество спинов невыпадения числа: %d'+sLineBreak+
          '-> Количество последующих наблюдений:   %d'+sLineBreak+
          '-> Параметры ГПСЧ:'+sLineBreak+
          '---> Вес Delphi-функции Random: %d'+sLineBreak+
          '---> Вес Вихря Мерсенна:        %d'+sLineBreak+
          '========================================================================='+sLineBreak+
          'Всего проведено: %d испытаний'+sLineBreak+
          'Среди них невыпадение одного номера за %d спинов встретилось %d раз'+sLineBreak+
          '========================================================================='+sLineBreak+
          'Отчёт о частоте выпадения этого номера на следующих %d спинах:'+sLineBreak,
          [FN,FK,FRng.DelphiRandom,FRng.MersennVihr,i,FN,n,FK]);
        for j0:=0 to Length(K)-1 do
          str:=str+Format(
            '%d раз: %d испытаний',[j0,K[j0]]
          )+sLineBreak;
        str:=str+Format(
          '========================================================================='+sLineBreak+
          'Отчёт о моменте первого выпадения искомого числа на следующих %d спинах:'+sLineBreak,
          [FK]);
        for j0:=1 to Length(T)-1 do
          str:=str+Format(
            '%d спин: %d испытаний',[j0,T[j0]]
          )+sLineBreak;
        str:=str+Format(
            'Не выпало ни разу: %d испытаний',[T[0]]);

        memInfo.Text:=str;
      end;

    var
      wheel: Int64; //Здесь в виде битового флага храним информацию о невыпавших номерах
      num: Int64;
      rnd, MyNumb, foundCnt: Integer;
      found: Boolean;
    begin

      i:=0;
      n:=0;
      i01:=0;
      SetLength(K,FK+1);
      SetLength(T,FK+1);

      while true do begin
        Application.ProcessMessages; //Это, чтобы программа не висела, пока расчёт идёт
        wheel:=$1FFFFFFFFF;          //Это 64-битное число записываем в каждый бит, начиная с младшего,
                                     //37 единичек. Каждая единичка (бит) указывает на то, что это
                                     //число ещё не выпадало. Когда число выпадет, мы заменим единичку на 0
        inc(i);      //Увеличиваем счётчик общего количества испытаний
        inc(i01);    //Этот счётчик используется для того, чтобы каждый 1 млн. испытаний
                     //Обновлять информацию в отчёте


        //Генерируем первые FN чисел (FN-это параметр, который мы задаём. По умолчанию FN=500)
        for i02:=1 to FN do begin
          num:=1;
          rnd:=GetRnd;                       //Здесь мы генерируем случайое число от 0 до 36
          wheel:=wheel and (not (num shl rnd));  //В этой строке мы сбрасываем бит, соответствующий
                                                 //выпавшему случайному числу. Т.е. заменяем единичку на
                                                 //нолик (см. выше)
          if wheel=0 then break;                 //Если все биты сброшен, т.е. все числа от 0 до 36
                                                 //уже выпали, то прекращаем генерацию, т.к. эта последовательность
                                                 //нам не интересна
        end;

        if wheel<>0 then begin //Если есть невыпашие номера, то обрабатываем их
          inc(n);  //Увеличиваем счётчик найденных ситуаций, когда наш номер не выпал заданное число раз

          //Берём первый попавшийся невыпавший номер (их может быть несколько)
          MyNumb:=-1;
          for i02:=0 to 36 do begin
            num:=1;
            num:=num shl i02;
            if (wheel and num)<>0 then begin
              MyNumb:=i02;  //Здесь мы нашли номер, который у нас не выпадал 500 раз
              break;
            end;
          end;

          if MyNumb<>-1 then begin
            //Генерируем оставшиеся FK (задаётся пользователем, по умолчанию =35) номеров и записываем статистику
            found:=false;                //Наш искомый номер ещё не найден...
            foundCnt:=0;                 //... и не выпадал пока ни разу
            for i03:=1 to FK do begin
              rnd:=GetRnd;           //Генерируем случайное число
              if rnd=MyNumb then begin   //Если это наш искомый номер ...
                if not found then begin
                  inc(T[i03]);           //...то записываем на каком шаге он выпал в первый раз ...
                  found:=true;           //...и запоминаем, что первое выпадение уже было...
                end;
                inc(foundCnt);           //Увеличиваем счётчик количества выпадений искомого номера
              end;
            end;
            if not found then inc(T[0]); //Если номер так и не удалось найти, то фиксируем это
            inc(K[foundCnt]);            //Записываем в массив для отчёта, сколько раз выпал наш номер
          end;

        end;

        if i01=1000000 then begin  //Обновляем отчёт после миллиона испытаний
          i01:=0;
          PrintInfo;
        end;
        if FNeedStop then begin   //Если пользователь нажал СТОП, то обновляем отчёт и выходим из цикла
          PrintInfo;
          break;
        end;

      end;
      SetLength(K,0);
      SetLength(T,0);
    end;
    Сообщение отредактировал SCRTR - 24.10.2012, 14:58
    Ответить Цитировать
    195/258
    + 0
  • Ну нельзя такие ужасы людям показывать. Их прятать нужно в spoil.
    Ответить Цитировать
    357/434
    + 0
  • AUMRAM @ 23.10.2012
    https://forum.gipsyteam.ru/index.php?viewtopic=43495&view=findpost&p=1889772

    Но это последнее. Были же и другие, причем параллельно проводимые мною и Виксом


    Contriver @ 23.10.2012
    А что там за числа то?
    Ответить Цитировать
    358/434
    + 0
  • Contriver @ 24.10.2012
    Ну нельзя такие ужасы людям показывать. Их прятать нужно в spoil.

    Спрятал.
    Просто, честно говоря, заебали. Каждый, с видом эксперта, считает своим долгом сообщить о своих сомнениях в корректности работы программы и при этом ни один не удосужился попросить исходники, чтобы самому попытаться найти возможную ошибку.
    Ответить Цитировать
    196/258
    + 2
  • Контрривер, это SCRTR лучше покажет, где постинги искать. Он был первый кто посчитал по 2-м симуляциям +5% если ставить именно на первом и втором спине после 600 невыпадений
    Ответить Цитировать
    1718/2439
    + 0
1 381 382 383 384 578
1 человек читает эту тему (1 гость):
Зачем регистрироваться на GipsyTeam?
  • Вы сможете оставлять комментарии, оценивать посты, участвовать в дискуссиях и повышать свой уровень игры.
  • Если вы предпочитаете четырехцветную колоду и хотите отключить анимацию аватаров, эти возможности будут в настройках профиля.
  • Вам станут доступны закладки, бекинг и другие удобные инструменты сайта.
  • На каждой странице будет видно, где появились новые посты и комментарии.
  • Если вы зарегистрированы в покер-румах через GipsyTeam, вы получите статистику рейка, бонусные очки для покупок в магазине, эксклюзивные акции и расширенную поддержку.