%% gomory.latex %%

\documentclass[a4paper,11pt,draft]{article}
\usepackage[T2A]{fontenc}
\usepackage[cp1251]{inputenc}
\usepackage[russian]{babel}

\begin{document}

\title{Реализация смешанно-целочисленных отсечений Гомори}

\author{А. О. Махорин\footnote{Кафедра прикладной информатики,
Московский авиационный институт, Москва, Россия. E-mail:
{\tt <mao@mai2.rcnet.ru>}, {\tt <mao@gnu.org>}.}}

\date{Декабрь 2007 г.}

\maketitle

\section{Математическое обоснование}

Рассмотрим смешанно-целочисленную задачу:
$$\min\{c^Tx:x\in X\},\eqno(1)$$
$$X=\{x\in{\bf Z}_+^p\times{\bf R}_+^{n-p}:Ax=b\},\eqno(2)$$
и допустим, что получено базисное оптимальное решение ЛП-релакса\-ции
данной задачи, т. е. для этого решения указано разбиение переменных на
базисные и небазисные $x=(x_B,x_N)$, а также соответствующее разбиение
$A=(B\,|\,N)$, где $B$ --- невырожденная матрица, называемая базисом.
Указанное разбиение позволяет явно выразить базисные переменные через
небазисные посредством надлежащего эквивалентного преобразования
исходной системы ограничений-равенств:
$$Ax=b\ \ \Leftrightarrow\ \ Bx_B+Nx_N=b\ \ \Leftrightarrow\ \ x_B=
-B^{-1}Nx_N+B^{-1}b.$$
Таким образом:
$$x_B=-\widetilde{A}x_N+\beta,\eqno(3)$$
где матрица $\widetilde{A}=(\alpha_{ij})=B^{-1}N$ --- это так называемая
симплекс-таблица, вектор $\beta=(\beta_i)=B^{-1}b$ --- преобразованный
вектор правых частей ограничений. Поскольку в базисном решении все
небазисные переменные находятся на своих нулевых границах, то такое
решение имеет вид:
$$x^*=(x_B^*,x_N^*)=(\beta,0),\eqno(4)$$
т. е. значения базисных переменных равны соответствующим компонентам
вектора $\beta$ (при этом $\beta\geq 0$, поскольку базисное решение
предполагается оптимальным, а значит, допустимым для ЛП-релаксации).

Если $x^*$ является целочисленно допустимым решением, т. е. оптимальные
значения всех целочисленных переменных являются целыми числами, то $x^*$
одновременно является оптимальным решением задачи (1)---(2), поэтому
процесс решения заканчивается. В противном случае найдется хотя бы одна
целочисленная переменная, оптимальное значение которой (для
ЛП-релаксации) является дробным. Понятно, что такой переменной может
быть только базисная переменная, поскольку оптимальные значения всех
небазисных переменных равны нулю, а значит, являются целыми числами.
Итак, пусть такой переменной является целочисленная переменная
$(x_B)_i$, причем $(x_B^*)_i=\beta_i\notin{\bf Z}$, т. е. требование
целочисленности нарушено. Строка симплекс-таблицы (3), соответствующая
выбранной базисной переменной, имеет вид:
$$(x_B)_i=\beta_i-\sum_{j\in N}\alpha_{ij}(x_N)_j.\eqno(5)$$
Поскольку симплекс-таблица (3) эквивалентна исходной системе
ограни\-чений-равенств $Ax=b$, то равенство (3), а значит, и равенство
(5) должны выполняться для любого целочисленно допустимого решения
$x\in X$. Отсюда следует, что условие:
$$\beta_i-\sum_{j\in N}\alpha_{ij}(x_N)_j\in{\bf Z}\eqno(6)$$
является правильным (valid) условием для $X$. Заметим, что $\beta_i$
можно представить в виде суммы
$\beta_i=\lfloor\beta_i\rfloor+f(\beta_i)$, где
$\lfloor\cdot\rfloor$ --- целая часть числа, $f(\cdot)$ --- дробная
часть числа. Поэтому условие (6) можно заменить следующим эквивалентным
условием:
$$f(\beta_i)-\sum_{j\in N}\alpha_{ij}(x_N)_j\in{\bf Z},\eqno(7)$$
которое также является правильным для $X$.

