Main menu

Вычислительная алгебраическая геометрия: базисы Грёбнера и полиномиальные системы

Когда метод Ньютона бессилен

Решение систем нелинейных уравнений — одна из сложнейших задач численного анализа. Если система состоит из многочленов (полиномиальная система), она возникает в криптографии, робототехнике (обратная кинематика манипуляторов), компьютерном зрении и молекулярной химии. Обычно для таких систем применяют многомерный метод Ньютона-Канторовича. Но метод Ньютона — локальный. Он найдет лишь один корень вблизи начальной точки. Что если инженеру нужно найти строго все корни системы (или доказать, что их вообще не существует)? Что если корней бесконечно много и они образуют кривые поверхности (алгебраические многообразия)? Здесь численные приближения пасуют, и в дело вступает вычислительная коммутативная алгебра.

Революционным прорывом в этой области стало создание в 1965 году Бруно Бухбергером (в его докторской диссертации под руководством Вольфганга Грёбнера) алгоритма построения базисов Грёбнера. Этот алгоритм стал для нелинейных полиномиальных систем тем же, чем является алгоритм Гаусса для линейных систем уравнений. Он позволяет строго алгоритмически, за конечное число шагов, преобразовать любую сложную систему полиномов в эквивалентную ей систему, но имеющую особую, «удобную» треугольную форму.

Алгоритм Бухбергера: нелинейный аналог исключения Гаусса

Основная идея Бухбергера опирается на понятие идеала в кольце многочленов (множества всех полиномов, которые обращаются в ноль там же, где и исходные уравнения). Любая система задает свой базис этого идеала. Базис Грёбнера — это такой «идеальный» базис, в котором старшие члены полиномов обладают специальным свойством делимости.

Алгоритм Бухбергера берет пары исходных полиномов и вычисляет их S-полиномы (специальные комбинации, в которых искусственно уничтожаются старшие степени, подобно обнулению коэффициентов в методе Гаусса). Затем эти S-полиномы делятся на исходный базис с остатком. Если остаток не равен нулю, он добавляется в систему как новое уравнение (не меняющее корней!). Этот процесс генерации новых полиномов продолжается до тех пор, пока все возможные остатки не станут нулями. Теорема Гильберта о базисе гарантирует, что этот процесс обязательно остановится.

Триумф лексикографического порядка

Самая мощная магия базисов Грёбнера раскрывается при использовании лексикографического порядка сортировки одночленов (как слова в словаре). Если мы вычислим базис Грёбнера с таким порядком, то в полученной эквивалентной системе уравнений последний полином будет содержать только одну неизвестную переменную (например, только z)! Предпоследний полином будет содержать z и y, и так далее. Мы получаем строго треугольную систему.

Теперь решение нелинейной многомерной системы сводится к банальному вычислению корней одного полинома от одной переменной (что можно сделать численно с огромной точностью), а затем обратной подстановкой найденных значений в верхние уравнения системы. Алгоритм Бухбергера, интегрированный в системы компьютерной алгебры (Maple, Mathematica), требует гигантских объемов памяти (сложность алгоритма часто дважды экспоненциальная EXPSPACE), но его способность находить абсолютно все скрытые корни сделала его незаменимым аналитическим инструментом современной прикладной геометрии.

Подробнее

Метод простой итерации для нелинейных уравнений: теорема о сжимающих отображениях

Фундамент итерационной математики

В самых первых статьях нашего цикла мы рассматривали метод дихотомии и метод Ньютона для поиска корней нелинейных уравнений вида f(x) = 0. Метод Ньютона быстр, но требует вычисления производных и часто расходится при плохом выборе начального приближения. Существует еще один, невероятно элегантный и концептуально прозрачный класс алгоритмов — метод простой итерации (или метод последовательных приближений). Его глубокая математическая суть базируется не на геометрии касательных, а на фундаментальных понятиях топологии и функционального анализа.

Чтобы применить этот метод, исходное уравнение f(x) = 0 необходимо алгебраически преобразовать к эквивалентному виду: x = phi(x). Это можно сделать бесконечным числом способов (например, просто прибавив x к обеим частям, или выразив x из сложного логарифма). Теперь наша задача поиска корня превратилась в задачу поиска неподвижной точки отображения phi (fixed point). Неподвижная точка — это такое значение x, которое при подстановке в функцию phi выдает на выходе в точности то же самое значение x. Вычислительный алгоритм становится тривиальным: мы берем начальное случайное приближение x0, вычисляем x1 = phi(x0), затем x2 = phi(x1) и так далее до бесконечности.

