16. Целочисленные задачи линейного программирования
Цели
Нередко приходится рассматривать задачи, в которых неизвестные величины могут принимать только целочисленные значения. Например, задачи, связанные с определением необходимого числа рабочих мест или количества дорогостоящих станков. При решении таких задач с целочисленными переменными методы линейного (выпуклого) программирования неприменимы.
Другая сфера применения целочисленных моделей — выбор вариантов. В соответствующих задачах все или некоторые переменные могут принимать только два значения: 0 или 1. Такие переменные носят название булевых.
Наиболее известные методы решения целочисленных задач — метод отсечения и метод ветвей и границ. Они разработаны в начале 60-х годов XX века и затем неоднократно усовершенствовались и модифицировались. Решения примеров и задач, приводимых в этой главе, получены с помощью метода ветвей и границ и являются точными.
После того как вы выполните задания, предлагаемые в этой главе, вы будете уметь использовать для экономического анализа следующие понятия:
• неделимость;
• целочисленная задача;
• целочисленная и булева переменные;
• взаимоисключение и взаимообусловленность.
Модели
Дискретные (целочисленные) задачи математического программирования могут возникать различными путями. Существуют задачи линейного программирования, которые формально к целочисленным не относятся (требование целочисленности переменных в них в явном виде не накладывается), но которые при целочисленных исходных данных всегда обладают целочисленным планом. Этим свойством обладают транспортная задача и различные ее варианты (задача о назначениях).
Первоначальным стимулом к изучению целочисленных и дискретных задач явилось рассмотрение задач линейного программирования, в которых переменные представляли физически неделимые величины (скажем, количество единиц продукции разных видов). Для характеристики этого класса моделей используется термин «задачи с неделимостями».
Другим важным толчком к построению теории дискретного программирования явился новый подход к некоторым экстремальным комбинаторным задачам, для решения которых приходится вводить булевы переменные, носящие логический характер (Х = 1 или Х = 0).
К целочисленным (точнее, частично целочисленным) задачам линейного программирования удается свести также ряд задач, в которых явное требование целочисленности отсутствует, зато имеются некоторые особенности, выводящие их за рамки линейного программирования. Эти особенности могут относиться либо к целевой функции, либо к области допустимых решений.
Итак, можно выделить следующие основные классы задач дискретного программирования:
1) транспортная задача (см. главу 5) и ее варианты;
2) задачи с неделимостями;
3) экстремальные комбинаторные задачи;
4) задачи с неоднородной разрывной целевой функцией (см. транспортную задачу с фиксированными доплатами в главе 5);
5) задачи на неклассических областях (см. модель оптимального размера заказа с количественными скидками в главе 12).
Целочисленная задача линейного программирования (задача с неделимостями). К данному классу принадлежат Задачи распределения капиталовложении и Задачи планирования производства.
Целочисленная задача линейного программирования заключается в максимизации функции:
(1)
При условиях
(2)
Где J — некоторое подмножество множества индексов N = ={1,2,...,N}.
Если J = N (T. e. требование целочисленности наложено на все переменные), то задачу называют Полностью целочисленной; если же J ¹ N, она называется Частично целочисленной.
Модель (1)—(4) естественно интерпретировать, например, в следующих терминах. Пусть через I = 1,..., Т обозначены производственные факторы, через J = 1, ..., П — виды конечной продукции.
Обозначим далее:
Aij — количество факторов I, необходимое для производства единицы продукта J;
Bi — наличные ресурсы фактора I;
СI — прибыль, получаемая от единицы продукта J.
Пусть продукты J для JÎJ являются неделимыми, т. е. физический смысл имеет лишь их целое неотрицательное количество («штуки»). Предположим, что требуется составить производственную программу, обеспечивающую максимум суммарной прибыли и не выводящую за пределы данных ресурсов. Обозначая через Xj искомые объемы выпуска продукции, мы сводим эту задачу к модели (1)-(4).
Задача с булевыми переменными. Логическая взаимосвязь:
1) Взаимоисключение. Пусть Xj = 1, если реализуется проект АJ, И ХJ = 0 в противном случае. Запись AjÚAk означает, что в план может быть включен либо проект АJ, либо проект АK. Вместе они включены быть не могут. С помощью этой записи выражается отношение взаимоисключения между проектами.
В этих обозначениях взаимоисключение Aj Ú АK выражается неравенством ХJ + ХK £ 1;
2) Взаимообусловленность. Запись АK ® Aj («проект АK влечет за собой проект АJ») означает, что проект АK может быть включен в план только в том случае, если в план включен и проект Aj. С помощью этой записи выражается отношение между обусловливающими друг друга проектами, например когда проект Ak — результат тиражирования проекта Aj на другом объекте или когда АK базируется на результатах реализации проекта Aj.
В принятых обозначениях взаимообусловленность АK ® АJ выражается неравенством ХK £ ХJ.
Экстремальные комбинаторные задачи. Задачи данного класса, называемые также задачами выбора, состоят в отыскании среди конечного множества альтернатив одной, которой отвечает экстремальное значение принятой целевой функции.
Задача о коммивояжере — классический пример задачи выбора оптимального маршрута. Формулируется она следующим образом. Коммивояжер должен выехать из определенного города и вернуться в него, побывав в каждом из городов лишь по одному разу и проехав минимальное расстояние.
Пусть ХIj = 1, если коммивояжер переезжает из города I непосредственно в город J, и Xij = 0 в противном случае. Обозначим через СIj расстояние между городами I и J (чтобы избежать бессмысленных значений ХIj = 1, предполагается, что СIi равны достаточно большому числу).
Тогда формальная модель имеет вид
К приведенным ограничениям необходимо добавить условия на недопустимость подциклов, т. е. повторного посещения городов (за исключением исходного). Это ограничения вида
Где на переменные Zi и Zj не требуется накладывать никаких ограничений.
Общая Задача календарного планирования формулируется следующим образом. Имеется П станков (машин), на которых требуется обработать M деталей. Заданы маршруты (в общем случае различные) обработки каждой детали на каждом из станков или группе станков. Задана также продолжительность операций обработки деталей. Предполагается, что одновременно на станке можно обрабатывать не более одной детали. Требуется определить оптимальную последовательность обработки. Критерием оптимальности могут выступать продолжительность обработки всех деталей, суммарные затраты на обработку, общее время простоя станков и др. Существует огромное число постановок данной задачи, учитывающих конкретные условия производства.
Один из представителей задач данного типа — так называемая Задача о ранце. Имеется П предметов. Предмет J (J = 1, ..., П) обладает весом Wj и полезностью СJ. Пусть B — общий максимально допустимый вес предметов, которые можно положить в ранец. Требуется выбрать предметы таким образом, чтобы их общий вес не превышал максимально допустимый и при этом суммарная полезность (ценность) содержимого ранца была максимальной. Пусть ХJ = 1, если предмет положен в ранец, и ХJ = 0 в противном случае. Математическая формулировка задачи имеет вид
К классу экстремальных комбинаторных задач принадлежит также линейный и нелинейный варианты Задача о назначениях (линейный вариант такой задачи рассмотрен в главе 6).
Большинство целочисленных и комбинаторных типов задач, таких, как задача с неделимостями, задача коммивояжера, задача календарного планирования, принадлежит к разряду так называемых Трудно решаемых. Это означает, что вычислительная сложность алгоритма их точного решения — зависимость числа элементарных операций (операций сложения или сравнения), необходимых для получения точного решения, от размерности задачи я — является Экспоненциальной (порядка 2N), т. е. сравнимой по трудоемкости с полным перебором вариантов. В качестве П, например, для задачи с неделимостями служит число целочисленных переменных и число ограничений, для задачи коммивояжера — число городов (или узлов графа маршрутов), для задачи календарного планирования — число деталей и число станков. Такие задачи называют еще NP-трудными или NP-Полными. Получение их точного решения не может быть гарантировано, хотя для некоторых задач данного типа существуют эффективные методы, позволяющие находить точное решение даже при больших размерностях. Примером таких задач служит задача о ранце с булевыми переменными.
Задачи с вычислительной сложностью, определяемой Полиномиальной зависимостью от П, называются Эффективно решаемыми. К такого типа задачам принадлежат задачи транспортного типа и линейные задачи о назначениях.
Для решения целочисленных задач используются следующие методы:
1) симплекс-метод (для транспортных задач, задач о назначениях);
2) метод отсечения (метод Гомори);
3) метод ветвей и границ (в общем случае не обеспечивает получения точного решения);
4) эвристические методы (не обеспечивают получения точного решения).
Последняя группа методов может использоваться в случаях, когда применение предыдущих методов невозможно или не приводит к успеху. Кроме того, эвристические методы можно использовать для решения задач любой сложности.
< Предыдущая | Следующая > |
---|