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

Дискретное программирование [discrete programming] — раздел оптимального программирования, изучающий экстремальные задачи, в которых на искомые переменные накладывается условие целочисленности, а область допустимых решений конечна. Таким образом, здесь используется модель общей задачи математического программирования с дополнительным ограничением: x1, x2, …, xn — целочисленны.

В экономике огромное количество задач носит диск­ретный характер. Прежде все­го это связано с физической неделимостью многих факторов и объектов расчета: нап­ример, нельзя построить 2,3 завода или купить 1,5 автомобиля. Все отраслевые задачи строятся в расчете на определенное количество предприятий или проектных вариантов. В планировании распространены типовые размеры предприятий, типовые мощности агрегатов — все это вносит дискретность в расчеты. Наконец, упомянем плановые показатели: годовые, месячные или суточные периоды — это дискретные, раздельные периоды, у каждого из которых есть свое начало и свой конец.

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

Для решения задач Д.п. применяется ряд способов. Самый простой — решение обычной задачи линейного программирования с проверкой полученного результата на целочисленность и округлением его до приближенного целочисленного решения. Скажем, получилось из расчета, что надо построить 2,3 завода, выбираются либо два, либо три (что, разумеется, требует дополнительного анализа), точ­но так же не 1,5 автомобиля, а два или один. Часто в практических задачах искомые переменные принимают только два значения — единицу и нуль. (Их называют задачами булева линейного программирования.) Это означает, что данный вариант решения принимается или отвергается (строить или не строить шахту, приобретать или не приобретать машину и т.п.).

Иногда Д.п. называется целочисленным. Как видно из приведенных примеров, это не лишено основания, хотя некоторые математики считают такой термин неправильным (исходя из того, что, строго говоря, дискретное — это не обязательно целочисленное, например, ряд чисел — 1,1 — 1,2 — 1,3… — дискретный, но не целочисленный). Поэтому правильнее, очевидно, считать целочисленное программирование частным случаем дискретного.