Сжимающие отображения и теорема Банаха

Главный вопрос вычислительной математики: при каких условиях эта бесконечная последовательность x_n действительно сойдется к истинному корню, а не улетит в бесконечность и не зациклится? Ответ дает знаменитая теорема Банаха о неподвижной точке (принцип сжимающих отображений), доказанная польским математиком Стефаном Банахом в 1922 году.

Теорема гласит: если функция phi(x) является сжимающим отображением на замкнутом интервале (то есть расстояние между любыми двумя точками после применения функции строго уменьшается с коэффициентом сжатия q < 1), то на этом интервале существует ровно одна неподвижная точка, и метод простой итерации гарантированно сойдется к ней из абсолютно любого начального приближения! С точки зрения дифференциального исчисления, условие сжатия означает, что модуль производной функции phi(x) в окрестности корня должен быть строго меньше единицы. Чем ближе производная к нулю, тем меньше коэффициент сжатия q, и тем феноменально быстрее алгоритм будет сходиться. Если же производная по модулю больше единицы (отображение растягивающее), алгоритм неминуемо разойдется, как бы близко к корню мы ни стартовали. Искусство применения метода простой итерации заключается именно в таком хитром алгебраическом преобразовании f(x) = 0 в x = phi(x), чтобы искусственно сделать производную phi(x) максимально близкой к нулю.

Подробнее

Алгоритмы роя частиц (PSO) и муравьиные колонии (ACO) в численной оптимизации

Коллективный интеллект на службе математики

В области глобальной стохастической оптимизации генетические алгоритмы (ГА) и дифференциальная эволюция (DE), основанные на теории естественного отбора, десятилетиями удерживали лидерство. Однако в конце 1990-х годов возникла мощная альтернативная парадигма эвристического поиска, вдохновленная не эволюцией видов, а социальным поведением животных. Как стая птиц находит лучшее место для кормежки в огромном лесу? Как муравьи без единого лидера строят оптимальные кратчайшие маршруты от муравейника к источнику пищи? Оказалось, что математическая формализация этих природных механизмов дает потрясающе быстрые численные алгоритмы оптимизации сложных недифференцируемых функций.

Этот класс алгоритмов получил название Swarm Intelligence (Роевой интеллект). В отличие от генетических алгоритмов, где особи (решения) безжалостно уничтожаются и заменяются мутантами (дарвиновская философия), в алгоритмах роевого интеллекта элементы популяции не умирают. Они сохраняют свою жизнь на протяжении всего процесса вычислений, перемещаясь в пространстве параметров и обмениваясь социальной информацией со своими соседями. Эта кооперативная природа алгоритмов делает их сходимость более плавной и управляемой.

Оптимизация роем частиц (Particle Swarm Optimization, PSO)

Алгоритм PSO был разработан в 1995 году Кеннеди и Эберхартом. Пространство поиска заполняется «частицами» (математическими векторами возможных решений). Каждая частица имеет свою координату и вектор скорости. На каждом шаге частица оценивает значение целевой функции в своей точке. Направление ее следующего шага (новая скорость) вычисляется как векторная сумма трех составляющих.

Первая составляющая — инерция: частица склонна двигаться туда, куда летела на предыдущем шаге. Вторая составляющая — личная (когнитивная) память: частица всегда помнит ту точку пространства, где она лично находила наилучший результат (наименьший минимум), и ее притягивает к этой точке. Третья составляющая — социальный опыт: частицу притягивает к той точке, которая является наилучшей среди всей стаи (глобальный лидер). Коэффициенты доверия к себе и к социуму являются настроечными параметрами. В результате этого простого математического взаимодействия частиц возникает невероятно сложный и целенаправленный танец роя, который быстро стягивается в самые глубокие минимумы сложных ландшафтов (функций Розенброка, Растригина и др.). PSO превосходно подходит для настройки весов в системах управления и проектирования СВЧ-антенн.

Муравьиные алгоритмы (Ant Colony Optimization, ACO)

