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

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




На страницу Пред.  1 ... 8, 9, 10, 11, 12, 13  След.
 Re: Кортежи из простых чисел
Аватара пользователя
Благодарю. Скачал. Убунта здесь не поможет?

wrest в сообщении #1728070 писал(а):
Не понял о чём вы.

Да, это я невнимателен, порядок вроде правильный. Просто у вас представление чисел классическое, с точкой.

wrest в сообщении #1728070 писал(а):
Нормально считает кортежи длиной до 800, потом надо сильно увеличивать объём выборки.

Такой длины хватит за все глаза. Правда, подозреваю, что вы перепутали длину и диаметр.

 Re: Кортежи из простых чисел
Аватара пользователя
Всё-таки к сожалению, видимо имеет место критическая потеря точности. Для 79# есть схождение после 26-й константы:

(0 — 79#)

Код:
0 — 79#

0 —    3.21764 e30
Primes 4.64767 e28

Average gap 69

3-420-1   Constant

1.66408 e26      1
-8.06985 e26     2
1.98842 e27      3
-3.26532 e27     4
4.00245 e27      5
-3.88894 e27     6
3.11489 e27      7
-2.10976 e27     8
1.23330 e27      9
-6.30115 e26    10
2.85712 e26     11
-1.15038 e26    12
4.23500 e25     13
-1.34926 e25    14
4.50854 e24     15
-7.88339 e23    16
6.40309 e23     17
2.85877 e23     18
3.67007 e23     19
3.49827 e23     20
3.53201 e23     21
3.52585 e23     22
3.52690 e23     23
3.52673 e23     24
3.52676 e23     25
3.52675 e23     26
3.52675 e23     27
3.52675 e23     28
3.52676 e23     29
3.52675 e23     30
3.52675 e23     31
3.52675 e23     32
3.52675 e23     33

А для 73# примерно с этого же места пошёл расколбас:

(0 — 73#)

Код:
0 — 73#

0 —    4.07297 e28
Primes 6.27955 e26

Average gap 65

3-420-1   Constant

2.56182 e24     1
-1.34348 e25     2
3.56067 e25     3
-6.27910 e25     4
8.25316 e25     5
-8.59374 e25     6
7.37080 e25     7
-5.34528 e25     8
3.34311 e25     9
-1.82852 e25     10
8.85902 e24     11
-3.82662 e24     12
1.49464 e24     13
-5.22075 e23     14
1.72386 e23     15
-4.59234 e22     16
1.69867 e22     17
3.09892 e20     18
4.38926 e21     19
3.46600 e21     20
3.65983 e21     21
3.62195 e21     22
3.62894 e21     23
3.62759 e21     24
3.62804 e21     25
3.62767 e21     26
3.62809 e21     27
3.62762 e21     28
3.62812 e21     29
3.62761 e21     30
3.62810 e21     31
3.62766 e21     32
3.62803 e21     33

Ну и для актуального 61# уже пошла самая настоящая хрень:

(0 — 61#)

Код:
0 — 61#

0 —    1.17288 e23
Primes 2.25126 e21

Average gap 52

3-420-1   Constant

1.42413 e19     1
-9.65189 e19     2
3.26492 e20     3
-7.31024 e20     4
1.21539 e21     5
-1.59726 e21     6
1.72585 e21     7
-1.57512 e21     8
1.23835 e21     9
-8.51275 e20     10
5.17690 e20     11
-2.81124 e20     12
1.37404 e20     13
-6.07968 e19     14
2.45232 e19     15
-9.02264 e18     16
3.07662 e18     17
-9.45017 e17     18
2.99329 e17     19
-7.66631 e16     20
6.38478 e16     21
-4.08081 e16     22
9.42764 e16     23
-9.92435 e16     24
1.67877 e17     25
-1.79185 e17     26
2.44035 e17     27
-2.40402 e17     28
2.80220 e17     29
-2.45439 e17     30
2.53327 e17     31
-1.91430 e17     32
1.81281 e17     33

Возможно, поможет более долгий счёт с целью повышения точности, но это надо разобраться как запускать.

wrest, если будете ещё запускать, конечно же выводите СКО, зря убрали, это было очень наглядно.

Напомню ёлочку без кэфов, то есть актуальные, самые интересные паттерны:

Код:
                0
              0  210
            0  210  420
          0  210  420  630
        0  210  420  630  840
      0  210  420  630  840 1050
    0  210  420  630  840 1050 1260

 Re: Кортежи из простых чисел
Аватара пользователя
Так, часть вопросов снимаю. ИИ не совсем бестолковый, он прочитал ваш пост и многое подсказал. Вот результаты первого запуска в Убунте:

Код:
yadryara@DESKTOP-QPP2F5P:~/hl1_project$ ./hl1_mc5 --size 1M 30 0 210 420
Кортеж: 3 обязательных, 208 допустимых загрязнений, 0 исключено
d=420 nx=208 mask_words=4 primes=45 samples=1000000 alpha_high=2.0 log_total=184.615
Прогон 1: SIS равномерный (alpha=0)...
  [100%] ETA: 0s       threads=12
Выжило: 1000000 / 1000000 (100.00%)
Прогон 2: SIS IS (alpha=2.0)...
  [100%] ETA: 0s       threads=12
Выжило: 1000000 / 1000000 (100.00%)
Результат: 31 достоверных коэффициентов (err<100%), 31 ненулевых бинов (из 31 возможных)
[1.503494790225349e+80, 6.30579e+81, 1.2944e+83, 1.7415e+84, 1.7293e+85, 1.3516e+86, 8.6543e+86, 4.6658e+87, 2.1605e+88, 8.7229e+88, 3.1074e+89, 9.861e+89, 2.809e+90, 7.233e+90, 1.692e+91, 3.615e+91, 7.080e+91, 1.276e+92, 2.121e+92, 3.262e+92, 4.653e+92, 6.168e+92, 7.611e+92, 8.755e+92, 9.399e+92, 9.430e+92, 8.85e+92, 7.76e+92, 6.38e+92, 4.91e+92, 3.53e+92]
[0.0000, 0.0079, 0.0159, 0.0241, 0.0327, 0.0416, 0.0509, 0.0608, 0.0714, 0.0829, 0.0954, 0.1092, 0.1245, 0.1418, 0.1615, 0.1841, 0.2103, 0.2410, 0.2773, 0.3206, 0.3726, 0.4357, 0.5128, 0.6075, 0.7245, 0.8694, 1.0494, 1.2729, 1.5498, 1.8910, 2.3068]
yadryara@DESKTOP-QPP2F5P:~/hl1_project$


-- добавлено через 24 минуты --

Более подробный разбор:

Код:
Кортеж: 3 обязательных, 208 допустимых загрязнений, 0 исключено

Ну это вроде понятно: длина паттерна 3, 420/2+1-3 = 208 свободных чётных мест. Ничего не исключено и не надо пока :-)

Код:
d=420 nx=208 mask_words=4 primes=45 samples=1000000 alpha_high=2.0 log_total=184.615

Диаметр 420, мест 208. Про маску не понял пока. Простых 45.

? primepi(420/2)
%1 = 46

Ну да, простых до радиуса 46, а 2-ка учтена чётностью мест. Значит остаётся 45 простых модулей.

Три следующих параметра пока не понимаю. Какой-то лям проверяется...

Код:
Прогон 1: SIS равномерный (alpha=0)...
  [100%] ETA: 0s       threads=12
Выжило: 1000000 / 1000000 (100.00%)
Прогон 2: SIS IS (alpha=2.0)...
  [100%] ETA: 0s       threads=12
Выжило: 1000000 / 1000000 (100.00%)

Ну, здесь понятно только то, что лям этот в два прогона проверился и что мои 12 потоков использовались.

Код:
Результат: 31 достоверных коэффициентов (err<100%), 31 ненулевых бинов (из 31 возможных)

Пока непонятно как достоверность проверялась, но понятно что достоверных лишь половина, потому что всего 61 число.

Код:
[0.0000, 0.0079, 0.0159, 0.0241, 0.0327, 0.0416, 0.0509, 0.0608, 0.0714, 0.0829,
0.0954, 0.1092, 0.1245, 0.1418, 0.1615, 0.1841, 0.2103, 0.2410, 0.2773, 0.3206,
0.3726, 0.4357, 0.5128, 0.6075, 0.7245, 0.8694, 1.0494, 1.2729, 1.5498, 1.8910,
2.3068]

А теперь понятно, разбил по 10 в строке и увидел, что СКО стало больше 2-х. То есть здесь не проценты, как раньше, а доли от 1-цы. Тогда да, если СКО уже больше 2-х, то погрешность превысила 100%. Но тогда непонятно почему 31 годное число, а не 30.

Ну вроде понял: да, всё-таки проценты.

 Re: Кортежи из простых чисел
Yadryara в сообщении #1728083 писал(а):
Про маску не понял пока.

Это служебное. 4 слова на битовую маску. Не обращайте внимания.

-- добавлено через 12 минут --

Yadryara в сообщении #1728083 писал(а):
Три следующих параметра пока не понимаю. Какой-то лям проверяется...

samples - это объём выборки. Считается же по Монте-Карло.
alpha_high - это парамеетр для смещения второго прохода, в котором должно больше попадать на старшие бины. служебный параметр, не обращайте внимания.
log_total - это я присматривал за потерей точности. Максимальный логарифм биномиального коэффициента, служебный параметр. Не обращайте внимания.
Yadryara в сообщении #1728083 писал(а):
Пока непонятно как достоверность проверялась

По СКО меньше 100%
Yadryara в сообщении #1728083 писал(а):
но понятно что достоверных лишь половина, потому что всего 61 число.
При запуске MAXN зададано 30, поэтому выдалось 31 число (счёт с нуля).
То есть если задать MAXN побольше, то и чисел напечатается больше. А вот тотчто программа пишет "из возможных" -- я как раз и спрашивал тут сколько их, вы меня послали читать тему. Я читать не стал, так что сколько возможных считать не умею, и программа печатает в этом месте фигню.
Yadryara в сообщении #1728083 писал(а):
То есть здесь не проценты, как раньше, а доли от 1-цы.
Нет, именно проценты.

Есть арифметический косяк в алгоритме. У A[0] СКО всегда получается ноль, хотя и не должен бы, поэтому верить всем згачащам цифрам не надо. Но вроде 7-8 значащих цифр при выборке в миллион получается норм.
Хотя вот по тем кортежам где были приведены точные значения, A[0] попало 12 значащими цифрами.

-- добавлено через 30 минут --

Yadryara в сообщении #1728083 писал(а):
Выжило: 1000000 / 1000000 (100.00%)

Из-за того что я перешёл от простого Монте-Карло на на метод SIS ("Выборка по значимости", см. Вики), выживать (попадать в одну из корзин) стали всегда или почти всегда все пробные замеры.
В общем, это технический параметр, показывает "качество" выборки, он всегда 100% :)

-- добавлено через 18 минут --

Yadryara в сообщении #1728081 писал(а):
если будете ещё запускать, конечно же выводите СКО, зря убрали, это было очень наглядно.

По умолчанию, печатается количество значащих цифр с учётом СКО плюс одна цифра. Так что СКО как бы "зашиты" в вывод чисел. Если число выводится как 1.2345+e30, то верить можно четырём цифрам, а если печатается 1.2+e30 то верить можно порядку величины.

 Re: Кортежи из простых чисел
Аватара пользователя
Ну да, многое я уже понял и поправил пост ещё до вашего ответа. Запустил на 4 часа 1 ярд:

Код:
./hl1_mc5 --size 1G 40 0 210 420
Кортеж: 3 обязательных, 208 допустимых загрязнений, 0 исключено
d=420 nx=208 mask_words=4 primes=45 samples=1000000000 alpha_high=2.0 log_total=184.615
Прогон 1: SIS равномерный (alpha=0)...
  [ 78%] ETA: 23m12s   threads=12

Надеюсь, вы столько ещё не считали.

Попросил ИИ детально разобрать код. Пришлось пересылать ему код аж 6-ю частями.

Вот начало разбора, если неправильно сразу скажите:

Цитата:
Вот теперь перед нами лежит настоящий, «боевой» исходный код на Си от автора wrest. Кардинальное отличие этого кода от простого перебора КТО заключается в том, что программа не перебирает остатки, а кидает случайные кубики (сэмплы), используя мощь теории вероятностей и многопоточности процессора.
Давайте разберём алгоритм hl1_mc5.c абсолютно пошагово, «на пальцах», на примере вашего простейшего паттерна 0 12.
------------------------------

## Геометрия задачи для 0 12
Когда вы запускаете программу, она первым делом анализирует паттерн:

* Диаметр ($d$): 12.
* Обязательные элементы: 2 элемента (это числа 0 и 12).
* Пространство допустимых загрязнений ($n\_x$): Программа находит все чётные числа между 0 и 12. Это числа: 2, 4, 6, 8, 10. Итого: 5 свободных мест.

Для компьютера эти 5 свободных мест — это просто массив X_arr из 5 ячеек, а текущее состояние этих мест кодируется битовой маской bitmask_t (где 5 бит отвечают за то, «живо» место или «убито» простыми числами).
------------------------------

## Шаг 1: Сито простых чисел (Подготовка масок)
В самом начале программа строит массив простых чисел до определенного лимита (в коде primes_arr). Для каждого простого числа $p$ (например, $p=3$ или $p=5$) алгоритм вычисляет, какие остатки оно выжигает, и привязывает к каждому остатку битовую маску masks:

* Если остаток по модулю $p$ накрывает свободное место из нашего списка 2, 4, 6, 8, 10, соответствующий бит в маске устанавливается в 1 (это значит «место занято/убито»).


-- добавлено через 40 минут --

Ну так и знал: автор делает ровно наоборот, а не так как по моей логике. Живые места должны иметь 1, а у автора наоборот??

Код:
Позиции битов:   ...  4  3  2  1  0    (номер бита в памяти)
Элементы X_arr:  ...  5  4  3  2  1    (деленные на 2 свободные места)
Числа в кортеже: ... 10  8  6  4  2    (реальные чётные места)
------------------------------------
Маска masks[0]:  ...  0  1  0  0  1    (Запрещены 2 и 8, если остаток 1) -> число 9
Маска masks[1]:  ...  1  0  0  1  0    (Запрещены 4 and 10, если остаток 2) -> число 18

ИИ писал(а):
Вы абсолютно правы, вашё математическое чутьё вас не подвело! Автор делает именно так, как вы заметили: в его масках простых чисел 1 означает «запрещено/убито», а 0 означает «разрешено/живо».
Давайте разберем, почему автор пошел по такому пути. Это не ошибка, а чистая инженерная хитрость, связанная с тем, как устроен микропроцессор компьютера (x86 или ARM).

 Re: Кортежи из простых чисел
Yadryara в сообщении #1728090 писал(а):
Надеюсь, вы столько ещё не считали.

Попросил ИИ детально разобрать код. Пришлось пересылать ему код аж 6-ю частями.

Нет, большие выборки я не считал в этой программе, очень долго. До неё (а это 5-я версия) был "обычный" Монте-Карло, он быстрее но точность сильно хуже на той же выборке, вот там приходилось смотреть на объём 10^9, а тут это очень затратно при том что в теме говорили что большая точность не нужна.
Выборку придётся увеличивать на больших диаметрах и/или "плотных" паттернах где много запретов и пространство допустимых конфигураций сжатое.

Теоретически, СКО должно падать как корень квадратный от объема выборки, то есть при увеличении выборки в 10 раз СКО упадет в 3 раза, но поскольку тут не простой Монте-Карло, а "Выборка по значению", причём в два прохода -- первый проход равномерный а второй проход смещён в сторону "хвоста" распределения чтобы точнее посчитать правые (с бОльшими номерами) A[j], то предсказать как будет падать СКО не берусь :)

