Jump to content

Мерсенн Твистер

Mersenne Twister общего назначения — генератор псевдослучайных чисел (ГПСЧ), разработанный в 1997 году Макото Мацумото [ ja ] ( Макото Мацумото ) и Такудзи Нисимура ( Takuji Nishimura ) . [1] [2] Его название происходит от выбора простого числа Мерсенна в качестве длины периода.

Mersenne Twister был разработан специально для исправления большинства недостатков, обнаруженных в старых ГПСЧ.

Наиболее часто используемая версия алгоритма Твистера Мерсенна основана на простом числе Мерсенна. . Стандартная реализация этого, MT19937, использует длину слова 32 бита . Есть еще одна реализация (пять вариантов). [3] ), использующий 64-битную длину слова, MT19937-64; он генерирует другую последовательность.

k -распределение [ править ]

Псевдослучайная последовательность - битных W целых чисел периода P называется k-распределенным с точностью до v -бита, если выполняется следующее.

Пусть trunc v ( x ) обозначает число, образованное старшими v битами x , и рассмотрим P k v . -битных векторов
.
Затем каждый из возможные комбинации битов встречаются одинаковое количество раз за период, за исключением комбинации всех нулей, которая встречается реже.

Алгоритмическая деталь [ править ]

Визуализация генерации псевдослучайных 32-битных целых чисел с использованием Mersenne Twister. В разделе «Извлечение числа» показан пример, где целое число 0 уже выведено, а индекс равен целому числу 1. «Создать числа» запускается, когда все целые числа были выведены.

Для длины слова w -бит Мерсенна Твистер генерирует целые числа в диапазоне .

Алгоритм Mersenne Twister основан на матричной линейной рекуррентности над конечным двоичным полем. . Алгоритм представляет собой регистр сдвига со скрученной обобщенной обратной связью. [4] (twisted GFSR, или TGFSR) рациональной нормальной формы (TGFSR(R)), с отражением и смягчением битов состояния. Основная идея состоит в том, чтобы определить ряд через простое рекуррентное соотношение, а затем выводить числа в виде , где T — обратимый -матрица называется матрицей закалки .

Общий алгоритм характеризуется следующими величинами:

  • w : размер слова (в битах)
  • n : степень рецидива
  • m : среднее слово, смещение, используемое в рекуррентном отношении, определяющем серию. ,
  • r : точка разделения одного слова или количество бит младшей битовой маски,
  • a : коэффициенты матрицы скручивания рациональной нормальной формы
  • b , c : Битовые маски смягчения TGFSR(R)
  • s , t : Сдвиг битов отпуска TGFSR(R)
  • u , d , l : дополнительные смены/маски закалочных долот Mersenne Twister

с тем ограничением, что является простым числом Мерсенна. Этот выбор упрощает тест на примитивность и тест на k -распределение , которые необходимы при поиске параметров.

Серия определяется как серия w -битных величин с рекуррентным соотношением:

где обозначает конкатенацию битовых векторов (со старшими битами слева), побитовое исключающее или (XOR), означает старшие w - r биты , и означает младшие r биты .

Все индексы могут быть смещены на -n.

где сейчас ЛХС, , — это следующее сгенерированное значение в серии с точки зрения значений, сгенерированных в прошлом, которые находятся в правой части.

Твист-преобразование A определяется в рациональной нормальной форме как:

с как идентификационная матрица. Преимущество рациональной нормальной формы состоит в том, что умножение на A можно эффективно выразить как: (помните, что здесь умножение матриц выполняется в , и поэтому место сложения занимает побитовое исключающее ИЛИ)
где это бит младшего порядка .

Как и в случае с TGFSR(R), «Твистер Мерсенна» каскадируется с умеренным преобразованием , чтобы компенсировать пониженную размерность равнораспределения (из-за того, что A находится в рациональной нормальной форме). Обратите внимание, что это эквивалентно использованию матрицы A , где для T обратимая матрица, и поэтому приведенный ниже анализ характеристического полинома остается в силе.