Если PSO отлично работает в непрерывных пространствах, то для сложнейших задач дискретной комбинаторной оптимизации (например, задача коммивояжера, разводка печатных плат, маршрутизация пакетов в интернете) Марко Дориго в 1992 году создал Муравьиные алгоритмы (ACO). Идея заимствована из механизма стигмергии: непрямой коммуникации муравьев через отложение химических следов (феромонов).

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

Подробнее

Численное моделирование фазовых переходов: задача Стефана и метод энтальпии

Математика таяния льда и кристаллизации металлов

Процессы с фазовыми переходами первого рода (плавление льда, затвердевание отливок в металлургии, рост монокристаллов из расплава, замораживание грунтов при строительстве) представляют собой сложнейший вызов для вычислительной математики. Математически эти процессы описываются классической задачей Стефана (сформулированной Йозефом Стефаном в 1889 году при изучении замерзания полярных льдов). Основная проблема задачи Стефана — наличие четкой, геометрически тонкой границы раздела фаз (фронта плавления или кристаллизации), которая физически перемещается в пространстве с течением времени.

На этой подвижной границе происходит выделение или поглощение скрытой теплоты фазового перехода. Математически на фронте ставится жесткое условие теплового баланса (условие Стефана): скорость движения границы прямо пропорциональна разности тепловых потоков, приходящих из твердой и жидкой фаз. Трудность заключается в том, что положение этой границы заранее неизвестно — оно является частью искомого решения (задача со свободной границей). Решать такие дифференциальные уравнения классическими методами сеток крайне неудобно, так как фронт постоянно пересекает узлы сетки, вызывая сингулярности в расчетах.

Методы явного отслеживания фронта (Front Tracking)

Исторически первым подходом были методы с отслеживанием фронта. В них расчетная область разделяется на две отдельные зоны: твердую и жидкую, в каждой из которых решается свое линейное уравнение теплопроводности Фурье. На границе между ними сетка динамически перестраивается (или деформируется) на каждом временном шаге так, чтобы узлы сетки всегда строго лежали на фронте фазового перехода.

Этот подход (например, с использованием ALE сеток) дает высочайшую точность определения формы кристалла и распределения температур. Однако он терпит сокрушительное фиаско, если топология фронта начинает меняться. Если в процессе литья в форме образуется несколько независимых кусков льда, которые затем сливаются (или наоборот, одна жидкая ванна распадается на части), алгоритм отслеживания сетки запутывается в узлах, порождает математические ошибки и часто останавливает программу. Для сложной 3D-металлургии этот подход оказался слишком хрупким.

Метод энтальпии: сквозной счет без выделения границы

Чтобы обойти топологические кошмары, вычислительная теплофизика разработала гениально простой и абсолютно надежный класс алгоритмов — методы сквозного счета, самым популярным из которых является Метод энтальпии (Enthalpy method). В этом подходе мы отказываемся от явного отслеживания резкой границы между льдом и водой. Вместо этого вводится понятие эффективной теплоемкости и полной энтальпии (теплосодержания) материала.

Математически скрытая теплота плавления не выделяется как сингулярный источник на границе, а искусственно «размазывается» (сглаживается) по небольшому температурному интервалу (например, между 0 и 1 градусом Цельсия). В этом искусственном интервале (называемом двухфазной зоной или mushy zone) эффективная теплоемкость материала становится просто гигантской. Теперь мы решаем одно единое, нелинейное уравнение энергии для всей расчетной области (и для твердой, и для жидкой фазы одновременно), вообще не задумываясь о том, где находится фронт! Позиция фронта легко восстанавливается после расчетов просто путем поиска изотермы, соответствующей температуре плавления. Метод энтальпии легко справляется с любыми топологическими изменениями (слиянием и распадом зон кристаллизации), легко программируется на фиксированных декартовых сетках и сегодня является стандартом во всех литейных CAE-модулях (например, в ProCAST или MAGMASOFT).

Подробнее

Анализ чувствительности в численных моделях: сопряженные системы (Adjoint method)

Оптимизация формы в условиях миллионов параметров

В современной промышленности численные методы не просто проверяют, выдержит ли деталь нагрузку; они используются для активной оптимизации дизайна. Классический пример — проектирование профиля крыла пассажирского авиалайнера. Цель инженера — найти такую форму крыла (распределение кривизны и толщины), которая минимизирует аэродинамическое сопротивление при сохранении заданной подъемной силы (чтобы сэкономить топливо). Форма крыла в CAD-системе может задаваться десятками тысяч контрольных точек. Таким образом, перед нами стоит задача многомерной оптимизации: у нас есть один целевой функционал (сопротивление) и 10 000 переменных (координаты точек).