Я уверен, что ИИ вам расскажет про алгоритм всё правильно. Потому, что код писал другой ИИ, и они друг друга поймут :) Плюс, там есть короткие комментарии в исходнике.

-- добавлено через 5 минут --

Yadryara в сообщении #1728090 писал(а):
Это не ошибка, а чистая инженерная хитрость, связанная с тем, как устроен микропроцессор компьютера (x86 или ARM).

Это совсем уж технические подробности, про __builtin_popcount, это для темы ускорения :) Вероятно, вам будет интересно разобраться, но это не алгоритмический вопрос, а скоростной.

Да, из возможных путей ускорения без кардинальной переработки -- это подсчёты биномиальных коэффициентов арифметикой произвольной точности (GMP) вместо постоянного логарифмирования чтобы не было переполнения, но выигрыш там ожидается небольшой так что я не стал заморачиваться. Плюс, это будет использованим внешней библиотеки GMP, которая есть у вас в линуксе, но для венды (чтобы сделать .exe) может быть проблемой.

Для вас: вам надо спросить у ИИ про правильную команду компиляции, какой ключ ставить вместо -march=skylake потому что у вас не skylake, но судя по тому что у вас запустилось, ИИ вам уже подсказал.

Если вы захотите использовать эту программу совместно с pari, то можно запилить версию которая встанет в pari как внешняя функция (но тут я не уверен в многопоточности). Сейчас, вывод постороннего текста сделан в буфер stderr, а вывод результата в stdout, так что проинтегрировать с pari можно через командную строку и чтение только stdout (ИИ подскажет как).

 Re: Кортежи из простых чисел
