如何在现有的ForAll循环的基础上定义一个ForEach循环?

如何在现有的ForAll循环的基础上定义一个ForEach循环?

有没有办法algpseudocode根据现有命令定义新命令?特别是,在我的文档中,我需要同时使用\ForAll\ForEach命令。事实证明,仅仅重命名\ForAll对我来说不起作用。我想定义一个新命令,\ForEach使其保留所有功能\ForAll(包括排版“do”和“end for”,以及缩进循环内的所有状态)。

下面的代码显示了我到目前为止尝试过的方法,但显然这不是可行的方法。我需要将第 3、4、5 行与新命令一起移动,并排版“end for”。

\documentclass{article}      % Specifies the document class

\usepackage{amsmath}
\usepackage{algpseudocode}
\usepackage{algorithm}

\algnewcommand\algorithmicforeach{\textbf{for each:}}
\algnewcommand\ForEach{\item[ \algorithmicforeach]}

\begin{document}

\begin{algorithm} \caption{Iterative Policy Evaluation Algorithm}
\begin{algorithmic}[1]
\Require $\pi$, the policy to be evaluated
\State Initilize $V(s) = 0$, for all $s \in \mathcal S^+$
\Repeat
\ForEach {$s \in \mathcal S $}
\State $v \gets V(s)$
\State $V(s) \gets \sum_a \pi(s,a) \sum_{s'} \mathcal P_{ss'}^a [ \mathcal R_{ss'}^a + \gamma V(s')$
\State $\Delta \gets \max(\Delta, |v- V(s)|)$
%\EndFor
\Until {$\Delta < \theta \text{ (a small positive number)}$}
\Ensure $V \approx V^\pi$
\end{algorithmic}
\end{algorithm}

\end{document}

在此处输入图片描述

答案1

algpseudocode包中,ForAll循环定义如下:

\algnewcommand\algorithmicforall{\textbf{for all}}
\algdef{S}[FOR]{ForAll}[1]{\algorithmicforeall\ #1\ \algorithmicdo}

您可以简单地定义一个ForEach模仿ForAll循环的循环,如下所示:

\algnewcommand\algorithmicforeach{\textbf{for each}}
\algdef{S}[FOR]{ForEach}[1]{\algorithmicforeach\ #1\ \algorithmicdo}

在此处输入图片描述

\documentclass{article}      % Specifies the document class

\usepackage{amsmath}
\usepackage{algpseudocode}
\usepackage{algorithm}


\algnewcommand\algorithmicforeach{\textbf{for each}}
\algdef{S}[FOR]{ForEach}[1]{\algorithmicforeach\ #1\ \algorithmicdo}

\begin{document}

\begin{algorithm} \caption{Iterative Policy Evaluation Algorithm}
\begin{algorithmic}[1]
\Require $\pi$, the policy to be evaluated
\State Initilize $V(s) = 0$, for all $s \in \mathcal S^+$
\Repeat
\ForEach {$s \in \mathcal S $}
\State $v \gets V(s)$
\State $V(s) \gets \sum_a \pi(s,a) \sum_{s'} \mathcal P_{ss'}^a [ \mathcal R_{ss'}^a + \gamma V(s')$
\State $\Delta \gets \max(\Delta, |v- V(s)|)$
\EndFor
\Until {$\Delta < \theta \text{ (a small positive number)}$}
\Ensure $V \approx V^\pi$
\end{algorithmic}
\end{algorithm}

\end{document}

相关内容