Я пытаюсь написать псевдокод в MiKTeX. Я использовал, \usepackage{algorithm}
\usepackage{algorithmic}
но получаю:
Неопределенная управляющая последовательность для каждой структуры (\State, \While, \For, \If).
\begin{algorithm}
\caption{PSO}
\label{pseudoPSO}
\begin{algorithmic}[1]
\State Initialize a population of particles with random values positions and velocities from \textit{D} dimensions in the search space
\WHILE{Termination condition not reached}
\For{ Each particle \textit{i}}
\State Adapt velocity of the particle using Equation \ref{eq:1}
\State Update the position of the particle using Equation \ref{eq:2}
\State Evaluate the fitness {$f(\overrightarrow{X}_i)$}
\If{\begin{equation}f(\overrightarrow{X}_i)<f(\overrightarrow{P}_i)\end {equation}
\begin{equation}\overrightarrow{P}_i \gets \overrightarrow{X}_i\end{equation}
\EndIf
\If{\begin{equation}f(\overrightarrow{X}_i)<f(\overrightarrow{P}_g)\end{equation}
\begin{equation}\overrightarrow{P}_g \gets \overrightarrow{X}_i\end{equation}
\EndIf
\EndFor
\ENDWHILE
\end{algorithmic}
\end{algorithm}
решение1
Вы загружаете algorithmic
, но используете синтаксис algpseudocode
.
\documentclass{article}
\usepackage{algorithm,algpseudocode}
\begin{document}
\begin{algorithm}
\caption{PSO}
\label{pseudoPSO}
\begin{algorithmic}[1]
\State Initialize a population of particles with random values positions
and velocities from \textit{D} dimensions in the search space
\While{Termination condition not reached}
\For{Each particle $i$}
\State Adapt velocity of the particle using Equation \ref{eq:1}
\State Update the position of the particle using Equation \ref{eq:2}
\State Evaluate the fitness {$f(\overrightarrow{X}_i)$}
\If{$f(\overrightarrow{X}_i)<f(\overrightarrow{P}_i)$}
\State $\overrightarrow{P}_i \gets \overrightarrow{X}_i$
\EndIf
\If{$f(\overrightarrow{X}_i)<f(\overrightarrow{P}_g)$}
\State $\overrightarrow{P}_g \gets \overrightarrow{X}_i$
\EndIf
\EndFor
\EndWhile
\end{algorithmic}
\end{algorithm}
\end{document}
Не имеет особого смысла использовать equation
внутри алгоритма, особенно в аргументе \If
. Обратите внимание, что \WHILE
и \ENDWHILE
должно быть \While
и \EndWhile
.