Чтобы применить эффективный метод градиентного спуска (или алгоритмы типа BFGS), оптимизатору нужен градиент: массив производных целевого функционала по каждому из 10 000 параметров. Стандартный подход «черного ящика» (численное дифференцирование конечными разностями) требует немного изменить один параметр, перестроить сетку, запустить тяжелейший решатель уравнений Навье-Стокса (что может занять сутки на кластере), записать изменение сопротивления и повторить это 10 000 раз. Проектирование одного крыла заняло бы десятки лет. Математическое решение, которое спасло аэрокосмическую отрасль, называется методом сопряженных уравнений (Adjoint method).

Отклонения и операторы: математическая алхимия

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

Алгоритм работает в три шага. На первом шаге решается прямая (исходная) физическая задача — например, рассчитывается обтекание текущей базовой формы крыла. На втором шаге мы строим и решаем сопряженную систему УЧП. Сопряженное уравнение имеет ту же размерность и структуру, что и линеаризованное уравнение Навье-Стокса, но в нем изменено направление времени или потока (оно решается «назад»), а в качестве источника (правой части) выступает производная нашего целевого функционала (формулы аэродинамического сопротивления). Гениальность заключается в том, что сопряженная задача решается ровно один раз!

Градиент за цену одного решения

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

Результатом этого быстрого интегрирования является полный, 100% точный вектор градиента сразу по всем 10 000 геометрическим параметрам формы крыла! Вычислительная стоимость получения этого гигантского градиента абсолютно не зависит от количества параметров проектирования. Она всегда равна стоимости решения примерно одной прямой и одной сопряженной задачи. То есть вместо 10 000 запусков симулятора нам требуется всего 2. Внедрение метода Adjoint в пакеты типа ANSYS Fluent и OpenFOAM позволило конструкторам Формулы 1 и авиационным бюро (Boeing, Airbus) использовать топологическую оптимизацию для потоков жидкостей и газов, создавая сверхэффективные бионические каналы охлаждения и профили с минимальным волновым сопротивлением.

Подробнее

Численные методы решения обратных задач теплообмена (ОЗТ)

Поиск причины по ее следствиям

В инженерной теплофизике прямая задача теплопроводности решается просто: если мы знаем начальную температуру тела, его физические свойства (теплопроводность, теплоемкость) и граничные условия (например, мощность нагревателя на поверхности), численная модель (МКЭ или МКР) точно предскажет распределение температуры внутри детали в любой момент времени. Но в аэрокосмической отрасли и металлургии инженеры чаще сталкиваются с обратной ситуацией. Представьте, что спускаемый космический аппарат входит в плотные слои атмосферы. Его внешняя обшивка подвергается экстремальному плазменному нагреву. Установить термодатчики на самой внешней поверхности невозможно — они мгновенно сгорят или нарушат аэродинамику. Датчики устанавливаются глубоко внутри теплозащитного экрана.

Возникает обратная задача теплообмена (ОЗТ): зная показания термопар (изменения температуры во времени), спрятанных в глубине твердого тела, необходимо математически восстановить величину и динамику теплового потока (или температуры), который реально воздействовал на внешнюю, недоступную поверхность. С математической точки зрения это граничная обратная задача, и она является классическим примером некорректно поставленной проблемы. Температурное поле внутри тела является результатом сглаживания (интегрирования) внешнего потока. Попытка обратить этот процесс приводит к чудовищному усилению любых шумов измерительных приборов. Микроскопическая ошибка термопары на 0.1 градуса при прямом обратном счете может выдать ответ, что на поверхности происходили скачки от абсолютного нуля до температуры Солнца.

Итерационная регуляризация и метод Алифанова

Для обуздания этой вычислительной катастрофы применяются методы регуляризации. Выдающийся вклад в эту область внес советский ученый Олег Михайлович Алифанов, разработавший теорию итерационной регуляризации. В отличие от метода Тихонова, где сглаживающий стабилизатор вводится в функционал явно (что требует сложного выбора параметра альфа), метод Алифанова использует скрытую, алгоритмическую регуляризацию.

