Первую в истории оптимизационную задачу сформулировал Леонардо Фибоначчи, итальянский математик XIII века. Его задача "О гирях" посвящена проблеме взвешивания с помощью рычажных весов и создания оптимальной системы гирь для этой цели.
Задача о рюкзаке
Одно из первых упоминаний об этой задаче можно найти в статье Джорджа Балларда Мэтьюса, датированной 1897 годом.
Пусть имеется набор предметов, каждый из которых имеет два параметра – вес и ценность. И есть рюкзак, определенной вместимости. Задача заключается в том, чтобы собрать рюкзак с максимальной ценностью предметов внутри, соблюдая при этом весовое ограничение рюкзака. Дополнительно в задаче может быть оговорено максимальное количество предметов одного типа в рюкзаке (требование ассортимента).
В общем случае задача о рюкзаке бывает нескольких типов: простейший рюкзак (каждый предмет можно положить только в одном экземпляре), ограниченный рюкзак (каждый предмет кладется не более m раз), неограниченный рюкзак (каждый предмет можно укладывать сколько угодно раз), рюкзак с мультивыбором (все предметы разделены на S классов, обязательно вложить хотя бы один предмет каждого класса), мультипликативный рюкзак (имеется несколько рюкзаков, каждый со своей вместимостью) и многомерный рюкзак (у каждого предмета есть несколько характеристик, например, вес и объем, а у рюкзака – несколько ограничений).
Исходные данные к задаче представлены в табл. 15.2.
Табл. 15.2
№ предмета | Стоимость | Вес | Количество в рюкзаке |
1 | |||
2 | |||
… | … | … | … |
… | … | … | … |
Здесь – количество предметов -го типа, которые нужно положить в рюкзак. – целое, для тех предметов, которые в рюкзак класть не имеет смысла, Суммарный вес вещей , суммарная их стоимость – .
В рассматриваемом случае должно соблюдаться условие , а также, при необходимости, , где m – максимальное количество вещей одного типа в рюкзаке, .
Целевая функция будет иметь вид .
Пример организации данных в таблице Microsoft Excel (целевая функция выделена красным) показан на рис. 15.11.
Рис. 15.11 Задача о рюкзаке
Транспортная задача
Эта задача была впервые формализована французским математиком Гаспаром Монжем в 1781 году.
Допустим, требуется составить план перевозок однородного груза таким образом, чтобы общая стоимость перевозок была минимальной. Исходные данные к задаче представлены в табл. 15.3.
Табл. 15.3
Поставщики | Потребители | Запасы поставщиков | |||||||||
1 | 2 | … | j | … | n | ||||||
1 | … | … | |||||||||
2 | … | … | |||||||||
… | … |
| … | … | … | … | … | ||||
i | … | … | |||||||||
… | … | … | … | … | … | … | … | ||||
m | … | … | |||||||||
Спрос потребителей |
|
| … |
| … |
Здесь – количество единиц груза, которые нужно вывезти из i -го пункта отправления (); – количество единиц груза, которое нужно привезти в j-й пункт назначения (); – стоимость перевозки единицы груза из i -го пункта в j -й, зависит от расстояния между пунктами и некоторых других факторов. Обозначим через количество единиц груза для перевозки из i -го пункта в j -й. Тогда можно записать: общая (суммарная) стоимость перевозок ; количество груза, вывозимого из i- го пункта ; количество груза, доставляемого в j -й пункт . Количество вывезенного груза должно быть равно количеству принятого.
В рассматриваемом случае должны выполняться как минимум следующие условия (они будут ограничениями задачи): , ; , ; .
Целевая функция представляет собой суммарную стоимость перевозок и имеет вид: .
Пример организации данных в таблице Microsoft Excel показан на рис. 15.12.
Рис. 15.12 Транспортная задача
Задача коммивояжера
Задача коммивояжёра (коммивояжёр – разъездной торговый агент) – одна из самых известных задач оптимизации, заключающаяся в отыскании самого выгодного маршрута, проходящего через указанные точки хотя бы по одному разу с последующим возвратом в исходную точку. Допустим, нам необходимо посетить каждую точку строго один раз. Исходные данные к задаче представлены в табл. 15.4.
Здесь – стоимость переезда из i -го пункта в j -й, зависит от расстояния между пунктами и некоторых других факторов. Обозначим через двоичную переменную факт переезда коммивояжера из пункта в пункт . , если перемещение имеет место, и 0, если нет. Тогда можно записать: общие (суммарные) затраты на разъезды .
Каждый из пунктов нужно посетить только один раз. Чтобы отследить этот факт, введем переменные – количество выездов из пункта i, , , и – количество въездов в пункт j, , (). Величины и должны быть равны 1 для всех i и j.
Решение задачи с такими условиями может привести к неверному результату, когда будет определено несколько непересекающихся оптимальных кольцевых маршрутов. Чтобы маршрут был один, приходится ввести еще одну проверку. Будем считать, что коммивояжер выезжает из пункта 1 (и возвращается в него же). Тогда можно ввести переменную , характеризующую очередность въезда в пункт j. Для пункта, в который коммивояжер приедет из пункта 1, будет равно 0, для следующего пункта – 1, и т.д. В этом случае существование единственного замкнутого маршрута будет описано условием , где , .
Табл. 15.4
№ пункта | № пункта | Количество въездов в пункт | |||||||||
1 | 2 | … | j | … | n | ||||||
1 | – | … | … | ||||||||
2 | – | … | … | ||||||||
… | … |
| … | … | … | … | … | ||||
i | … | – | … | ||||||||
… | … | … | … | … | … | … | … | ||||
n | … | … | – | ||||||||
Количество выездов из пункта |
|
| … |
| … | ||||||
Порядок посещения пункта | – | … | … |
В рассматриваемом случае должны выполняться как минимум следующие условия (они будут ограничениями задачи): для всех ; , ; , ; , , .
Целевая функция представляет собой суммарные затраты на переезды и имеет вид: .
Пример организации данных в таблице Microsoft Excel показан на рис. 15.13.
Рис. 15.13 Задача коммивояжера