用LaTeX写线性规划

摘要:
在Latex中没有编写线性编程的直接命令。简单的方法是使用命令begin{eqarray}。。。结束{eqarray}。但是,eqarray命令会根据中间的二进制关系符号(如等号)使几个方程垂直对齐。尽管线性规划的约束中有一个二进制关系符号,但线性规划中的多个位置需要垂直对齐。或者简单地使用begin{array}。。。end{array}命令。

线性规划由目标函数和若干约束构成,Latex中并没有直接的命令来写线性规划。简单的做法是使用\begin{eqnarray} … \end{eqnarray}命令,但eqnarray命令是使若干方程按照中间的二元关系符(如等号)垂直对齐的,而线性规划的约束条件上虽然有二元关系符,但约束条件后面往往还有量词符号,它们也需要垂直对齐。也就是说,线性规划中有不止一个位置需要垂直对齐。或者干脆使用\begin{array} …\end{array}命令,这样可以做到多个位置垂直对齐,但又遇到公式无法自动编号、表格中若干数学符号(如\sigma)不能按照数学格式显示,而只能显示成文本格式等若干问题。总之,虽然可以使用一些办法“凑”出线性规划,但许多地方不能做到尽如人意。

直到有一天偶然看到了amsmath包中的\begin{alignat} …\end{alignat}命令,才发现线性规划可以使用这个命令得到较好的解决。下面直接给出代码:

documentclass{article}

usepackage{amsmath}

egin{document}

itle{LinearProgram}

maketitle

egin{alignat}{2}

minquad & sum_{ellin L}x_{ell} &{}& ag{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 onumber

end{alignat}

Inthe linear program (\ref{eqn - lp}), ...

end{document}

产生的线性规划如下图所示:

用LaTeX写线性规划第1张

有几个要点解释一下。

(1)整个线性规划看上去由4列组成。即最左边的“min”和“s.t.”,第2列的约束条件,第3列的约束条件量词,和第4列的编号。其中,第2列和第3列是靠左对齐的,这样看上去就比较美观。

当然,线性规划还有一种常见的写法是约束条件按照二元关系符垂直对齐,相信看完本文后,大家会自己构造出这样的线性规划。对于大量的线性规划而言,两种格式各有优缺点。

(2)线性规划的目标函数和约束条件都可以按照标准的\ref{}命令进行引用。对于那些不需要引用的约束条件,只需要在相应的行中写上\nonumber,其右端就没有编号了。

值得一提的是目标函数的编号,在上例中是“(LP1)”,而不是和约束条件统一编号的。这个(LP1)是和Latex产生标准编号一样出现在页面最右端,并且它也和标准编号一样使用\ref{}命令引用。正如例中所示,这是使用\tag命令实现的。(知道\tag命令可以实现这样的功能,也是大量阅读后偶然发现的,花费了相当长的时间…)

(3)下面简单解释一下上例的具体实现。整个线性规划实际上是划分成了如下图所示的4列,因此在alignat命令中需要使用3个“&”符号来隔开这些列。其中,第C列存在的目的是让量词与约束条件之间隔开一定距离。

用LaTeX写线性规划第2张

按照alignat命令的用法,这4列实际上构成了alingat命令观点下的两列方程组。其中AB是第1列方程组,CD是第2列方程组。也就是说,eqnarray命令是用来对齐一列方程组的,而alignat命令是用来对齐多列方程组的。这也说明了为什么上例代码中alignat命令后面有一个参数{2}。关于alignat命令这里不做进一步的赘述,大家有兴趣可以参考amsmath包的资料。

当然,上述写线性规划的方法也可以推广到一般的数学规划。谨以志之,共享共勉。

   (请将文中的全角“\”全部更换为半角的反斜线。)

from: http://blog.sciencenet.cn/blog-482332-749340.html

免责声明:文章转载自《用LaTeX写线性规划》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Spring Cloud Feign高级应用css 选择器匹配以某个字符开头或结尾下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ElementUI中的el-table怎样实现绑定对象数组时每一列不同控件的动态数据绑定

场景 ElementUI中的el-table中实现动态添加一行、删除一行、清空所有行: https://mp.csdn.net/console/editor/html/107815187 上面实现的效果如下 其中每一行都是动态添加的,每一行对应的是一个对象,每一列对应的是一个对象的属性。 所以整个el-table绑定的数据源就是一个对象的数组。 但是在...

解决Django-1.8.2应用部署到Apache后无法显示admin应用的CSS

  在将Django-1.8.2应用部署到Apache后,无法显示admin应用的静态内容,而在“manage.py runserver”命令下可以正常显示,主要是Apache没有找到Django静态内容的位置,修改:   操作系统:CentOS 6.5   Django版本: 1.8.2   Python版本: 2.7.10   Apache版本: 2....

bootstrap-table的一些基本使用及表内编辑的实现

最近工作需要接触了bootstrap-table 所以研究了一下,并做了笔记,红色位置要特别注意  前端主要使用了 jquery bootstrap-table  bootstrap-edittable  bootstrap-table-edittable.js   1)首页我们需要先引用css及js文件 <!---bootstrap使用的是3--&...

Uni-app基础实战富文本框解析 WordPress rest api实例(二)

Uni-app基础实战富文本框解析 WordPress rest api实例 文本是更具上篇文章uni-app上下拉刷新的续文有需要了解上文的请点击下面连接访问 传送门: Uni-app实战上加载新下拉刷新 WordPress rest api实例 那么我们就开始了,主要的要是去介绍了以下一个插件的使用方式。官方的富文本框有markdown和html两种方...

服务器使用bbr加速配置

服务器内核升级:     以centos7为例,配置之前可使用以下命令查看内核版本,若是4.0以上则无需对内核升级; uname -r     对内核升级的方法:   直接使用以下命令进行内核版本的下载: rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh http://...

将eclipse java程序打包成jar的总结(包括工程中没有引用外部jar包和有引用外部jar包两种情况)

一.当eclispe java工程中没有引用外部jar包时: 选中工程---->右键,Export...--->Java--->JAR file--->next-->填写jar file的路径及名称-->next-->next---> 填写main class--->finish,然后就在相应的目录下得...