Задача о рюкзаке — различия между версиями

Материал из ALL
Перейти к: навигация, поиск
(Восстановление статей Logic-samara)
 
 
(не показаны 3 промежуточные версии этого же участника)
Строка 1: Строка 1:
 
[[файл:ЗР01.JPG|thumb|300|[[Математическая модель]] ЗР]]
 
[[файл:ЗР01.JPG|thumb|300|[[Математическая модель]] ЗР]]
== Определение ==
 
 
'''Задача о рюкзаке''' — это [[задача целочисленного программирования]] о загрузке заданного объёма (веса) предметами наибольшей стоимости (полезности).
 
'''Задача о рюкзаке''' — это [[задача целочисленного программирования]] о загрузке заданного объёма (веса) предметами наибольшей стоимости (полезности).
 
 
== Постановка задачи ==
 
== Постановка задачи ==
 
Имеется '''n''' видов предметов (грузов) и рюкзак ёмкостью (грузовместимостью, грузоподъёмностью) '''b'''. Пусть заданы объём (вес) '''a<sub>j</sub>''' и стоимость (полезность) '''c<sub>j</sub>''' для '''j'''-ого предмета, '''j=1,2,…,n'''. Необходимо определить вариант загрузки с максимальной стоимостью.  
 
Имеется '''n''' видов предметов (грузов) и рюкзак ёмкостью (грузовместимостью, грузоподъёмностью) '''b'''. Пусть заданы объём (вес) '''a<sub>j</sub>''' и стоимость (полезность) '''c<sub>j</sub>''' для '''j'''-ого предмета, '''j=1,2,…,n'''. Необходимо определить вариант загрузки с максимальной стоимостью.  
Строка 17: Строка 15:
  
 
Задача о рюкзаке относится к целочисленному программированию. Для решения задачи о рюкзаке применяется метод динамического программирования.
 
Задача о рюкзаке относится к целочисленному программированию. Для решения задачи о рюкзаке применяется метод динамического программирования.
 
 
== Алгоритм решения ==
 
== Алгоритм решения ==
 
Входные данные: ''' n; b; {a<sub>1</sub>,a<sub>2</sub>,...,a<sub>n</sub>}; {c<sub>1</sub>,c<sub>2</sub>,...,c<sub>n</sub>}'''.
 
Входные данные: ''' n; b; {a<sub>1</sub>,a<sub>2</sub>,...,a<sub>n</sub>}; {c<sub>1</sub>,c<sub>2</sub>,...,c<sub>n</sub>}'''.
Строка 24: Строка 21:
  
 
Выходные данные: '''L; {x<sub>1</sub>,x<sub>2</sub>,...,x<sub>n</sub>}'''.
 
Выходные данные: '''L; {x<sub>1</sub>,x<sub>2</sub>,...,x<sub>n</sub>}'''.
 
 
== Задача о рюкзаке без повторений ==
 
== Задача о рюкзаке без повторений ==
 
При дополнительном ограничении - запрете повторений предметов - получаем задачу о рюкзаке без повторений, которая формулируется следующим образом:
 
При дополнительном ограничении - запрете повторений предметов - получаем задачу о рюкзаке без повторений, которая формулируется следующим образом:
Строка 39: Строка 35:
  
 
[[файл:ЗР23.JPG]]
 
[[файл:ЗР23.JPG]]
 
 
== Задача о рюкзаке с ограниченным числом повторений ==
 
== Задача о рюкзаке с ограниченным числом повторений ==
 
При дополнительном ограничении на число повторений предметов получаем задачу о рюкзаке с ограниченным числом повторений, которая формулируется следующим образом:
 
При дополнительном ограничении на число повторений предметов получаем задачу о рюкзаке с ограниченным числом повторений, которая формулируется следующим образом:
Строка 58: Строка 53:
  
 
Входными данными являются: ''' n; b; {a<sub>1</sub>,a<sub>2</sub>,...,a<sub>n</sub>}; {c<sub>1</sub>,c<sub>2</sub>,...,c<sub>n</sub>}; {m<sub>1</sub>,m<sub>2</sub>,...,m<sub>n</sub>}'''.
 
Входными данными являются: ''' n; b; {a<sub>1</sub>,a<sub>2</sub>,...,a<sub>n</sub>}; {c<sub>1</sub>,c<sub>2</sub>,...,c<sub>n</sub>}; {m<sub>1</sub>,m<sub>2</sub>,...,m<sub>n</sub>}'''.
 
 
== Другие задачи: ==
 
== Другие задачи: ==
*[[Каноническая задача]];
+
{{Список ЗМП}}
*[[Производственная задача]];
+
*[[Общая прямая задача линейного программирования]];
+
*[[Общая двойственная задача линейного программирования]];
+
*[[Классическая транспортная задача]];
+
*[[Распределительная задача]];
+
*[[Задача о назначениях]];
+
*[[Транспортная задача с промежуточными пунктами]];
+
*[[Трёхиндексная транспортная задача]];
+
*[[Задача целочисленного программирования]].
+
 
+
 
== Ссылки ==
 
== Ссылки ==
 
* [[Участник:Logic-samara]]
 
* [[Участник:Logic-samara]]
 
[[Категория:Целочисленное программирование]][[Категория:Логистика]][[Категория:Алгоритмы]]
 
[[Категория:Целочисленное программирование]][[Категория:Логистика]][[Категория:Алгоритмы]]

Текущая версия на 12:51, 29 сентября 2016

Задача о рюкзаке — это задача целочисленного программирования о загрузке заданного объёма (веса) предметами наибольшей стоимости (полезности).

Постановка задачи

Имеется n видов предметов (грузов) и рюкзак ёмкостью (грузовместимостью, грузоподъёмностью) b. Пусть заданы объём (вес) aj и стоимость (полезность) cj для j-ого предмета, j=1,2,…,n. Необходимо определить вариант загрузки с максимальной стоимостью.

Задача о рюкзаке (ЗР) формулируется следующим образом:

ЗР01.JPG

или

ЗР02.JPG,

где xj — количество предметов j-го вида, j=1,2,…,n.

Задача о рюкзаке относится к целочисленному программированию. Для решения задачи о рюкзаке применяется метод динамического программирования.

Алгоритм решения

Входные данные: n; b; {a1,a2,...,an}; {c1,c2,...,cn}.

ЗР11.JPG

Выходные данные: L; {x1,x2,...,xn}.

Задача о рюкзаке без повторений

При дополнительном ограничении - запрете повторений предметов - получаем задачу о рюкзаке без повторений, которая формулируется следующим образом:

ЗР21.JPG

или

ЗР22.JPG,

где xj — означает выбор предмета j-го вида, j=1,2,…,n.

При этом алгоритм решения модифицируется в части строки 7, она меняется на строку вида:

ЗР23.JPG

Задача о рюкзаке с ограниченным числом повторений

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

ЗР31.JPG

или

ЗР32.JPG,

где xj — количество предметов j-го вида, j=1,2,…,n;

mj — число возможных повторений предметов j-го вида, j=1,2,…,n.

При этом алгоритм решения модифицируется в части строки 7, она меняется на строку вида:

ЗР33.JPG

Входными данными являются: n; b; {a1,a2,...,an}; {c1,c2,...,cn}; {m1,m2,...,mn}.

Другие задачи:

Ссылки