Аватара пользователя
wrest в сообщении #1728097 писал(а):
это очень затратно при том что в теме говорили что большая точность не нужна.

Надеюсь, вы видели, я выше приводил расчёт.

Целевые праймориалы, это 59# и 61#. См.
https://www.pzktupel.de/CPAP/mini.php#xN

Для двоек, то есть для паттерна [0, 210] с той точностью вполне хватило, 20 констант, а ведь я взял первую вашу порцию, а не вторую, уточнённую.

А для троек, то есть для паттерна [0, 210, 420] и 30 констант может хватить, но нужна бо&769#льшая точность. Той точности что у вас, хватило на интервал 0 — 79#, а нужны интервалы 0 — 59# и 0 — 61#.

То есть априори неясно какая нужна точность, нужно пытаться считать и смотреть на сходимость.

-- добавлено через 53 минуты --

Нет, даже счёт до миллиарда не помог, хотя точность возросла:

Код:
[1.503494790241288e+80, 6.335720e+81, 1.311466e+83, 1.777506e+84, 1.77417e+85, 1.39065e+86, 8.91431e+86, 4.80520e+87, 2.22287e+88, 8.96196e+88, 3.18738e+89, 1.00979e+90, 2.87242e+90, 7.38523e+90, 1.72584e+91, 3.68311e+91, 7.20737e+91, 1.29782e+92, 2.15701e+92, 3.31779e+92, 4.7339e+92, 6.2784e+92, 7.7538e+92, 8.9313e+92, 9.6080e+92, 9.6649e+92, 9.1005e+92, 8.0284e+92, 6.6408e+92, 5.1537e+92, 3.7546e+92, 2.5688e+92, 1.651e+92, 9.971e+91, 5.659e+91, 3.018e+91, 1.513e+91, 7.125e+90, 3.154e+90, 1.313e+90, 5.143e+89]
[0.0000, 0.0002, 0.0005, 0.0008, 0.0010, 0.0013, 0.0016, 0.0019, 0.0022, 0.0026, 0.0030, 0.0034, 0.0039, 0.0044, 0.0050, 0.0058, 0.0066, 0.0075, 0.0086, 0.0099, 0.0115, 0.0134, 0.0158, 0.0186, 0.0221, 0.0265, 0.0320, 0.0390, 0.0478, 0.0591, 0.0737, 0.0927, 0.1173, 0.1495, 0.1916, 0.2468, 0.3184, 0.4080, 0.5070, 0.5718, 0.5283]

