
Полная версия:
Портфельная теория и методы оптимизации. NSGA, POWER BI

Портфельная теория и методы оптимизации
NSGA, POWER BI
Виталий Фартушнов
© Виталий Фартушнов, 2026
ISBN 978-5-0069-0384-5
Создано в интеллектуальной издательской системе Ridero
RH-Quantum Portfolio (2026), NSGA – описать подробно, перечислить литературу
NSGA-II (Non-dominated Sorting Genetic Algorithm II) is a popular multi-objective evolutionary optimization algorithm used in portfolio optimization to balance risk and return. «RH-Quantum Portfolio (2026)» likely refers to a quantum-inspired or hybrid portfolio optimization approach projected for 2026, possibly incorporating NSGA-II with quantum annealing or variational methods for enhanced performance in financial modeling. [1] [2] [3]
Core Concept
NSGA-II ranks solutions by non-domination levels and crowding distance to generate Pareto-optimal portfolios, outperforming classical methods like Markowitz in handling constraints such as semi-variance, liquidity, and cardinality. [2] [4] [5] In quantum contexts, it hybridizes with algorithms like QAOA or VQE for complex, higher-order moment optimizations (e.g., skewness, kurtosis) relevant to 2026 quantum hardware advances. [6] [7] [3] This suits 2026 portfolios amid rising quantum computing stocks like D-Wave (QBTS) and IonQ (IONQ), which emphasize optimization for finance. [8] [1]
Key Applications
– Risk-Return Trade-off: NSGA-II yields portfolios with superior returns (e.g., 41.25% annualized) and lower risk than baselines, tested on indices like Tehran Stock Exchange or S&P100. [2] [4]
– Quantum Integration: D-Wave’s annealing optimizes 60-stock portfolios; hybrids with NSGA-II target NISQ-era limits for 2026 commercial use in finance. [9] [1]
– 2026 Relevance: Aligns with forecasts for fault-tolerant systems enabling real-world portfolio tools, reducing computation for combinatorial problems. [10] [11]
Literature
– Portfolio Optimization Utilizing Multi-Objective NSGA-II (SSRN, 2024): Applies NSGA-II to 132 Tehran stocks, showing better risk-return profiles. [2]
– Design of Optimum Portfolio Scheme Based on Improved NSGA-II (PMC, 2022): Improves convergence for financial multi-objectives, achieving 70.08% predicted profits. [4]
– Multiobjective Approach to Portfolio Optimization with NSGA-II (Vilnius Tech, 2020): Uses credibilistic ratios for fuzzy risk-return-liquidity models on S&P100. [5]
– Quantum Portfolio Optimization with Expert Analysis (arXiv, 2025): Benchmarks VQE/QAOA, relevant for NSGA hybrids. [3]
– On NSGA-II and NSGA-III in Portfolio Management (TechScience, 2021): Compares genetic algorithms for constrained models. [12]
–
⁂
Подробный разбор шагов алгоритма NSGA-II
NSGA-II работает в поколениях, комбинируя элитизм, быструю недоминирующую сортировку и crowding distance для отбора. Алгоритм минимизирует несколько целей, поддерживая разнообразие на фронтах Парето. [51] [52]
Инициализация и параметры
NSGA-II запускается с популяцией размером, генерируемой случайно в пределах границ переменных. Параметры включают: вероятность кроссовера, мутации (где – размер хромосомы), индексы распределения для SBX-кроссовера и полиномиальной мутации. Максимум поколений или функция оценок служит критерием остановки. [51] [53]









Шаг 1: Недоминирующая сортировка
Для объединенной популяции (размер) присваивается ранг каждому индивиду:


– Инициализировать (множество доминируемых индивидов), (число доминирующих), фронт.



– Для каждого: для каждого, если доминирует (, строгое неравенство хотя бы для одного), то; иначе. Если, добавить в.










– Для: пока не пуст, для каждого, для каждого:; если, добавить в. Ранг индивида из равен. Сложность, где – число целей. [51] [52] [54]












Шаг 2: Вычисление crowding distance
Для каждого фронта (отсортированного по каждой цели отдельно):

– Инициализировать для всех целей,.



– Для каждой цели:, сортировать по (пусть – индексы). Граничным.






– Для:, где предотвращает деление на ноль.



– . Индивиды сортируются сначала по рангу (возрастанию), затем по (убыванию). [51] [55] [53]


Шаг 3: Турнирная селекция и рекомбинация
Из формируется mating pool размером: бинарный турнир между случайными парами – побеждает меньший ранг, при равенстве больший. Затем применяются кроссовер (SBX для вещественных, одно-/двухточечный для бинарных) и мутация (полиномиальная/битовая), генерируя потомков размером. [51] [52] [56]