Как и в случае с A , мы выбираем смягчающее преобразование так, чтобы оно было легко вычислимым, и поэтому фактически не конструируем T само по себе. В случае Mersenne Twister этот отпуск определяется как

где это следующее значение из ряда, является временным промежуточным значением, и значение, возвращаемое алгоритмом, с и при побитовом сдвиге влево и вправо , и побитовое И. как Первое и последнее преобразования добавлены для улучшения равнораспределения младших разрядов. Из собственности ТГФСР, требуется для достижения верхней границы равнораспределения старших битов.

Коэффициенты для MT19937:

Обратите внимание, что 32-битные реализации Mersenne Twister обычно имеют d = FFFFFFFF 16 . В результате d иногда опускается в описании алгоритма, поскольку побитовое и с d в этом случае не имеет никакого эффекта.

Коэффициенты для MT19937-64: [5]

Инициализация [ править ]

Состояние, необходимое для реализации Mersenne Twister, представляет собой массив из n значений по w бит каждое. Для инициализации массива w -битное начальное значение. используется через установив до начального значения и после этого установка

для от к .

  • Первое значение, которое затем генерирует алгоритм, основано на , не на .
  • Константа f образует еще один параметр генератора, но не является частью самого алгоритма.
  • Значение f для MT19937 составляет 1812433253.
  • Значение f для MT19937-64 составляет 6364136223846793005. [5]

Код C [ править ]

#include <stdint.h>

#define n 624
#define m 397
#define w 32
#define r 31
#define UMASK (0xffffffffUL << r)
#define LMASK (0xffffffffUL >> (w-r))
#define a 0x9908b0dfUL
#define u 11
#define s 7
#define t 15
#define l 18
#define b 0x9d2c5680UL
#define c 0xefc60000UL
#define f 1812433253UL

typedef struct
{
    uint32_t state_array[n];         // the array for the state vector 
    int state_index;                 // index into state vector array
} mt_state;


void initialize_state(mt_state* state, uint32_t seed) 
{
    uint32_t* state_array = &(state->state_array[0]);
    
    state_array[0] = seed;                                  // suggested initial seed = 19650218UL
    
    for (int i=1; i<n; i++)
    {
        seed = f * (seed ^ (seed >> (w-2))) + i;    // Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier.
        state_array[i] = seed; 
    }
    
    state->state_index = 0;
}


uint32_t random_uint32(mt_state* state)
{
    uint32_t* state_array = &(state->state_array[0]);
    
    int k = state->state_index;      // point to current state location
    
//  int k = k - n;                   // point to state n iterations before
//  if (k < 0) k += n;               // modulo n circular indexing
                                     // the previous 2 lines actually do nothing
                                     //  for illustrative purposes only
    
    int j = k - (n-1);               // point to state n-1 iterations before
    if (j < 0) j += n;               // modulo n circular indexing

    uint32_t x = (state_array[k] & UMASK) | (state_array[j] & LMASK);
    
    uint32_t xA = x >> 1;
    if (x & 0x00000001UL) xA ^= a;
    
    j = k - (n-m);                   // point to state n-m iterations before
    if (j < 0) j += n;               // modulo n circular indexing
    
    x = state_array[j] ^ xA;         // compute next value in the state
    state_array[k++] = x;            // update new state value
    
    if (k >= n) k = 0;               // modulo n circular indexing
    state->state_index = k;          // 0 <= state_index <= n-1   always
    
    uint32_t y = x ^ (x >> u);       // tempering 
    y = y ^ ((y << s) & b);
    y = y ^ ((y << t) & c);
    uint32_t z = y ^ (y >> l);
    
    return z; 
}

с классической Сравнение GFSR

Чтобы достичь теоретический верхний предел периода в Т GFSR , должен быть примитивным полиномом , являющийся полиномом характеристическим

Преобразование твиста улучшает классический GFSR следующими ключевыми свойствами:

  • Период достигает теоретического верхнего предела (кроме случая, когда инициализировано значением 0)
  • Равнораспределение в n измерениях (например, линейные конгруэнтные генераторы в лучшем случае могут обеспечить разумное распределение в пяти измерениях)

Варианты [ править ]

