Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СА_пособие.doc
Скачиваний:
46
Добавлен:
28.04.2019
Размер:
2.19 Mб
Скачать

5.5. Дискретное программирование

Постановка задачи дискретного программирования. Многие задачи системного анализа, такие как распределение ресурсов, задачи сетевого планирования и управления, календарного планирования, опи­сываются математическими моделями дискретного программирования.

Рассмотрим общую задачу максимизации.

Найти

при условиях

g1(x1, х2,..., хп) 0;

gm(x1 ,x2 ,...,xn) 0;

X=(x1,x2,...,xn) D,

где D - некоторое множество R(n).

Если множество D является конечным или счетным, то данная задача является задачей дискретного программирования (ЗДП). Чаще всего условие дискретно­сти разделено по отдельным переменным следующим образом:

хj Dj= 1,2,..., n,

где D- конечное (или счетное) множество.

Если вводится ограничение хj - целые числа (j = 1, 2,...,n), то при­ходят к задачам целочисленного программирования (ЦП), которое яв­ляется частным случаем дискретного программирования.

В задачах дискретного программирования область допустимых решений является невыпуклой и несвязной. Поэтому отыскание реше­ния таких задач сопряжено со значительными трудностями. В частно­сти, невозможно применение стандартных приемов, используемых при замене дискретной задачи ее непрерывным аналогом, состоящих в даль­нейшем округлении найденного решения до ближайшего целочисленного. Например, рассмотрим следующую ЗЛП:

где х1, х2 х3 0, хj - целые числа (j = 1, 2, 3). Игнорируя условие цело­численное™, находим оптимальный план симплекс-методом:

Проверка показывает, что никакое округление компонент этого плана не дает допустимого решения, удовлетворяющего ограничениям этой задачи. Искомое целочисленное решение задачи хх опт= 2, х2 опт= 2, х3опт= 5.

Таким образом, для решения задачи дискретного программирова­ния (ЗДП) необходимы специальные методы. Методы решения ЗДП по принципу подхода к проблеме делят на три группы: 1) методы отсече­ния или отсекающих плоскостей; 2) метод ветвей и границ; 3) методы случайного поиска и эвристические методы.

Математические модели задач дискретного программирова­ния. По структуре математической модели задачи дискретного про­граммирования разделяют на следующие классы:

  1. задачи с неделимостями;

  2. экстремальные комбинаторные задачи;

  3. задачи на несвязных и на невыпуклых плоскостях;

  4. задачи с разрывными целевыми функциями. Рассмотрим существо некоторых из них.

Задачи с неделимостями. Математические модели задач с неде­лимостями основаны на требовании целочисленности переменных i}, вытекающем из физических условий практических задач.

К таким задачам относится задача об определении оптимальной структуры производственной программы, где {хi, х2,..., хn} - объемы выпуска продукции.

Эта задача заключается в отыскании

при

(i=1,2,…,m)

х1 0,х2 0,...,хп >0; xj -целые при j J.

Если J = N = (1, 2, ...,n), то задача называется полностью целочис­ленной, в противном случае, частично целочисленной.

Задача о ранце. Одной из наиболее распространенных задач цело­численного программирования является так называемая задача о ранце.

Рассмотрим постановку данной задачи. Турист готовится к длитель­ному переходу в горах. В рюкзаке он может нести груз, масса которого не более W. Этот груз может включать в себя п видов предметов, каж­дый предмет типа j, массой , j= 1, 2,..., п. Для каждого вида предме­та турист определяет его ценность Еj во время перехода. Задача зак­лючается в определении количества предметов каждого типа, которые он должен положить в рюкзак, чтобы суммарная ценность снаряжения была максимальной.

Обозначим через хj количество предметов j-го типа в рюкзаке.

Тогда математическая модель задачи такова:

при ограничениях

- целое, i= 1,2,...,m.

Экстремальные комбинаторные задачи. В данных задачах не­обходимо найти экстремум некоторой целевой функции, заданной на конечном множестве, элементами которого служат перестановки из п символов (объектов).

Одной из наиболее простых задач этого класса является задача о назначениях: найти такую перестановку 1 , р2,..., рп) из чисел 1, 2, 3, ..., п, при которой обеспечен p по всем перестановкам 1, р2..., рп).

Каждая такая перестановка может быть представлена точкой в n2- мерном евклидовом пространстве или в виде матрицы .

Вводим переменные хij= 1, если i-й механизм предназначен для j-й работы; хij = 0 - в противном случае.

Очевидно, что должно выполняться условие

Данные ограничения означают, что один механизм может быть предназначен для выполнения только одной работы. Тогда задача бу­дет состоять в определении таких чисел ij}, при которых достигает­ся минимум функционала .

Задача о коммивояжере. Имеется (п + 1) город. Задана матрица С = расстояний между городами. Выезжая из исходного города А0 коммивояжер должен побывать во всех остальных городах по одному разу и вернуться в город A0. Требуется определить, в каком порядке следует объезжать города, чтобы суммарное пройденное расстояние было минимально.

Введем переменные хij = 1, если коммивояжер переезжает из населенного пункта Аi в Аj; хij = 0 - в противном случае.

Математическая модель задачи имеет следующий вид:

при условиях

,(j=1,2,…,n);

, (i=1,2,…,n);

, (i, j=1,2,…,n, i j);

