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

2629

.pdf
Скачиваний:
3
Добавлен:
15.11.2022
Размер:
73.01 Mб
Скачать

Строго говоря, это уже другие переменные должны быть, например, у:

2y 1y

 

0y 3y

 

6,

 

 

1

 

2

3

4

 

 

1y1 1y2 4y3 0y4 5,

 

 

 

1y2

2y3 1y4 5,

 

1y1

 

 

 

 

 

 

 

 

 

f (x) 25y1 14y2 19y3 24y4

min.

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

Так называемая транспортная задача (задача Монжа – Кан-

торовича, Monge–Kantorovich transportation problem) тоже может быть сведена к линейному программированию. Рассмотрим видоизменённый пример [19, 20].

Пример. Пакеты электронной информации о функционировании территориально распределенной системы в пунктах хi

вколичествах ai необходимо переслать в центры обработки данных уi в количествах bj. Общее количество требуемых пакетов информации равно имеющимся в пунктах хi.

Оценки рисков пересылки из хi в уi для одного пакета равна dij.

Требуется передать все информационные пакеты с наименьшим суммарным риском.

Пусть задана матрица рисков dij передачи из пунктов хi в уi

вколичествах ai, bj (рис. 3.20).

ai

 

 

bj

 

 

 

5

10

20

15

 

10

8

3

5

2

 

15

4

1

6

7

dij

25

1

9

4

3

Рис. 3.20. Матрица рисков dij передачи из пунктов хi в уi в количествах ai,bi

71

Эта таблица соответствует, например, схеме-графу вариантов передачи информации.

Но графическое решение этой задачи мы рассмотрим позднее. Решаем транспортную задачу как задачу линейного программирования. Это своего рода двухмерная задача – как бы по строкам и по столбцам.

Составляем систему линейных уравнений по заданной матрице – по строкам:

8x0,0 3x0,1 5x0,2 2x0,3 10 a 0 , 4x1,0 1x1,1 6x1,2 7x1,3 10 a1, 1x2,0 9x2,1 4x2,2 3x2,3 10 a2 .

и по столбцам:

8x0,0 4x1,0 1x2,0 5 b 0 , 3x0,1 1x1,1 9x2,1 10 b1, 5x0,2 6x1,2 4x2,2 20 b2 , 2x0,3 7x1,2 3x2,3 15 b3.

Используем СКМ «Маткад» (рис. 3.21).

Следовательно, в отличие ранее рассмотренной задачи здесь две системы уравнений. Для решения используется опера-

тор soln.

Следует обратить внимание на то, что у переменных индексы пишутся через запятую! Вместо простого равенства «=» в уравнениях области Given должны быть булевы операторы. Они выделяются жирным шрифтом:

72

Рис. 3.21. Решение транспортной задачи, как задачи линейного программирования

Ясно, что нас интересует только решение в целых числах – пакеты неделимы. Такие задачи называют задачами целочисленного программирования.

3.8. Целочисленное линейное программирование

Целочисленное линейное программирование – разно-

видность линейного программирования, подразумевающая, что искомые значения должны быть целыми числами.

73

Простейший метод решения задачи целочисленного программирования – сведение ее к задаче линейного программирования с проверкой результата на целочисленность. Рассмотрим пример задачи о раскрое (cut problem) [23].

Пример. Необходимо из 800 листов вырезать заготовки двух видов А, В для 1000 изделий. На одно изделие идёт 2 заготовки первого вида А и три второго В. Были предложены три способа раскроя (рис. 3.22–3.24).

Рис. 3.22. Первый способ: из листа получаются пять заготовок типа А и две типа В

Рис. 3.24. Третий способ: из листа получаются три заготовки типа А и четыре заготовки типа В

Рис. 3.23. Второй способ: из листа получаются одна заготовка типа А и пять заготовок типа В

Чёрным цветом обозначена «обрезь». Достаточно ли для выполнения работы по экранированию 800 листов, имеющихся на складе? Сколько листов нужно кроить по каждому способу раскроя?

Обозначим х1, х2, х3 количество листов, раскроенных соответственно по первому, второму и третьему способу.

Тогда:

5х1 + х2 + 3х3 – количество заготовок первого вида и 2х1 + 5х2 + 4х3 – количество заготовок второго вида.

74

По условию для выполнения заказа требуется 2000 заготовок первого вида и 3000 второго.

Поэтому

5x

x

 

3x 2000,

 

 

1

 

2

 

3

 

2x1

5x2 4x3 3000,

x

x

x

800.

 

1

 

2

 

3

 

 

Решаем задачу о раскрое, как задачу линейного программирования, в СКМ «Маткад» (рис. 3.25).

Рис. 3.25. Решение задачи о раскрое в СКМ «Маткад»

Видим, что решение не целочисленное. Но подбором можно получить целочисленное решение (рис. 3.26).

Таким образом, для выполнения заказа необходимо доставить со склада 728 листов и 91 из них кроить по второму, а остальные – по третьему способу.

В некоторых версиях MathCAD имеется пакет расширения

SOEP (Solving and Optimization Extension Pack), в котором име-

75

ется возможность уточнить тип результата – в завершающих функциях блока Given последним параметром ставится строка, указывающая тип переменной в системе уравнений. Для целой – I, для бинарной – В, для континуальной – С.

Рис. 3.26. Целочисленное решение задачи о раскрое в СКМ «Маткад»

Булево линейное программирование (Boolean linear programming) – класс задач дискретного программирования, в которых все или некоторые искомые переменные являются булевыми величинами, а критерий и ограничения – линейные.

Нелинейное программирование мы рассмотрим на примере оптимизации в задаче обеспечения надёжности, рассматриваемой в курсовой работе [24].

4. ДИСКРЕТНАЯ ОПТИМИЗАЦИЯ