Шаг 4: Элитный отбор и переход
Объединить, выполнить шаги 1—2. Формировать: начинать с, пока размер; в частично заполняющем фронте взять индивидов с наибольшим до. Установить, повторить до. Итоговый фронт из – аппроксимация Парето-фронта. [51] [52] [54]











⁂
Как рассчитывается crowding distance в деталях
Crowding distance в NSGA-II оценивает плотность решений на каждом фронте Парето, предпочитая разреженные области для поддержания разнообразия. Расчет выполняется отдельно для каждого фронта после недоминирующей сортировки. [71] [72]
Подготовка данных
Для фронта размером с целями:



– Для каждой цели: отсортировать индивиды по возрастанию (пусть индексы после сортировки – , где имеет минимальное, – максимальное). [71] [73]







– Инициализировать массив для всех индивидов и целей; граничные индивиды получают (или очень большое число). [71] [74]




Формула расчета по цели
Для каждой цели, для внутренних индивидов :



где или аналогичное малое число предотвращает деление на ноль при совпадении границ. Нормализация диапазоном цели обеспечивает сравнимость между целями разного масштаба. [71] [72] [75]

Агрегация и итоговое значение
Итоговый crowding distance для индивида :


Индивиды фронта сортируются по убыванию (большее расстояние предпочтительнее). При равенстве рангов в турнире или отборе побеждает больший. [71] [73] [76]


Псевдокод расчета
def crowding_distance (F, M, f): # F – список индивидов, f – их цели (l x M)
l = len (F)
if l <= 2: return [inf] * l # Граничные случаи
d = [^3_0] * l
for m in range (M):
# Сортировка по m-й цели
sorted_idx = argsort ([f [j] [m] for j in range (l)])
d [sorted_idx [^3_0]] = inf
d [sorted_idx [l-1]] = inf
fmin, fmax = f [sorted_idx [^3_0]] [m], f [sorted_idx [l-1]] [m]
for k in range (1, l-1):
i = sorted_idx [k]
d [i] += (f [sorted_idx [k+1]] [m] – f [sorted_idx [k-1]] [m]) / (fmax – fmin +1e-6)
return d
Этот подход обеспечивает на фронт за счет сортировок. [71] [77] [74]

⁂
Пошаговый пример расчёта crowding distance для 3 точек в 2D
Рассмотрим фронт Парето из 3 точек в 2D-пространстве целей (минимизация обеих): A (1, 4), B (2, 3), C (4, 1). Crowding distance стимулирует выбор граничных точек A и C, средняя B получит конечное значение. [86] [87]
Шаг 1: Сортировка по первой цели

Сортировка по: A (1), B (2), C (4) → индексы I = [A, B, C].
Границы:,.
Для B (внутренняя):. [86] [88]




Шаг 2: Сортировка по второй цели

Сортировка по: C (1), B (3), A (4) → индексы I = [C, B, A].
Границы:,.
Для B:. [86] [89]




Шаг 3: Агрегация расстояний
Итоговые:
,
,
.
При отборе предпочтение: A и C (∞)> B (2). В турнире A/C побеждают B. [86] [87]



Визуализация фронта

Этот пример иллюстрирует, как crowding distance расширяет «кубoid» вокруг точек, предпочитая края фронта для равномерного покрытия. [86] [90]
⁂
Пошаговый пример расчёта crowding distance с числами и пояснениями
Расчет crowding distance демонстрируется на фронте из 4 точек в 2D (минимизация): A (1,5), B (2,3), C (3,4), D (5,1). Границы получат ∞, внутренние – нормализованные расстояния по соседям. [99] [100]
Исходные данные
По цели: сортировка A (1), B (2), C (3), D (5)

Границы:,. Диапазон: 5—1=4.


– B: →.


– C: →. [99] [101]


По цели: сортировка D (1), B (3), C (4), A (5)

Границы:,. Диапазон: 5—1=4.


– B: →.


– C: →. [99] [102]


Итоговые расстояния

При равенстве B и C (1.25) турнир решает случайно; предпочтение границам A/D обеспечивает разнообразие. [100] [103]
⁂
Как нормировать цели перед расчётом crowding distance
В оригинальном NSGA-II нормировка целей встроена в формулу crowding distance и выполняется динамически на основе текущего фронта, без предварительной глобальной нормализации. Это обеспечивает адаптивность к разным масштабам целей внутри поколения. [112] [113]
Встроенная нормализация в формуле
Для каждой цели в фронте размером :




где – индивиды с min/max по в, – текущий. Деление на диапазон автоматически масштабирует вклад каждой цели к [114], делая их сравнимыми независимо от исходных единиц (например, стоимость в рублях vs время в секундах). [112] [115]





Когда и зачем предварительная нормализация
Предварительная нормализация не обязательна в чистом NSGA-II, но рекомендуется при:
– Сильно различающихся масштабах целей между фронтами/поколениями (диапазон фронта мал, нормализация искажает).

