This package provides local function approximators that interpolates a scalar-valued function across a vector space. It does so based on the values of the function at "nearby" points, based on an appropriate locality metric, and not via any global regression or fitting function. Currently it supports multi-linear and simplex interpolations for multi-dimensional grids, and k-nearest-neighbor interpolation. Two important dependencies are GridInterpolations and NearestNeighbors.
Start Julia and run the following:
Pkg.add("LocalFunctionApproximation")
using LocalFunctionApproximation
Create a rectangular grid for interpolation using GridInterpolations
and create the function approximator
that uses it:
using GridInterpolations # Make the grid interpolations module available
grid = RectangleGrid([0., 0.5, 1.],[0., 0.5, 1.]) # rectangular grid
grid_values = [8., 1., 6., 3., 5., 7., 4., 9., 2.] # corresponding values at each grid point
gifa = LocalGIFunctionApproximator(grid, grid_values) # create the function approximator using the grid and values
Create a nearest neighbor tree using NearestNeighbors
and create the corresponding approximator:
using NearestNeighbors, StaticArrays
points = [SVector(0.,0.), SVector(0.,1.), SVector(1.,1.), SVector(1.,0.)] # the 4 corners of the unit square
nntree = KDTree(points) # create a KDTree using the points
vals = [1., 1., -1., -1] # values corresponding to points
k = 2 # the k parameter for knn approximator
knnfa = LocalNNFunctionApproximator(nntree, points, k)
point = rand(2) # random 2D point
compute_value(gifa, point) # obtain the value by interpolating the function at that point
compute_value(knnfa, point) # do the same for the kNN approximator
A typical use case for this package is for Local Approximation Value Iteration, as shown here.