This is the internal function that implements the Thrift's technique based
on a genetic algorithm. It is used to tackle regression tasks. Users do not need to call it directly,
but just use `frbs.learn`

and `predict`

.

```
GFS.Thrift(data.train, popu.size = 10, num.labels, persen_cross = 0.6,
persen_mutant = 0.3, max.gen = 10, range.data.ori,
type.defuz = "WAM", type.tnorm = "MIN", type.snorm = "MAX",
type.mf = "TRIANGLE", type.implication.func = "ZADEH")
```

data.train

a matrix (\(m \times n\)) of normalized data for the training process, where \(m\) is the number of instances and \(n\) is the number of variables; the last column is the output variable. Note the data must be normalized between 0 and 1.

popu.size

the size of the population which is generated in each generation.

num.labels

a matrix describing the number of linguistic terms.

persen_cross

a real number between 0 and 1 representing the probability of crossover.

persen_mutant

a real number between 0 and 1 representing the probability of mutation.

max.gen

the maximal number of generations for the genetic algorithm.

range.data.ori

a matrix containing the ranges of the original data.

type.defuz

the type of the defuzzification method. For more detail, see `defuzzifier`

.
The default value is `WAM`

.

type.tnorm

the type of t-norm. For more detail, please have a look at `inference`

.

type.snorm

the type of s-norm. For more detail, please have a look at `inference`

.

type.mf

the type of shape of membership function. See `fuzzifier`

.

type.implication.func

the type of implication function. See `WM`

.

This method was developed by Thrift using Mamdani's model as fuzzy IF-THEN rules. In this method, we consider a table as a genotype with alleles that are fuzzy set indicators over the output domain. The phenotype is produced by the behavior produced by the fuzzification, max-* composition, and defuzzification operations. A chromosome (genotype) is formed from the decision table by going rowwise and producing a string of numbers from the code set. Standard crossover and mutation operators can act on these string.

P. Thrift, "Fuzzy logic synthesis with genetic algorithms", In Proceedings of the Fourth International Conference on Genetic Algorithms (ICGA91), San Diego (United States of America), pp. 509 - 513 (1991).

`GFS.Thrift.test`

, `frbs.learn`

, and `predict`