8000 GitHub - alexshtf/autodiff at migration
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

A .NET library that provides fast, accurate and automatic differentiation (computes derivative / gradient) of mathematical functions.

License

Notifications You must be signed in to change notification settings

alexshtf/autodiff

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Project Description

A library that provides fast, accurate and automatic differentiation (computes derivative / gradient) of mathematical functions.

AutoDiff provides a simple and intuitive API for computing function gradients/derivatives along with a fast state-of-the-art algorithm for performing the computation. Such computations are mainly useful in numeric optimization scenarios.

The Library is available via NuGet:

Install-Package AutoDiff

Code example

using AutoDiff;

class Program
{
    public static void Main(string[]() args)
    {
            // define variables
            var x = new Variable();
            var y = new Variable();
            var z = new Variable();
    
            // define our function
            var func = (x + y) * TermBuilder.Exp(z + x * y);
    
            // prepare arrays needed for evaluation/differentiation
            Variable[] vars = { x, y, z };
            double[] values = {1, 2, -3 };
    
            // evaluate func at (1, 2, -3)
            double value = func.Evaluate(vars, values);
    
            // calculate the gradient at (1, 2, -3)
            double[] gradient = func.Differentiate(vars, values);
    
            // print results
            Console.WriteLine("The value at (1, 2, -3) is " + value);
            Console.WriteLine("The gradient at (1, 2, -3) is ({0}, {1}, {2})", gradient[0](0), gradient[1](1), gradient[2](2));
    }
}

Documentation

The Documentation contains some basic tutorials, we have an article on CodeProject, and finally source code contains some code examples in addition to the code of the library itself.

Motivation

There are many open and commercial .NET libraries that have numeric optimization as one of their features (for example, Microsoft Solver Foundation, AlgLib,Extreme Optimization, CenterSpace NMath) . Most of them require the user to be able to evaluate the function and the function's gradient. This library tries to save the work in manually developing the function's gradient and coding it. Once the developer defines his/her function, the AutoDiff library can automatically evaluate and differentiate this function at any point. This allows +easy development and prototyping+ of applications based on numeric optimization.

Features

  • Fast! See 0.5 vs 0.3 benchmark and 0.3 benchmark.
  • Composition of functions using arithmetic operators, Exp, Log, Power and user-defined unary and binary functions.
  • Function gradient evaluation at specified points
  • Function value evaluation at specified points
  • Uses Code Contracts for specifying valid parameters and return values
  • Computes gradients using Reverse-Mode AD algorithm in linear time!
    • Yes, it's faster than numeric approximation for multivariate functions
    • You get both high accuracy and speed!

Using in research papers

If you like the library and it helps you publish a research paper, please cite the paper I originally wrote the library for geosemantic.bib

Used by

About

A .NET library that provides fast, accurate and automatic differentiation (computes derivative / gradient) of mathematical functions.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages

0