如何在 Latex 中创建以下算法块?除了 init 块,我拥有一切。我该如何创建它?
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{algorithm2e}
\begin{document}
\begin{algorithm}[H]
\DontPrintSemicolon
\SetAlgoLined
\KwData{$D$ = $<u,i,r>$}
\SetKwInOut{Input}{input}\SetKwInOut{Output}{output}
\Input{feat, iters, $\lambda$, $\eta$}
\Output{$A$, $B$}
\For{count $\leftarrow 1$ \KwTo iters}{
$D \leftarrow$ Shuffle($D$) \;
\For{$<u,i,r> \in D$}{
$err_{ui} \leftarrow r - A_uB_i^T$ \;
$A_u \leftarrow A_u + \eta(err_{ui}B_i - \lambda A_u)$ \;
$B_i \leftarrow B_i + \eta(err_{ui}A_u - \lambda B_i)$ \;
}
}
\caption{Stochastic Gradient Descent}
\end{algorithm}
\end{document}
Latex 中是否有算法块的在线编辑器/生成器?
答案1
您可以使用以下方法\SetKwProg
来创建自己的块:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{algorithm2e}
\SetKwProg{Init}{init}{}{}
\begin{document}
\begin{algorithm}[H]
\DontPrintSemicolon
\SetAlgoLined
\KwData{$D$ = $<u,i,r>$}
\SetKwInOut{Input}{input}\SetKwInOut{Output}{output}
\Input{feat, iters, $\lambda$, $\eta$}
\Output{$A$, $B$}
\init{
\For{$u \in Users(D)$}{
$A_u \leftarrow$ Vector(size: $feat)
}
\For{count $\leftarrow 1$ \KwTo iters}{
$D \leftarrow$ Shuffle($D$) \;
\For{$<u,i,r> \in D$}{
$err_{ui} \leftarrow r - A_uB_i^T$ \;
$A_u \leftarrow A_u + \eta(err_{ui}B_i - \lambda A_u)$ \;
$B_i \leftarrow B_i + \eta(err_{ui}A_u - \lambda B_i)$ \;
}
}
\caption{Stochastic Gradient Descent}
\end{algorithm}
\end{document}
答案2
您的解决方案中有一些拼写错误。应该是:
...
\Init{}{
\For{$u \in Users(D)$}{
$A_u \leftarrow$ Vector(size: $feat$)
}
...