Нелинейное и целочисленное программирование

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

(3.12)
F(x1, x2,..., xn) = Fj(xj).

(3.13)
Будем считать, что каждое слагаемое Fj(xj) представляет собой выпуклую функцию, и в дальнейшем изложении опустим индекс j, используя обозначение F(х). Разобьем весь интервал изменения х на участки Δk = [dk–1, dk] длиной hk = dk – dk–1. Если ввести новые переменные, равные длине пересечения отрезка [0, х] с отрезком Δk, т.е.

0 ≤ yk ≤ hk, k = 1, 2,..., p,

то

x = y1 + y2 +...+ yp.

(3.14)
При этом функция F(х) может быть приближенно заменена на

F~(х) = c0 + c1y1 + c2y2 +...+ cpyp.

(3.15)
Для выпуклой функции F(х) коэффициенты С образуют монотонную последовательность

c1 ≤ c2 ≤... ≤ cp.

Задача минимизации функции F(х), задаваемой формулой (3.14) при условиях (3.13), является задачей частично целочисленного программирования. Частичную целочисленность задачи можно пояснить следующим образом. Прежде всего, заметим, что оптимальное решение линейной задачи можно записать в виде

(3.16)
xопт = y1 + y2 +... + yk0, k0 ≤ p,

где y1 = h1,..., yk0–1 = hk0–1, 0 < yk < hk, а все yk для k > k0 равны нулю. Здесь по существу намечена некоторая процедура поиска оптимального решения. В начале у1 увеличивается до своего макси-мального значения. Если экстремум не достигнут, то, зафиксировав у1 на максимальном значении, увеличивают у2 от нулевого значения у2 = 0 до максимального и т.д., пока не дойдут до уk0. Если уk0 взять максимальной, то нарушится соотношение (3.16). Необходимо эту переменную уменьшить до значения, удовлетворяющего соотношению (3.16). Остальные уk (k > k0) следует положить равными нулю, что является следствием выпуклости функции цели, которая обусловливает соотношения (3.15). В соответствии с этим условием нецелесообразно брать переменную уk+1, отличную от нуля, пока уk не достигла своего максимального значения. Формально последнее утверждение может быть записано с помощью следующих логических соотношений, носящих альтернативный характер:

(3.17)
<< или уk – hk = 0, или уk+1 = 0>>.

Это условие в рассмотренной выше задаче минимизации (3.14) при условиях (3.13) не является дополнительным и автоматически выполняется при соблюдении условий (3.13).

Рассмотрим теперь невыпуклую функцию F(х) (рис. 3.10). Опять заменим исходную функцию цели приближенно кусочно-линейной функцией в соответствии с формулой (3.14). При этом не соблюдается условие монотонности коэффициентов ck [см. формулу (3.15)]. Можно попытаться довести до верхней границы вначале значение уk, соответствующее наименьшему ck, затем значение yk, соответствующее следующему по величине ci, и т.д., однако при этом отрезки Δх, из которых комплектуется оптимальное значение х, получаются несвязными. Для обеспечения их связности необходимо условие (3.17) ввести как обязательное, так как оно в данном случае автоматически не выполняется. Сведем его к целочисленной программе. Для этого воспользуемся дополнительными переменными

(3.18)
zk = 0 или 1, k = 1, 2,..., p.

Рис 3.10. К методу сведения задач невыпуклого программирования
к задачам целочисленного программирования

Тогда условие (3.17) можно заменить соотношениями:

yk ³ hkzk;

(3.19)
yk+1 ≤ hk+1zk;

k = 1, 2,..., p-1.

Нетрудно убедиться, что zk = 1 соответствует достижению уk своей верхней границы, так как первое соотношение (3.19) превращается в yk ³ hk, т.е. yk = hk (переменная yk по условию (3.13) не может быть больше hk). Значение zk соответствует условию уk < hk, так как второе соотношение (3.19) превращается в yk+1 ≤ 0, которое в силу (3.13) означает, что уk+1 = 0. Далее, замечая, что ограничения, наложенные сверху на уk в соотношениях (3.13), уже содержатся в формулах (3.19), кроме ограничения на у1, можно заменить ограничения (3.13) и (3.19) на следующие:

(3.20)
yk ³ 0, k = 1, 2,..., p;

y1 ≤ h1;

(3.21)
yk ³ hk zk;

yk+1 ≤ hkzk;

k = 1, 2,..., p-1.

В итоге исходная задача невыпуклого программирования свелась к задаче целочисленного программирования:

F~(х) = c0 + c1y1 + c2y2 +...+ cpyp = min;

yk ³ 0;

x = y1 + y2 +...+ yp;

(3.22)
z = 0 или 1;

y1 ≤ h1;

yk ³ hkzk;

yk+1 ≤ hkzk;

k = 1, 2,..., p.

Кроме того, если в исходной нелинейной программе имеют место ограничения

φi(x) ≤ 0, i = 1, 2,..., m,

их следует добавить к ограничениям (3.22).

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: