Skip to content

GSoC 2020

Vassil Vassilev edited this page Mar 28, 2020 · 4 revisions

Project Description

Add numerical differentiation support in clad

In mathematics and computer algebra, automatic differentiation (AD) is a set of techniques to numerically evaluate the derivative of a function specified by a computer program. Automatic differentiation is an alternative technique to Symbolic differentiation and Numerical differentiation (the method of finite differences). CLAD is based on Clang which will provide the necessary facilities for code transformation. The AD library is able to differentiate non-trivial functions, to find a partial derivative for trivial cases and has good unit test coverage. Currently, clad cannot differentiate declared-but-not-defined functions. In that case it issues an error. Instead, clad should fall back to its future numerical differentiation facilities.

Task ideas and expected results:

Implement numerical differentiation support in clad. It should be available through a dedicated interface (for example clad::num_differentiate). The new functionality should be connected to the forward mode automatic differentiation. If time permits, a prototype of configurable error estimation for the numerical differentiation should be implemented. The student should be prepared to write a progress report and present the results at the end of the summer.

Necessary skills: Intermediate C++; Understanding numerical differentiation; Understanding of Clang and its API.

Mentors: Vassil Vassilev (vgvassilev); Alexander Penev (alexander-penev)

Extend clad to compute Jacobians

In mathematics and computer algebra, automatic differentiation (AD) is a set of techniques to numerically evaluate the derivative of a function specified by a computer program. Automatic differentiation is an alternative technique to Symbolic differentiation and Numerical differentiation (the method of finite differences). CLAD is based on Clang which will provide the necessary facilities for code transformation. The AD library is able to differentiate non-trivial functions, to find a partial derivative for trivial cases and has good unit test coverage. Currently, clad does not provide an easy way to compute Jacobians.

Task ideas and expected results:

Implement Jacobian computation interface (similar to clad::hessian) in clad. The implementation should be very well-tested and documented. The student should be prepared to write a progress report and present the results at the end of the summer.

Necessary skills: Intermediate C++; Understanding clad; Understanding of Clang and its API.

Mentors: Vassil Vassilev (vgvassilev); Alexander Penev (alexander-penev)

If you have used clad and you have particular project proposal please contact vgvassilev.

Candidate Guidelines

If you have interest in working on the project there is a list of things to do in order to maximize your chances to get selected:

  1. Contact the mentors and express interest in the project. Make sure you attach your CV;
  2. Download the source code of the project, build it and run the demos;
  3. Start familiarizing yourself with the codebase;
  4. If you have questions you can always contact a mentor.

Candidate Evaluation

The mentors are interested in working with all candidates but unfortunately the rules allow only one to be selected. There are a few tasks which give bonus points to candidate's application:

  • Submit a valid bug -- demonstrates that the candidate has completed step 2 and 3 from the previous section.
  • Fix a bug -- demonstrates the technical skills of the candidate and shows he/she can work independently on the project. The mentors can suggest looking into issue #49, #138. Fixing one issue may be enough to become a successful candidate.

Good luck!