陈述一个线性程序

陈述一个线性程序

我知道如何用 hackish 方式做到这一点。但是,有什么更成熟和干净的方式来表述线性程序呢?这里在 Wikipedia 上?即,以下形式的表达式:

最小化 f(x)

须遵守

g_i(x)<= 0,对于 i 在 {1,...,n} 中

h_j(x)= 0,其中 j 在 {1,...,m} 中

答案1

这是我有时在文章中使用的简短定义。更像是样板,如果您碰巧有更多约束,则需要更改一些内容。宏\eqnlimit是索引范围的简写。

\documentclass{article}
\usepackage[sumlimits]{amsmath}
\usepackage{xargs}

\newcommandx*\eqnlimit[3][1=1, 3=n]{\ensuremath{#1 \leq #2 \leq #3}}

\newcommand{\linprog}[6]{
    \begin{alignat}{5}
          \label{#6-1}
          \min        & \quad #1 & \\
          \label{#6-2}
          \text{s.t.} & \quad #2 &, & \quad #3\\
          \label{#6-3}
                      & \quad #4 &, & \quad #5
    \end{alignat}}

\begin{document}
    \linprog{f(x)}{g_i(x) \leq 0}{\eqnlimit[1]{i}[n]}{h_j(x) = 0}{\eqnlimit[1]{j}[m]}{eq:linprog1}
    \linprog{f(x)}{g_i(x) \leq 0}{\eqnlimit[1]{i}[n]}{h_j(x) = 0}{\eqnlimit[1]{j}[m]}{eq:linprog2}
    \\
    First linear program\\
    This is the objective: (\ref{eq:linprog1-1}), the inequality constraint set: (\ref{eq:linprog1-2}), and the equality constraint set(\ref{eq:linprog1-3}).
    \\ \\
    Second linear program\\
    This is the objective: (\ref{eq:linprog2-1}), the inequality constraint set: (\ref{eq:linprog2-2}), and the equality constraint set(\ref{eq:linprog2-3}).
\end{document}

感谢 Caramdir 对标签的帮助。

答案2

我认为下面的代码是实现这一目标的常用方法。

\documentclass[11pt,a4paper]{article}
\usepackage{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{mathtools}

\begin{document}
  \begin{alignat*}{2}
    \text{minimize }   & \sum_{i=1}^m c_i x_i + \sum_{j=1}^n d_j t_j\  \\
    \text{subject to } & \sum_{i=1}^m a_{ij} + e_j t_j \geq g_j &,\ & 1\leq j\leq n\\
                       & f_i x_i + \sum_{j=1}^n b_{ij}t_j \geq h_i\ &,\ & 1\leq i\leq m\\
                       & x\geq 0,\ t_j\geq 0\ &,\ & 1\leq j\leq n,\ 1\leq i\leq m
  \end{alignat*}
\end{document}

相关内容