CryptMT — это поточный шифр и криптографически безопасный генератор псевдослучайных чисел , который внутри использует Mersenne Twister. [6] [7] Он был разработан Мацумото и Нисимурой вместе с Марико Хагитой и Муцуо Сайто. Он был представлен проекту eSTREAM сети eCRYPT . [6] В отличие от Mersenne Twister или других его производных, CryptMT запатентован .

MTGP — это вариант Mersenne Twister, оптимизированный для графических процессоров, опубликованный Муцуо Сайто и Макото Мацумото. [8] Базовые операции линейной рекурсии расширены из MT, а параметры выбраны так, чтобы позволить множеству потоков вычислять рекурсию параллельно, одновременно разделяя свое пространство состояний для уменьшения нагрузки на память. В документе утверждается улучшенное равномерное распределение по сравнению с MT и производительность на старом графическом процессоре (2008 года выпуска) ( Nvidia GTX260 со 192 ядрами) на уровне 4,7 мс для 5×10. 7 случайные 32-битные целые числа.

SFMT ( SIMD -ориентированный быстрый вихрь Мерсенна) представляет собой вариант вихря Мерсенна, представленный в 2006 году. [9] спроектирован так, чтобы быть быстрым при работе на 128-битном SIMD.

  • Он примерно в два раза быстрее Mersenne Twister. [10]
  • Он имеет лучшее свойство равнораспределения точности v-бит, чем MT, но хуже, чем WELL («Well Equidistributed Long- period Linear») .
  • Он быстрее восстанавливается из начального состояния с нулевым превышением, чем MT, но медленнее, чем WELL.
  • Он поддерживает различные периоды от 2 607 − 1 к 2 216091  − 1.

Intel SSE2 и PowerPC AltiVec поддерживаются SFMT. Он также используется для игр с Cell BE на PlayStation 3 . [11]

TinyMT — это вариант Mersenne Twister, предложенный Сайто и Мацумото в 2011 году. [12] TinyMT использует всего 127 бит пространства состояний, что значительно меньше по сравнению с исходными 2,5 КиБ состояния. Однако он имеет период , намного короче оригинала, поэтому авторы рекомендуют его только в тех случаях, когда память ограничена.

Характеристики [ править ]

Преимущества:

  • Лицензионно-лицензированный и непатентованный для всех вариантов, кроме CryptMT.
  • Проходит многочисленные тесты на статистическую случайность, включая тесты Дайхарда и большинство, но не все, тестов TestU01 . [13]
  • Очень длительный период . Обратите внимание, что длительный период не является гарантией качества генератора случайных чисел, короткие периоды, такие как часто встречающийся во многих старых пакетах программного обеспечения, может быть проблематичным. [14]
  • k – распределяется с точностью до 32 бит для каждого (определение k -распределенного см. ниже )
  • Реализации обычно создают случайные числа быстрее, чем аппаратно реализованные методы. Исследование показало, что Mersenne Twister создает 64-битные случайные числа с плавающей запятой примерно в двадцать раз быстрее, чем аппаратно реализованный процессорный набор инструкций RDRAND . [15]

Недостатки:

  • Относительно большой буфер состояний, почти 2,5 КБ , если не используется вариант TinyMT.
  • Посредственная пропускная способность по современным стандартам, если не используется вариант SFMT (обсуждаемый ниже). [16]
  • Демонстрирует две явные ошибки (линейная сложность) в Crush и BigCrush в пакете TestU01. Тест, как и Mersenne Twister, основан на -алгебра. [13]
  • Множественные экземпляры, которые отличаются только начальным значением (но не другими параметрами), обычно не подходят для моделирования Монте-Карло , требующего независимых генераторов случайных чисел, хотя существует метод выбора нескольких наборов значений параметров. [17] [18]
  • Плохая диффузия: может потребоваться много времени, чтобы начать генерировать выходные данные, которые проходят тесты на случайность , если начальное состояние сильно неслучайно, особенно если начальное состояние имеет много нулей. Следствием этого является то, что два экземпляра генератора, запущенные с почти одинаковыми начальными состояниями, обычно выдают почти одну и ту же последовательность в течение многих итераций, прежде чем в конечном итоге разойдутся. В обновлении алгоритма MT от 2002 года улучшена инициализация, поэтому начало с такого состояния маловероятно. [19] Говорят, что версия с графическим процессором (MTGP) еще лучше. [20]
  • Содержит подпоследовательности, в которых нулей больше, чем единиц. Это добавляет к плохому свойству диффузии, что затрудняет восстановление из состояний со многими нулями.
  • Не является криптографически безопасным , если не CryptMT используется вариант (обсуждаемый ниже). Причина в том, что соблюдение достаточного количества итераций (624 в случае MT19937, поскольку это размер вектора состояния, из которого производятся будущие итерации) позволяет предсказать все будущие итерации.

