## Materials and Methods
### ANN Structure, Training Algorithm, and Feature Input Selection
Among the commonly used ANN training algorithms is Levenberg-Marquardt (LM), which can provide fast convergence for the moderate-sized FFNN of a few hundredweights [26]. However, fast convergence does not guarantee that the trained ANN model will not overfit the training data. In many applications, including this study, the generalization of the model to the given data is more of concern, i.e., the model will not be either overfitting or underfitting. A more advanced modification of the LM algorithm is called Bayesian Regularization (BR), which reduces the linear combination of squared errors and weights. At the end of the training, the resulting network will have good generalization qualities, i.e., to prevent model overfitting. Further detailed discussions on Bayesian regularization can be seen in [27]. Therefore, for the reason of generalization capability, this algorithm is also applied in this study. Lastly, the PSO algorithm is also applied to train both FFNN and CFNN as the main contribution of this study. The performance of both FFNN and CFNN trained with PSO will be evaluated. PSO is considered the most popular meta-heuristic algorithm inspired by the nature process of bird flocking introduced in 1995 by [PERSON] and [PERSON] [28; 29; 30]. It has some appealing features, such as fast convergence speed and simplicity of implementation. Since then many PSOs and their variants have been studied. One of the early PSO variants introduced was PSO with constriction coefficients which was proposed to guarantee solution convergence [30]. This version of PSO will be applied in this study to train the proposed ANN model. Prior to the discussion of the PSO algorithm used to train ANNs, the basic ANNs training/learning process using the BP algorithm can be summarized as follows [31]:  
1. Obtain the training dataset (\(x_{i}\)) with the desired target (\(y\)). 2. Setup ANN structure and parameters: number of hidden layers, number of neurons, learning rate (\(\eta\)), momentum constant and regularization constant (\(\alpha\)) (if necessary). 3. Initialize of all weights and biases to random. 4. Start the ANN training and forward propagation of input data through the layers according to Equation (2). 5. Calculate the error difference between ANN output (\(\hat{y}\)) and the desired target (\(y\)) such as using MSE (mean squared error) defined as: \[MSE\ =\ \frac{1}{n}\sum_{k\ =\ 1}^{n}(\hat{y}_{k}-y_{k})^{2}\] (5)
6. Back-propagate the error through the output and hidden layer(s), and adapt output weight according to: \[w_{k}(t+1)\ =\ w_{k}(t)+\Delta w_{k}(t)\] (6) where \(t\) indicates the iteration index and \(\Delta w_{k}\) indicates the change of weights' strength in the output layer k which is calculated as: \[\Delta w_{k}(t)\ =\ \eta\delta_{k}y_{h}+\alpha\Delta w_{k}(t-1)\] (7) \[\delta_{k}\ =\ y_{k}-\hat{y}_{k}\] (8)
7. Back-propagate the error through the hidden layer(s) and input, and adapt output weight according to: Figure 2.0 (9) where \(\Delta w_{h}\) indicates the change of weights' strength in the hidden layer \(h\), which is calculated as: Figure 2.1 (10)If the error according to step 5 is sufficiently small, then stop the training iteration and proceed with model validation; otherwise, repeat steps 4 to 7. The BP algorithm is developed based on the gradient-descent algorithm that tends to be slow in terms of convergence, as mentioned earlier. Levenberg-Marquardt (LM) is the alternative training algorithm with faster convergence developed based on a combination of Gauss-Newton and gradient descent algorithm with computation of the Jacobian matrix. The weight update rule in the LM algorithm is expressed as:  
Figure 2.2  
where \(\mu>0\) is non-negative scalar. On the other hand, as mentioned earlier, Bayesian Regularization (BR) training is integrated into BP to prevent overfitting.