Точка, в которой сумма $\sum_{j\in N}\alpha_{ij}(x_N)_j$ равна нулю,
не может принадлежать множеству $X$, поскольку значение $\beta_i$
предполагается дробным. Это позволяет представить $X$ в виде объединения
двух непересекающихся множеств:
$$X=X^+\cup X^-,\eqno(8)$$
где
$$X^+=\{x\in X:\sum_{j\in N}\alpha_{ij}(x_N)_j>0\},\eqno(9)$$
$$X^-=\{x\in X:\sum_{j\in N}\alpha_{ij}(x_N)_j<0\}.\eqno(10)$$
Поскольку $f(\beta_i)<1$, то неравенство:
$$f(\beta_i)-\sum_{j\in N}\alpha_{ij}(x_N)_j<1\eqno(11)$$
является правильным для $X^+$. Но тогда из (11) с учетом (7) следует,
что неравенство:
$$f(\beta_i)-\sum_{j\in N}\alpha_{ij}(x_N)_j\leq
0\ \ \Leftrightarrow\ \ \sum_{j\in N}\alpha_{ij}(x_N)_j\geq f(\beta_i)
\eqno(12)$$
также является правильным для $X^+$. Аналогично, так как $\beta_i$ есть
дробная величина, то $f(\beta_i)>0$. Поэтому неравенство:
$$f(\beta_i)-\sum_{j\in N}\alpha_{ij}(x_N)_j>0\eqno(13)$$
является правильным для $X^-$, откуда с учетом (7) следует, что тогда
неравенство:
$$f(\beta_i)-\sum_{j\in N}\alpha_{ij}(x_N)_j\geq
1\ \ \Leftrightarrow\ \ \frac{f(\beta_i)}{1-f(\beta_i)}\sum_{j\in N}
(-\alpha_{ij})(x_N)_j\geq f(\beta_i)\eqno(14)$$
также является правильным для $X^-$.

Далее нам потребуется следующая

Т е о р е м а. Пусть неравенство $a^Tx\geq b$ является правильным для
множества $P$, а неравенство $c^Tx\geq d$ --- правильным для множества
$Q$. Тогда неравенство:
$$\sum_j\max(a_j,c_j)x_j\geq\min(b,d)\eqno(15)$$
является правильным для множеств $P\cup Q$ и ${\rm conv}(P\cup Q)$.

\def\arraystretch{1.5}

