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

Дискретное программирование - раздел, изучающий задачи, в которых на искомые переменные налагается условие целочисленности, а область допустимых решений конечна

Дискретными являются задачи с логическими переменными, принимающими только два значения - нуль или единица

Искомые переменные

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

Непрерывными называются такие величины, которые в заданных граничных условиях могут принимать любые значения.
Дискретными называются такие переменные, которые могут принимать только заданные значения.

Зависимости между переменными (как целевые функции, так и ограничения):

Question

Почему этот раздел не назвали целочисленым?

Answer

Назвать дискретное программирование целочисленным нельзя.

Например, ряд вместимостью в М(1,3; 1,6; 1,9; ...) дискретный, но не целочисленный.
Значит целочисленное программирование - частный случай дискретного программирования.

Задачи дискретного программирования

Задачи дискретного программирования:

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

Методы решения

Метод Гомори

Используя симплексный метод, находят решения задачи без учета целочисленных переменных

Составляют дополнительное ограничение для переменной, которая в оптимальном плане задачи имеет максимальное дробное решение, а в оптимальном плане должно быть целочисленное.

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

В случае необходимости составляют еще одно дополнительное ограничение и продолжают процесс до получения оптимального плана задачи.

Метод ветвей и границ

!Pasted image 20241002124504.png

Задача решается без учета целочисленности.

Далее ...

На основе полученного решения составляются дополнительные ограничения:

X[   ] и X[X]+1.

Решается еще две задачи ЛП, в каждую из которых вошли все исходные ограничения и одно из дополнительных

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

На одной из ветвей целочисленной решение, тогда значение целочисленной функции при данных значениях переменных сравнивается с верхним () граничным значением Е, если полученное значение хуже, то оно отбрасывается, а если лучше, то принимается за граничное

Типы задач дискретного программирования

Задачи о контейнерных перевозках

Задачи о назначении

Транспортные задачи

Транспортная задача является специальным типом задач линейного программирования.

Экономическая постановка задачи

Имеется m поставщиков и n потребителей некоторой продукции.
Заданы тарифы (стоимость) перевозок единицы продукции от поставщиков к потребителям.
Известны объемы запасов у поставщиков и потребности каждого потребителя.
Требуется составить план поставок продукции от поставщиков к потребителям так, чтобы суммарная стоимость перевозок была минимальной.

Задачу можно представить в виде матрицы размерами m x n где поставщики это строчки, а потребители это столбцы. Ячейки содержат в себе стоимость перевозки единицы продукции от поставщиков к потребителям.

Математическая постановка задачи

mini=1mj=1ncij Xij - целевая функция
Ограничения:
i=1mXij=bj,  j=1,2,,n - Каждый потребитель должен быть удовлетворен
j=1nXij=ai,  i=1,2,,m - Каждый поставщик должен вывезти со склада всю продукцию
Xij0

Xij - количество продукции вывозимое от i-го поставщика к j-ому потребителю
Здесь:
xij - объем;
cij - тариф поставки продукции от i-го поставщика к j-ому потребителю;
bj - потребности потребителей в продукции;
ai - запасы продукции у поставщиков.

Исходные данные транспортной задачи

Заданы мощности поставщиков и потребности потребителей, а также транспортные затраты на перевозку единицы продукции от поставщиков к потребителям.

Пример

!Pasted image 20241002131428.png

[594530155620221043037264020502035]

Целевая функция: 5X11+9X12+4X13+5X14+X21+5X22+5X23+6X24+2X31+2X32+10X33+4X34+3X41+7X42+2X43+6X44min
Ограничения:
X11+X21+X31+X41=20
X12+X22+X32+X42=50
X13+X23+X33+X43=20
X14+X24+X34+X44=35

X11+X12+X13+X14=30
X21+X22+X23+X24=20
X31+X32+X33+X34=30
X41+X42+X43+X44=40

Для того чтобы решить задачу, надо проверить задачу на условие закрытости
Для этого находим суммы:
Объема производства: 30+20+30+40=120
Объема потребления: 20+50+20+35=125

Модель открытая, так как объем производства не покрывает объем потребления. Необходимо добавить еще одного поставщика
ΔОбъем потребленияОбъем производства=5
Значит вводим фиктивного поставщика с тарификацией перевозок 0, (т.к. 120<125).
т.е. в таблицу вводим фиктивный объем производства = 5, (125120=5)

Задача принимает вид:

[59453015562022104303726400000520502035]

Целевая функция:
5X11+9X12+4X13+5X14+X21+5X22+5X23+
6X24+2X31+2X32+10X33+4X34+3X41+7X42+2X43+6X44+0X51+0X52+0X53+0X54min
Ограничения:
X11+X21+X31+X41+X51=20
X12+X22+X32+X42+X52=50
X13+X23+X33+X43+X53=20
X14+X24+X34+X44+X54=35

X11+X12+X13+X14=30
X21+X22+X23+X24=20
X31+X32+X33+X34=30
X41+X42+X43+X44=40
X51+X52+X53+X54=5

Теперь модель закрытая и можно решать задачу.
=СУМПРОИЗВЕД((план), (тарифы)) min