Задача формулируется как проблема оптимального управления (или минимизации). Мы ищем такой тепловой поток на границе, при котором рассчитанная моделью температура в местах расположения датчиков максимально совпадает с реальными экспериментальными показаниями (минимизируется среднеквадратичная невязка). Для поиска минимума этого функционала используется метод градиентного спуска или метод сопряженных градиентов. Роль регуляризатора (сглаживателя) здесь играет сам номер итерации! На первых итерациях алгоритм восстанавливает плавные, низкочастотные компоненты теплового потока. Если мы не остановим процесс, на поздних итерациях алгоритм начнет «подгонять» решение под высокочастотный шум датчиков, и ответ разрушится. Критерий останова (принцип невязки) приказывает прервать итерации в тот момент, когда отклонение модели от эксперимента становится равно погрешности самих приборов. Так мы получаем устойчивый и физически осмысленный результат.

Применение сопряженных уравнений для поиска градиента

Главная трудность метода Алифанова — это вычисление градиента функционала невязки. В нашей задаче параметром оптимизации выступает не одно число, а целая функция (график теплового потока во времени), содержащая тысячи дискретных точек. Если вычислять градиент по каждой точке конечными разностями, нам придется решать прямую задачу теплопроводности тысячи раз на каждой итерации, что займет вечность.

Эта проблема элегантно решается с помощью метода сопряженных уравнений (Adjoint method). Составляется специальная вспомогательная краевая задача, называемая сопряженной, которая интегрируется «вспять» по времени (от конца эксперимента к его началу). Правой частью для этого сопряженного уравнения служит разность между показаниями датчиков и расчетом. Решив сопряженную задачу всего один раз, мы получаем функцию, которая путем простого умножения мгновенно дает нам точнейший градиент целевого функционала сразу по всем тысячам параметров времени! Этот красивый математический аппарат сегодня применяется не только в теплофизике, но и в обратных задачах сейсморазведки для поиска месторождений нефти по отраженным акустическим волнам.

Подробнее

Методы декомпозиции областей (Domain Decomposition): параллельные вычисления

Преодоление ограничений памяти и распараллеливание

С развитием суперкомпьютеров вычислительная математика столкнулась с новой, сугубо архитектурной проблемой. Когда мы решаем дифференциальные уравнения в частных производных (УЧП) на сетках, состоящих из десятков миллиардов узлов (например, при расчете глобальной климатической модели Земли или аэродинамики космического корабля в сборе), физически невозможно поместить глобальную матрицу системы в оперативную память одного вычислительного узла. Возникает острая необходимость разрезать гигантскую математическую задачу на тысячи более мелких кусков, раздать их независимым процессорам (или узлам кластера) и заставить эти процессоры общаться между собой по сети MPI для получения единого, математически строгого решения.

Эта концепция легла в основу методов декомпозиции областей (Domain Decomposition Methods, DDM). Идея метода невероятно стара: еще в 1870 году математик Герман Шварц придумал альтернирующий метод для аналитического решения уравнения Лапласа в сложных областях. Он показал, что если сложная область состоит из двух перекрывающихся простых фигур (например, круга и прямоугольника), можно поочередно решать задачу в каждой из них, используя на границе перекрытия значения, полученные у соседа на предыдущем шаге. Спустя сто лет эта абстрактная математическая теорема стала фундаментом параллельных суперкомпьютерных вычислений.

Методы с перекрытием (Метод Шварца) и без перекрытия

Современные численные реализации DDM делятся на две большие группы. Первая группа — это методы с перекрытием (Overlapping methods), прямые наследники классического метода Шварца. Расчетная сетка разбивается на субдомены, которые искусственно расширяются так, чтобы они немного наслаивались друг на друга. Итерационный процесс заключается в том, что каждый процессор решает свою локальную СЛАУ внутри своего домена, а затем пересылает значения из зоны перекрытия соседним процессорам, чтобы те использовали их как краевые условия Дирихле на следующей итерации. Этот метод очень надежен, но пересылка больших массивов данных в зонах перекрытия может замедлять сеть кластера.

