# AIToolbox

A toolbox of AI modules written in Swift: Graphs/Trees, Linear Regression, Support Vector Machines, Neural Networks, PCA, KMeans, Genetic Algorithms, MDP, Mixture of Gaussians

This framework uses the Accelerate library to speed up computations. Written for Swift 2.2. Will update to 3 when officially released

SVM ported from the public domain LIBSVM repository See https://www.csie.ntu.edu.tw/~cjlin/libsvm/ for more information

The Metal Neural Network uses the Metal framework for a Neural Network using the GPU. While it works in preliminary testing, more work could be done with this class

Use the XCTest files for examples on how to use the classes

Classes/Algorithms supported:

```
Graphs/Trees
Depth-first search
Breadth-first search
Hill-climb search
Beam Search
Optimal Path search
Alpha-Beta (game tree)
Genetic Algorithms
mutations
mating
integer/double alleles
Constraint Propogation
i.e. 3-color map problem
Linear Regression
arbitrary function in model
convenience constructor for standard polygons
Least-squares error
Non-Linear Regression
parameter-delta
Gradient-Descent
Gauss-Newton
Neural Networks
multiple layers, several non-linearity models
on-line and batch training
simple network training using GPU via Apple's Metal
Support Vector Machine
Classification
Regression
More-than-2 classes classification
K-Means
unlabelled data grouping
Principal Component Analysis
data dimension reduction
Markov Decision Process
value iteration
policy iteration
fitted value iteration for continuous state MDPs - uses Linear Regression class for fit
(see my MDPRobot project on github for an example use)
Gaussians
Single variable
Multivariate - with full covariance matrix or diagonal only
Mixture Of Gaussians
Learn density function of a mixture of gaussians from data
EM algorithm to converge model with data
```

## License

This framework is made available with the Apache license.