Томсон в диске

Методы

Как устроены расчёты

Единичный круг, N одинаковых зарядов, энергия E = Σi<j 1/|ri − rj|. Ищется расстановка с наименьшей E. Все методы написаны заново (C + Python) и считались на двух Mac mini M4 (по 10 ядер).

Общая часть

Граничная эвристика Amore–Zarate

Часть зарядов, Nb, лежит точно на окружности (у минимума их ≈2,8 N2/3). Число Nb фиксируется заранее по формуле Amore–Zarate Nb ≈ 2,84328 N2/3 − 0,530196 N1/3 − 2,32866. Внутренние заряды во время поиска удерживаются в круге радиуса σ = 1 − 1/(2√N), чтобы они не «прилипали» к границе и Nb не менялось. В конце ограничение снимается (σ = 1) и делается полная релаксация.

Локальный спуск

МетодГде используетсяКак устроен
TN (усечённый Ньютон)алгоритм Amore–ZarateSciPy TNC в переменных статьи: r = σ sin²t, граничные — угол
FIRE 2.0наши варианты, D&Cзатухающая динамика с адаптивным шагом (Guénolé и др., 2020), декартовы координаты с проекцией на ограничения
QMDMD Лаврова–Никоноваmr̈ = F − bṙ, Верле с неявным трением, Δt = 0,001, b = 0,9, 150 000 шагов, σ растёт до 1
L-BFGSдоводка больших Nугол для граничных, (x, y) для внутренних
Ньютондоводка и проверка N ≤ 700полный гессиан, остаточная сила ~10−11, спектр — проверка минимума
Ньютон–CGдоводка больших Nпроизведение гессиана на вектор разностью градиентов, шаг по прямому сравнению энергий

Глобальный поиск

Basin hopping (BH)

Шаг: в случайном месте (центр выбирается по плотности зарядов ρ ∝ 1/√(1−r²)) толкаем заряды в круге радиусом 3 межчастичных расстояния (гауссов толчок 0,5 расстояния), затем спускаем все заряды и принимаем новое состояние по Метрополису с T = 0,01.

Divide & conquer (D&C) Amore–Zarate

Выбирается подкруг (центр по плотности), заряды вне него заморожены, внутри — толчок и спуск; новое состояние принимается, если уменьшилась энергия Eвнутр-внутр + Eвнутр-внеш. Если какой-то заряд сместился больше порога, следующий подкруг ставится на него («погоня» за дефектом). Радиус подкруга растёт от 0,1 до ~1.

Гибрид «бассейн → MD → Метрополис»

Как BH, но вместо толчка координат заряды выбранного «бассейна» получают тепловые скорости (Tтолчка = 0,02), дальше идёт затухающая молекулярная динамика всех зарядов (шаг Δt = 10−3, трение ≈1) и финальный спуск FIRE; новое состояние принимается по Метрополису.

Кольцевая модель

Конфигурация задаётся разбиением N по концентрическим кольцам (n1 = Nb, n2, …) с радиусами rk. Энергия усредняется по фазам колец: E = Σ nkSnk/(4rk) + (2/π)Σk<l nknlK((rl/rk)²)/rk, где Sn = Σm=1n−11/sin(πm/n), K — полный эллиптический интеграл. Радиусы находятся минимизацией, разбиение — перебором соседних разбиений (перенос заряда между кольцами, центральный заряд).

Улучшение рекордов при больших N

Стартуем с опубликованной конфигурации. (1) «Пересадка» заряда (как у Amore для сферической шапки): самый внешний внутренний заряд ставится на окружность (Nb + 1) или граничный заряд из самого тесного места уводится внутрь (Nb − 1), затем локальная релаксация при σ < 1. (2) D&C с крупными подкругами (радиус циклически от 0,04–0,15 до 0,15–0,6 в зависимости от N), FIRE внутри, многопоточное ядро. (3) Сравнение только после одинаково глубокой доводки обеих конфигураций методом Ньютона–CG: до тех пор, пока прогнозируемый выигрыш следующего шага не станет меньше 10−5. (4) При N ≥ 5000 — D&C на GPU (code/gpu_dc.py): толчок 0,4 местного шага, FIRE в подкруге, критерий Метрополиса при T = 0,05, затем общая доводка Ньютоном–CG лучшего состояния.

Что взято из статей, а что выбрано нами

Статьи не указывают часть параметров. Всё, что мы выбирали сами, перечислено здесь; эти значения одинаковы во всех экспериментах.

ПараметрВ статьеУ нас
σ1 − 1/(2√N)так же
Nbформула (7) Amore–Zarateближайшее целое (иногда ±1)
стартслучайный по плотноститак же; Nb граничных равномерно по углу
TN: допускине указаныSciPy TNC, до остановки по изменению f
BH: шаг, Tне указанытолчок 0,5 шага в круге 3 шагов, T = 0,01
D&C: амплитуда толчка«меньше у границы»0,3 локального шага (шаг ∝ ρ−1/2)
D&C: порог погонине указан0,5 локального шага, не более 10 раз подряд
D&C: радиус0,1 → ~1линейно 0,1 → 1 за 3100 итераций
QMD: график σ«постепенно до 1»линейно за первые 2/3 шагов
QMD: стартслучайныйслучайный + короткая релаксация FIRE (без неё при N ≳ 200 схема разлетается)

Проверки кода

Код: code/thomsondisk (ядро kernels.c; поиск amore.py, md.py, pdc.py, shells.py, newton.py). Каждый расчёт — JSON-спецификация в runs/specs; сводки — results/.