Algorithmicx 伪代码中的嵌套 FOR 循环

Algorithmicx 伪代码中的嵌套 FOR 循环

我一直在尝试结合下面的伪代码进行格式化算法算法伪代码命令以及另一篇相关文章

algorithmicx 或 algpseudocode 在 while 循环或 if 语句中自定义命令缩进1

下面的伪代码是我想要重现的。

算法 1

\usepackage[utf8]{inputenc}
\usepackage{algorithm}
\usepackage{algpseudocode}
\algnewcommand\algorithmicgenerate{\textbf{GENERATE}}
\algnewcommand\GENERATE[1]{\State\algorithmicgenerate\ #1}
\algnewcommand\algorithmicset{\textbf{SET}}
\algnewcommand\SET[1]{\State\algorithmicset\ #1}
\algloop{FOR}

\begin{document}

\begin{algorithm}[H]

\begin{algorithmic}[1]
 \GENERATE{$S_t^{(i)} \qquad ,i=1,...,I,t=1,...,M$}
 \SET{$C_t^0(S_t^{(i)})=0 \qquad
 ,i=1,...,I,t=1,...,M$}
 \SET{$C_{M+1}^n(S_{M+1}^{(i)})=0 \qquad ,i=1,...,I,n=0,1,...,N$}
 \SET{$\hat{\Phi}_t^{(n)}(S_t^{(i)})=0 \qquad, i=1,...,I,t=1,...,M,n=0,1,...,N$}
 \FOR{$\quad t=M,...,1$}
  \SET{$\iota_t^{(i)} = \arg\max_{a_t^{(i)}\in A}\{P(S_t^{(i)};a_t^{(i)})\} \qquad ,i=1,...,I$}
  \FOR{$\, n=\max(1,N-t),...,N$}

\end{algorithmic}
\end{algorithm}
\end{document}

编译后为 输出

*正如您所见,第 7 行不允许我嵌套第二个与第 6 行缩进级别相同的 FOR 循环。

是否有任何自定义命令更适合我想要实现的目标,因为老实说我觉得这有点令人困惑?

任何帮助将不胜感激。*

答案1

那么,对于你的情况,for循环的正确代码应该是:

  \For{$\, n=\max(1,N-t),...,N$}
    \SET{$\iota_t^{(i)} = \arg\max_{a_t^{(i)}\in A}\{P(S_t^{(i)};a_t^{(i)})\} \qquad ,i=1,...,I$}
  \EndFor

\For请注意和中的小写字母\EndFor

要以大写字母打印 For 循环命令,请使用以下两个命令:

\algrenewcommand\algorithmicfor{\textbf{FOR}} % <=======================
\algrenewcommand\algorithmicend{\textbf{END}} % <=======================

请参阅以下完整的 MWE

\documentclass{article}

\usepackage[utf8]{inputenc}

\usepackage{algorithm}
\usepackage{algpseudocode}
\algnewcommand\algorithmicgenerate{\textbf{GENERATE}}
\algnewcommand\GENERATE[1]{\State\algorithmicgenerate\ #1}
\algnewcommand\algorithmicset{\textbf{SET}}
\algnewcommand\SET[1]{\State\algorithmicset\ #1}
\algrenewcommand\algorithmicfor{\textbf{FOR}} % <=======================
\algrenewcommand\algorithmicend{\textbf{END}} % <=======================


\begin{document}

\begin{algorithm}[H]
\begin{algorithmic}[1]
\GENERATE{$S_t^{(i)} \qquad ,i=1,...,I,t=1,...,M$}
\SET{$C_t^0(S_t^{(i)})=0 \qquad
 ,i=1,...,I,t=1,...,M$}
\SET{$C_{M+1}^n(S_{M+1}^{(i)})=0 \qquad ,i=1,...,I,n=0,1,...,N$}
\SET{$\hat{\Phi}_t^{(n)}(S_t^{(i)})=0 \qquad, i=1,...,I,t=1,...,M,n=0,1,...,N$}
\For{$\quad t=M,...,1$}
  \SET{$\iota_t^{(i)} = \arg\max_{a_t^{(i)}\in A}\{P(S_t^{(i)};a_t^{(i)})\} \qquad ,i=1,...,I$}
  \For{$\, n=\max(1,N-t),...,N$}
    \SET{$\iota_t^{(i)} = \arg\max_{a_t^{(i)}\in A}\{P(S_t^{(i)};a_t^{(i)})\} \qquad ,i=1,...,I$}
  \EndFor
\EndFor
\end{algorithmic}
\end{algorithm}
\end{document}

及其结果:

生成的 pdf

相关内容