Приложения [ править ]

Mersenne Twister используется в качестве ГПСЧ по умолчанию в следующем программном обеспечении:

Он также доступен в Apache Commons , [47] в стандартной библиотеке C++ (начиная с C++11 ), [48] [49] и в Математике . [50] Дополнительные реализации предоставляются во многих программных библиотеках, включая библиотеки Boost C++ . [51] библиотека CUDA , [52] и Цифровая библиотека NAG . [53]

Mersenne Twister — один из двух ГПСЧ в SPSS : другой генератор сохранен только для совместимости со старыми программами, а Mersenne Twister считается «более надежным». [54] Mersenne Twister также является одним из PRNG в SAS : остальные генераторы устарели и устарели. [55] Mersenne Twister — это PRNG по умолчанию в Stata , другой — KISS , для совместимости со старыми версиями Stata. [56]

Альтернативы [ править ]

Альтернативный генератор WELL («Well Equidistributed Long- period Linear») предлагает более быстрое восстановление, равную случайность и почти равную скорость. [57]

Марсальи Генераторы и варианты xorshift являются самыми быстрыми в классе LFSR. [58]

64-битные MELG («64-битные максимально равнораспределенные -Линейные генераторы с простым периодом Мерсенна") полностью оптимизированы с точки зрения свойств k -распределения. [59]

Семейство ACORN (опубликовано в 1989 г.) — это еще один PRNG с k -распределением, который демонстрирует скорость вычислений, аналогичную MT, и лучшие статистические свойства, поскольку удовлетворяет всем текущим (2019 г.) критериям TestU01; при использовании с соответствующим выбором параметров ACORN может иметь сколь угодно большой период и точность.

Семейство PCG — это более современный генератор с большим периодом, с лучшей локальностью кэша и менее заметной предвзятостью с помощью современных методов анализа. [60]

Ссылки [ править ]

  1. ^ Мацумото, М.; Нисимура, Т. (1998). «Твистер Мерсенна: 623-мерный равнораспределенный равномерный генератор псевдослучайных чисел» . ACM-транзакции по моделированию и компьютерному моделированию . 8 (1): 3–30. CiteSeerX   10.1.1.215.1141 . дои : 10.1145/272991.272995 . S2CID   3332028 .
  2. ^ Например, Марсланд С. (2011) Машинное обучение ( CRC Press ), §4.1.1. Также смотрите раздел «Внедрение в программные системы».
  3. ^ Джон Савард. «Смерч Мерсенна» . Последующая статья, опубликованная в 2000 году, представила пять дополнительных форм вихря Мерсенна с периодом 2^19937-1. Все пять были разработаны для реализации 64-битной арифметики вместо 32-битной.
  4. ^ Мацумото, М.; Курита, Ю. (1992). «Витые генераторы GFSR» . ACM-транзакции по моделированию и компьютерному моделированию . 2 (3): 179–194. дои : 10.1145/146382.146383 . S2CID   15246234 .
  5. ^ Jump up to: а б "std::mersenne_twister_engine" . Генерация псевдослучайных чисел . Проверено 20 июля 2015 г.
  6. ^ Jump up to: а б «CryptMt и Фубуки» . ЭКРИПТ . Архивировано из оригинала 1 июля 2012 г. Проверено 12 ноября 2017 г.
  7. ^ Мацумото, Макото; Нисимура, Такудзи; Хаггит, Марк; Сайто, Муцуо (2005). «Криптографический поток Мерсенна и блочный шифр Фубуки» (PDF) .
  8. ^ Муцуо Сайто; Макото Мацумото (2010). «Варианты Mersenne Twister, подходящие для графических процессоров». arXiv : 1005.4973v3 [ cs.MS ].
  9. ^ «SIMD-ориентированный быстрый вихрь Мерсенна (SFMT)» . Хиросима-u.ac.jp . Проверено 4 октября 2015 г.
  10. ^ «SFMT:Сравнение скорости» . Хиросима-u.ac.jp . Проверено 4 октября 2015 г.
  11. ^ «Лицензия PlayStation3» . scei.co.jp. ​Проверено 4 октября 2015 г.
  12. ^ «Крошечный Твистер Мерсенна (TinyMT)» . Хиросима-u.ac.jp . Проверено 4 октября 2015 г.
  13. ^ Jump up to: а б П. Л'Экуйер и Р. Симард, « TestU01: «Библиотека AC для эмпирического тестирования генераторов случайных чисел », Транзакции ACM в математическом программном обеспечении , 33, 4, статья 22 (август 2007 г.).
  14. ^ Примечание: 2 19937 составляет примерно 4,3 × 10 6001 ; это на много порядков больше предполагаемого числа частиц в наблюдаемой Вселенной , которое составляет 10 87 .
  15. ^ Рут, Мэтью (10 августа 2017 г.). «Синтез популяции ультрахолодных карликов с помощью радиовспышек» . Астрофизический журнал . 845 (1): 66. arXiv : 1707.02212 . Бибкод : 2017ApJ...845...66R . дои : 10.3847/1538-4357/aa7ede . S2CID   118895524 .
  16. ^ «SIMD-ориентированный Fast Mersenne Twister (SFMT): в два раза быстрее, чем Mersenne Twister» . Японское общество содействия науке . Проверено 27 марта 2017 г.
  17. ^ Макото Мацумото; Такудзи Нисимура. «Динамическое создание генераторов псевдослучайных чисел» (PDF) . Проверено 19 июля 2015 г.
  18. ^ Хироши Харамото; Макото Мацумото; Такудзи Нисимура; Франсуа Паннетон; Пьер Л'Экуайер. «Эффективный скачок вперед для F2-линейных генераторов случайных чисел» (PDF) . Проверено 12 ноября 2015 г.
  19. ^ "mt19937ar: Mersenne Twister с улучшенной инициализацией" . Хиросима-u.ac.jp . Проверено 4 октября 2015 г.
  20. ^ Туман, Агнер (1 мая 2015 г.). «Генератор псевдослучайных чисел для векторных и многоядерных процессоров» . Журнал современных прикладных статистических методов . 14 (1): 308–334. дои : 10.22237/jmasm/1430454120 .
  21. ^ «Случайная ссылка» . Справочное руководство по языку Dialog . Проверено 4 июня 2020 г.
  22. ^ «СЛУЧАЙНО (ссылка IDL)» . Центр документации Exelis VIS . Проверено 23 августа 2013 г.
  23. ^ «Генератор случайных чисел» . Представление задач CRAN: распределения вероятностей . Проверено 29 мая 2012 г.
  24. ^ « Документация класса «Случайный»» . Документация Ruby 1.9.3 . Проверено 29 мая 2012 г.
  25. ^ "случайный" . бесплатная документация по Паскалю . Проверено 28 ноября 2013 г.
  26. ^ «mt_rand — Генерирует лучшее случайное значение» . Руководство по PHP . Проверено 2 марта 2016 г.
  27. ^ «Примечания к выпуску NumPy 1.17.0 — Руководство по NumPy v1.21» . numpy.org . Проверено 29 июня 2021 г.
  28. ^ «9.6 случайный — Генерация псевдослучайных чисел» . Документация Python v2.6.8 . Проверено 29 мая 2012 г.
  29. ^ «8.6 случайный — Генерация псевдослучайных чисел» . Документация Python v3.2 . Проверено 29 мая 2012 г.
  30. ^ «random — Генерация псевдослучайных чисел — документация Python 3.8.3» . Документация Python 3.8.3 . Проверено 23 июня 2020 г.
  31. ^ «Выбор дизайна и расширения» . Руководство пользователя CMUCL . Проверено 3 февраля 2014 г.
  32. ^ «Случайные состояния» . Руководство по ECL . Проверено 20 сентября 2015 г.
  33. ^ «Генерация случайных чисел» . Руководство пользователя СБКЛ .
  34. ^ «Случайные числа · Язык Джулии» . docs.julialang.org . Проверено 21 июня 2022 г.
  35. ^ «Случайные числа: Справочное руководство GLib» .
  36. ^ «Алгоритмы случайных чисел» . ГНУ МП . Проверено 21 ноября 2013 г.
  37. ^ «16.3 Специальные матрицы полезности» . GNU Октава . Встроенная функция: рандом
  38. ^ «Случайные числа переменных среды» . Научная библиотека ГНУ . Проверено 24 ноября 2013 г.
  39. ^ Мелар, Г. (2014), «О точности статистических процедур в Microsoft Excel 2010», Computational Статистика , 29 (5): 1095–1128, CiteSeerX   10.1.1.455.5508 , doi : 10.1007/s00180-014-0482- 5 , S2CID   54032450 .
  40. ^ «Справочник по языку GAUSS 14» (PDF) .
  41. ^ « Униформа ». Справочник по функциям Gretl .
  42. ^ «Новый генератор случайных чисел — 64-битный Mersenne Twister» .
  43. ^ «Распределение вероятностей — Справочное руководство Sage v7.2: Вероятность» .
  44. ^ "гранд - Случайные числа" . Справка по Scilab .
  45. ^ «генератор случайных чисел» . Онлайн-справка Maple . Проверено 21 ноября 2013 г.
  46. ^ «Алгоритмы генератора случайных чисел» . Центр документации MathWorks .
  47. ^ «Генерация данных» . Руководство пользователя Apache Commons Math .
  48. ^ «Генерация случайных чисел в C++11» (PDF) . Стандартная основа C++ .
  49. ^ "std::mersenne_twister_engine" . Генерация псевдослучайных чисел . Проверено 25 сентября 2012 г.
  50. ^ [1] Документация Mathematica
  51. ^ "boost/random/mersenne_twister.hpp" . Библиотеки Boost C++ . Проверено 29 мая 2012 г.
  52. ^ «Обзор API хоста» . Документация по набору инструментов CUDA . Проверено 2 августа 2016 г.
  53. ^ «G05 — Генераторы случайных чисел» . Введение в главу библиотеки NAG . Проверено 29 мая 2012 г.
  54. ^ «Генератор случайных чисел» . Статистика IBM SPSS . Проверено 21 ноября 2013 г.
  55. ^ «Использование функций случайных чисел» . Справочник по языку SAS . Проверено 21 ноября 2013 г.
  56. ^ Справка по Stata: set rng — укажите, какой генератор случайных чисел (ГСЧ) использовать.
  57. ^ П. Л'Экуйер, «Генератори равномерных случайных чисел», Международная энциклопедия статистических наук , Ловрик, Миодраг (ред.), Springer-Verlag, 2010.
  58. ^ «Генераторы xorshift*/xorshift+ и перестрелка PRNG» .
  59. ^ Харасе, С.; Кимото, Т. (2018). «Реализация 64-битных максимально равнораспределенных F 2 -линейных генераторов с простым периодом Мерсенна» . Транзакции ACM в математическом программном обеспечении . 44 (3): 30:1–30:11. arXiv : 1505.06582 . дои : 10.1145/3159444 . S2CID   14923086 .
  60. ^ «Бумага ПКГ» . 27 июля 2017 г.

Дальнейшее чтение [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: b55e802f61f982f96b445b7405838589__1717775340
URL1:https://arc.ask3.ru/arc/aa/b5/89/b55e802f61f982f96b445b7405838589.html
Заголовок, (Title) документа по адресу, URL1:
Mersenne Twister - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)