
4. Целочисленное программирование.
4.1. Постановка задачи.
Среди практических задач отыскания экстремума линейной функции важное место занимают задачи с требованием целечисленности всех или части переменных. Они называются задачами целочисленного или дискретного программирования.
В терминах дискретного программирования формализуются многие важные задачи экономики, управления, планирования, проектирования, военного дела и других областей практической деятельности.
Исторически первой задачей целочисленного типа является опубликованная венгерским математиком Е. Эгервари в 1932 году задача о назначении персонала. Системные исследования в области целочисленного программирования начаты с 1955 г., когда на Втором симпозиуму по линейному программированию была рассмотрена задача о бомбардировщике, известная также как задача о ранце.
Основными источниками возникновения дискретности и целочисленности в задачах оптимизации являются:
а) физическая неделимость факторов. Например, нельзя построить 1,5 домны или закупить 3,8 самолета;
б) комбинаторные задачи. Например, задача о бродячем торговце – коммивояжере или задача теории расписаний;
в) некоторые многоэкстремальные задачи.
Рассмотрим подробнее первый класс задач, связанных с физической неделимостью факторов.
Задача целочисленного программирования формулируется так же, как и задача линейного программирования, но включается дополнительное требование, состоящее в том, значения переменных, составляющих оптимальное решение, должны быть целыми неотрицательными числами, а именно:
найти такое решение Х = (х1, х2, . . . , хn), обеспечивающее максимальное или минимальное значение линейной функции
Ф
=
сj
ּ
xj (4.41)
при
ограничениях
aij
ּ
xj
= bi
,
i
= 1, m (4.42)
xj ≥ 0, j = 1, n (4.43)
Х = (х1, х2, . . . , хn) D (4.44)
где D – некоторое множество.
Если множество D является конечным или счетным, то условие (4.44) – это условие дискретности, и данная задача является задачей дискретного программирования.
Если вводится ограничение «xj – целые числа», то получим задачу целочис-
ленного программирования, которое является частным случаем дискретного программирования.
Требование дискретности или целочисленности может быть задано либо относительно всех переменных, либо относительно некоторых из них.
Так, если все xj целочисленны, область определения целочисленной задачи геометрически отождествляется с множеством дискретных точек – узлов целочисленной решетки (рис. 4.3 – а), если целочисленны лишь отдельные xj , - с мно- жеством непересекающихся линий, плоскостей, гиперплоскостей (рис.4.3 – б).
Рис. 4.3 – а. Рис. 4.3 – б.
Если в решаемой задаче, к примеру в экономической, единица продукции составляет малую часть всего объема производства, то оптимальное решение найти обычным симплексным методом, округляя его до целых единиц, исходя из смысла задачи. В противном случае округление может привести к целочисленному решению, далекому от оптимального. В этих случаях для решения задач дискретного программирования используют специально разработанные методы.
Методы решения задач дискретного программирования по принципу подхода к проблеме делят на 3 группы: 1) методы отсечения или отсекающих плоскостей (метод Гомори); 2) комбинаторные методы (метод ветвей и границ); 3) методы случайного поиска и эвристические методы.