Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsii_MSPR_SFU16.doc
Скачиваний:
9
Добавлен:
01.07.2025
Размер:
6 Мб
Скачать
☆

3.5 Задачи об упаковке

В данном параграфе мы кратко рассмотрим еще один класс задач, связанных с анализом альтернатив и принятием решений. Эти задачи также относятся к задачам оптимизации, однако их особенность состоит в том, что переменные, по которым производится оптимизация, могут принимать только два значения – 0 или 1. Фактически это означает, что некоторая переменная может быть либо выбрана при решении задачи, либо нет.

3.5.1 Задача о рюкзаке

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

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

Введем -векторы и .

Обозначим переменную, определяющую выбор -го предмета: , если -й предмет упаковывается в рюкзак, и в противном случае. Эти переменные образуют вектор .

Простейшая задача о рюкзаке формулируется следующим образом.

Найти

(3.48)

при условиях

, . (3.49)

Задача (3.48), (3.49) похожа на задачу линейного программирования, но особенность ограничений не позволяет непосредственно применять, например, симплекс-метод, который может привести к нецелочисленным решениям. Однако существует большое количество методов решения этой задачи, не связанных с линейным программированием. В качестве примера приведем так называемый «жадный» алгоритм [34].

Предположим, что все предметы упорядочены по относительной стоимости:

. (3.50)

Тогда алгоритм может быть записан в виде следующего фрагмента программы на языке Паскаль.

begin

U:=0; Z:=0;

for j:=1 to n do

if U+wj <= C then

begin xj:=1; U:=U+wj; Z:=Z+pJ end

else xj:=0;

end.

Этот алгоритм определяет суммарный вес рюкзака U, суммарную стоимость упакованных предметов Z, а также оптимальный вектор .

Пример. К упаковке представлено 10 предметов, параметры которых приведены в таблице 3.5. Суммарный вес предметов, как видно из таблицы, равен кг. Общий вес рюкзака не должен превышать кг.

Таблица 3.5

Решение задачи о рюкзаке

Упорядоченные

Упорядоченные номера

1

100

5

20

1.14

9

2

250

15

16.7

1,85

4

3

120

43

2,8

2,2

10

4

370

200

1,85

2.8

3

5

50

10

5,0

5,0

5

6

70

12

5,83

5,45

8

7

100

10

10,0

5,83

6

8

300

55

5,45

10,0

7

9

400

350

1,14

16,7

2

10

220

100

2,2

20

1

В соответствии с рассмотренным алгоритмом упорядочиваем предметы по величине отношения , а затем начинаем наполнять рюкзак. Нетрудно видеть, что будут выбраны предметы 9, 4, 10, 3, 5, 6, 7, 2, 1, а предмет 8 в рюкзак не войдет.

Таким образом, вектор оптимальной загрузки имеет вид

.

Суммарный вес рюкзака получился 745 кг.

Общая стоимость загруженных предметов

1680 руб.

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