Неравенство (12) является правильным для множества $X^+$, а неравенство
(14) --- правильным для множества $X^-$. Поэтому в соответствии с
приведенной теоремой неравенство:
$$\sum_{j\in N}\max[\alpha_{ij},\frac{f(\beta_i)}{1-f(\beta_i)}
(-\alpha_{ij})](x_N)_j\geq f(\beta_i)\eqno(16)$$
является правильным для исходного смешанно-целочисленного множества
$X=X^+\cup X^-$. Так как $0<f(\beta_i)<1$, то
$f(\beta_i)/[1-f(\beta_i)]>0$. Поэтому:
$$\max[\alpha_{ij},\frac{f(\beta_i)}{1-f(\beta_i)}
(-\alpha_{ij})]=\left\{
\begin{array}{ll}
\alpha_{ij},&\mbox{\ если\ }\alpha_{ij}\geq 0\\
\displaystyle\frac{f(\beta_i)}{1-f(\beta_i)}(-\alpha_{ij}),&
\mbox{\ если\ }\alpha_{ij}<0\\
\end{array}
\right.\eqno(17)$$
что позволяет записать неравенство (16) в следующем виде:
$$\sum_{j\in N^+}|\alpha_{ij}|(x_N)_j+\frac{f(\beta_i)}{1-f(\beta_i)}
\sum_{j\in N^-}|\alpha_{ij}|(x_N)_j\geq f(\beta_i),\eqno(18)$$
где $N^+=\{j\in N:\alpha_{ij}\geq 0\}$, $N^-=\{j\in N:\alpha_{ij}<0\}$.

В оптимальной точке $x^*$ (см. (4)) неравенство (18) нарушается, так как
в этой точке $x_N^*=0$, а $f(\beta_i)>0$, поскольку значение базисной
переменной $(x_B^*)_i=\beta_i$ предполагается дробным. С другой стороны,
неравенство (18) является правильным для множества допустимых решений
$X$ задачи (1)---(2). Следовательно, преобразуя указанное неравенство к
виду равенства (введением переменной избытка) и добавляя его к исходной
системе ограничений-равенств $Ax=b$, мы можем отсечь дробное решение
$x^*$ от смешанно-целочисленного множества $X$.

Неравенство (18) можно усилить следующим образом. Заметим, что это
неравенство является следствием условия (7), которое не нарушится, если
любой коэффициент $\alpha_{ij}$ при {\it целочисленной} переменной
$(x_N)_j$ заменить коэффициентом $\alpha_{ij}-\delta$, где $\delta$ ---
произвольное {\it целое} число. Если $\alpha_{ij}-\delta\geq 0$, то
$j\in N^+$, и поэтому соответствующий коэффициент при $(x_N)_j$ в
неравенстве (18) будет равен $|\alpha_{ij}-\delta|$. Если же
$\alpha_{ij}-\delta<0$, то $j\in N^-$, и поэтому соответствующий
коэффициент при $(x_N)_j$ в неравенстве (18) будет равен
$f(\beta_i)/[1-f(\beta_i)]\cdot|\alpha_{ij}-\delta|$. Поскольку все
коэффициенты в неравенстве (18) являются положительными, то для
получения возможно более сильного отсечения необходимо сделать эти
коэффициенты как можно меньше. Отсюда следует, что если
$\alpha_{ij}-\delta\geq 0$, то наименьшее значение
$|\alpha_{ij}-\delta|$ получается при выборе
$\delta=\lfloor\alpha_{ij}\rfloor$ и равно $f(\alpha_{ij})$, а если
$\alpha_{ij}-\delta<0$, то наименьшее значение $|\alpha_{ij}-\delta|$
получается при выборе
$\delta=\lceil\alpha_{ij}\rceil=\lfloor\alpha_{ij}\rfloor+1$ и равно
$1-f(\alpha_{ij})$ (в последнем случае $\alpha_{ij}$ предполагается
дробным). Таким образом, в качестве {\it наиболее подходящего}
коэффициента при целочисленной переменной $(x_N)_j$ в неравенстве (18)
следует взять величину:
$$\min\{f(\alpha_{ij}),\frac{f(\beta_i)}{1-f(\beta_i)}
[1-f(\alpha_{ij})]\}.\eqno(19)$$
Чтобы придать формуле (19) более удобный вид, рассмотрим случай:
$$f(\alpha_{ij})\leq\frac{f(\beta_i)}{1-f(\beta_i)}[1-f(\alpha_{ij})].$$
Поскольку $f(\beta_i)<1$, то $1-f(\beta_i)>0$. Следовательно:
$$\begin{array}{l}
f(\alpha_{ij})[1-f(\beta_i)]\leq f(\beta_i)[1-f(\alpha_{ij})
]\ \ \Leftrightarrow\\
f(\alpha_{ij})-f(\alpha_{ij})f(\beta_i)\leq f(\beta_i)-f(\beta_i)
f(\alpha_{ij})\ \ \Leftrightarrow\\
f(\alpha_{ij})\leq f(\beta_i).\\
\end{array}$$
Таким образом, наиболее подходящий коэффициент при целочисленной
переменной $(x_N)_j$ равен:
$$\left\{\begin{array}{ll}
f(\alpha_{ij}),&\mbox{\ если\ }f(\alpha_{ij})\leq f(\beta_i)\\
\displaystyle\frac{f(\beta_i)}{1-f(\beta_i)}[1-f(\alpha_{ij})],&
\mbox{\ если\ }f(\alpha_{ij})>f(\beta_i)\\
\end{array}\right.\eqno(20)$$
(Заметим, в частности, что если исходный коэффициент $\alpha_{ij}$
является целочисленным, то наиболее подходящий коэффициент будет равен
нулю.)

В результате усиления неравенства (18) за счет выбора наиболее
подходящих коэффициентов при целочисленных переменных в соответствии с
формулой (20) мы приходим к окончательному неравенству, которое
называется {\it смешанно-целочисленным отсечением Гомори}:
$$\begin{array}{l}
\displaystyle\sum_{j\in N_{\bf Z}^+}f(\alpha_{ij})(x_N)_j+
\frac{f(\beta_i)}{1-f(\beta_i)}\sum_{j\in N_{\bf Z}^-}[1-f(\alpha_{ij})]
(x_N)_j\;+\\
\displaystyle\sum_{j\in N_{\bf R}^+}|\alpha_{ij}|(x_N)_j+
\frac{f(\beta_i)}{1-f(\beta_i)}\sum_{j\in N_{\bf R}^-}|\alpha_{ij}|
(x_N)_j\geq f(\beta_i),\\
\end{array}\eqno(21)$$
где
$$\begin{array}{l}
N_{\bf Z}^+=\{j\in N:(x_N)_j\in{\bf Z},\ f(\alpha_{ij})\leq
f(\beta_i)\},\\
N_{\bf Z}^-=\{j\in N:(x_N)_j\in{\bf Z},\ f(\alpha_{ij})>
f(\beta_i)\},\\
N_{\bf R}^+=\{j\in N:(x_N)_j\in{\bf R},\ \alpha_{ij}\geq 0\},\\
N_{\bf R}^-=\{j\in N:(x_N)_j\in{\bf R},\ \alpha_{ij}<0\}.\\
\end{array}\eqno(22)$$
(Следует отметить, что хотя неравенство (21) является более сильным,
чем неравенство (18), величина нарушения этих неравенств в точке $x^*$
одна и та же и равна $f(\beta_i)$.)

Р. Гомори показал\footnote{R. E. Gomory, An algorithm for the mixed
integer problem, Technical Report RM-2597, RAND Corp., 1960.}, что
алгоритм решения смешанно-целочислен\-ной задачи (1)---(2), основанный
на последовательном добавлении отсечений вида (21) к исходной системе
ограничений-равенств $Ax=b$, определяющих множество $X$, позволяет найти
оптимальное решение указанной задачи за конечное число шагов (при
условии, что $c^Tx\in{\bf Z}$ для всех $x\in X$).

\section{Дополнительные преобразования}

Для вычисления строки симплекс-таблицы в пакете GLPK предусмотрена
подпрограмма \verb|glp_eval_tab_row|, которая возвращает результат в
следующем формате:\footnote{Подробнее см. справочное руководство по
пакету GLPK.}
$$(x_B)_i=\sum_{j\in N}\xi_{ij}(x_N)_j.\eqno(23)$$
Данный формат отличается от стандартного формата (5) тем, что здесь
небазисные переменные могут иметь ненулевые нижние границы, конечные
верхние границы, или иметь фиксированное значение. (Небазисные
переменные также могут быть свободными, т. е. неограниченными по знаку.
Однако, если хотя бы одна такая переменная входит в строку
симплекс-таблицы с ненулевым коэффициентом, соответствующая строка
не используется для генерации отсечения.)

Переход от формата (23) к стандартному формату (5) выполняется следующим
образом.	Множество всех небазисных переменных $N$ разбивается на три
непересекающихся подмножества:
$$N=N_L\cup N_U\cup N_S,\eqno(24)$$
где $N_L$ --- множество небазисных переменных, у которых активна нижняя
граница, $N_U$ --- множество небазисных переменных, у которых активна
верхняя граница, $N_S$ --- множество небазисных переменных, имеющих
фиксированное значение. В зависимости от статуса (24) отдельной исходной
небазисной переменной $(x_N)_j$ используется следующая подстановка:
$$(x_N)_j=\left\{
\begin{array}{ll}
(l_N)_j+y_j,&\mbox{если\ }j\in N_L\\
(u_N)_j-y_j,&\mbox{если\ }j\in N_U\\
(s_N)_j,&\mbox{если\ }j\in N_S\\
\end{array}
\right.\eqno(25)$$
где $y_j\geq 0$ --- преобразованная небазисная переменная, заменяющая
исходную небазисную переменную, $(l_N)_j$ --- нижняя граница исходной
небазисной переменной, $(u_N)_j$ --- верхняя граница исходной небазисной
переменной, $(s_N)_j$ --- фиксированное значение исходной небазисной
переменной. Эта подстановка позволяет преобразовать строку
симплекс-таблицы (23) к стандартному формату (5):
$$\begin{array}{r@{\ }c@{\ }l}
(x_B)_i&=&\displaystyle\sum_{j\in N_L}\xi_{ij}(x_N)_j+
\sum_{j\in N_U}\xi_{ij}(x_N)_j+\sum_{j\in N_S}\xi_{ij}(x_N)_j=\\
&=&\displaystyle\sum_{j\in N_L}\xi_{ij}[(l_N)_j+y_j]+
\sum_{j\in N_U}\xi_{ij}[(u_N)_j-y_j]+\sum_{j\in N_S}\xi_{ij}(s_N)_j=\\
&=&\displaystyle\beta_i-\sum_{j\in N}\alpha_{ij}y_j,\\
\end{array}$$
где
$$\alpha_{ij}=\left\{\begin{array}{ll}
-\xi_{ij},&\mbox{если\ }j\in N_L\\
+\xi_{ij},&\mbox{если\ }j\in N_U\\
0,&\mbox{если\ }j\in N_S\\
\end{array}\right.\eqno(26)$$
$$\beta_i=\sum_{j\in N_L}\xi_{ij}(l_N)_j+\sum_{j\in N_U}\xi_{ij}(u_N)_j
+\sum_{j\in N_S}\xi_{ij}(s_N)_j.\eqno(27)$$
(Заметим, что стандартный формат (5) также предполагает
неотрицательность базисной переменной $(x_B)_i$. Однако, поскольку в
формуле отсечения (21) используется только дробная часть текущего
значения этой переменной $f(\beta_i)$, преобразование $(x_B)_i$ не
требуется.)

Использование формулы (21) для коэффициентов (26) и (27) дает отсечение,
выраженное в терминах преобразованных небазисных переменных:
$$\sum_{j\in N_L\cup N_U}\overline{\varphi}_jy_j\geq\overline{\rho},
\eqno(28)$$
где $\overline{\varphi}_j$ --- коэффициенты отсечения,
$\overline{\rho}=f(\beta_i)$ --- правая часть отсечения. Поэтому далее
выполняется подстановка, обратная к (25):
$$y_j=\left\{
\begin{array}{ll}
(x_N)_j+(l_N)_j,&\mbox{если\ }j\in N_L\\
(u_N)_j-(x_N)_j,&\mbox{если\ }j\in N_U\\
\end{array}
\right.\eqno(29)$$
чтобы выразить полученное отсечение в терминах исходных небазисных
переменных:
$$\begin{array}{l}
\displaystyle\sum_{j\in N_L\cup N_U}\overline{\varphi}_jy_j\geq
\overline{\rho}\ \ \Rightarrow\\
\displaystyle\sum_{j\in N_L}\overline{\varphi}_j[(x_N)_j-(l_N)_j]+
\sum_{j\in N_U}\overline{\varphi}_j[(u_N)_j-(x_N)_j]\geq\overline
{\rho}.\\
\end{array}$$
Таким образом, отсечение принимает вид:
$$\sum_{j\in N_L\cup N_U}\varphi_j(x_N)_j\geq\rho,\eqno(30)$$
где
$$\varphi_j=\left\{
\begin{array}{ll}
+\overline{\varphi}_j,&\mbox{если\ }j\in N_L\\
-\overline{\varphi}_j,&\mbox{если\ }j\in N_U\\
\end{array}
\right.\eqno(31)$$
$$\rho=\overline{\rho}+\sum_{j\in N_L}\overline{\varphi}_j(l_N)_j-
\sum_{j\in N_U}\overline{\varphi}_j(u_N)_j.\eqno(32)$$

Среди небазисных переменных в неравенстве (30) могут быть как
структурные, так и вспомогательные переменные, в то время как пакет
GLPK допускает строки (ограничения), содержащие только структурные
переменные. Чтобы привести неравенство (30) к формату GLPK, для каждой
небазисной вспомогательной переменной $(x_N)_j=(x_R)_i$, входящей в это
неравенство, выполняется подстановка:
$$(x_R)_i=\sum_ja_{ij}(x_S)_j,\eqno(33)$$
где $a_{ij}$ --- коэффициенты $i$-й строки (ограничения) исходной
задачи, $(x_S)_j$ --- соответствующие структурные переменные. В процессе
выполнения указанной подстановки фиксированные структурные переменные,
которые могут присутствовать в (33), не включаются в левую часть
неравенства (30), а учитываются соответствующим изменением правой части
этого неравенства.

После подстановки вспомогательных переменных отсечение (30) принимает
окончательный вид, в котором оно может быть добавлено к формулировке
исходной задачи.

\vspace{15mm}

\begin{center}
\rule{40mm}{.5pt}
\end{center}

\end{document}
