Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Методы решения задач оптимизации. Учебное пособие
.pdf
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 и проверяем, выполняется ли условие
окончания алгоритма:
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
