\begin{enumerate} \item[] // initialization \item $W_0 \leftarrow (w_1, \dots, w_m) \leftarrow 1/m$ \item $W \leftarrow W_0$ \item $Vars \leftarrow {\cal{X}}$ \item $\delta \leftarrow 10^{-4}$ \item $convergence \leftarrow True$ \item $maxTolerancia \leftarrow 3$ \item $bisection \leftarrow False$ \item $error \leftarrow \inf$ \item $finished \leftarrow False$ \item $AODE \leftarrow \emptyset$ \hspace*{2cm} // the ensemble \item $tolerance \leftarrow 0$ \item $numModelsInPack \leftarrow 0$ \item[] \newpage \item[] // main loop \item While (!finished) \begin{enumerate} \item $\pi \leftarrow SortFeatures(Vars, criterio, D[W])$ \item if $(bisection) \; k \leftarrow 2^{tolerance} \;$ else $k \leftarrow 1$ \item if ($k tolerance == 0$) $W_B \leftarrow W$; $numItemsPack \leftarrow0$ \item $P \leftarrow Head(\pi,k)$ \hspace*{2cm} // first k features in order \item $spodes \leftarrow \emptyset$ \item $i \leftarrow 0$ \item While ($ i < size(P)$) \begin{enumerate} \item $X \leftarrow P[i]$ \item $i \leftarrow i + 1$ \item $numItemsPack \leftarrow numItemsPack + 1$ \item $Vars.remove(X)$ \item $spode \leftarrow BuildSpode(X, {\cal{X}}, D[W])$ \item $\hat{y}[] \leftarrow spode.Predict(D[W])$ \item $e \leftarrow error(\hat{y}[], y[])$ \item $\alpha \leftarrow \frac{1}{2} ln \left ( \frac{1-e}{e} \right )$ \item if ($\alpha > 0.5$) \begin{enumerate} \item $finished \leftarrow True$ \item break \end{enumerate} \item $spodes.add( (spode,\alpha_t) )$ \item $W \leftarrow UpdateWeights(D[W],\alpha,y[],\hat{y}[])$ \end{enumerate} \item $AODE.add( spodes )$ \item if ($convergence \And ! finished$) \begin{enumerate} \item $\hat{y}[] \leftarrow Predict(D,spodes)$ \item $e \leftarrow error(\hat{y}[], y[])$ \item if $(e > (error+\delta))$ \hspace*{2cm} // result doesn't improve \begin{enumerate} \item if $(tolerance == maxTolerance) \;\; finished\leftarrow True$ \item else $tolerance \leftarrow tolerance+1$ \end{enumerate} \item else \begin{enumerate} \item $tolerance \leftarrow 0$ \item $error \leftarrow min(error,e)$ \end{enumerate} \end{enumerate} \item If $(Vars == \emptyset) \; finished \leftarrow True$ \end{enumerate} \item if ($tolerance == maxTolerance$) // algorithm finished because of lack of convergence \begin{enumerate} \item $removeModels(AODE, numItemsPack)$ \item $W \leftarrow W_B$ \end{enumerate} \item Return $AODE$ \end{enumerate}