Даже частичные суммы для 0 — 73# толком не сходятся.

 Re: Кортежи из простых чисел
Yadryara в сообщении #1728099 писал(а):
Надеюсь, вы видели, я выше приводил расчёт.

Целевые праймориалы, это 59# и 61#. См.

Большинство ваших постов для меня загадка, так что я видел но смысла не понял и никакого вывода не сделал.

Мне не очень интересна собственно кортежная тема, я рассматриваю расчёт этих безымянных коэффициентов исключительно как алгоритмическое упражнение, а что с ними будет дальше я не знаю. Поэтому ориентируюсь на ваши и других участников ответы на мои прямые вопросы, а не отслеживаю обсуждение. Говорилось, что точность в несколько знаков достаточна. Хорошо - тогда Монте-Карло подходит, это всё что мне надо было знать :)

Для точного расчёта у вас уже есть хорошая программа на асме, я тоже написал (на Си), но похуже. Так что её не выкладываю.

Помимо размера выборки (опция --size при запуске), можно ещё попробовать менять параметр ALPHA_HIGH на втором прогоне, но тут я не пробовал. Он влияет на подсчёт "хвоста", чтобы можно было выровнять СКО вдоль гистограммы.
Можно попробовать с ALPHA_HIGH=1.5 и ALPHA_HIGH=1.0 (первый прогон делается несмещённым, с ALPHA_HIGH=0) и посмотреть как повлияет на СКО в правых коэффициентах. Сейчас это хардкод, так что или перекомпилируйте (с добавлением ключа -DALPHA_HIGH=1.0 в команду компиляции), или сделайте опцией при запуске.

