---
title: "Нелинейное программирование"
source: "https://systems-analysis.info/wiki/%D0%9D%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5"
wiki: "systems-analysis.info/wiki"
article: "Нелинейное_программирование"
language: "ru"
categories:
  - "Категория:Russian"
  - "Категория:Исследование операций"
  - "Категория:Математическое моделирование"
  - "Категория:Моделирование"
revision_id: 310
wiki_created_at: 2026-09-06T22:06:57Z
wiki_modified_at: 2026-09-06T22:06:57Z
downloaded_at: 2026-09-07T22:19:01Z
---

# Нелинейное программирование

**Нелинейное программирование (НЛП)** — это раздел математического программирования и исследования операций, который занимается задачами оптимизации, где целевая функция и/или хотя бы одно из ограничений являются **нелинейными функциями** от переменных решения.

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

## Предмет и назначение

Нелинейное программирование используется для нахождения оптимальных решений в ситуациях, когда:

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

Задачи НЛП возникают во многих областях:

- Инженерное проектирование (оптимизация конструкций, процессов).
- Экономика и финансы (оптимизация портфеля с учетом риска, моделирование рынка).
- Химическая технология (оптимизация режимов реакторов).
- Машинное обучение (обучение нейронных сетей, метод опорных векторов).
- Управление производственными процессами. Логистика (с учетом нелинейных затрат).

## Математическая постановка задачи НЛП

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

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

Множество всех наборов значений переменных, удовлетворяющих ограничениям, образует **область допустимых решений (ОДР)**.

## Отличия от линейного программирования

Нелинейное программирование существенно отличается от линейного программирования (ЛП):

- Нелинейность: Целевая функция или ограничения (или и то, и другое) содержат нелинейные зависимости.
- Свойства ОДР: Область допустимых решений в НЛП может быть невыпуклой (в отличие от ЛП, где ОДР всегда выпуклый многогранник).
- Свойства оптимума: Оптимальное решение в НЛП не обязательно находится в вершине ОДР, оно может лежать на границе или внутри области. В НЛП могут существовать локальные оптимумы, которые не являются глобальными.
- Сложность решения: Задачи НЛП, как правило, значительно сложнее для решения, чем задачи ЛП. Не существует единого универсального алгоритма, аналогичного симплекс-методу, для всех задач НЛП.

## Основные трудности и вызовы НЛП

Решение задач нелинейного программирования сопряжено с рядом трудностей:

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

## Важные классы задач НЛП

Несмотря на общую сложность, существуют важные подклассы задач НЛП, для которых разработаны эффективные методы решения:

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

## Методы решения задач НЛП

Методы решения задач нелинейного программирования (НЛП)

**I. Методы безусловной оптимизации (оптимизация без ограничений):**

- Градиентные методы (метод наискорейшего спуска, метод сопряжённых градиентов);
- Метод Ньютона и квазиньютоновские методы (например, BFGS);
- Методы с использованием аппроксимации Гессиана.

**II. Методы условной оптимизации (оптимизация с ограничениями):**

- Методы преобразования:
  - Метод штрафных функций (penalty methods);
  - Метод барьерных функций (barrier methods).
- Методы прямого поиска направлений:
  - Метод возможных направлений.
- Методы на основе условий оптимальности:
  - Методы Каруша-Куна-Таккера (KKT-условия);
  - Метод множителей Лагранжа.
- Итерационные методы:
  - Последовательное квадратичное программирование (SQP);
  - Методы внутренних точек.

**III. Методы глобальной оптимизации:**

- Эвристические и метаэвристические методы:
  - Генетические алгоритмы;
  - Имитация отжига;
  - Поиск с запретами (tabu search).
- Детерминированные методы:
  - Ветвление и границы (branch and bound);
  - Алгоритмы глобальной оптимизации для задач со специальной структурой.

## См. также

- [Исследование операций](https://systems-analysis.info/wiki/%D0%98%D1%81%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9 "Исследование операций")
- [Оптимизация](https://systems-analysis.info/wiki/%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F "Оптимизация")
- [Линейное программирование](https://systems-analysis.info/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5 "Линейное программирование")
- [Целевая функция](https://systems-analysis.info/wiki/%D0%A6%D0%B5%D0%BB%D0%B5%D0%B2%D0%B0%D1%8F_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F "Целевая функция")
- [Ограничения](https://systems-analysis.info/wiki/%D0%9E%D0%B3%D1%80%D0%B0%D0%BD%D0%B8%D1%87%D0%B5%D0%BD%D0%B8%D1%8F "Ограничения")
- [Область допустимых решений](https://systems-analysis.info/wiki/%D0%9E%D0%B1%D0%BB%D0%B0%D1%81%D1%82%D1%8C_%D0%B4%D0%BE%D0%BF%D1%83%D1%81%D1%82%D0%B8%D0%BC%D1%8B%D1%85_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B9 "Область допустимых решений")

## Литература

- *Базара М., Шетти К.* Нелинейное программирование. Теория и алгоритмы. — М.: Мир, 1982.
- *Фиакко А., Мак-Кормик Г.* Нелинейное программирование. Методы последовательной безусловной минимизации. — М.: Мир, 1972.
- *Химмельблау Д.* Прикладное нелинейное программирование. — М.: Мир, 1975.
- *Nocedal, Jorge; Wright, Stephen J.* Numerical Optimization. — Springer, 2006. (2nd ed.)