Вторая группа — это методы без перекрытия (Non-overlapping methods, или методы подконструкций). Здесь граница между доменами представляет собой строгую математическую линию (или поверхность) толщиной в один узел сетки. Эти методы математически более сложны, так как на общей границе необходимо обеспечить не только непрерывность самой функции (температуры), но и непрерывность нормальной производной (теплового потока). Для этого используются специальные алгоритмы на интерфейсах (например, метод Дирихле-Неймана или метод Неймана-Неймана).

Дополнение Шура и предобуславливание FETI

Самым мощным математическим аппаратом для методов без перекрытия является матричное дополнение Шура (Schur Complement). Алгоритм алгебраически исключает все внутренние узлы каждого субдомена, сводя гигантскую глобальную СЛАУ к гораздо меньшей системе уравнений, которая записана исключительно относительно неизвестных значений на самих интерфейсах (границах разреза). После решения интерфейсной задачи каждый процессор абсолютно независимо и быстро восстанавливает решение внутри своего куска.

Для решения сложной интерфейсной системы обычно применяется метод сопряженных градиентов (CG). Чтобы он сошелся быстро, французский ученый Шарль Фархат разработал знаменитый алгоритм FETI (Finite Element Tearing and Interconnecting), который вводит множители Лагранжа (силы взаимодействия) на границах и использует сложные проекционные предобуславливатели. Сегодня алгоритмы типа FETI-DP (с двумя уровнями грубой сетки) обеспечивают идеальную масштабируемость: программа может эффективно задействовать сотни тысяч процессорных ядер, ускоряя решение пропорционально размеру суперкомпьютера.

Подробнее

Метод дифференциальной эволюции: векторная мутация в глобальной оптимизации

Оптимизация в непрерывных недифференцируемых пространствах

Инженерам часто приходится решать задачи глобальной оптимизации, где целевая функция представляет собой «черный ящик» — мы можем вычислить ее значение при заданных параметрах (например, запустив тяжелую аэродинамическую симуляцию), но мы совершенно не знаем ее градиентов (производных). Более того, ландшафт этой функции может быть изрезан оврагами, содержать сотни ложных локальных минимумов и иметь разрывы. Как мы уже выяснили, классические методы Ньютона или градиентного спуска в таких условиях бесполезны: они застревают в первой же яме.

Для таких задач были созданы стохастические генетические алгоритмы (ГА). Классические ГА работают путем кодирования параметров в виде бинарных строк (хромосом) из нулей и единиц. Однако при оптимизации непрерывных вещественных параметров (например, длина волны лазера, концентрация реагента в молях, напряжение в вольтах) бинарное кодирование порождает массу проблем, связанных с потерей точности и эффектом Хэмминга. В 1995 году Кеннет Прайс и Райнер Сторн разработали революционный алгоритм — Дифференциальную эволюцию (Differential Evolution, DE). Этот алгоритм изначально создавался для работы напрямую с векторами чисел с плавающей запятой, устраняя необходимость в громоздких бинарных преобразованиях.

Векторная разность как направляющая сила мутации

Дифференциальная эволюция относится к классу популяционных методов. Программа создает случайное облако (популяцию) из N возможных решений, разбросанных по всему многомерному пространству поиска. Вектор каждого решения хранит конкретные вещественные числа (координаты). Настоящая магия DE кроется в ее операторе мутации, который в корне отличается от слепого случайного шума в классических ГА.

Для того чтобы создать нового «мутанта» из текущей особи (целевого вектора), алгоритм случайным образом выбирает из популяции еще три других, абсолютно независимых вектора: A, B и C. Затем он вычисляет векторную разность между B и C. Эта математическая разность масштабируется (умножается на постоянный коэффициент мутации F) и прибавляется к вектору A. Полученный вектор становится основой для нового потомка. В чем гениальность этого подхода? Векторная разность автоматически адаптирует алгоритм к топологии ландшафта! В начале работы, когда популяция разбросана далеко друг от друга, разности огромны, и алгоритм делает гигантские разведывательные шаги, перепрыгивая через любые локальные минимумы. Когда алгоритм нащупывает глобальную долину, популяция стягивается в плотный клубок, разности между векторами становятся микроскопическими, и алгоритм переходит в режим ювелирной, сверхточной настройки параметров, не требуя ручного изменения радиуса мутации (в отличие от методов имитации отжига).

Скрещивание, селекция и индустриальное применение