Да, ещё вот что: Я бы посоветовал, поскольку у вас есть точные расчёты каких-то паттернов, таки сравнить их с теми, что даёт Монте-Карло. Выполняются ли обещания в виде СКО, действительно ли получаются значения с той точностью что прогнозируется. Всё-таки метод "Выборка по значению", да ещё и двухпроходный с экспоненциальным смещением на втором проходе и склейкой, дело такое... Мало ли что.
Напомню, что СКО показывает, что истинное значение [нормально распределённой] величины с вероятностью 68% не выходит за СКО (это "одна сигма") Так что 7 из 10 вычисленных по Монте-Карло значений должны уложиться в СКО, и 9 из 10 - в два СКО (две сигмы).

 Re: Кортежи из простых чисел
Yadryara в сообщении #1728090 писал(а):
Ну да, многое я уже понял и поправил пост ещё до вашего ответа. Запустил на 4 часа 1 ярд:

Кстати. Хотел сказать, что время работы от MAXN не зависит, этот параметр участвует только в финальном подсчёте коэффициентов (очень быстро) и их выводе. Так что считаться будет одинаково долго при MAXN=0 и MAXN=999, поскольку выборка всё равно будет раскладываться по всем n_x корзинам (количество допустимых загрязнений) в любом случае.

 Re: Кортежи из простых чисел
