Неопределенная последовательность управления \State \For \While

Неопределенная последовательность управления \State \For \While

Я пытаюсь написать псевдокод в 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.

введите описание изображения здесь

Связанный контент