
ТЕМА 4. УПРАВЛЕНИЕ ТЕХНОЛОГИЧЕСКИМИ ПРОЦЕССАМИ В ДИНАМИКЕ
Лекция 12. Задачи дискретной оптимизации и динамического программирования
Моделирование процессов и объектов в металлургии. Конспект лекций
-89-
Под задачей целочисленного линейного программирования (ЦЛП)
понимается задача линейного программирования, в которой некоторые (а
возможно и все) переменные должны принимать целые значения. Задача
ЦЛП называется полностью (частично) целочисленной, если все (некоторые)
переменные являются целочисленными.
Математическая постановка задачи ЦЛП в общем виде:
Дано: целевая функция
1
,
n
jj
j
cx
=
=
∑
(12.1)
определенная на множестве X, заданном системой ограничений
1
,1,2,,,
n
ij j i
j
ax b i m
=
≥=
∑
… (12.2)
x
j
= 0, 1, 2, …, j = 1, 2, …, l, l ≤ n ;
Найти: точку минимума функции f на множестве X.
Задачу ЦЛП можно решить, например, как задачу линейного про-
граммирования без учета условий целочисленности переменных, а затем ок-
руглить найденное значение с избытком или недостатком. При этом получа-
ется некоторое целочисленное решение. Использование такого подхода тре-
бует пров
ерки допустимости данного решения. Таким методом часто поль-
зуются при решении практических задач, особенно когда значения перемен-
ных настолько велики, что можно пренебречь ошибками округления. Однако
при решении задач, в которых целочисленные переменные принимают малые
значения, округление может привести к далекому от истинного оптимума це-
лочисленному значению. Кроме того, при решении задач большой размерно-
сти такой метод слишком трудоемок. Например, пусть оп
тимальное решение
соответствующей задачи линейного программирования имеет вид х
1
= 2,4;
х
2
= 3,5. Для получения приближенного оптимального целочисленного реше-
ния необходимо рассмотреть четыре точки (2, 3), (2, 4), (3, 3), (3, 4) и вы-
брать среди них допустимую точку с наилучшим (наименьшим) значением
целевой функции. Если в задаче имеются 10 целочисленных переменных, то
следует рассмотреть 2
10
вариантов целочисленного решения, но это не га-
рантирует получения оптимального целочисленного решения задачи.
Перейдем к построению моделей целочисленного программирования
для наиболее важных практических задач.
Задача о рюкзаке
Пусть имеется n предметов, a
j
– вес, а c
j
– ценность j-го предмета, a
j
> 0, c
j
> 0. Требуется загрузить рюкзак, выдерживающий вес b, набором
предметов, суммарная ценность которых максимальна.
Введем переменную x
j
, принимающую значение 1, если j-й предмет
грузится в рюкзак, и 0 – в противном случае, j = 1, …, n. Переменные, при-
нимающие значения 0, 1, называются булевыми. Задача имеет вид