Можно показать, что любая задача выпуклого нелинейного программирования может быть приближенно сведена к соответствующей задаче целочисленного программирования. Допустим, что функция цели F (х) имеет вид сепарабельной функции
Будем считать, что каждое слагаемое Fj (xj) представляет собой выпуклую функцию, и в дальнейшем изложении опустим индекс j, используя обозначение F (х). Разобьем весь интервал изменения x (рис. 18-5) на участки Δk= [dk-1, d] длиной hk = dk -dk-1. Если ввести новые переменные, равные длине пересечения отрезка [0, х] с отрезком Δk, т. е.
yk = mes {[0, х] ∩ Δk }, (18-4)
где
0 ≤yk≤hk, k=1,2,..., р, (18-5)
то
x=y1+y2+...+yp
При этом функция F (х) может быть приближенно заменена на
F(х)=c0+c1y1+c2y2+...+cpyp (18-6)
Для выпуклой функции F (х) коэффициенты ck образуют монотонную последовательность
с1≤с2≤с3≤с4≤... ≤cр. (18-7)
Задача минимизации функции F(x), задаваемой формулой (18-6) при условиях (18-4) и (18-5), является задачей частично целочисленного программирования. Частичную целочисленность задачи можно пояснить следующим образом. Прежде всего, заметим, что оптимальное решение линейной задачи можно записать в виде
xопт =y1+y2+...+yk0, k0=≤p (18-8)
где y1=h1, y2=h2,...,yk0-1=hk0-1, 0<yk<hk0 а все yk для k > k0 равны нулю. Здесь по существу намечена некоторая процедура поиска оптимального решения. В начале y1 увеличивается до своего максимального значения. Если экстремум не достигнут, то, зафиксировав y1 на максимальном значении, увеличивают y2 от нулевого значения y2 = 0 до максимального и т. д., пока не дойдут до y0k. Если y0k взять максимальной, то нарушится соотношение (18-8). Необходимо эту переменную уменьшить до значения, удовлетворяющего соотношению (18-8). Остальные yk (k > k0) следует положить равными нулю, что является следствием выпуклости функции цели, которая обусловливает соотношения (18-7). В соответствии с этим условием нецелесообразно брать переменную yk+1 отличную от нуля, пока yk не достигла своего максимального значения. Формально последнее утверждение может быть записано с помощью следующих логических соотношений, 1 носящих альтернативный характер:
"или yk - hk = 0, или yk+1 = 0". (18-9)
Это условие в рассмотренной выше задаче минимизации (18-6) при условиях (18-4) и (18-5) не является дополнительным и автоматически выполняется при соблюдении условий (18-4) и (18-5).
Рис. 18-5. Пояснение к методу сведения задач не выпуклого программирования к задачам целочисленного программирования
Рассмотрим теперь не выпуклую функцию F (х) (рис. 18-5). Опять заменим исходную функцию цели приближенно кусочно-линейной функцией в соответствии с формулой (18-6). Однако при этом не соблюдается условие монотонности коэффициентов сk [см. формулу (18-7)]. Можно попытаться довести до верхней границы вначале значение yk соответствующее наименьшему ck, затем значение yk соответствующее следующему по величине cl и т. д., однако при этом отрезки Δx, из которых комплектуется оптимальное значение х, получаются несвязными. Для обеспечения их связности необходимо условие (18-9) ввести как обязательное, так как оно в данном случае автоматически не выполняется. Сведем его к целочисленной программе. Для этого воспользуемся дополнительными переменными
Тогда условие (18-9) можно заменить соотношениями
Нетрудно убедиться, что zk = 1 соответствует достижению yk своей верхней границы, так как первое соотношение (18-11) превращается в yk≥hk т. е. yk = hk [переменная yk по условию (18-4) не может быть больше hk]. Значение zk соответствует условию yk < hk, так как второе соотношение (18-11) превращается в yk+1 ≤ 0, которое в силу (18-4) означает, что yk+1 = 0. Далее, замечая, что ограничения, наложенные сверху на yk в соотношениях (18-4), уже содержатся в формулах (18-11), кроме ограничения на y1 можно заменить ограничения (18-4) и (18-11) на следующие:
В итоге исходная задача не выпуклого программирования свелась к задаче целочисленного программирования
Кроме того, если в исходной нелинейной программе имеют место ограничения
ψi(x)≤0 i=1,2,..., m,
их следует добавить к ограничениям (18-14).
Приведенный выше способ сведения не выпуклой нелинейной программы к частично целочисленной программе реализуется за счет введения большого числа дополнительных переменных и ограничений.