где ui, uj - произвольные целые и неотрицательные числа.

Коммивояжер выезжает из каждого города один раз, и въезжает один раз в каждый город.

Метод ветвей и границ для задачи целочисленного програм­мирования. Рассмотрим частично целочисленную задачу ЛП. Требуется минимизировать

при условиях

, (j=1,2,…,m);

,(i = l,2,...,n);

хi - целые числа.

Процесс поиска оптимального решения начинают с решения непре­рывной задачи ЛП. Если полученный при этом оптимальный план не удовлетворяет условию целочисленности, то значение целевой функции дает нижнюю оценку для искомого решения, т.е. min z = .

Пусть некоторая переменная не получила в плане целочисленного решения. В целочисленном плане значение хi0 следует либо уменьшить, по крайней мере до i0], либо увеличить, по край­ней мере до [хi0]+ 1.

Если границы изменения хi0 заранее не заданы, то их можно вы­числить, решив для этого две вспомогательные задачи ЛП. Эти задачи состоят в максимизации и минимизации хi0.

Теперь для каждого фиксированного целочисленного значения хi0 в найденном отрезке (хi0min, хi0max) находят minz, решая задачу ЛП с заданными огра­ничениями и с дополнительным ограничением .

Таким образом, все указанные выше возможности можно пред­ставить в виде некоторого дерева, в котором вершина 0 отвечает плану , а каждая из соединенных с ней вершин отвечает оптимальному плану следующей задачи: минимизировать z при заданных условиях. Каждой из таких вершин приписывают оценку , которая равна minz при указанных выше ограничениях. Оче­видно, , для всех k.

Если оптимальные планы полученных задач удовлетворяют усло­виям целочисленности, то план с минимальной оценкой и будет оптимальным планом исходной задачи. В противном случае воз­никает необходимость в продолжении ветвления. При этом каждый раз для очередного ветвления выбирают вершину с наименьшей оценкой.

Любой маршрут в дереве от начальной вершины 0 до некоторой вершины определяет допустимую последовательность выбора цело­численных решений для переменных. Процесс продолжают до тех пор, пока продолжение ветвления становится невозможным.

Каждая конечная вершина отвечает некоторому допустимому це­лочисленному плану. Вершина с минимальной оценкой дает опти­мальный план.

Рассмотрим алгоритм решения задачи целочисленного программи­рования. На первом этапе необходимо задать множество G(0), опреде­ляемое условиями. Далее формируются множества , заданными и дополнительным условием или ,где [хj0] - целая часть xj0.

Далее осуществляется вычисление оценок. Для множества G(0) оценку (G(0)) определяют как , где - оптимальный план непрерывной задачи ЛП.

Для множества оценку определяют аналогично:

где -оптимальный план задачи.

Если множество оказывается пустым, ему приписывают оценку .

На следующем этапе осуществляется нахождение планов. Если план удовлетворяет условию целочисленности, -оптимальный план задачи. Если удовлетворяет условию целочисленности, он является оптимальным планом задачи с дополнительными условиями и некоторым планом исходной задачи.

Далее выполняют ветвление. Ветвление производят в том случае, когда план не удовлетворяет условию целочисленности. Пусть - одна из нецелочисленных компонент плана, где , тогда множество разбивают на два подмножества: , причем

;

Укажем некоторые особенности метода ветвей и границ для задач ЦП.

1.Если все коэффициенты сj целевой функции - целые при и равны нулю при у > п1 то оценку можно заменить на более сильную оценку , где ]а[ обозначено наименьшее целое, но не меньшее, чем а, т.е. округленное до ближайшего целого с избытком.

  1. Алгоритм метода в вычислительном отношении представляет собой последовательность задач ЛП, причем конечность алгоритма следует из предполагаемой ограниченности множества G.

  2. Из описания алгоритма следует, что в применении метода вет­вей и границ для полностью целочисленных и для частично цело­численных задач нет никакой разницы.

Геометрически этот метод можно интерпретировать таким обра­зом. Гиперплоскость, определяемая целевой функцией задачи, вдавливается внутрь многогранника планов соответствующей задачи ЛП до встречи с ближайшей целочисленной точкой этого многогранника.

Пример применения метода ветвей и границ для решения задач дискретного программирования. Постановка задачи следу­ющая: минимизировать функцию при ограничениях

;

x1, x2 – целые числа.

Нулевой шаг. Оптимальный план задачи ЛП тогда имеем .

Поскольку план Х0 не удовлетворяет условию целочисленности, возьмем его нецелочисленную компоненту и разобьем множество :

.

Первый шаг. Решаем две задачи ЛП, заключающиеся в ми­нимизации исходной задачи по множествам .

В первом случае минимум достигается при

и

Множество оказывается пустым, поэтому

Разбиваем на и , где и . Обозначим , ,

Второй шаг. Решаем две задачи ЛП, заключающиеся в миними­зации исходной задачи при дополнительном ограничении и , тогда

и

и

.

Производим разветвление множества :

где , .

Обозначим , , ,

Третий шаг. Решаем две задачи ЛП, заключающиеся в минимизации исходной задачи по множествам и .

Находим ={3,2} и ; и , и ; и .

Дерево решений приведено на рисунке 5.2.

Итак получен целочисленный план = {3,2}, причем

План = {3,2} - оптимальный, так как

Рисунок 5.2. Дерево решений задачи целочисленного программирования