## 5 Soft Computing Techniques
### Artificial Neural Networks (ANN)  
The MATLAB environment [53] has a built-in application, neural net fitting tool, which is a computational tool that was used for developing an ANN model in this study. To set up input data for ANN analysis, it is required to set a portion of data for testing, validation, and training. In our case of 70% of input data was used for training purposes, another 15% was used for validation, and 15% was for testing [55]. ANN uses the Levenberg-Marquardt optimization algorithm due to its advantages, such as high speed of training on feed-forward networks of moderate size [56]. Moreover, the MATLAB environment has an efficient built-in function of the Levenberg-Marquardt algorithm with very efficient performance [57]. In this study, the ANN models were developed by using one hidden layer. [PERSON] and [PERSON] [58; 59] claimed that neural networks with one hidden layer, in general, are enough for addressing the majority of issues. ANN models developed in the neural net fitting tool use a two-layer-forward network with linear output neurons, where one layer is the hidden layer and one is the output layer. This type of network is capable of solving multi-dimensional mapping issues with sufficient accuracy if ANN has reliable data for training and enough number of neurons for the hidden layer. The next step for the ANN model development is to define the number of neurons, which was considered to be the most crucial question in the process of determining the ANN structure [60]. If the number of hidden neurons is lower than needed, it will undergo the \"under-fitting\" problem in both generalization and training. Nevertheless, an excess number of hidden neurons can result in the problem of overfitting, which means the neural network overestimates the target problem's complexity [61]. This can cause a large variance in prediction results, and the generalization capacity drops considerably. Without performing a try-and-test during training and calculating the generalization error, determining the best number of hidden units is difficult. The number of hidden layers and hidden neurons, that is optimal to certain cases, is determined by the following factors: (a) network design complexity; (b) the number of input and output units; (c) the number of training samples; (d) the level of noise in the sample dataset; (e) the training algorithm [62]. In this regard, determining the correct number of hidden neurons to avoid overfitting or underfitting is crucial in the prediction process. The heuristic parameters suggested for this purpose are listed in Table 10.  
In Table 10, N\({}_{\text{i}}\) refers to the number of input neurons and N\({}_{\text{o}}\) refers to the number of output neurons, respectively. According to Table 10, the number of hidden neurons must be 1, 2, 5, or 6 for two inputs, while for a set of four input parameters, the number of hidden neurons was suggested to be between 2 and 12. However, the work of [PERSON] and [PERSON] [61] suggested that for 80 input samples and one hidden layer, the optimal number of neurons is 12. The trial-and-error approach is currently used to calculate the number of hidden neurons. This begins with a small number of neurons and progressively increasing the number till optimal performance is achieved. The downside is that it takes time and there is no assurance that the hidden neuron would be fixed [62]. To determine the number of hidden neurons, suggested heuristics in Table 10 were employed. Then, from 1 to 14 hidden neurons were used to establish the models, which were run at least 25 times to obtain the best output.