线性规划由目标函数和若干约束构成,Latex中并没有直接的命令来写线性规划。简单的做法是使用\begin{eqnarray} … \end{eqnarray}命令,但eqnarray命令是使若干方程按照中间的二元关系符(如等号)垂直对齐的,而线性规划的约束条件上虽然有二元关系符,但约束条件后面往往还有量词符号,它们也需要垂直对齐。也就是说,线性规划中有不止一个位置需要垂直对齐。或者干脆使用\begin{array} …\end{array}命令,这样可以做到多个位置垂直对齐,但又遇到公式无法自动编号、表格中若干数学符号(如\sigma)不能按照数学格式显示,而只能显示成文本格式等若干问题。总之,虽然可以使用一些办法“凑”出线性规划,但许多地方不能做到尽如人意。
直到有一天偶然看到了amsmath包中的\begin{alignat} …\end{alignat}命令,才发现线性规划可以使用这个命令得到较好的解决。下面直接给出代码:
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\title{LinearProgram}
\maketitle
\begin{alignat}{2}
\min\quad & \sum_{\ell\in L}x_{\ell} &{}& \tag{LP1} \label{eqn - lp}\\
\mbox{s.t.}\quad
&\sum_{e \in P} x_{f(e)} \geq 1, &\quad& \forall P \in \mathcal{P}_{st}\\
&x_{\ell} \geq 0, &{}& \forall \ell \in L \nonumber
\end{alignat}