Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методы решения задач оптимизации. Учебное пособие

.pdf
Скачиваний:
1
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
1
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ
РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное
образовательное учреждение высшего образования
«ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»
Л. А. ГЛАДКОВ
Н. В. ГЛАДКОВА
МЕТОДЫ РЕШЕНИЯ
ЗАДАЧ ОПТИМИЗАЦИИ
Учебное пособие
Ростов-на-Дону – Таганрог
Издательство Южного федерального университета
2019
2
УДК 519.8(075.8) ББК 22.18я73
Г522
Печатается по решению кафедры систем автоматизированного
проектирования Института компьютерных технологий и
информационной безопасности Южного федерального университета
(протокол № 4 от 13 ноября 2019 г.)
Рецензенты:
зав. кафедрой компьютерных образовательных технологий
Санкт-Петербургского государственного университета информационных
технологий, механики и оптики, доктор технических наук, профессор
Л. С. Лисицина
кандидат технических наук, доцент кафедры САУ ЮФУ А. Я. Номерчук
Гладков, Л. А.
Г522 Методы решения задач оптимизации : учебное пособие /
Л. А. Гладков, Н. В. Гладкова ; Южный федеральный университет. – Ростов-на-Дону ; Таганрог : Издательство Южного федерального университета, 2019. – 118 с.
ISBN 978-5-9275-3436-4
Рассмотрены основные методы решения задач оптимизации. Приведе­ны методы решения задач нелинейного программирования нулевого и пер­вого порядка. Описаны основные методы формирования математических моделей различных классов оптимизационных задач. Приведена постановка задачи линейной оптимизации, описаны основные методы и приведены при­меры ее решения. Рассмотрены методы решения задач целочисленной опти­мизации, а также методы решения задач линейной оптимизации специально­го типа (транспортная задача, задача о назначениях). Учебное пособие пред­назначено для студентов вузов, обучающихся по направлениям «Информа­тика и вычислительная техника» и «Информационные системы». Учебное пособие может быть полезным для специалистов, занятых разработкой ин­теллектуальных систем, поддержки и принятия решений, новых информаци­онных технологий в науке, технике, образовании, бизнесе и экономике.
УДК 519.8(075.8)
ББК 22.18я73
ISBN 978-5-9275-3436-4
Южный федеральный университет, 2019Гладков Л. А., Гладкова Н. В., 2019Оформление. Макет. Издательство
Южного федерального университета, 2019
3
ВВЕДЕНИЕ
В повседневной жизни человек постоянно сталкивается с ситуаци­ями, когда ему необходимо выбрать один из некоторого множества воз­можных вариантов. Если такой выбор предусматривает проведение ана­лиза ситуации путем сравнения различных вариантов с помощью какой­либо количественной оценки, то можно говорить о необходимости реше­ния задачи оптимизации (по латыни optimus наилучший). Очевидно, что задача оптимизации имеет смысл, если есть несколько альтернативных вариантов ее решения [1, 2].
По содержанию задачи оптимизации весьма разнообразны. Они мо­гут быть связаны с проектированием технических устройств и технологи­ческих процессов, с распределением ограниченных ресурсов и планиро­ванием работы предприятий, наконец, с решением проблем, возникающих в повседневной жизни человека [1, 2].
Настоящее учебное пособие посвящено рассмотрению некоторых методов решения задач оптимизации и призвано помочь студентам при подготовке и проведении практических занятий. Оно является составной частью дисциплины «Методы оптимизации» наряду с конспектом лекций по данному учебному курсу. Оно предназначено для студентов, проходя­щих подготовку по направлениям «Информатика и вычислительная тех­ника» и «Информационные системы».
Список рекомендуемой для изучения литературы находится в кон­це данного пособия. Составители данного учебного пособия выражают благодарность всем авторам, упомянутым в библиографическом списке, студентам и сотрудникам кафедры систем автоматизированного проекти­рования Южного федерального университета, помогавшим в подготовке к изданию данного пособия и будут признательны всем, высказавшим свои замечания и дополнения.
1. Методы одномерного поиска
4
1. МЕТОДЫ ОДНОМЕРНОГО ПОИСКА
Методы решения задач нелинейного программирования, не имею-
щие ограничений на переменные, принято называть методами одномер- ного (прямого) поиска. Методы прямого поиска, как правило, использу­ются для решения задач нахождения экстремумов функции одной пере­менной. Методы прямого поиска относятся к последовательным алгорит­мам [3, 4].
Задача состоит в том, чтобы найти безусловный минимум функции
f(x) одной переменной, т.е. такую точку x* R, что f (x*) =
min ( )xRfx
.
В качестве исходных данных задается длина исходного интервала не­определенности – L0, включающего искомую точку минимума, а также необходимая точность вычисления – . Работа алгоритма построена на анализе значений функции f в двух точках. Метод выбора точек, в кото­рых проводится анализ, зависит от типа выбранного алгоритма. После анализа значений функции в выбранных точках производится процедура «исключения отрезка», результатом которой является сокращение длины текущего интервала неопределенности. Таким образом, в процессе реше­ния задачи длина интервала неопределенности L0 постепенно уменьшает­ся до тех пор, пока не станет меньше заданного значения . Рассмотрим несколько наиболее распространенных алгоритмов, относящихся к мето­дам прямого поиска.
1.1. Метод дихотомии
Как и все остальные методы прямого поиска, метод основан на анализе значений функции в двух точках. В методе дихотомии для выбора этих точек, текущий интервал неопределенности делится пополам, после чего в обе стороны от середины отрезка откладывается расстояние, рав­ное /2, где  – некоторое заранее заданное малое положительное число. В об­щем виде алгоритм дихотомии может быть сформулирован следующим образом [4].
1.1. Метод дихотомии
5
Шаг 1. Задаются исходные данные задачи: длина начального интер-
вала неопределенности L0 = [a0, b0]; требуемое значение точности  > 0; и некоторое малое число  > 0.
Шаг 2. Принимаем текущее значение переменной цикла k = 0. Шаг 3. Вычисляем точки
2
kk
k
ab
y