Дискретная оптимизация основана по большей части на комбинаторике. Комбинаторика или комбинаторный анализ – раздел математики, изучающий дискретные объекты, множества (сочетания, перестановки, размещения и др.) и отношения на них [25…28].

76

Готфрид Вильгельм Лейбниц
(1646–1716) – немецкий фило-
соф, логик, математик, механик, физик, юрист, историк, дипломат, изобретатель и языковед

Комбинаторика связана со многими другими областями математики – алгеброй, геометрией, теорией вероятностей и имеет широкий спектр применения в различных областях знаний (например, в генетике, информатике, статистической физике).

Термин «комбинаторика» был введён в математический обиход Лейбницем, который в 1666 г. опубликовал свой труд «Рассуждения о комбинаторном искусстве».

Считается, что Лейбниц создал комбинаторику как науку; только он во всей истории математики одинаково свободно работали как с непрерывными, так и с дискретными величинами. Он заложил основы математической логики, описал двоичную систему счисления с цифрами 0 и 1, на которой основана современная компьютерная техника.

Иногда под комбинаторикой понимают более обширный раздел дискретной математики, включающий, в частности, теорию графов.

Комбинаторная оптимизация заключается в поиске оптимального объекта в конечном множестве объектов, чем очень похожа на дискретное программирование. Некоторые источники под дискретным программированием понимают целочисленное программирование, противопоставляя ему комбинаторную оптимизацию, имеющую дело с графами и другими структурами.

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

77

Во многих задачах комбинаторной оптимизации полный перебор нереален. Комбинаторная оптимизация включает в себя задачи оптимизации, в которых множество допустимых решений дискретно или может быть сведено к дискретному множеству.

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

Пример экстремальной задачи – нахождение максимального потока в частном классе графов – сетях (алгоритм Форда– Фалкерсона).

Задача нахождения кратчайшего пути в графе (алгоритм Дейкстры/Dijkstra’s algorithm) – алгоритм, изобретённый нидерландским ученым Э. Дейкстрой в 1959 г. [23]. Находит кратчайшее расстояние от одной из вершин графа до всех остальных. Алгоритм работает только для графов без рёбер отрицательного веса, широко применяется в программировании и технологиях, например, его используют протоколымаршрутизации OSPF иIS-IS.

Задача о назначениях – построение паросочетаний с минимальной суммой весов пар [23].

Экстремальная задача на множестве перестановок – задача коммивояжера [23].

Комбинаторная оптимизация – область теории оптимизации в прикладной математике, связанная с исследованием операций, теорией алгоритмов и теорией вычислительной сложности.

Вкомбинаторной оптимизации используются как математические подходы, так и методы искусственного интеллекта.

Полный перебор (или метод «грубой силы» от англ. brute force) – метод решения задачи путем перебора всех возможных вариантов [23]. Сложность полного перебора зависит от размерности пространства всех возможных решений задачи.

Вкриптографии на сложности полного перебора основывается оценка криптостойкости шифров. В частности, шифр считается криптостойким, если не существует метода «взлома» существенно более быстрого, чем полный перебор всех ключей.

78

«Жадный» алгоритм – алгоритм, заключающийся в принятии локально оптимальных решений на каждом этапе, допуская, что конечное решение также окажется оптимальным [23].

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

4.1. Метод ветвей и границ

Метод ветвей и границ (branch and bound) – общий алго-

ритмический метод для нахождения оптимальных решений различных задач оптимизации, особенно дискретной и комбинаторной оптимизации. По существу, метод является комбинаторным (алгоритм перебора) с отсевом подмножеств множества допустимых решений, не содержащих оптимальных решений. Метод был впервые предложен Ленд и Дойг в 1960 г. для решения задач целочисленного линейного программирования [29]. Для метода ветвей и границ необходимы две процедуры: ветвление и нахождение оценок (границ).

Процедура ветвления состоит в разбиении области допустимых решений на подобласти меньших размеров. Процедуру можно рекурсивно применять к подобластям. Полученные подобласти образуют дерево, называемое деревом поиска, или деревом ветвей и границ. Узлами этого дерева являются построенные подобласти.

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

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

79

мальную из полученных верхних оценок записывают в глобальную переменную m; любой узел дерева поиска, нижняя граница которого больше значения m, может быть исключен из дальнейшего рассмотрения.

Если нижняя граница для узла дерева совпадает с верхней границей, то это значение является минимумом функции и достигается на соответствующей подобласти.

4.2. Задача о рюкзаке или ранце

(Knapsack problem) [30, 31]

Термин «рюкзак» может толковаться как полезный груз, который туристы берут в поход, или груз, выводимый ракетой на орбиту, или как багажник автомобиля и пр.

Мы трактуем его так: имеется надёжное хранилище данных ограниченной ёмкости. Надо в него поместить наиболее ценную информацию.

Пусть допустимый вес «рюкзака» – допустимый объём ап- паратуры-приборов космического аппарата V = 15 (условных единиц).

Количество приборов n = 5. Объём приборов 3, 2, 4, 5, 6. Ценности приборов соответственно 6, 5, 6, 12, 10.

Задаём задачу как задачу линейного программирования

(рис. 4.1).

Следовательно, в отличие от ранее рассмотренных задач матрица имеет всего одну строку, но так как в Маткаде невозможно задать вектор v из одной строки и одного столбца, введена вторая нулевая строка.

Врасширенной версии необходимо указывать значения переменных – булево В: Minimize (f,x,"ВВВВВ").

Построим таблицу вариантов (их всего 32) (рис. 4.2).

Вэтой задаче можно относительно быстро подобрать оптимальный вариант № 30 без сложных процедур. Итак, ответ – (1,1,1,1,1,0) – все документы, кроме последнего.

80

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]