Аватара пользователя
wrest в сообщении #1728107 писал(а):
Большинство ваших постов для меня загадка,

Ну вот, а я-то дурак радовался, что wrest перестал жаловаться, что ему ничего не понятно, а оно вона как...

wrest в сообщении #1728107 писал(а):
Для точного расчёта у вас уже есть хорошая программа на асме, я тоже написал (на Си), но похуже.

А вы видели программу на PARI и поправки для этой программы тоже на PARI? Понимаете, что ускорение почти вдвое достигается не за счёт архитектуры, а по комбинаторной причине, за счёт использования симметрии и сокращения перебора почти вдвое?

wrest в сообщении #1728107 писал(а):
Я бы посоветовал, поскольку у вас есть точные расчёты каких-то паттернов, таки сравнить их с теми, что даёт Монте-Карло.

А вы думаете, я этого не делал??? Ну что я совсем ку-ку что ли. Я для двоек оставил гораздо более точные 13 констант и взял только 7 ваших.

Но... мне понравилось, что когда я взял все 20 ваши, то первые 6 цифр интеграла всё равно совпали после подсчёта про 13 константам!

Для троек, как уже писал, у меня уже меньше: только 9 точных констант. А нужно наоборот больше — не 20, а ориентировочно 30.

wrest в сообщении #1728107 писал(а):
Помимо размера выборки (опция --size при запуске), можно ещё попробовать менять параметр ALPHA_HIGH на втором прогоне, но тут я не пробовал.

Конечно это в планах у меня: Монтю пока не трогать, а Карлу подсократить.

wrest в сообщении #1728126 писал(а):
Так что считаться будет одинаково долго при MAXN=0 и MAXN=999,

И это я тоже уже давно понял, я же делал короткие пробные запуски.

Я и так взял этот параметр 40 — с запасом.

 Re: Кортежи из простых чисел
wrest в сообщении #1728126 писал(а):
Так что считаться будет одинаково долго при MAXN=0 и MAXN=999
Вообще уход от рекурсии и соответственно комбинаторного взрыва - это очень круто! :appl:

 Re: Кортежи из простых чисел
Yadryara в сообщении #1728132 писал(а):
А вы видели программу на PARI и поправки для этой программы тоже на PARI? Понимаете, что ускорение почти вдвое достигается не за счёт архитектуры, а по комбинаторной причине, за счёт использования симметрии и сокращения перебора почти вдвое?

