mo_referatx

advertisement
Нижегородский Государственный Технический
Университет им. Р.Е. Алексеева
Реферат.
Задача о ранце.
Выполнил:
студент 10-В-1 Сидоренко Олег
Проверил:
Суркова А.С.
Н.Новгород
2012
Оглавление
Введение. .................................................................................................. 3
Простейшая математическая модель. .................................................... 4
Пример и алгоритм решения. .................................................................. 5
Структура программы для решения задачи. ......................................... 10
Применение ............................................................................................ 12
Список используемой литературы. ........................................................ 14
2
Введение.
Задача о ранце – одна из задач оптимизации. Название это получила
от максимальной задачи укладки как можно большего возможного числа
вещей в рюкзак при условии, что общий объём или вес всех предметов
ограничен.
В общем виде, задачу можно записать как: из множества предметов со
свойствами «стоимость» и «вес», требуется отобрать некоторое число
предметов так, чтобы получить максимальную общую стоимость при
одновременном соблюдении ограничения на общий вес.
Подобные задачи часто возникают в экономике, прикладной
математике.
Есть много эквивалентных формулировок. Например, можно
рассматривать космический аппарат – спутник Земли, где в качестве
предметов выступают научные приборы. Тогда задача интерпретируется
как отбор приборов для запуска на орбиту. Правда, при этом
предполагается решенной предварительная задача - оценка
сравнительной ценности исследований, для которых нужны те или иные
приборы.
С точки зрения экономики предприятия и организации производства
более актуальна другая интерпретация задачи о ранце, в которой в
качестве «предметов» рассматриваются заказы (или варианты выпуска
партий тех или иных товаров), в качестве полезности – прибыль от
выполнения того или иного заказа, а в качестве веса – себестоимость
заказа.
Существует несколько модификаций задачи ранцевого типа:
1. Задача о ранце с условием дробимости для части предметов
(ЗРДП)
2. Задача о нескольких ранцах
3. Задача о ранце с ограниченным количеством предметов каждого
наименования
4. Многомерная задача о ранце
3
Простейшая математическая модель.
Постановка задачи.
Имеется N видов предметов, которые турист хочет взять с собою в
поход. Известны вес bi каждого предмета и его эффективность ei для
туриста. Составить список предметов, помещаемых в рюкзак, учитывая,
что предельный вес рюкзака не может быть более заданной величины B.
Необходимо, чтобы суммарный эффект от набора предметов был
максимальным.
Эту задачу можно рассмотреть в двух вариантах:
1. турист решает вопрос: сколько взять предметов каждого вида.
2. турист по поводу каждого предмета решает, брать его или нет.
Модель 1.
Пусть xi – количество предметов каждого вида. Тогда:
Это задача целочисленного линейного программирования с
размерностью 1хN. Решается методами ЦЛП: метод ветвей и границ для
ЦЛП, метод Гомори.
Модель 2.
Пусть xi – количество предметов каждого вида, может принимать
только два значения 0 или 1.
Модель задачи для второго варианта:
Это задача булевского программирования с размерностью 1хN.
Такие задачи целесообразно сводить к задачам целочисленного
линейного программирования (ЦЛП) в связи с тем, что они считаются
более простыми методами решения. Сведение булевских переменных к
целочисленному виду проводится путем замены ограничений вида
на систему ограничений:
.
Тогда размерность задачи станет равной (N+1)хN.
4
Пример и алгоритм решения.
Существуют различные методы решения этих задач: метод Гилмора-Гомори,
метод «ветвей и границ», метод Фора-Мальгранжа и др.
Классический метод Фора-Мальгранжа предполагает наличие одного критерия
стоимости J, который подлежит максимизации, и одного ограничения – веса
где ci – стоимость (эффективность) элемента решения xi;
ai – вес элемента решения xi;
b – максимальный вес для ранца;
n – количество элементов решения xi.
Каждый элемент решения принимает одно из двух значений x={0,1},
поэтому задача относится к классу задач бивалентного программирования.
Достоинство метода Фора-Мальгранжа заключается в том, что в процессе
решения в процедуре предусмотрена проверка решения на оптимальность.
В данной работе предлагается модификация классического метода ФораМальгранжа решения задачи «о ранце» для случая, когда имеется более одного
ограничения, то есть имеется вектор ограничений
где aji – вес элемента решения xi по j-ому ограничению;
bi – предельный вес для ранца по j-ому ограничению.
Пример:
Этап 1. Предварительный этап.
а) Проверка существования хотя бы одного решения. Если выполнена система
неравенств
хотя бы для одного элемента решения
, то в рассматриваемой задаче
хотя бы одно решение существует. В противном случае ненулевого решения не
существует и дальнейшее решение может быть остановлено.
б) Проверка существования тривиального решения. Если выполняется система
неравенств
то в рассматриваемой задаче существует тривиальное решение
и дальнейшее решение может быть остановлено. В противном случае, переход к
следующему пункту.
5
в) Проводится лексикографическое упорядочивание переменных по убыванию
эффективности
и в рассмотрение вводятся новые переменные
что выполняются следующие неравенства
такие,
При этом, в случае, если
то в качестве переменной yk необходимо
выбрать такую, для которой удельная эффективность больше
Формируется таблица соответствия переменных xi и yk.
Пример:
1) Предварительный этап.
а) Проверка существования хотя бы одного решения
Например, для i = 5 одновременно выполняются такие условия
Значит, хотя бы одно решение существует.
б) Проверка существования тривиального решения
, значит, тривиального решения нет.
Этап 2. Определение количества нулевых переменных r в решении.
Для определения величины r необходимо найти количество нулевых элементов в
решении, допустимое по каждому из ограничений. Для этого из суммы весов всех
элементов решения yi по j-ому ограничению последовательно вычитается
максимальный из весов до тех пор, пока разность станет не больше предельного веса
ранца по j-ому ограничению, например, если
иначе из
полученной разности вычитается следующий наибольший из незадействованных
весов,
При выполнении этого неравенства
иначе процедура
продолжается. После определения значений всех
необходимо определить
количество нулевых элементов в решении для системы ограничений. Для этого
необходимо найти наибольшее из найденных значений, поскольку как минимум одно из
ограничений начнет выполняться только с этого количества нулевых элементов.
Пример:
2) Определяем количество нулевых переменных в решении. Для этого
необходимо рассчитать количество нулевых переменных, определяемое каждым из
ограничений.
6
Тогда количество нулевых переменных в решении
Этап 3. Определение количества сочетаний вариантов решений, в которых из
общего количества n элементов r будут нулевыми, а остальные равны единице.
Пример:
3) Определение количества сочетаний вариантов решений, в которых из 5
элементов 1 будет нулевой, а остальные равны единице.
Этап 4. Генерация уникальных вариантов решений в порядке убывания
суммарной эффективности решений и заполнение таблицы, заголовочная строка
которой представлена в таблице 1.
Варианты решений задачи:
В таблице 1 в столбце № записывается номер варианта решения, в столбцы
вносятся значения элементов рассматриваемого варианта решения.
Последний столбец для рассматриваемого варианта решения заполняется, если
выполнены все ограничения в столбцах
. В противном случае это
решение будет недопустимо как минимум одним из ограничений.
Пример:
4) Формирование таблицы, содержащей варианты решения
Варианты решения с одной нулевой переменной:
В таблице нет ни одного допустимого решения, необходимо увеличить количество
нулевых переменных на единицу: r = 2.
Этап 5. В таблице определяется вариант решения с наибольшей
эффективностью (множество вариантов с одинаковой наибольшей эффективностью).
7
Если в таблице не существует ни одного допустимого системой ограничений варианта
решения, то количество нулевых элементов в решении увеличивается на 1
и осуществляется возврат на этап 3.
5) Определение количества сочетаний вариантов решений, в которых из 5
элементов 2 будут нулевыми, а остальные равны единице.
Этап 6. Выполняется проверка выбранного варианта на оптимальность. Для этого
формируются множества
Для того чтобы решение было оптимальным, необходимо выполнение
следующего условия
где
где
- ближайшее к минимальному значение из множества M +.
Если условие не выполняется, то потенциально может существовать решение с
большей эффективностью с большим количеством нулевых элементов. Для проверки
данного предположения количество элементов в решении увеличивается на 1
и осуществляется возврат на этап 3. После повторного решения задачи
найденное оптимальное решение сравнивается с полученным при меньшем
количестве нулевых элементов в решении. Из полученных вариантов в результате
выбирается вариант, дающий наибольшую эффективность.
6) Формирование таблицы, содержащей варианты решения
Варианты решения с двумя нулевыми переменными:
Этап 7. Осуществляется обратное переобозначение переменных.
Этап 8. Выполняется проверка правильности решения задачи подстановкой в
исходную систему полученного после переобозначения варианта решения задачи.
8
Пример:
7) Проверка выбранного варианта на оптимальность. Формируются множества
Для оптимальности решения необходимо выполнение следующего условия
3+3 > 2, условие выполнено.
Таким образом, найденное решение является оптимальным.
Этап 9. Записывается ответ задачи.
Пример:
Ответ:
9
Структура программы для решения задачи.
Итак, пусть у нас есть рюкзак объёма W, и список из n вещей, у каждой
из которых есть объём v[i] и стоимость c[i], и каждую из которых можно
брать сколько угодно раз. При этом все объёмы и все стоимости будут
положительными и целыми.
Заведём массив max длины W+1, в котором мы по итогам работы
алгоритма получим наибольшую стоимость, которую может иметь набор
вещей, занимающий данный объём — для каждого объёма от 0 до W
включительно. А точнее, после k итераций мы получим для каждого
объёма i max[i] — максимальную возможную стоимость набора вещей
объёма i, в котором могут быть только первые k вещей.
Не используя никаких вещей, можно получить только набор веса
0(max[0] = 0). Значит, в max[i] (0 < i <= W) нужно записать что-то, что будет
хуже, чем любая возможная стоимость набора веса i. Например, -1.
После этого надо сделать n итераций.
На k-той итерации делаем следующее:
До итерации в массиве в каждом элементе max[i] записана
максимальная возможная стоимость набора вещей веса i, который
составлен из вещей 0..k-1. Каждый раз, рассматривая элемент max[i], мы
добьёмся того, чтобы там была записана максимальная возможная
стоимость набора вещей веса i, который составлен из вещей 0..k. Для
этого проверим, в оптимальном наборе вообще есть k-тая вещь? Если нет,
то в max[i] уже записана оптимальная стоимость. Если есть, то, если из
этого набора выкинуть одну k-тую вещь, то получится оптимальный набор
вещей объёма i-v[k], оставленный из вещей 0..k. Но последний уже
записан в max[i-v[k]]. Значит, надо просто сравнить величины max[i] и
max[i-v[k]] + c[k] (если, конечно, i >= v[k]). Максимальную из них и надо
записать в max[i].
Итак, после k-той итерации мы получим в каждом max[i] наибольшую
стоимость, которую может иметь набор вещей, составленный из вещей.
Значит, после n итераций мы получим именно то, что и обещалось.
Осталось дело техники: пройтись по массиву max[i] и выбрать в нём
максимальный элемент.
Вариации:
1. Когда надо получить не только стоимость, но и сам набор.
Кроме массива max, запишем ещё и массив prev. В него мы будем
записывать какую вещь мы последний раз положили в набор. То есть, если
при сравнении max[i] и max[i-v[k]] + c[k] оказалось, что max[i-v[k]] + c[k]
лучше — это означает, что в оптимальном наборе веса i должен быть kтый предмет. Таким образом, если мы выяснили, что оптимальная
стоимость max[i] достигается при наборе веса i, то можно записать, что мы
добавили в набор вещь prev[i]. И перейти к оптимальному набору веса i —
v[prev[i]]. Там тоже посмотреть, какую вещь взяли в последний раз. И так
далее, пока не дойдём до нуля.
10
2. Когда каждую вещь можно брать только один раз.
В каждой итерации надо идти по массиву не снизу вверх, а сверху
вниз, то есть, от W к 0. Тогда получится, что при рассмотрении max[i-v[k]],
там всё ещё будет записано набор какой максимальной стоимости веса iv[k] можно получить, используя только вещи 0..k-1. Следовательно, если
получится, что в оптимальном наборе надо использовать k-тую вещь, то
она будет использована только один раз.
3. Выбор значения, как можно более близкого к данному.
Если нет стоимостей, то данный алгоритм помогает как можно
сильнее набить рюкзак. Или же, если речь идёт не о рюкзаке, и неважно,
что общий объём вещей не больше объёма рюкзака, можно из нескольких
чисел с помощью сложения получить число, как можно более близкое к
данному.
4. Когда каждую вещь можно брать определённое количество раз.
Есть вариация задачи, в которой вещь с номером i можно брать от 0
до q[i] раз. Конечно, можно «размножить» i-ю вещь на q[i] единиц и решить
задачу о 0-1 рюкзаке. Но можно поступить хитрее.
Пусть q[i] = 1 + 2 + 4 + 8 +… + 2^k + r[i], где r[i] < 2^(k+1).
Тогда рассмотрим k+2 предмета объёмом 1*v[i], 2*v[i], ..., 2^k*v[i],
r[i]*v[i] и стоимостью 1*c[i], 2*c[i], ..., 2^k*c[i], r[i]*c[i] соответственно.
Выбирая различные подмножества этих k+2 предметов, можно
получить любое количество (от 0 до q[i]) вещей типа i.
11
Применение
Задача о ранце и различные её модификации широко применяются
на практике для нахождения решения оптимальной загрузки:
- загрузка транспорта. Нахождение оптимальной загрузки транспорта
помогает сокращать расходы, получать большую прибыль.
- перевозка лифтом максимального количества людей
- оптимальное заполнение вагонов
- производственная задача с заявками на производство
определенного вида продукции с показателями трудоемкости и стоимости
-задача загрузки уникального оборудования
-задача формирования инвестиционного портфеля
-задача изготовления комплекта деталей в системе двух
параллельных станков
На основе задачи о рюкзаке в 1978 году Ральфом Мерклем и
Мартином Хеллманом была разработана Ранцевая криптосистема
Меркля-Хеллмана. Это была одна из первых криптосистем с открытым
ключом, но, к сожалению, она оказалась криптографически нестойкой и,
как следствие, не приобрела популярности.
В алгоритме шифрования не используются типы вещей, и потому
результирующий вектор х содержит лишь 0 или 1.
Р.Мерклю удалось получить обратную к числу s функцию, которая
давала бы вектор x, зная только некий «секретный» ключ, и он предложил
$100 тому, кто сможет раскрыть ранцевую систему Меркля-Хеллмана.
Меркль использовал не произвольную последовательность w[i], а
супервозрастающую, то есть такую, что w[k+1]>Σw[i], i=1,2,.., k.
Шифрование.
– сообщение x = (x1, x2, ..., xn)
– вычисляем y = b1x1 + b2x2 + …+bnxn
w = {2, 7, 11, 21, 42, 89, 180, 354} - супервозрастающая
последовательность.
Она является основой для генерации закрытого ключа. Посчитаем
сумму элементов последовательности. Она равна 706.
Далее выберем простое число q, превосходящее полученное нами
значение суммы. q = 881
Выберем также число r из интервала [1,q) r = 588.
Построим последовательность β, умножая каждый элемент из
последовательности w на r по модулю q.
2 * 588 mod 881 = 235
7 * 588 mod 881 = 592
11 * 588 mod 881 = 301
21 * 588 mod 881 = 14
42 * 588 mod 881 = 28
89 * 588 mod 881 = 353
12
180 * 588 mod 881 = 120
354 * 588 mod 881 = 236
Получим β = (295, 592, 301, 14, 28, 353, 120, 236).
Пример:
Пусть необходимо зашифровать "a". Сначала нужно перевести "a" в
двоичный код
01100001
Далее каждый бит умножается на соответствующее число из
последовательности β, а сумма значений отправляется получателю.
a = 01100001
0 * 235
+ 1 * 592
+ 1 * 301
+ 0 * 14
+ 0 * 28
+ 0 * 353
+ 0 * 120
+ 1 * 236
= 1129
Чтобы расшифровать сообщение, полученное значение умножается
на мультипликативное обратное r по модулю q.
1129 * 442 mod 881 = 372
После этого 372 раскладывается следующим образом. Сначала
выбирается наибольший элемент из w, который меньше чем 372, и
вычисляется их разность. Далее - следующий наибольший элемент,
который меньше, чем полученная разность, и повторяются эти действия,
пока разность не станет равной нулю.
372 - 354 = 18
18 - 11 = 7
7-7=0
Элементы, которые были выбраны из w , будут соответствовать 1 в
двоичной записи исходного текста.
01100001
13
Список используемой литературы.
1.
Плотников В.Н., Зверев В.Ю. Принятие решений в системах
управления. — М.: Изд-во МГТУ, 1993. — Ч.1. Теория и проектирование
алгоритмов принятия оперативных решений.
2.
Шнайер Б. Прикладная криптография. Протоколы, алгоритмы,
исходные тексты на языке Си — М.: Триумф, 2002.
3.
http://habrahabr.ru/post/93698/
14
Download