После создания вектора-мутанта происходит процесс дискретного скрещивания (кроссовера). Некоторые координаты мутанта смешиваются с координатами исходного целевого вектора с заданной вероятностью (CR). Наконец, вступает в действие жесткий дарвиновский отбор: программа оценивает значение целевой функции для нового ребенка. Если ребенок оказался лучше (функция меньше), он безжалостно убивает своего родителя и занимает его место в популяции. Если ребенок хуже, он исчезает, а родитель живет дальше.

Всего три простых математических операции — сложение векторов, масштабирование разности и условная замена. Алгоритм дифференциальной эволюции умещается в 20 строк программного кода, требует настройки всего двух интуитивных параметров (F и CR) и феноменально легко распараллеливается на многоядерных процессорах. Благодаря своей беспрецедентной способности находить глобальный минимум сложных невыпуклых функций, метод DE стал основным алгоритмом для настройки гиперпараметров нейронных сетей, автоматического синтеза фрактальных Wi-Fi антенн сложной формы и проектирования молекул новых лекарственных препаратов в хемоинформатике.

Подробнее

Методы Ланцоша и Арнольди: поиск собственных значений гигантских матриц

Охота за экстремальными резонансами

В предыдущих материалах мы исследовали проблему поиска всех собственных значений матрицы с помощью QR-алгоритма. QR-разложение блестяще работает для плотных матриц умеренной размерности (до нескольких тысяч строк). Однако в реальных физических задачах инженеры сталкиваются со сверхбольшими разреженными матрицами, содержащими миллионы уравнений. Например, при анализе устойчивости плазмы в термоядерном реакторе, при расчете резонансных частот гигантского моста или в алгоритмах поиска кластеров в графах социальных сетей. Применение прямого QR-алгоритма к матрице миллион на миллион физически невозможно — оно потребует экзабайты оперативной памяти и столетия вычислений.

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

Подпространство Крылова и ортогональный базис

Оба метода базируются на элегантной концепции подпространств Крылова, которую мы упоминали в контексте решения СЛАУ. Алгоритм выбирает случайный начальный вектор q1 и начинает многократно умножать его на гигантскую матрицу A. В результате формируется последовательность векторов: q1, A*q1, A^2*q1, A^3*q1. Эти векторы несут в себе колоссальную математическую информацию о доминирующих собственных векторах матрицы (так как при многократном умножении вектор вытягивается вдоль главного собственного направления).

Проблема в том, что эти векторы очень быстро становятся почти коллинеарными (параллельными), что уничтожает их вычислительную полезность (матрица их скалярных произведений становится вырожденной). Гениальность метода Арнольди (Уолтер Арнольди, 1951) заключается в применении процесса ортогонализации Грама-Шмидта прямо на лету! Каждый новый сгенерированный вектор тут же жестко проецируется и очищается от компонентов всех предыдущих векторов. В результате мы получаем идеальный ортонормированный базис подпространства Крылова. В этом новом, маленьком базисе исходная гигантская матрица проецируется (сжимается) в крошечную матрицу Хессенберга размера m x m (где m — число итераций, например, 50 или 100).

Метод Ланцоша и проблема потери ортогональности

Если исходная матрица системы была симметричной (как в задачах сопротивления материалов), процесс Арнольди превращается в Метод Ланцоша (Корнелий Ланцош, 1950). Из-за свойств симметрии матрица Хессенберга магическим образом схлопывается в симметричную трехдиагональную матрицу. Это означает, что для генерации каждого нового ортогонального вектора алгоритму Ланцоша не нужно вспоминать и вычитать все предыдущие 100 векторов — ему достаточно использовать короткую рекуррентную формулу, опирающуюся только на два последних вектора! Это делает метод Ланцоша феноменально быстрым и экономным по памяти.

Получив эту крошечную матрицу проекции, мы просто решаем ее стандартным QR-алгоритмом за миллисекунды. Ее собственные значения (называемые числами Ритца) с фантастической скоростью сходятся к истинным экстремальным собственным значениям гигантской исходной матрицы. Однако у метода Ланцоша есть вычислительный недуг: из-за конечной разрядности компьютеров (ошибок округления float) генерируемые векторы постепенно теряют свою взаимную перпендикулярность. Это порождает появление фиктивных (призрачных) собственных значений, которые являются математической галлюцинацией. Для борьбы с этим современная вычислительная алгебра использует методы полной или выборочной переортогонализации, которые встроены в ядро таких сверхмощных индустриальных пакетов, как ARPACK (используемых функциями `eigs` в MATLAB и SciPy).