,
2
kk
k
ab
z

, в которых
будет проведен анализ значений функции f.
Шаг 4.
Вычисляем значения функции
f(yk), f(zk)
в точках
yk и zk,
сравниваем их между собой
и определяем новые границы интервала не-
определенности:
а) если f(yk) f(zk), то принимаем a
k+1
= ak, b
k+1
= zk, выполняем про-
цедуру «исключения отрезка» (рис. 1.1, а) и переходим к шагу 5;
б) если f(yk) > f(zk), то принимаем a
k+1
= yk, b
k+1
= bk, выполняем про-
цедуру «исключения отрезка» (рис. 1.1, б) и перейти к шагу 5.
Рис. 1.1.
Метод дихотомии
Шаг 5. Вычисляем длину текущего интервала неопределенности
|L
2(k+1)
| = |b
k+1
– a
k+1
| и проверяем выполнение условие окончания алгоритма:
а) если |L
2(k+1)
| , то алгоритм завершается, искомая точка мини-
мума принадлежит текущему интервалу неопределенности: x* L
2(k+1)
=
= [a
k+1
, b
k+1
]. В качестве приближенного решения задачи, соответствующе­го точке минимума функции, обычно принимают середину последнего интервала:
1. Методы одномерного поиска
6
11
;
2
kk
ab
x