Я ваши не смотрел, но у меня в точном рассчёте симметричные считаются в два раза быстрее, да.

-- добавлено через 12 минут --

Dmitriy40 в сообщении #1728133 писал(а):
Вообще уход от рекурсии и соответственно комбинаторного взрыва - это очень круто!

Но это ценой заметного ухудшения погрешности хвоста, из-за редкости попадания выборки в него. Некоторые меры предприняты, но радикально улучшить не получается. Хотя вот манипуляция величиной экпоненциального наклона распределения на втором проходе может и поможет ещё немного. Но думаю что опять же - не радикально.

 Re: Кортежи из простых чисел
Аватара пользователя
wrest, присоединяюсь :appl:

Кстати, я не понял, почему альфа именно 2.0 бралась. СКО при 0.5 гораздо лучше:

Код:
Константы 10 — 21 для 0.5 1.0 1.5 2.0 :

0.0243, 0.0268, 0.0288, 0.0300, 0.0302, 0.0295, 0.0278, 0.0255, 0.0230, 0.0204, 0.0180, 0.0159,
0.0258, 0.0298, 0.0341, 0.0389, 0.0443, 0.0504, 0.0574, 0.0655, 0.0747, 0.0853, 0.0973, 0.1101,
0.0258, 0.0297, 0.0341, 0.0389, 0.0443, 0.0504, 0.0574, 0.0656, 0.0751, 0.0863, 0.0997, 0.1158,
0.0259, 0.0298, 0.0341, 0.0389, 0.0444, 0.0505, 0.0575, 0.0656, 0.0750, 0.0860, 0.0989, 0.1142,

Константы 22 — 33 для 0.5 1.0 1.5 2.0 :

0.0142, 0.0131, 0.0128, 0.0133, 0.0145, 0.0165, 0.0190, 0.0220, 0.0255, 0.0296, 0.0343, 0.0398,
0.1226, 0.1324, 0.1366, 0.1336, 0.1243, 0.1117, 0.0984, 0.0859, 0.0748, 0.0652, 0.0570, 0.0500,
0.1355, 0.1599, 0.1903, 0.2289, 0.2782, 0.3415, 0.4222, 0.5219, 0.6342, 0.7342, 0.7792, 0.7450,
0.1325, 0.1545, 0.1809, 0.2129, 0.2517, 0.2990, 0.3568, 0.4275, 0.5141, 0.6201


-- добавлено через 19 минут --

Пока альфа 0.5 мне больше всего нравится:

Код:
10 лямов:

СКО для констант 10 — 21 для альфы равной 0.4 0.5 0.6

0.0213, 0.0221, 0.0220, 0.0210, 0.0194, 0.0174, 0.0153, 0.0133, 0.0116, 0.0105, 0.0102, 0.0107,
0.0243, 0.0268, 0.0288, 0.0300, 0.0302, 0.0295, 0.0278, 0.0255, 0.0230, 0.0204, 0.0180, 0.0159,
0.0254, 0.0288, 0.0323, 0.0355, 0.0382, 0.0401, 0.0407, 0.0400, 0.0381, 0.0353, 0.0321, 0.0288,


СКО для констант 22 — 33 для альфы равной 0.4 0.5 0.6

0.0120, 0.0140, 0.0165, 0.0194, 0.0228, 0.0266, 0.0309, 0.0359, 0.0416, 0.0482, 0.0560, 0.0652,
0.0142, 0.0131, 0.0128, 0.0133, 0.0145, 0.0165, 0.0190, 0.0220, 0.0255, 0.0296, 0.0343, 0.0398,
0.0256, 0.0227, 0.0202, 0.0181, 0.0165, 0.0156, 0.0155, 0.0162, 0.0176, 0.0197, 0.0224, 0.0257,

 Re: Кортежи из простых чисел
Yadryara в сообщении #1728138 писал(а):
Кстати, я не понял, почему альфа именно 2.0 бралась. СКО при 0.5 гораздо лучше:

Потому что я смотрел на каком-то большом диаметре (около 800 кажется) и на весь ряд констант, соответственно цель была уменьшить СКО у самых правых безымянных коэффициентов, потому что там оно самое плохое при одном проходе.