Подробнее

Векторизация вычислений (SIMD): аппаратное ускорение численных алгоритмов

Когда закон Мура перестает ускорять код

На протяжении десятилетий программисты и математики привыкли к простому правилу: чтобы программа для численного интегрирования или умножения матриц заработала быстрее, нужно просто подождать пару лет, пока Intel или AMD выпустят процессор с более высокой тактовой частотой. Этот феномен, подпитываемый законом Мура, позволял писать неоптимальный код и все равно получать рост производительности. Однако в начале 2000-х годов рост тактовых частот уперся в непреодолимый физический барьер — тепловой предел кремниевых чипов (частота застыла на уровне 3-5 ГГц). Чтобы продолжать наращивать вычислительную мощь, создателям процессоров пришлось менять архитектуру, внедряя многоядерность и, что еще более важно для математики, векторные инструкции.

Концепция SIMD (Single Instruction, Multiple Data — одна инструкция, множество данных) является фундаментом высокопроизводительных вычислений (HPC). В классической, скалярной модели процессора (SISD), чтобы сложить два массива из четырех чисел (A1+B1, A2+B2, A3+B3, A4+B4), процессору нужно выполнить цикл: загрузить два числа, сложить их, записать результат, и повторить это 4 раза. Архитектура SIMD внедряет в процессор сверхширокие регистры. Загрузив сразу 4 числа из массива A в один 256-битный регистр, и 4 числа из массива B во второй регистр, процессор за один единственный такт времени выполняет сложение сразу всех четырех пар чисел одновременно! Это обеспечивает мгновенный 4-кратный (или даже 8-кратный) прирост чистой математической производительности.

Наборы инструкций AVX и выравнивание памяти

Современные процессоры оснащены мощнейшими блоками векторной математики. Инструкции SSE (128 бит) позволяют складывать 4 числа типа float за такт. Инструкции AVX и AVX2 (256 бит) удваивают этот показатель до 8 чисел. Новейшие серверные процессоры с инструкциями AVX-512 оперируют колоссальными 512-битными регистрами, выполняя по 16 операций сложения или умножения 32-битных чисел с плавающей запятой за один микроскопический такт процессора. Более того, существует специальная инструкция FMA (Fused Multiply-Add), которая за один такт выполняет сразу две операции (A * B + C), удваивая пиковую производительность алгоритма матричного умножения.

Но эта фантастическая аппаратная мощь недоступна программам автоматически. Чтобы векторные блоки заработали, данные в оперативной памяти компьютера должны быть расположены (упакованы) строго последовательно, без разрывов, и желательно быть выровненными (aligned) по границам 32-байтовых или 64-байтовых кеш-линий. Если вы написали алгоритм метода конечных разностей, который скачет по памяти (собирая данные из разных классов или объектов), процессор просто не сможет загрузить их широким вектором. Он откатится к медленным скалярным вычислениям (потеряв до 90% скорости).

Компиляторы, раскрутка циклов и библиотеки BLAS

Чтобы заставить численный код летать, разработчики применяют агрессивную раскрутку циклов (Loop Unrolling) и прагмы для компиляторов (например, #pragma omp simd в OpenMP). Важнейшим требованием для векторизации является отсутствие логических ветвлений (операторов if/else) внутри тяжелого математического цикла, так как ветвление разрушает векторный конвейер.

В мире профессиональной вычислительной математики никто не пишет циклы умножения матриц вручную. Вся базовая алгебра (нахождение скалярных произведений, умножение матрицы на вектор, разложение матриц) делегируется стандартизированным библиотекам BLAS (Basic Linear Algebra Subprograms) и LAPACK. Такие реализации, как Intel MKL (Math Kernel Library) или OpenBLAS, написаны на глубоком ассемблерном уровне. Они досконально учитывают размер L1/L2 кэша процессора и микроархитектуру AVX регистров, нарезая матрицы на микро-блоки. Именно благодаря идеальной SIMD-векторизации внутри библиотек BLAS, скрипты на языке Python (использующие NumPy) умудряются работать со скоростью скомпилированного языка C++ при решении гигантских систем дифференциальных уравнений.

Подробнее
Subscribe to this RSS feed

Соц. сети