б) если |L
2(k+1)
| > l, то увеличиваем значение переменной цикла k =
= k + 1 и возвращаемся к шагу 3.
Пример 1.1. Найти минимум функции f(x) = 2x2 + 6x – 8 методом
дихотомии.
1. Задаем исходные данные задачи: длина начального интервала
неопределенности L0 = [–6; 2]; требуемое значение точности  = 0,8; и некоторое малое число  = 0,2.
2. Принимаем текущее значение переменной цикла k = 0.
30. Вычисляем точки
y0 и z0:
y0 = (–6 + 2 – 0,2) / 2 = –2,1; z0 = (–6 + 2 + 0,2) / 2 = –1,9.
40. Вычисляем значения функции f(y0), f(z0):
f(y0) = 2(–2,1)2 +6(–2,1) – 8 = 8,82 – 12,6 – 8 = –11,78;
f(z0) = 2(–1,9)2 +6(–1,9) – 8 = 7,22 – 11,4 – 8 = –12,18.
Сравним
полученные значения
f(y0), f(z0)
между собой. Поскольку (y0) > f(z0), то принимаем a1 = y0 = –2,1; b1 = b0 = 2. Таким образом, после первой итерации получаем новый интервал неопределенности: [a1, b1] = = [–2,1; 2].
50. Определяем длину текущего интервала неопределенности: |L2| = = |b1 – a1| = 2 – (–2,1) = 4,1 и проверяем, выполняется ли условие оконча­ния алгоритма:
|L2| > , так как 4,1 > 0,8;
следовательно, условие окончания не выполнено, увеличиваем значение переменной цикла k = k + 1 и возвращаемся к шагу 3.
31. Вычисляем точки y0 и z0:
y1 = (–2,1 + 2 – 0,2) / 2 = –0,15; z1 = (–2,1 + 2 + 0,2) / 2 = 0,05.
41. Вычисляем значения функции f(y0), f(z0):
f(y1) = 2(–0,15)2 + 6(–0,15) – 8 = 0,045 – 0,9 – 8 = –8,855;
f(z1) = 2(0,05)2 + 60,05 – 8 = 0,005 + 0,3 – 8 = –7,695.
1.1. Метод дихотомии
7
Сравниваем
значения
f(y1) и f(z1)
. Поскольку
f(y1) < f(z1), то прини­маем a2 = a1 = –2,1; b2 = z1 = 0,05. После этого получаем новый интервал неопределенности: [a2, b2] = [–2,1; 0,05].
51. Определяем длину текущего интервала неопределенности: |L4| = = |b2 – a2| = 0,05 – (–2,1) = 2,15 и проверяем, выполняется ли условие окончания алгоритма:
|L4| > , так как 2,15 > 0,8.
Условие окончания не выполнено, увеличиваем значение перемен-
ной цикла k = k + 1 и возвращаемся к шагу 3.
32. Вычисляем точки y2 и z2:
y2 = (–2,1 + 0,05 – 0,2) / 2 = –1,125; z2 = (–2,1 + 0,05 + 0,2) / 2 = –0,925.
42. Вычисляем значения функции f(y2), f(z2):
f(y2) = 2(–1,125)2 +6(–1,125) – 8 = 2,53125 – 6,75 – 8 = –12,21875 –12,219;
f(z2) = 2(–0,925)2 +6(–0,925) – 8 = 1,71125 – 5,55 – 8 = –11,83875 –11,839.
Сравниваем
значения
f(y2) и f(z2)
. Поскольку
f(y2) < f(z2), то прини­маем a3 = a2 = –2,1; b3 = z2 = –0,925. После этого получаем новый интервал неопределенности: [a3, b3] = [–2,1; –0,925].
52. Определяем длину текущего интервала неопределенности: |L6| = = |b3 – a3| = –0,925 – (–2,1) = 1,175 и проверяем, выполняется ли условие окончания алгоритма:
|L6| > , так как 1,175 > 0,8.
Условие окончания все еще не выполнено, увеличиваем значение
переменной цикла k = k + 1 и возвращаемся к шагу 3.
33. Вычисляем точки y3 и z3:
y3 = (–2,1 + (–0,925) – 0,2) / 2 = –1,6125; z3 =
= (–2,1 + (–0,925) + 0,2) / 2 = –1,4125.
43. Вычисляем значения функции f(y3), f(z3):
f(y3) = 2(–1,6125)2 +6(–1,6125) – 8 = 5,2003125 – 9,675 – 8 =
= –12,4746875 –12,475;
f(z3) = 2(–1,4125)2 +6(–1,4125) – 8 = 3,9903125 – 8,475 – 8 =
= –12,4846875 –12,485.
1. Методы одномерного поиска
8
Сравниваем
значения
f(y3) и f(z3)
. Поскольку
f(y3) > f(z3), то прини­маем a4 = y3 = –1,6125; b4 = b3 = –0,925. После этого получаем новый ин­тервал неопределенности: [a4, b4] = [–1,6125; –0,925].
53. Определяем длину текущего интервала неопределенности: |L8| = = |b4 – a4| = -0,925 – (–1,6125) = 0,6875 и проверяем, выполняется ли усло­вие окончания алгоритма:
|L8| < , так как 0,6875 < 0,8.
Условие окончания алгоритма выполнено, процесс вычисления за-
вершен. Точка оптимума (минимума) функции f(x) = 2x2 + 6x – 8 принад­лежит текущему интервалу неопределенности L8:
x* [–1,6125; –0,925].
В процессе выполнения алгоритма было вычислено 8 значений пе-
ременных y и z (N = 8). Приближенное значение переменной x* вычислим по формуле
x*  (–0,925 + (–1,6125)) / 2 = –1,26875.
Можно также вычислить значение функции f(x*), которое она при-
нимает в точке x*:
x* = 2(–1,26875)2 +6(–1,26875) – 8 = 3,219453125 – 7,6125 – 8 =
= –12,393046875 –12,393.
1.2. Метод «золотого сечения»
Метод основан на анализе значений функции в двух точках, при
этом на всех итерациях алгоритма, кроме первой, вычисляется только од­на новая внутренняя точка, вторая внутренняя точка берется из предыду­щей итерации алгоритма. Это происходит за счет использования свойств пропорции «золотого сечения». Принцип «золотого сечения» заимствован из архитектуры и живописи [3, 4]. Применительно к решаемой оптимиза­ционной задаче принцип «золотого сечения» используется следующим образом. Пропорция «золотого сечения» имеет место, когда точка делит исходный отрезок на две неравные части так, что отношение длины всего
1.2. Метод «золотого сечения»
9
отрезка к его большей части равно отношению длины большей части от­резка к меньшей. Эта величина является константой и приблизительно равна 1,618. Алгоритм поиска на основе «золотого сечения» может быть сформулирован следующим образом [4].
Шаг 1. Задаются исходные данные задачи: длина начального интер-
вала неопределенности L0 = [a0, b0] и требуемое значение точности  > 0.
Шаг 2. Принимаем текущее значение переменной цикла k = 0. Шаг 3. Вычисляем точки y0 = a0 +
35
2
(b0 – a0), z0 = a0 + b0 – y0, в
которых будет проведен анализ значений функции f. В дальнейшем в про­цессе вычислений для простоты будем использовать значение
35
0,38196
2
.
Шаг 4.
Вычисляем значения функции
f(yk), f(zk)
в точках
yk и zk,
сравниваем их между собой
и определяем новые границы интервала не-
определенности:
а) если f(yk) f(zk), то принимаем a
k+1
= ak, b
k+1
= zk, z
k+1
= yk и y
k+1
=
= a
k+1
+ b
k+1
– yk, выполняем процедуру «исключения отрезка» (рис. 1.2, а)
и переходим к шагу 5;
б) если f(yk) > f(zk), то принимаем a
k+1
= yk, b
k+1
= bk, y
k+1
= zk и z
k+1
=
= a
k+1
+ b
k+1
– zk, выполняем процедуру «исключения отрезка» (рис. 1.2, б)
и переходим к шагу 5.
Рис. 1.2.
Метод «золотого сечения»
1. Методы одномерного поиска
10
Шаг 5. Вычисляем длину текущего интервала неопределенности
|L
(k+1)
| = |b
k+1
– a
k+1
| и проверяем выполнение условие окончания алгоритма:
а) если |L
(k+1)
| , алгоритм завершается, то искомая точка миниму-
ма принадлежит текущему интервалу неопределенности: x* L
2(k+1)
=
= [a
k+1
, b
k+1
]. В качестве приближенного решения задачи, соответствующе-
го точке минимума функции, обычно принимают середину последнего интервала:
11
;
2
kk
ab
x

