Uploaded by pasha.pozhidaev

Реферат МДПЗПР Пожидаев 12вар

advertisement
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ
ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ
УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«ВОРОНЕЖСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
Факультет энергетики и систем управления
Кафедра электропривода, автоматики и управления в технических системах
Реферат
по «Методы дискретного программирования в задачах принятия решений»
«Метод Ленд и Дойг для задачи о рюкзаке»
Выполнил: студент
группы МИУ-231
Пожидаев П.Н.
Проверил:
Мурзинов В.Л.
Воронеж 2023
Содержание
Введение…………………………………………………………………………...3
Формулировка задачи рюкзака…………………………………………………..3
Классификация методов………………………………………………………….4
Метод Лэнд и Дойг………………………………………………………………..6
Заключение………………………………………………………………………...8
Список литературы………………………………………………………………..8
2
Введение
Классическая проблема рюкзака (о загрузке) известна очень давно, ее
формализация приведена ниже. Предположим, что у нас N разных объектов,
каждый объект имеет вес wi и утилиту pi, более того, есть максимальный вес
W, который можно упаковать в рюкзак. Нам необходимо собрать такой набор
объектов P, чтобы их полезность была наибольшей и не превышала общий
вес W. Конечно, никто не собирается писать программу, чтобы лучше
загрузить рюкзак во время похода или путешествия, это слишком просто и
никто об этом не задумывается, но есть и более широкое приложение.
Проблема загрузки (проблема рюкзака) и ее различные модификации широко
используются на практике в прикладной математике, криптографии,
экономике и логистике для нахождения решений по оптимальной загрузке
различных транспортных средств: Самолеты, корабли, железнодорожные
вагоны и т.д.
Рассматриваемая нами проблема является NP-завершенной, т.е. не
существует полиномиального алгоритма, который решает ее в разумные
сроки, то есть проблема. Либо мы выбираем быстрый алгоритм, но не всегда
известно, как оптимально решить проблему, либо мы выбираем точный
алгоритм, что опять-таки непрактично для больших значений. Есть
несколько модификаций проблемы.
1.
2.
3.
4.
5.
каждый элемент может быть взят только один раз.
каждый элемент можно брать сколько угодно раз.
каждый элемент может быть взят определенное количество раз.
есть несколько ограничений на размер рюкзака.
некоторые элементы имеют более высокий приоритет, чем другие.
Алгоритмы решения можно разделить на два типа: точные и
приблизительные. Точно: использование динамического программирования,
полной грубой силы, ветвисто-граничного метода (уменьшение полной
грубой силы). Приблизительные алгоритмы: Жадный алгоритм.
Загрузка, рюкзак, проблема с рюкзаком. Заявление и NP-завершенность
проблемы
Задача о рюкзаке является одной из классических задач комбинаторной
оптимизации, которая находит широкое применение в различных сферах,
таких как экономика, производство, логистика и информационные
технологии. Ее привлекательность заключается в том, что она представляет
собой простую и в то же время сложную задачу, требующую глубокого
анализа и поиска оптимальных решений.
3
Задача о рюкзаке связана с выбором оптимального набора элементов из
заданного множества с ограничениями. Она формулируется как поиск такого
подмножества элементов, которое максимизирует суммарную ценность или
выгоду, при условии, что суммарный вес выбранных элементов не
превышает заданную вместимость рюкзака.
Формулировка задачи рюкзака
Проблема рюкзака - одна из задач комбинаторной оптимизации.
Классическая проблема рюкзаков известна давно. Вот формулировка: есть
набор из N объектов, каждый объект имеет вес Wi и утилиту Vi, i=(1,2...N),
нужно собрать набор с максимальной утилитой так, чтобы он имел вес не
больше W, где W - это объем рюкзака. Традиционно предполагается, что Wi,
Vi, W, P являются целыми числами, которые не являются отрицательными,
однако существуют и другие утверждения, условия которых могут
отличаться. Возможны следующие вариации проблемы:
Каждый элемент может быть взят только один раз. Формализуй. Дадим
конечный набор объектов, для каждого из которых будем иметь значение pi и
вес wi, тогда мы должны максимизировать, с учетом ограничений, где W емкость рюкзака, и xi=1, если объект берется за загрузку и xi=0, если не
берется. Если есть только одно ограничение на размер рюкзака, то задача
называется одномерной, иначе многомерной.
Каждый элемент может быть взят м раз. Формализация аналогична, с той
лишь разницей, что xi принимает значения на интервале (0..m).
Каждый элемент может быть взят любое количество раз. Очевидно, что xi
находится на интервале (0...[W/wi]), квадратные скобки обозначают целую
часть числа.
Когда значения весов и цен элементов не являются целыми числами, такая
задача называется непрерывной задачей рюкзака, а когда числа являются
целыми, то это дискретная задача. Например, если мы имеем дело с
золотыми слитками, мы не можем их разделить, это дискретная проблема, но
если мы имеем дело с золотым песком, то это непрерывная проблема
рюкзака.
НП - полнота проблемы
Большинство используемых алгоритмов имеют полиномиальное время
работы, если входной размер n, то его время работы оценивается в
наихудшем случае как k - константа. Но есть проблемы, которые не могут
быть решены в полиномиальном времени. Это класс NP - полные проблемы.
Некоторые проблемы в этом классе похожи на проблемы, которые решаются
4
в полиномиальное время, но это не так. Проблема называется NPзавершенной, если для нее нет многочленного алгоритма. Алгоритм
называется многочленным, если его сложность O(N) ограничена сверху
некоторым многочленом N в наихудшем случае. Такие проблемы очень часто
возникают в различных областях: в булевой логике, теории графов, теории
множеств, кодировании информации, алгебре, биологии, физике, экономике,
автоматах, теории языка. Предполагается, что проблемы NP-завершенности
очень сложно решить, и если найти полиномиальный алгоритм хотя бы для
одной из этих проблем, то такой алгоритм существует для каждой проблемы
в данном классе. Многие исследователи работали над поиском
полиномиальных алгоритмов для таких задач, и все же для такого большого
количества NP-задач полиномиальный алгоритм не был найден ни для одной
из них. Из всего этого следует, что если известна NP-завершенность задачи,
то лучше потратить время на построение примерного алгоритма, чем
пытаться построить полиномиальный алгоритм, или, если позволяют
условия, алгоритмы с экспоненциальной сложностью
Методы решения проблемы рюкзака
Классификация методов
На практике очень часто возникают проблемы с NP-комплектом, например,
проблемы с рюкзаками. Конечно, надежд найти для них полиномиальный
алгоритм мало, но это не значит, что проблема не может быть решена. В
первую очередь, очень часто можно построить полиномиальный алгоритм
для NP-задачи, который, конечно, дает приблизительное, а не точное
решение, но работает в реальном времени. Во-вторых, данные могут быть
такими, что экспоненциальный алгоритм, например, брутальная сила, может
работать в течение разумного периода времени. Точные методы включают в
себя:
Полная сила перебора, метод ветви и границы, DP - программирование.
Приблизительно: Жадные алгоритмы. Полная грубая сила - грубая сила
принуждения всех вариантов (всех состояний) - менее эффективный, но
точный метод. Ветро-граничный метод - по сути, уменьшение грубой силы с
усечением явно "плохих" решений. ДП - это алгоритм, основанный на
принципе оптимальности Беллмана. Жадный алгоритм - основан на поиске
относительно хорошего и "дешевого" решения.
Динамическое программирование
В основе динамического метода программирования лежит принцип
оптимальности Беллмана: "Независимо от состояния системы до следующего
шага, управление на этом шаге должно быть выбрано таким образом, чтобы
выигрыш на этом шаге плюс оптимальное выигрыш на всех последующих
шагах был оптимальным". Проще говоря, оптимальное решение на шаге i
5
найдено на основе ранее найденных оптимальных решений на предыдущих
шагах. Это означает, что для того, чтобы найти оптимальное решение на
последнем шаге, мы должны сначала найти оптимальное решение для
первого шага, затем для второго шага, и так далее, пока мы не пройдем все
шаги до последнего.
Метод разветвления и связывания
По сути, этот метод является вариацией метода грубой силы, очевидно
исключающей неоптимальные решения. Для полного поиска мы можем
построить дерево решений. Если у нас есть оптимальное решение P, мы
пытаемся его улучшить, но если решение в той ветке, которую мы сейчас
ищем, определённо хуже, чем P, то вы должны остановить поиск и выбрать
другую ветку для поиска. Например, приведен предел веса рюкзака W=5.
Затем, используя метод ветвей и границ, мы можем свести дерево поиска к
такому дереву. Мы сразу видим, что количество вариантов для поиска
уменьшается сразу. А именно, есть 8 вариантов результатов вместо 24 ранее.
Но не всегда можно просеять много вариантов, всегда можно найти такие
входные данные, для которых метод ветвей и границ дает оценку в то же
время, что и полный поиск.
Алгоритм жадности
В случае жадного алгоритма мы действуем следующим образом: Мы
сортируем товары в порядке убывания их соответствующих затрат на
единицу продукции. где Пи - относительная стоимость единицы продукции i,
Wi - вес продукции i, а Vi - стоимость продукции i. Всего N пунктов.
Попробуем поместить в рюкзак все, что можно поместить, и в то же время
самое дорогое по параметру P. Оценим сложность метода. Чтобы
отсортировать его, нам нужно пройти через N элементов в цикле. Сум, что то
же самое в общем случае. Скорость высокая по сравнению с другими
алгоритмами, но если посмотреть поближе, то можно увидеть, что не всегда
удается получить точное решение.
Допустим, 50 кг помещается в рюкзак, затем, следуя алгоритму, берем
первый элемент, затем второй, третий элемент больше не помещается. Так
что в рюкзаке у нас 30 кг стоимостью 160 кубов, оставшееся место - 20 кг. Но
если взять вторую и третью вещицу, то общий вес поместится в рюкзак, а его
стоимость составит 220 кубов. Алгоритм жадности не обеспечивает
оптимального решения, поэтому он является алгоритмом
аппроксимации. Видно, что качество решения можно улучшить, сравнивая
полученный результат с максимальным коэффициентом Vmax ;.
Предполагается, что все объекты не превышают размер рюкзака, в
противном случае их можно легко исключить из рассмотрения.
6
Рассмотрим задачу непрерывного рюкзака, условия для нее одинаковые,
единственное отличие в том, что мы можем взять часть элемента. То есть,
объекты можно разделить. Допустим, у нас есть тот же набор, тогда по
алгоритму Жадности мы берем первый и второй элемент, третий элемент
полностью не подходит, потому что есть место только для 20 кг, но мы
можем взять части элементов, тогда мы берем вес третьего элемента или его
стоимость, поэтому рюкзак у нас полностью загружен, стоимость загрузки
была равна 240 USD. Для задачи непрерывного рюкзака оптимальным
решением будет алгоритм Greedy.
Метод Лэнд и Дойг
(или метод динамического программирования) для задачи о рюкзаке является
мощным и эффективным алгоритмом, позволяющим найти оптимальное
решение задачи о рюкзаке.
Принцип работы
Метод Лэнд и Дойг основан на идее динамического программирования,
который применяется для решения задач оптимизации. Основная идея
заключается в том, чтобы разбить исходную задачу на более простые
подзадачи, решения которых могут быть использованы для нахождения
решения исходной задачи.
При решении задачи о рюкзаке методом Лэнд и Дойг используется таблица
или массив для хранения результатов подзадач и оптимальных решений. Это
позволяет избежать повторных вычислений и значительно ускоряет процесс
поиска оптимального решения.
Шаги алгоритма
1. Инициализация таблицы: Сначала создается таблица, в которой строки
соответствуют предметам, а столбцы – вместимости рюкзака от 0 до
максимальной вместимости. Начальные значения заполняются нулями.
2. Заполнение таблицы: Затем происходит последовательное заполнение
таблицы, где для каждого предмета и каждой вместимости рассчитывается
максимальная ценность предметов, которые можно уложить в рюкзак с
данной вместимостью.
3. Нахождение оптимального решения: В конце алгоритма оптимальное
решение находится в правом нижнем углу таблицы.
Пример
7
Предположим, у нас есть следующие предметы: предмет 1 (вес 2, ценность
6), предмет 2 (вес 3, ценность 5), предмет 3 (вес 5, ценность 10). И у нас есть
рюкзак вместимостью 5.
Таблица для хранения промежуточных результатов будет выглядеть
приблизительно так:
```
0 1 2 3 4 5
1 0 0 6 6 6 6
2 0 0 6 6 11 11
3 0 0 6 6 11 12
```
Заключение
Метод Ленд и Дойг для задачи о рюкзаке представляет собой мощный
инструмент решения комбинаторных оптимизационных задач. Он широко
применяется в различных областях и является фундаментальным алгоритмом
динамического программирования.
Этот метод подчеркивает важность эффективной структуры данных для
решения сложных задач.
Заключение
При изучении проблемы рюкзаков были определены три основных алгоритма
решения. Полная перезарядка, ДП - программирование, алгоритм жадности.
Рассматривался также метод ветвей и границ, но в качестве уменьшения
метода полной грубой силы. Все методы разделены на две группы. Первая
группа - это точные методы, включающие в себя FD алгоритмы, метод
полных ветвей и метод границ. Вторая группа - приблизительные методы,
алгоритм жадности принадлежит к этим методам.
Выбор того или иного метода является спорным, это зависит от проблемы и
поставленных целей. Если необходимо найти точное решение, то, очевидно,
следует использовать точные методы, для небольшого объема входных
данных (элементов до 10-20), использовать метод грубой силы или метод
ветви и границы из-за простоты реализации, для крупного следует
использовать DP алгоритм. Если точность решения не важна или входные
8
данные таковы, что ни один из точных методов не полезен, можно
использовать только алгоритмы аппроксимации.
Однако можно комбинировать различные методы, чтобы ускорить решение,
или даже использовать некоторые "уловки" для конкретного примера. Нет
смысла надеяться на полиномиальный алгоритм, так как проблема NPзавершена. Конечно, эта проблема очень важна с точки зрения реального
применения. Несмотря на свою "старину", рюкзак не забыт, наоборот,
интерес к этой проблеме растет. Оптимальная загрузка транспорта помогает
сократить расходы, получить больше прибыли. Эта проблема также
используется в криптографии и прикладной математике.
Список литературы
1. Алгоритмы и структуры данных / N. Wirth. - Переведено с английского
- М.Мир, 1988.-360 с., больной.
2. Визгунов Н.П. Динамическое программирование в экономических
задачах с использованием системы MATLAB/ Н.П. Визгунов. Н.Новгород: ННСУ, 2005. - 48 с.
3. Кузюрин, Н.Н.. Сложность комбинаторных алгоритмов. Лекционный
курс / Н.Н.Кузюрин, С.А.Фомин. - 2004. - 79 с.
4. Гери, М. Вычислительные машины и неразрешимые задачи / М. Гери,
Д. Джонсон. - М.: Мир, 1983 - 416 с.
5. Окулов С.М. Программирование в алгоритмах / С.М. Окулов. МОСКВА: БИНОМ. Лаборатория знаний, 2005. - 341 с.: иллюстрация.
6. Окулов С.М. Вычислительная техника в задачах / С.М. Окулов, А.А.
Пестов, О.А. Пестов. - Киров: Издательский дом Всероссийского
государственного педагогического университета, 1997. - 343с.
7. Царев В.А. Проектирование, анализ и программная реализация
структур и алгоритмов данных: Учебное пособие / В.А. Царев, А.Ф.
Дробанов. - Череповец. 2005. - 169 с.
8. Акулич И.Л. Динамическое программирование в примерах и задачах:
Учебное пособие для студентов специальных экономических вузов /
И.Л. Акулич. - М.: Высшая школа. 1985. - 319 p.
9. Хаггари, Р. Дискретная математика для программистов / Р. Хаггари. М.: Техносфера, 2004. - 320с.
10.Корман, Т. Алгоритмы: Строительство и анализ / Т. Кормен, К.
Лазерсон, Р. Ривест, К. Штайн. - Редактор И. В. Красиков. - Второе
издание. - Уильямс, 2006. 1296 с.
9
Download