LaTex 关于优化问题公式排版及算法格式排版例子
LaTex 关于优化问题公式排版及算法格式排版例子宏包LaTex公式书写公式对齐alignedsplit算法格式排版模拟退火算法宏包写算法别忘记导入算法的宏包:\usepackage{algorithm}\usepackage{algorithmic}LaTex公式书写推荐一个LaTex在线公式编辑器,神器非常好用。link公式对齐标准单个公式环境\begin{equation...
宏包
写算法别忘记导入算法的宏包:
\usepackage{algorithm}
\usepackage{algorithmic}
LaTex公式书写
推荐一个LaTex在线公式编辑器,神器非常好用。link
公式对齐
标准单个公式环境
\begin{equation}
...
\end{equation}
对于优化问题来说,往往优化的约束条件多而复杂时,多个公式如何排列整齐美观对于新手来说就是一个问题,下面从自己碰到的例子来说明这些问题。
当然也有许多其他的进行参考,link,linklink,互相学习互相进步。
优化问题排版往往要求的是min,s.t.对齐且约束最好等号对齐。
aligned
\begin{equation}
\begin{aligned} \label{P}
&\min_{c_{m,j}^{L},c_{i,j}^{V}} \quad \tau_{av}\\
&\begin{array}{r@{\quad}r@{}l@{\quad}l}
s.t. &\sum_{j=1}^{J}c_{i,j}^{V}&\leq S^V \\
&\sum_{j=1}^{J}c_{m,j}^{L}&\leq S^L\\
&c_{i,j}^{V}&\in \left \{0,1\right \}\\
&c_{m,j}^{L}&\in \left \{0,1\right \}\\
\end{array}
\end{aligned}
\end{equation}
效果如下(等号对齐):
split
如果觉得等号对齐很别扭,也可以试试split:
\begin{equation*}
\begin{split}
&\min_{c_{m,j}^{L},c_{i,j}^{V}} \,\, \tau_{av}\\
&s.t.\quad \left\{\begin{array}{lc}
\sum_{j=1}^{J}c_{i,j}^{V}\leq S^V\\
\sum_{j=1}^{J}c_{m,j}^{L}\leq S^L\\
c_{i,j}^{V}\in \left \{0,1\right \}\\
c_{m,j}^{L}\in \left \{0,1\right \}\\
\end{array}\right.
\end{split}
\end{equation*}
效果如下(约束条件左对齐):
算法格式排版
需要改变一定命令的定义时,需要在导言区加入语句,可以改为任何你想描述的语言,如下(改成中文也是可以的,前提是在中文环境下):
\renewcommand{\algorithmicrequire}{ \textbf{ Input:}} % use Input in the format of Algorithm
\renewcommand{\algorithmicensure}{ \textbf{ Output: }} % use Initialize in the format of Algorithm
%\renewcommand{\algorithmicreturn}{ \textbf{输出}} % use Output in the format of Algorithm
算法代码如下(更多的例子可以看link):
\begin{algorithm}[htb]
\caption{Simulated Anneal Algorithm}
\label{SA}
\begin{algorithmic}[1] %这个1 表示每一行都显示数字
\REQUIRE ~~\\ %算法的输入参数:Input
Initial $T_{max}$,$T_{min}$,$K_{in}$,$C_{N_L\times J}^{L}$;\\
$T=T_{max}$;\\
$C^{old}=C_{N_L\times J}^{L}$;\\
Solve \ref{tau_av},and get $\tau _{av\_old}=\tau _{av}\left ( C^{old}\right )$;
\ENSURE ~~\\ %算法的输出:Output
$C^{new}$;
\WHILE{$T\geq T_{min}$}
\FOR{$k = 1:K_{in}$}
\label{ code:fram:extract }%对此行的标记,方便在文中引用算法的某个步骤
\STATE Select $m$ randomly from 1 to $N_L$;\
\label{code:fram:trainbase}
\STATE Reassign the elements in the $m$-th row of $C^{old}$ and get a new caching placement matrix $C^{new}$;\
\label{code:fram:add}
\STATE Slove \ref{tau_av} and let $\tau _{av\_new}=\tau _{av}\left ( C^{new}\right )$; \
\label{code:fram:classify}
\STATE Let $\delta =\tau _{av\_new}-\tau _{av\_old}$; \
\label{code:fram:select}
\IF{$\delta > 0$}
\STATE $Pe = exp\left ( -\delta /T\right )$, and $A=rand\left ( 1\right )$; \
\IF{$A>Pe$}
\STATE $C^{new}=C^{old}$;\
\STATE $\tau _{av\_new}=\tau _{av\_old}$;\
\ENDIF
\ENDIF
\STATE $C^{old}=C^{new}$;\
\STATE $\tau _{av\_old}=\tau _{av\_new}$;\
\ENDFOR
\STATE $T=T-1$;\
\ENDWHILE
\end{algorithmic}
\end{algorithm}
来看看效果:
Tips:公式中如果想要输入下划线’’,而在公式中下划线’‘表示下标的意思,这时只需要前面加上’‘即可。’_’,比如代码中的 \tau _{av_old}。
模拟退火算法
下面就再简单介绍一下模拟退火算法吧,上面算法排版的例子就是一个模拟退火算法。模拟退火算法来源于固体退火原理的基于概率的算法,本质也是一种贪婪算法,会以一定的概率来接受一个比当前解更差的解,因此有可能跳出某个局部的最优解,以达到全局的最优解。核心思想是,在一定的循环次数内,随机选取某个值为最优解,循环次数为一个定值,与初始设置的温度和退火次数有关。可以将复杂度控制在一个较小的范围内,但缺点是随机性过大,当系统规模较大时,很难在较少退火次数内得到最优解。详细的内容大家可以参考link。
更多推荐
所有评论(0)