Санкт-Петербургский государственный университет
Опубликован: 08.06.2009 | Доступ: свободный | Студентов: 663 / 131 | Оценка: 4.65 / 4.35 | Длительность: 07:44:00
Специальности: Программист
Лекция 5:

Задача ГП с ограничениями

< Лекция 4 || Лекция 5: 123 || Лекция 6 >

Связь между ГП и линейным программированием

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

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

\sum\limits_{j=1}^{n}c_{j}x_{j}\rightarrow \min (\max)

при ограничениях

\sum\limits_{j=1}^{n}a_{ij}x_{j}\geq (\leq,\ =)\ b_i,\
  i=\overline{1,m},
x_{j}\geq 0,\ j=\overline{1,n}.

Одним из подходов к решению задач ГП является замена ее задачей линейного программирования, в которой целевая функция и функции ограничений являются линейными аппроксимациями соответствующих позиномов. Желающие могут прочесть об этом в статье [6]. Мы же рассмотрим на примере реализацию этого подхода для частного случая задач ГП, когда все позиномы являются мономами.

Пример 36 Найдем длины сторон параллелепипеда, имеющего наибольший объем, если площадь нижней и верхней стороны не превышает 20 (см ^2 ), площадь фронтальных сторон не превышает 10 (см ^2 ), площадь боковых сторон не превышает 5 (см ^2 ).

Введем обозначения: x_1 - ширина параллелепипеда, x_2 - длина, x_3 - высота параллелепипеда. Тогда математическая модель задачи примет вид:

x_{1}x_{2}x_{3}\rightarrow\max

при ограничениях:

x_1 x_2\leq 20,
x_2 x_3\leq 10,
x_1 x_3\leq 5,
x_1>0,\ x_2>0,\ x_3>0.

Эта задача эквивалентна следующей задаче ГП в каноническом виде:

g_0(x) =x_{1}^{-1}x_{2}^{-1}x_{3}^{-1}\rightarrow\min

при ограничениях:

g_1(x)=\frac 1{20} x_1 x_2\leq 1
g_2(x)=\frac 1{10} x_2 x_3\leq 1,
g_3(x)=\frac 1{5} x_1 x_3\leq 1,
x_1>0,\ x_2>0,\ x_3>0.

Все позиномы в задаче являются мономами. Сведем эту задачу ГП к задаче ЛП. Выполним следующую замену переменных: \ln(x_j) =t_j,\ j=1, 2, 3. Получим эквивалентную задачу линейного программирования, в которой переменные могут иметь любой знак:

\ln(g_0)=-t_1-t_2-t_3 \rightarrow\min

при ограничениях

t_1+t_2\leq \ln 20,
t_2+t_3\leq\ln 10,
t_1+t_3\leq\ln 5,
t_j \gtrless 0,\ j=\overline{1,3}.

Сведем эту задачу к задаче ЛП в стандартном виде, выполнив замену:

t_j=v_j-d_j,\ v_j \ge 0, \ d_j\ge 0,\ j=\overline{1,3}.

В результате получим следующую задачу ЛП:

-v_1-v_2-v_3+d_1+d_2+d_3 \rightarrow\min

при ограничениях

v_1+v_2-d_1-d_2\leq \ln 20,
v_2+v_3-d_2-d_3\leq\ln 10,
v_1+v_3-d_1-d_3\leq \ln 5,
v_j \ge 0,\ d_j\ge 0,\ j=\overline{1,3}.

Для решения задач ЛП в этом курсе мы будем использовать пакет FinPlus, в котором реализован двухфазный модифицированный симплекс-метод. Версия пакета FinPlus для свободного копирования и руководство пользователя размещены на сайте exponenta.ru:

 FinPlus: ввод данных задачи

Рис. 5.1. FinPlus: ввод данных задачи
 FinPlus: лист с отчетом о решении задачи

Рис. 5.2. FinPlus: лист с отчетом о решении задачи

Решим задачу в пакете FinPlus. На рис. 5.1 показано диалоговое окно для ввода размерности задачи, типа целевой функции и имени задачи. На рис. 5.2 приведен фрагмент рабочего листа с данными задачи и ее решением:

\min\ln(g_0) = -3.45,\ v_{1} = 1.15,\ v_{2} = 1.84,\
v_{3}=0.46,\ d_{1} = d_{2} = d_{3} = 0.

Выполнив обратную замену x_j = \exp(t_j)\ (\ j=1, 2, 3), получим:

\min g_0 =0.0317,\ x_1 = 3.16,\ x_2 = 6.33,\ x_3 = 1.58.

Таким образом, максимальный объем параллелепипеда, равный \frac1{0.0317}= 31.55 (см ^3 ), достигается при следующих размерах: ширина x_1 = 3.16 (см), длина x_2=6.33 (см), высота x_3 = 1.58 (см).

Замечание. При такой постановке задачи ГП (когда все позиномы являются мономами) не обязательно приводить задачу ГП к каноническому виду.

О методах решения задач ГП с ограничениями

Методы решения задач ГП можно разделить на прямые, решающие прямую задачу ГП, и двойственные, решающие соответствующую двойственную задачу. Ряд авторов считают двойственные методы наиболее эффективными. Мы не будем излагать общие методы решения задач ГП в этом вводном курсе, так как они довольно сложны. Сообщим только, что на практике чаще всего используют метод внутренней точки ([7]) и метод Ражгопала-Бриккера ([9]). Последний метод основан на обобщенном линейном программировании и идее метода генерации столбцов.

Краткие итоги

Приведены постановки прямой задачи ГП с ограничениями в канонической форме и двойственной к ней задачи. Введено определение совместной задачи ГП. Сформулированы теоремы двойственности для задачи ГП с ограничениями. Описана связь между теорией выпуклого программирования и геометрическим программированием, а также связь между линейным и геометрическим программированием. Описано преобразование задачи ГП в выпуклую задачу. Описано преобразование мономиальной задачи ГП в задачу ЛП. Рассказано об основных методах решения задач ГП с ограничениями. Все понятия объяснены на примерах.

< Лекция 4 || Лекция 5: 123 || Лекция 6 >
Васильевич Иван
Васильевич Иван

Так это же динамическое программирование на основе математической индукции.