б) если |L
2(k+1)
| > l, то увеличиваем значение переменной цикла k =
= k + 1 и возвращаемся к шагу 4.
Пример 1.2. Найти минимум функции f(x) = 2x2 + 6x – 8 методом
«золотого сечения».
1. Задаем исходные данные задачи: длина начального интервала неопределенности L0 = [–6; 2] и требуемое значение точности  = 0,8.
2. Принимаем текущее значение переменной цикла k = 0.
30. Вычисляем точки
y0 и z0:
y0 = –6 + 0,38196(2 – (–6)) = –2,94432; z0 = (–6 + 2 – (–2,94432)) = –1,05568.
40. Вычисляем значения функции f(y0), f(z0):
f(y0) = 2(–2,94432)2 +6(–2,94432) – 8 = 17,3380405248 – 17,66592 – 8 =
= –8,3278794752 –8,328;
f(z0) = 2(–1,05568)2 +6(–1,05568) – 8 = 2,2289205248 – 6,33408 – 8 =
= –12,1051594752 –12,105.
Сравним
полученные значения
f(y0), f(z0)
между собой. Поскольку f(y0) > f(z0), то принимаем a1 = y0 = –2,94432; b1 = b0 = 2; y1 = z0 = = –1,05568; z1 = a1 + b1 – z0 = –2,94432 + 2 – (–1,05568) = 0,11136. Таким
образом, после первой итерации получаем новый интервал неопреде­ленности: [a1, b1] = [–2,94432; 2].
50. Определяем длину текущего интервала неопределенности: |L2| = = |b1 – a1| = 2 – (–2,94432) = 4,94432 и проверяем, выполняется ли условие окончания алгоритма:
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]