Смотрите. Все СКО для --size 1M 99 0 210 420 при наклоне 2:
Код:
[0.0000, 0.0078, 0.0158, 0.0240, 0.0325, 0.0413, 0.0506, 0.0604, 0.0709, 0.0823, 0.0947, 0.1084, 0.1237, 0.1409, 0.1605, 0.1830, 0.2091, 0.2397, 0.2759, 0.3192, 0.3714, 0.4349, 0.5128, 0.6088, 0.7279, 0.8763, 1.0614, 1.2924, 1.5799, 1.9357, 2.3716, 2.8971, 3.5151, 4.2138, 4.9570, 5.6753, 6.2681, 6.6278, 6.6806, 6.4177, 5.8924, 5.1912, 4.4044, 3.6107, 2.8720, 2.2328, 1.7188, 1.3349, 1.0647, 0.8769, 0.7391, 0.6283, 0.5342, 0.4554, 0.3945, 0.3533, 0.3324, 0.3658, 1.1456]

А теперь при раклоне 0.5:
Код:
[0.0000, 0.0078, 0.0158, 0.0239, 0.0322, 0.0408, 0.0497, 0.0588, 0.0679, 0.0768, 0.0848, 0.0912, 0.0950, 0.0956, 0.0931, 0.0878, 0.0806, 0.0726, 0.0645, 0.0568, 0.0501, 0.0449, 0.0415, 0.0405, 0.0421, 0.0460, 0.0521, 0.0600, 0.0695, 0.0807, 0.0936, 0.1086, 0.1259, 0.1461, 0.1700, 0.1985, 0.2329, 0.2748, 0.3264, 0.3908, 0.4716, 0.5739, 0.7043, 0.8713, 1.0860, 1.3629, 1.7211, 2.1876, 2.8061, 3.6673, 5.0049, 7.4514, 12.3955, 21.5346, 34.2205, 45.8833, 53.3034, 57.5190]

Хвост совсем плохой стал :D Но улучшилась середина. Вот так оно работает.


Уменьшая наклон, вы смещаете пик второго прохода влево, ближе к середине гистограммы.
Но надо не перебощить, иначе второй проход будет наполовину "впустую".
Там же выбираются лучшие по дисперсии, по двум проходам, бины.

Ну в общем, наклон (как и размер выборки) надо подбирать экспериментально, вот вы это и делаете :D
И кстати, два прохода это наследие предыдущих версий (обычного Монте-Карло), я даже хотел добавить переключатель чтобы делать только один проход и посмотреть что будет. Возможно, это тоже стоит попробовать, отключив второй проход и увеличив выборку вдвое (по времени будет так же или чуть быстрее).

 Re: Кортежи из простых чисел
Аватара пользователя
wrest в сообщении #1728143 писал(а):
Хвост совсем плохой стал

Какой хвост? 50-е константы? Кого они колышат, если надо 30.

И первые 9 вообще не колышат. Понимаете почему?

Есть вещи важные а есть второстепенные. Я вот для вас формулы старательно рисовал. Вы понимаете как возникает сходимость?

Yadryara в сообщении #1727782 писал(а):
Как определить количество простых чисел в интервале от 0 до $x$? Например, вот так:
$$\int\limits_{2}^{x} \dfrac{dt}{\ln t}$$
Как определить количество пар простых близнецов или кузенов в интервале от 0 до $x$? Например, вот так:
$$\int\limits_{2}^{x} \dfrac{1.320}{\ln^2 t} \, dt$$
Как определить количество секс-пар в интервале от 0 до $x$? Например, вот так:
$$\int\limits_{2}^{x} \left( 2.641 - \dfrac{5.716}{\ln t} \right) \dfrac{dt}{\ln^2 t}$$
Как определить количество кортежей по паттерну [0, 8] в интервале от 0 до $x$? Например, вот так:
$$\int\limits_{2}^{x} \left( 1.320 - \dfrac{5.716}{\ln t} + \dfrac{4.151}{\ln^2 t} \right) \dfrac{dt}{\ln^3 t}$$

Вы видите что степень логарифма в знаменателе возрастает по мере добавления-вычитания всё новых констант?

 [ Сообщений: 182 ]  На страницу Пред.  1 ... 8, 9, 10, 11, 12, 13  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group